From f0e1c79ad6b3bd0785920d21237089ca71417c5e Mon Sep 17 00:00:00 2001 From: Prasanth Pulla Date: Fri, 28 Jun 2019 09:37:15 +0530 Subject: [PATCH 01/54] Mention availability of release branch for API certification. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3d48e21a..da09e914 100755 --- a/README.md +++ b/README.md @@ -16,6 +16,10 @@ PSA APIs reference header files are located at [api-specs](api-specs/include) di ### PSA Functional API Certification The [PSA Dev API tests](api-tests/dev_apis) are the basis for getting the PSA Functional API Certification. For more information on the certification program, see [psacertified.org](https://www.psacertified.org/functional-api-certification/) +## GitHub branch + - For functional API certification, use the release branch and pick the appropriate release tag. + - To get the latest version of the code with bug fixes and new features, use the master branch. + ## Architecture test suite The current implementation of the Architecture test suite contains tests for following PSA specifications. Arm licensees may contact their partner manager to obtain a copy of this specification.
From 46fed235ea7c764315a8c5fb360a5ba18a859277 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Wed, 3 Jul 2019 15:37:12 +0530 Subject: [PATCH 02/54] Update to api-specs directory structure - Add version directory for spec version - Add PSA specification pdfs - Move existing header files to appropriate spec directory --- README.md | 2 +- .../include/psa/initial_attestation.h | 0 .../doc/IHI0085-PSA_Attestation_API-1.0.0.pdf | Bin 0 -> 538729 bytes .../v1.0-beta1}/include/psa/crypto.h | 0 .../v1.0-beta1}/include/psa/crypto_extra.h | 0 .../v1.0-beta1}/include/psa/crypto_platform.h | 0 .../v1.0-beta1}/include/psa/crypto_sizes.h | 0 .../v1.0-beta1}/include/psa/crypto_struct.h | 0 .../v1.0-beta1}/include/psa/crypto_types.h | 0 .../v1.0-beta1}/include/psa/crypto_values.h | 0 ...0086-PSA_Cryptography_API-1.0.0-beta.3.pdf | Bin 0 -> 1965216 bytes .../include/psa/internal_trusted_storage.h | 0 .../include/psa/protected_storage.h | 0 .../doc/IHI0087-PSA_Storage_API-1.0.0.pdf | Bin 0 -> 511152 bytes api-tests/README.md | 12 ++++++------ 15 files changed, 7 insertions(+), 7 deletions(-) rename api-specs/{ => attestation/v1.0-beta0}/include/psa/initial_attestation.h (100%) create mode 100755 api-specs/attestation/v1.0/doc/IHI0085-PSA_Attestation_API-1.0.0.pdf rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_extra.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_platform.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_sizes.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_struct.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_types.h (100%) rename api-specs/{ => crypto/v1.0-beta1}/include/psa/crypto_values.h (100%) create mode 100755 api-specs/crypto/v1.0-beta3/doc/IHI0086-PSA_Cryptography_API-1.0.0-beta.3.pdf rename api-specs/{ => storage/v1.0-beta2}/include/psa/internal_trusted_storage.h (100%) rename api-specs/{ => storage/v1.0-beta2}/include/psa/protected_storage.h (100%) create mode 100755 api-specs/storage/v1.0/doc/IHI0087-PSA_Storage_API-1.0.0.pdf diff --git a/README.md b/README.md index da09e914..bc119d98 100755 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ For more information, visit the PSA webpage [here](https://developer.arm.com/pro ### PSA APIs specifications -PSA APIs reference header files are located at [api-specs](api-specs/include) directory. +PSA APIs reference header files are located at [api-specs](api-specs/) directory. ### PSA Functional API Certification The [PSA Dev API tests](api-tests/dev_apis) are the basis for getting the PSA Functional API Certification. For more information on the certification program, see [psacertified.org](https://www.psacertified.org/functional-api-certification/) diff --git a/api-specs/include/psa/initial_attestation.h b/api-specs/attestation/v1.0-beta0/include/psa/initial_attestation.h similarity index 100% rename from api-specs/include/psa/initial_attestation.h rename to api-specs/attestation/v1.0-beta0/include/psa/initial_attestation.h diff --git a/api-specs/attestation/v1.0/doc/IHI0085-PSA_Attestation_API-1.0.0.pdf b/api-specs/attestation/v1.0/doc/IHI0085-PSA_Attestation_API-1.0.0.pdf new file mode 100755 index 0000000000000000000000000000000000000000..2e8d7eaee3b2ea999298c781cfc19ccb59f42af4 GIT binary patch literal 538729 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.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%0Asn4JbjI+o> zqz{{ZDo3gb4IAdr9K=L5xsv-!1oGQlbNo58i1pAj+%}-MOwl=ySbm4^jwgqoalqS1 za&8Dmx%V(4U6^6+s{qxTM*t_%qAfSH3+|s;`rKgRxd|vnsVzN6zUFyAQ%n(9sHsLd znU*3>u9#Bi9ZD)S-O=E6BWwUp9wU#HD`1W6#g&KcLw+|Ev@XXuZUI9k=GJ_kp9;UO zq(5q-wupXmK}nP?j{ti+@q9)gmPRiG?w~q9UD*Mc{t_?r>&?eC#PRa}XsmdCKSaK# zD9>QCxlqdA9o=Rf!cThMUiN#rHLVQQahRl3qTn3!m!85Nnx8+cAR<&{Os1DucV2l2 z3V&It4a-Upz3T(^v=+yM9HD9&LVBNx+_&~xe_#n-X8f2wEi+cOM|lgygWf<}R0IE{ zaUVvDScS;+vx|e8!NR5~V1th+S*?0HMptLFM77}>PU>{4$r?NNP1rI^#0q?9kz|NN z4m5QCM5_YpG>tuzTOPv2JYv)N#E^5DE!#e@&P;;kWQXCiS*%E5D1z$ucQ3CcD-T7@VHpjJ~3PXPn^j z$~Z;{n&vOQTY(~r)}2_L!s0#`jcjcb;u?L8xx5JFGh( zeC4{((lDS!eGc9_SPAbiWjX0wuYH-fsHDP9_FDkcw_r)6@rfG4p6H}IgdMa&*eMGc zQ@rvmXo~zs_T6bgxk=-#I9VnJIL#0$a*=$C#N7*jZxR%!VFSif(C&1BDP?;aOM2Gn zt6y*~%4ZUHdz1((`5jLq+L2uKhgXzF=gGF8rY?|sQjx%e})>=dulLHk3?* zWIJOvsRgmvrJn5Z#$JP^4%}z5c2EZw8}Qb=!j*@dMpa|AYqf__V$qz!xP7MT*9%!_ zq{9rYZCwrDnme^cA#HT8szg{64$}4ROZ`g$Qij)Qtu^fKnure&4bqxcF4xLFk?A!} zvr&}+MG8{x9rP6&*9Zk3;SLHv^x>NdofqXvzM%Cx5W%Shs z(x?4a2tlQhjA?4kRS(e3#F|dFSRE;@*#-WyEqAyuck~-UQZ`fC+KEr{Y|k%rT~qR= zTc7G{8}V`}w+y&B65pr$aZ2*Bf7_u zFv|w`g;fBa^%t1@x;2!>Z@ep932N9k8GL1xxb7Jv+}_;jS4yT9w2!!6++mfjH3H;& zij6X=4uUQv}W%!RkoLc~e9RHGSP%Dy=fjZMqZp=7`kE)1W#0zM^w zDz8rwGG;wZATD^A`%#6lXC5xl_z~2^ksUv~(QrMFtkn5P>HL}mW*VY8T3|l&YG|lL zB~*WFtB$VzRImtWkj*t4PAitPU_y^8xH*+gGmd^0;(MMwbpa^orqh3c`#~IP&Lv2M z4MA8XXOmeBLI6bwZ%>HmN7AOwkwxoXm!(LBXQp<#T!nE+>^AHqUkeFBnVq$eZje=3 zxi>K!R_0O$i?I)JXO9(%x?8bHOs1jot$2~3}2gzTXh&ThRC+AOrbS% z9)&S_VcphiePLwh5MQE^JGMJw*j?(d5p{NB@la6}9(~lskz-jJjzk$__0I)vaz=5_#$fGMY{7&T>6djb~G5QxUe^THLW~}b)^rH9$JH*cJOz%~9-vxu59Y(Fbw0Z#D*<7CMyBMX;(wi;o;eh*2vLGmd0mm# zw*WYj?f#E*!pnQ`2uiD2J=5jbBVooDPtB{?YRrozEmCehGs!$U+5R4XEFm-?#V+rQZ=Vbq#)uJQ|ux--^MsV3%o|H5oY z{&Jn3@gpdXc4|20nV!DIQE>Y5luNA(R`y!@ldRo#Cqte0wee4GGlj?%a}A|4YiNR| z>M3OX_vqji`{*n2uo@@E+&w&AKGnJeIcAX#yBS=qzEh=;S{6sH&fG%xuU!}51y@nj zNPBGVAO#vw*LqK_^xz7v-c)iA^}S$?uslm0oiplTW&Qi%)jsMl4?U=3!z)zs6X+aW zy!U$$Aj4A#AoapE-NXf3gVbDuS>5T#TNra_uF5v^Mp7K~^y09)V5$aMY}Enng*b4! zHQ~~Xl;!&%Fe4};~vP6D6LG)RdI5tHVm+wPK=be&gW_(dNYh! zuErH(J?)on^P2ak-C`5zEvzSJTfDlXM)=kCk*r5+3h^MAm770QV#lJ`yRU?Qsco=M zyEV7F!9DOiF4q@It>~}oYwojWuznThy846*nz8Ep7s%3or<`YJW(4{iZ~&bHxHy5x z5-TGoP{R)dm{|U$djEgGdS?G8={%58{SUyBy0^0hlcbZQ8`FRECe&TsE&l#g(Zm7x zCl*#FQ4@g0-$O*j#N{O<=){~H0Z#TN00vPfdvhiUM>8jL8%HZ9EgMG>M}W=$TK{Vk zAo^wIYUAwYo468lFf+-U{QEKsD=TmUb2n=MFr|m>?~#In ze;>rZQ-l9)Tufpn&e9e(R@QFBT(1#Alerv^fRe;p-Y zN5%q3uxAJQp#qQ4KY#E4h9(cRx!?jic>)bhSy_l#f!+^X#4NziIR9ny=->A7A8rpE zK%a{L6Nuzs0-jvh`j2$_ z|M)e@+c?@Wsalu;F;G_4zeEIo7s|#13}OP3`~UBi{%_0_C`RD?>qqf_K&G7kvr3Hs zHa-^rx!iwj4*u(&7(4TS4x+x)|EnkVZ+T6F{!P(sq|xXUTM(eh>^8n9R~|X|h^v>y z%BU2#98Lc1n_KrpTLZmWMZfHm;!A!EnKpseD&r=LAs!#@#yM(!&cVXmx`3v=?Sfp&MQV(Bzz}K!T zVM|Xd)W0$OTT?dm zJ=sJd_^s>4Z!M+CAJ)aaNZU?VS zusMeSJfjhLO0Z6ha2rg1!@NqRb3C8#m z(mw4{C(N|Lmt$!r-n&gS;5!@A_q6sLfpB+wGn@3}CXW{aiwoMj6M*fZ%Q#O&CXK2Q z@`S0=JH@N`#@*f=5P@~-#v1k0F zpZt3emTcb2cj{^1yadN!=lYhx!_xX_S!K+-StmV<;G6zAdH!D~8`a-*W}l8NLI&k3 zsn#^kg%Hwd;7a+$N;DCb`X3p>b*NZPGiF!trI@8#M~MJKgI=dit*b6W2@%E(jD++8uE1q)ea z{9-29v;@hzz5?Mt-p6Z}_;KLO90*CRV*`6!#AMHa<3CbvosVWc$-z((1mPkf$9}O_ zRH!+NgRLd|owQIAOkxQowFn+?0;;Wh7t4{TI4#D`r8liLGaHt2knWruQsvSMDt|^) z=fFHU;|)hWIdhVLluTaw($KOhoNU*$!JM4+9Zs0slYpIPsgk{q6_*-?YaYa)nE;c< zs!>`-4e8UbQF@PpWvDo!nL^tfvx!W*w74>Q4-(n9BptS*O7q!-rY~RD1+yBejTOAD z-{5HByo%$v^NWHUr6v|<3PU2b2Xxf%j|_wRUKsLddS?k#eHnOXi654D!x(=|okuqZ z5O!pnDLO+W78KIm!vMXeCVdctrn~p!QuMH@3p}PSj9z%=P0T)^Gkc9Olo=U}q3P0P z{n1=s82FtdbcnUc z91U=rRph4U)#;|1QVo^rxI;Ar^VYTR*FCc28YX;YuKWRd&Z}gbsX2c)O+T;MO0%)JX~qSE;@n zpE+p^3cz4)?V>WyMcG4tS=A7aLLr@%`BXSo1a!vUJm>T{ZrqF6!xT)b|5-r%e)#BN zFq_*EG&dVtUWoYnPC7qg%j?8Z-qS6%LD9mEzhNqEnZ3>`GkdWGR(*Tv`$G%uC%CE+ zbs8F#RVI5Zm=XCLgzb*l&99kbG;VWH5Ho6(uddEIse{TpBr-)ryb^oHZi>DRu>lJP z_bG+XkW9BMQn!h%mX+auw0s74qHs5lF1E0hiZHPsCD94iNb(&ST9rzIq`uV-nwG$5 zUu5R_mO8uMP!RDU05+9s1z5(r(wVh>np%{eP{-x}oOsAt+T3!jjXkMUULix~4wBPU z5|a`93HB5H$l%B#2R{jU35VR`_- z`9O_?q&K!Oza$m{jH6|(h|{(0DAy(FFT3}#9o5l8H1V=o_iVRn9D4H_-2kAyqt6%2cfEWxtqVSDuYM&7XCwClLl09nA278MP-Isbo#aKw#!%a5m%8ZK?Ax zBiXo+tX)Mw*UiqTYsw+~ZI-j;{Gb)&-Mp0<-X6S_+7uo;j;c4MOFZ3?{W3XnE`%R} zqbu8p*pCMQ4QIR@V$W(;#xtu7{W|$`rffw`FITUHUCjh-&2mho!NO!;H%*%6&O?d4 z6nFf4uSr*JK*G6C=ceJ#MtJ^@QXa>nx2;2-JrE<{M&~@&uQ*8bPGc2(Ul4y*R)c;` ztAfxW_|99y>}Ho|1zMDA)zz#|2%DPPm4_%re!z^$DJTWE4p}NE2!;T@jTt@Ur*6emg!W%8MQWnt`d}SpnfCWKJ7s?-YhYd(1U%vUEjjTB3;31 z+2>+qUL# zxPQ-;b6VxgfYlRm0u9U!A8H;UzDGe4IiqsEsW2IaT34h^a6Cj!*E}Lrru^;|=Jo?c zzCC~NK_+Ae4w7lM4M(BL$mK7+2%U#`7Xj){@hJ}fB93o;Kc~>^3CJi9C&uVM^LSxQ z0pnUSM&g)bW_^LoppOP=R%}f5gz6!^Ae$z_m%d8_y!^1V;$K5tk2_N( zAY%ODww5y5w@uZ)H?V^>@xKHV5Y zYj7<0I%>M<9=qq)bkEaBM$vca72Z*~Z*;2cKd4tict#mDb;3*YT;~^ppe-TsM3#J6GfYMOq zn3Sa)cUkN%t(V}s61SqUizV?!NAXN`UW*Jh%!xwWgi>Q@B$UE8aytvBKjL5ISML`mNv7+y)HRR-i;SJsfe4)%}bPEy`Co z9Z}$np1^)OwV!p#$cXhT``Oi77ITHW1~>g1}8y{p_o5+k^E!1^r$ zpK3Pep@r^@(5l3NL=#r%tljwctdQ0RzrszZR{BwALaC*o5UG4=ztTB6q!LRb)6?cr z9M%tL9;Z;PMVc;L=zz)bPII)3`Y%L9EAO+5i7H@1261wiBLKH5H50tHrJ-MzWo1Qo z5}p`WGI~o_g-}Rg1*_|=4wW`XXTOAJ{4SIi2{Kb*sS3s**^QesgD(C0weLNJx8f^u zMMJudXQyiOofL;?YG-V-5)HH_=K2S<5)JX+YhJUr8l z?w`lxtejh2Z+Ndiv%Ad<<0ZQBaN!xf07kH9%FUeY!N*M`=9SWrDY;8QS z<%}BLpxr`Yj91*dxC0pWQYpb5OdPC46P>e>GjWo<8ON4!M?7v~!TC#)5nk6%G`oZ-ixkd$B8zwk@lN$$tFT^ zV%V@h{X#nJPz5{!9bT{bH7g?sW~n;@&DI?XOpE&geTVt7tl$7Kd|gpkW-~EPgQTZb zCNLhd0r0ui;`V~cO&anD_@Tp|CIRY$y z^Q6lm6`C4#rzT8-Ro+Jt4sIp$W#F0$84&P|<87UiGazW|9vM>2`f)ByvedVb0kw4! zpqy2jh`LNspOS!xxqCwAG02tvk zQ8SlHa>^0(`{h4W*p>+v26onnT~&5O8^=4CFWA$GhSc#}k(R*>jqKm@#!$PPompn- zk00b4v-lWoMS1w#j^aqyGgjrH3BnT*4P&eBNub{wdqnO)dp17a6x?5#dhtudPtZ7L zI~?Y6eQg2Lo4&SeL@%}DXZl#1jQq<~h2?)@`@c7_2Z}T(*l~;HyBYN6i|;QTUky=Y ze-#sQr(sH2+#62Vm&*P53F^@dzVctgZ!G@}7nc=iAqvbzVf`zb<}dh-gOTTN7f-H# zX?yT*NY#I!DXf2yeg6-P;-8{fSXlm%iu+%oB>!FmGbbZ6H;^|5^biGd%z#b|9RHG( z{14=^e+iWE{Qn0^{(^}92Q~?;+$?|NjQ>DH)7x+b0wsUhB!DKU18ow%^j<0|q+N33 zI32b(Sw50vxz2Mk07^D8RXuWr)(1APBA_Qpi8ox8DEX>bMNx^n=Pv~PL0bcz*=ic5 zVzQohBi}>UYI{5D8Ar$8Kg?gw13o=;F9(>Q9y)WEQ*J*_-~1vH0;;E`&yL24Mt5V# zZa1zJ(IuamzO$i3l}ZnDqjbfODzx?dZm=@#?E$QAZ>O%!CRzV83m)J$BzxQp~zqPv7uajec+nap(zDEsJioVp_Li) zMu>rvn4-=txnAo=6^XP5ap5SUzJj6Foz%3>^zo3iB|f0GZ((v*;*B6 zfPYF70dqeI-{0d0^@?MLLiFtu?rs&ig?aWl~lD;T(#cAB!gD6C<=! zQhy#F|6AEdh?Xc%T;eMNA@8+_4~kzFJ+`_ZxjW(61s**^RIl4N!kKK^`GIHbiI61o zp|f3kZXr zHiXBy!)>7}RnkC05DJP%CJyjw8zwjt|A2eJ#Mpue9&0!$u`Q&zv<5R5%} zQDEWM1Z!1yT6qTS@b07EpRlj`d3e1^ipR$r*AWJ?qDQzrc=pM;M~^^q*zDt*{upO- zBmP?3VB>qn<~vzqTFo^Egnf^{?9A|3K)djY(-PXKitqS9JU>s-!91Gk=&vAN)ZIgy zCYSejd%?yx)G8(fWmSy)pl5BPmo&axS2=zYh`=xWX7~k7?0^BGKV(#WL#mS?qBWNJ-uz9L5s>6}MCzW& zqCH)t;(Ov{6SudDSWe<^|7-0Cp6}}zp4>^B&8j?Q!lZew-KHVj$|ODfn2d#`GhX)h zRrS@_x}`Z4NI-A5Y3nvSY})m->z+95!oz$Oo_t{4WXc*>&=;~!>PYKANK(qw?4y_> z5c;n`4St>Ng#Pso?8Ba1K@CgAn&^G9Wh^T|$6>~@jV7#aJU27$D94^bUm3Bmwaw(IhNC+R#-kNOIw+X| zR+yY=3N+lmYom=Uw%ibv(Z)>?Ww|63ay1Kky_JnrmKVfLkfGXcd|IUOVM8a1MKL5F zz74>HJA%)yP*gpD8&>?O%u>rje${!EgcThMZI3@S% zVW2t4LVSBs-kp-MQ`tW|gA)*bZVMine547~!e?<5^vcvxApHiKjmdI^p!4F88%h%6 zZBn8}@|$*Ee$<^LV`;N+ z%y0{)y}IzEx|F#)=IP$jf*oSsn3)uX)bheFv!)}`AyzXsa@O*mZBg==S`-e1Z6&fB zTw)Z(H4*uTCq}!D#sxW6m(MWz{^d2%)NT8C#c^6jr?U|RdAuV)sA-2U>glQP@xgDHD(|lafnu_Bv8&AlMbN4;G(7F3xh$r zqD{%AK>X;Z8z8r#1J&`;qxOtqpd3 zZDjS>WYTxtx|K;P!wg|8dDYOBkha-mPLhTF(z|~^kgq4oH3fT`Nf?;!C};sTTr7Qx z#CDd?z#X2Adv!6{dPo8Z>Acx7VKj*%ZC8l_-3|VX!o~}Dtp*G2&@~HBcKtnRX!Y=e=fR2)kB*P~>TSES zN;@LvNevrQsVRmYwWl1fg=9Qt3X9d$^*jGU77QoVcLFnPj%*1(5~FML^-mvdp$ z4!kqTdhij%KE=a0JM9z&5D`10n`3y9D*Gqw@FX~w@~GY*7Y`ptH)X=-xsQkx_4uyx z_7p3wHENaYx$&&}1r;_;GIPy^XrnTzT?n5S{dW9i`fJHBib?%v`6X5Ld2UKyVi7X5 zXFU4q-t)1oeYK>V-ri;igajiu#Sw@uJoMuDh5jVNnS1|@yp^Jpv|iP3kA!H>nhOF? zaZT$5SuV0zU7b>s4`Eh=q+`F##9|`@tHKoVx?NHHZJE(b7m^C59rIWs%v|$dyDEZ! z))3D6iQifXj;cZ(l0u@^&je4CHxu)IOOUXh`<(Fk_OqQARlcwzH5CazM>ubZ;05aG zHUn2E$3z98HY|4-&%cus&k$i-+T@vrub+luVt8s5j(R3D$~m8pjf@p!MsOqM+k%@S zRp@W)jZ?=<6~1F)1Td|SXW7{hX|g#Dd&~Bn3V-2Sr+bkJ&Os5Z3r(7m8tp5Ycf?D@ zWH@R!Q@J$-(|^X7`4A>?OTfP)s2yML2?bk;V(2bo3z2$6{@HZNZQ&{DIQQI_l!NF% zjY?f_PJM!KKq{1{nVCc7S)z6?n^+NQJK1|au9;BZl8+k8B7T^X0oS^B;!=q5JI_+< zh>LxDG(qS&;7O#yL_p3=%N27oAo{Y(OlSKIqM5YkW_1Z!>f=FSSrQ8cmerGO~-%r@XrH$Y-8Njvk zDSTh1+EmKTWf)Q{?C8*9?YTHMC|D{{w3Na-jb!X9bng zoT3t@QOeiE6MJ_b(F1oIanhj_b;BGh@8rdki@e^G94&7*Z@K~;gEJ$E_w$^^l$93i z4}ja_(_+f;or_Rze(ag9A(p`BhfOPp>0BUjX)zfC==0tc4I4cM_-KC5+#9@LTlbfgAq+PzyW;DQYL2jKgTO~aO6Lw}6xkySEz<=A-4RhLHdN)B9=u+|YnRPjyNvD@vID*$JnEUYq<&$X=%hO2~lrR7!Scp|BZFm50~6Jp7JaWR@CI4h=3=>iYT)USZ8+ zzPy84r$c^;^Embopr;e$!u25n7Au1En-? zTa)1#l~HwtV>_+r$|7T6-FJ5-y0v4?$dm9Hs7{B*3-NQhwaOk(&+5lR#VEJ;9FzT* zzMkE657jNf?ns=Qqx54|6v*;N#JV|N7|WDyKkbec(i1z@$xyn zr$)j7BFWjG`ZXfIYiy|Ip}0$L;b?@-=$l?^cUHVXAz-p&z?l7zZZa;ifEp&1hcH(0 zYTOx>Hek3lCRyl5T=WjQNi1K4;1`v^r90VI+SF~9Mtm22oJ|r&*3z~RK2dyS zLH5F9*%7z&Pk92vsu8newMt&Jv&7vqqB5IgfkARLS_7QwmvH^8N3KFTI5ki$N!9Ne zO{V5w#SkaVNvy^ei}WGp(=bYS-`I4;1I6yS$H*gJzKw*X<9&@{#ux^FU>5lu)&hxM zErgBvm4=={Om``);o7}!2q~nDz^3?@2Qobj){wAf{(BYTSJn(u8f^A2^jUaaOQsHT zqtOJtAj!Q2;mPzgkuxF{tuo>U8~WFKSXNL=oFw>(tR(NUIT>G0;g68qJ6*Z8+ffVR zXSTa*C5=?8IgbL$>q5zwCKLIc-Lo)g_6*_FSIoqvV%DdpV50@m z)eM5C$uv?)><>=RYV;$8kc%Nd|4s~8*uRqRY?-N&yjq8)I$LOCFxbFb@wl2}+*G4o zX=jyP05#Stp-;wj(8v8rUQ`iBkcM9tr`yE90a(hfUR5bK=(!!+!qddCzmK$t3=arZ zLVgFq5gpLtR?)xMHJq~f!8Ao`F0}qwYc}iqI1^H-i2-*KsxcZ;SwZ_4pI?3A%NHCN18x{dFK!$xfe4Bd0&!i6DN6W zd{31R`yfSHOK>*+q0LA4VQ6d|df{PAyfGZT1XI5rZ7#x|L<%Zc0ofo?;|$L-Zf+6a zf!(l4u{j𗨑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�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

=jcGV)6IvX# zDJ_B8jFv=gPD`V}{f?%7_m%%orVPKolSHL!>5$etyS_JcTm@{1jl98XDMTh7R_IA;BgY z2H2a1k1+5J<}OBYIt@IF0dJIizc8prE^i6 z(RrxNjc1iYc`_=65EBTVrQhq=%mBw1YvZZ#^?lNbkbvVLNGedV01F5 z=%gap+o=0?)l*nmiF&?UKyQ!^N;3$~aMd@dyU8+oca>$PLD(vu#@Y*ftJ$-HS1 zi&|e;gRLRfP-~bq-1?U_!urxmv=&$kt*@*_)?#akwbWW>ZL@Y*yR1FdKI?#W$U0&j zvrbs2tTWa*TiS;0vrXHwZQE}HQ%+jvvUA0`>OA9QaGr&JIxDW05L_YA zU~W(W@^xz#1v$DsYY%z3E9*-9c;~Bw>mI3aHN(a05vlncK8K{yXX&%aQ~CmZ0ZFG{ z(l3!9HOD7Ut2sW&WbQH#lI&`xPx4v)AX68yWKd4-YhtFZg_*iGX6iat66EMNZ5Q%#W6aB4F)#OU(m`JS2>e_` zBJZb0AFKu+Nj)XkkcrVG7)>9>F%8D?8H{5V^gK6u9)_M*MbB&Ch@^I4#Y8hTKi)-O zp8Nndf@DnD{_kwX_im4YwxiBIXes4cg}{10)bOqOwRylic<1`#?X^d!jUaVh2Fqk= z&aE;f-(N4F)pdo|Hq_h3)>5S?cQEnYK8KUfQ*~7e+Hh6K<<)5o)fS;8UV^Rjl63cb zJ-}6KO)PNNgujBn0`xM0=Ll2@sjHq?74AyH+_rb+++Ps>Phk92`qtQQD%hvpEN*r; z)P30vb6;@_xrN;#?yGJox3v43TgH9eE$fzZ%exia%5HVHuGZ!5xgRCX%^t>#uIIoz6VO_IxvbnBDcZbOJxKDWQy zpXA5V=0dA#fs-!qr=DA$=G}+%q?B5{aqCGbHG}PH-YUHy-QX{QsJE`oxOFG=lT&{6 zrcCulP3oNus^qD?lB+UPEVG7X_FT0HZhSJvU3Zp#A(VdE6IA*;TaN~3 zd=D7+s^6Ln^y(R&Kre*Xik|$MP|wakxiz8ILGb+ru6nBG_DX|#hna8(5aBNfC01jg zz}1cr9E0${dIHkG9zQvhq_sy)LGmY!M^Bb1)J4<3G7R5Hn7>;>|nFIIl$&{ zbArtY@nmi;H#gYaZYbDLHxJl6ZeFl?-F#s4x%t87cME_m;6k0b1tHE%t*C$vb6)}b zidzV5As5CQf529Nw!_?t&~_NKplUcjt&X)<6KqX45^SVf z7i?X(9@u)&rkGnF+7yG9)gNsC6i*@tveC9n4EF;UxLRlCKXJuGrR_g(t+|9~E zc^D7pWq4&?i#OoS`8zzCcjJBdKt7zu@;DyP6ZtZ}im&6F_%42kpW+vJlF)@Cf<#7< zRfLK#5iZJz%A%HNAexJJM6~E8`iOyIxQG>TB3>klWnz_BCpL*);*dBcE{Y^g*BmWK z%cy15LbWh0Tq~nh)@o@DwC377TC~

!S_ShHJ49opfH$qT)+2zBw?yIWfMuF}|S? z-$o=q_B#c!-zkLsPBH9v!m-~eiTzFl_B*d*zf%_boeJ3RRKk9zGStv;QWg81df4y4 zm{SCUpIJaNi)x1b7egb5UMY5w$>TsHc-b8;GW&HE2tSNqf-u zL?_V=w2SB^`hoTl{l#F=K@h1?pfO^shy$G{rit00@nW7>1iBF7_buqxVzpQYx>jru zTR=C79bzBo9*F7*&|~6^xCnY)T-69@k|s2haLs^Nrv*);1#1~WGiaH$Y@k`STv~q6 zyifzhK#OQ4v@)QjwelMDP*5W^v`El8P%lkE8*44KcR-`G_q0x+(OMS`@`Ba_Y75Q{ z?Ne=#HXL-Q7Nd;?jnyV<(?F+a@!CAl1Z|h=r0oFRrtQ%V zfgaF~X=gxBY3H@8pqI5IT@bD_-OwFSTTi3ItWXcqGw7K?GwE6NT%bAhym}aDLA{7x z0yJDNt(ONat5?=*fL7D%=nX*Y>5cW4pw0Ct{XNjOdbHjJw6oqr?*rOf|5P6YI#3^~ z$AFH|WA%xk_43Zf@Lu4kI6*P;?A@hQU%7U^8XdxLcOM^zpva&L0 zMOjVO0j(wL$;P0KWOEq>+FG`i(V*>RXW0X^o9rz=1??vX%Aufx

!II!cb0Q$XY7 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 ydsKO;JcRi&pzTEfU3NU-CwzpbL8Wm(t9C_aP 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 _!A-iZ^hh1qI;! zM0MfeiV83b#!-R6iL=$}#Q?Op5++8TpKYp_XyM?lVq#V_a?vfgv?+$zH> zi9Hg3%dEC*`g^g~nC}JjHBc;GR|yNrL>g37Jl`;}y3zn92tL*;o7RpwZw6(58@%G8 zWgs+K@`K#vp;^t2Ex87danBW+YW>^*Z@6UM8I!H}$=HnV-GrrR0693#8!IbgFuHAAQGrK3k1_5I^y~ zG{X4o_X%5%*BA7j^4V)|Q=BTKcv^3iZ>fNTtQOE&-aDE=O0KCGlxHI21ys2J`3N`A zryy{8p9cJsc5!U+-XNCz}2sSv$ zms1FCsD`Z2jSecNJl=1>|MS~iiBEWa*4!zU)q!GCsT_@n&!={% z7-zJ4N_pjct68m#tRPi0XE?4H40(9v{R z4O_lgDw2;*B6Ez*boSt~!vL(JNncZ8X3tp{+R_R~Sg|)-D`ei*D>KlFp|q`$3uKHq zI3e@3r>}QWR@&UwY3-+OhaJNd-sd*p-^ZM7)?39l%!N3JbhwgRIrZ;|W|<0iNj-z{O% zlz3ZRur7e)+)%hQ_TpEhJcErA0dFb7TV*xcx1lyj70F)41WBjT_?n8lQ%rWodwjJtRg?%~>-n9D>KAx} zS(N!eR8UR@(pKYa!XC>`+iR4N zw#l4GzeG_Y&<^7iO+y{PI)>}24WS7aD>oA@%`86>KXI3wYt-6?oH~r~%X<)4(#0<` z3-sl6vn{he%iPILNEI2GtDVQJi+YDYBu>>7PpJQBAtjJ{w4g zyuh2xh_Y{Z$tlc_uh>;%*vzlp!SAPI2v|M(oO?g9+KEC~hGAD=I_+hMmQ3+Iaza#g zxI00ODzyLj(bjE9P3C(|;02c2yn8mm;57S>+{_QSqF&1h84QBWy z7JIIw60>_e18x=>HW|C733-kQocRzP=HQ?IH3Z!cS%= z9neA~{b>@THEmSzXdzu!Z6TR(Pv7Dn{S^!}-FiKp-}*C&DZg$J-AsM9Ns7_!Tv)W2phvcAv#iFR<}t6R_R=ZYwCesPQZ%sY5b8qeMC!H*7i?65>Y^px0CvDEKoyVxKnM7y_hs~@+X4yzRQqdsA2CKdq9{U2ZW^?ntCOi{yQC0f}5TT zT$_F%nr{I3TdWN~AkEJMl-VyW*7_f)=I#Ia@@dmafL_s7xbsRSI3+)5c;}0lKM)c~ zOuW*qVCRj}NlZbU^FaVqw#{i5()ljHGu!5*3+}vIiD1T+F$i;>r(`{&nPYRvg>jx4 zpqFm{qdnqOxMX8QC4^#38I8U!O(H(c;p4Vjdbxx>0 zSjkMqD_jIrq*oj3j=J#ABb1D%r*ayMHC9r4LCjGD6f#oTxH$|a9$-sgN}|$P%ylOk z!%rbfLI8;AN1Qp+Tya(`>caCxC942eX4OU6CO|{_500E+jef46^33wc^2Ag9l2ZUS zU|yHvm@I`egiyRX$u037)}Gz~Z+H#55qY;%wp6y*JL0YK z0B-m+dLH>_zzfzb{2t$)*?>&AS$I)6Dmp3ImdrcxEy%eaOD0~gM;kV8}4}2%MTa3ML1L6bV1Bl_r=x^xLtJuGOnD2jZ=v>_2F$_@!gIoLq?{cU0|{^G_Rt6V!->Ot$VepK@o&lYzz06U-_V{Z zuEaNDS`q7rooM$^2J+C>1950JVpk$tk)0U#a0YM&Cd0GPcqu-^SE5_NoqUa@`&lGQ6DmOu3+9`ki_8H$c`R#H-H$_O|8wa!kvaMqSzOP zxCY`u!)DSr$>!3C?do}!3;VHaxW!_v%$?*uuC3OC4>`NHtzSd$wKpez)F^r-lNOx6 zE@84TB-)xQO?2&ZnYp{DxVXqQGKd5i9|~2B$_NO&fG0%-)5g8n0zT$)ma-DziOS1B z2}4AF0@De^3?dH30Y~4F9P-FrdQgz4F%-G|FDt8ky~*zSTl?{3eEYhs91SJyNGi0q?ilZz6dWoU%F;;g$f2pk$2-3vXzCz<(@_2UqZ-SUds@7IyzXy`q zS}`XtZEY;z5}X#@Vw~YK1(RNo=vwLUFvomqqN-98gZxGW7*xQ$PkDDuiay*tcNrsDiYBYVnL_ZCu1ZK$Ec z0km5m3)5{d%@tFJJ`%VM2cexkZw8yLsX6|Uy4R$uE<;PynT>89&I{ohOfMjY9MBG&zib(yDvm)jz27iS}q2M zXCRaxdDKm--)$y!_X0qU7;iw_{Z6}eZw*5DbS&UIzuTH+AD`h@CtNgr&++zSc?10j z@?j6l_K-^8E`Ppcy4!?`balH!o;1wqML$yM1bu$cyt@d|D2pjVNxDyYkxY2~?&F8Q zjcx`)Uo8+WAEcmOOEbi9=}G%Y{)9>DBZ3LfSv+dOAl)q`WMg zy67RRk19Z<4kH%k(?^FS5-*OZG_Yb2iV;oADVs?QsEu-D;8u*B)o9^I2`6Gib0iBZ z%a?uwTI&#?L6jO?#T(vF-Xf!H7#tsy!>eiaM(e-!E!eg)2A+b}6@v4rxm}zS*2A)a z2CcXjgJeegIccV*bN@~dow^yquhfWj{94V13^K*KUHT|xOZ*T+%q|p!J*ttk*;e7r zxb)4$u1CIf1tx3y1%;f{%qb_xuPXaM+yCA8FOuvD_!q@9w4iD|{f)2`NH z)nr6Y^;ekS$ZbcuD}ZLn1;EX=tFjhCE;0l`&c|(j+kudrVSh83AOsLmH%JW*MHn=9 z!K!ZvhR5bqx91EoHXWn}mptcF$7FSi6tr)$U1JccHf>YP0@w(2l~I}vw)|}AXzN?g zjJVW{y;oBAl2l&kd8(~_@>fuxyk^h)xG9_cI2B|$TdGMcaj<|+Sb{Fnv+E08NYxCM zPP=SnqvDt{iI5WAUaqZOMtNb03UA7ZYGMmOwJE@r5h0spNJ(4Z0U zU-X05?u$2PqzdmfnqbQSf-Se82u$rbi>y71Jd5nGs&sO@2tD&bmNN+oidgT$Tv>TH z&>7WewfXcRbQdq)Ky?gm3pP?E#X^FUJ<9-Ytz6*R$-Ep;$ye0c=cpBuMh{<-Qc;`d zcB0cgc%8HBOZ_fUn|T^AUH4Fu#9pb`g7M9p06Hi8C(O5;5xfu*L@RNJnTF(X`M}3Z zw%Oao%Cy6*iQA5#DAyYqfZHWzvXEzjG}+fq*zPYQEFexu$a)t_90_%^T4t1t-X3Uu zRJQSWJP4a_#@$Heb?+-|plUwIa&;c;SvX!=Ad$`FW@KDj>3-W(a@`;ozIC_Ia~p95 zc}1u5&Gp#^k(&A*9SKvU%h{B_^<94rtPfCqjC>>+fEo!@wPUJ=fDz*_GJrvYCVvbh zzXyTPnk&!rWQ2FG2+%NcdszF@UShP!?%71^_b>?|6(y5w#CrJ>1h;Ebuw%x3xZv39 z{JMphw*4yDgcZUMtu?61Dn?PY6E&0o^F<3iLD;tG;pV17Zv}Px6Ftdbt5yw*51t{St9(Dh=vgmSbK!op(e}ecq_^=Bvt6_o&*Jo` zeXCtV@B|f5j53HIjVgg&(NjjLJgiV+)|`#Bq~U(9{@Vke3|9WyaVPRXv^z|)R|pU9 z2>rsxRJ+Db0vwB#2>NDPKBtk|@3hO?T>8s?Xu_vxXW_7rp}qPKx4Yg3MA0Jqni@g7 zb$+qCbOku(_y!5kYZ(ib3lJ{%6vF3KGG(Kb{X1|AE&Y8nDE+~4aF4p|&f}q7LCD30 zB+PHVOwdUX@Cu*W0afaL4?pz5)_yVdkf7Yi)%F@U zt5>ROaaINa$?c>Y-*oOm1Hd2ydaXv)Zks4+;mI40))9$s>P3b=Xc{@%bFA}CKYi|E zyiG5m6*Zx&D4RIs@9AFm(bo-&JR$}V_Z6o-tfoVf9HvdCnHwM7t!AfZbciG4J7rmN zo45q_u#c2W4GDI|J;0*Op1)p-tv9#g`-}h}s3k5Em$Ko$$5vG3KaMyPF^*V$Z={q| zC-A94z|&(XCnWSH>VxUOQAz0k(?fpOPp28$Yor?KFIw;$4JFm~cX@J^%$0IG;)=Wb ziv?l>pQW#=x{VEZHSk-}rZJD9_iDI419oOGN4qAmccWB`y-#ubH@}pcXih~w1L7T!&UBUj$ z1tsh@R3oG)Krsl}>C1Pm7?CIe>dQ7997Vw40$|UI>#+oQz6z>lAO%lmP~`X5&W(|8 zwoAo?^%~f0G78NEWXE*EL_IXu*eKl$0yj$elVmE~eifMr0!+iHHMrPkqK7_sE}iDF-ku||~mTH=O(bMf?+pn%R-E8d>Je>zjJeKdSTpA-yCbcJ4?dKJ-SZ}7$!g|_GY09rA4^Q-B<{D3JKg(i) zUBNJUbCqxTU8nPgyw2jcqh&TR2|6bn^#PBUNZ79-v*{mhuXA~*1-P5S zrUGzSLc2bxtn~LGDpsevakJqDKVwzFT!vD2rK@&4)eAFVw&WDpbZt@h$*mt4o`3yNEKtuFuU% z9N*Bu-#Erj@LOOg@3}YBBYz9hzQ?9yzlkRhmv(A%!!pR|XK=91!Bt*>%*%HUPKR0n zx=k{nwY}2^dJf;MiQaq1Qzl81n6Sw*8?8n4ET)~gPD>@KF>+2ECBb(cgco_?cNQiYR#gT-%;d=B4aaSVlA)O@-$_}I)CjNuP4#0r}MJAuCRK z>3R9SCw}8*a?yI2`O5d{co9c*!tM@O8l}_tzAG;8`rSS%G)XW0h5=TOHo2BrC8o9~ z0|*F6x}INB+;zujakSbE>zac8Vbz@ep8Nx{`+J6*oVh1*1dz#)8=j?k+?Do;IJ2%E zI7sX4E}&IivJOduND!7==qCYq{iwJ($GJXX(*SglGBhx7S&3OIjxi43`NbNRlD|Ge)>qo#|ySm9PZCtwHorg8Q%|>4`(l8-*2A7oBcW;uLx*c z+Zzl03#_~Wa*>xfy3)+8NCrfEkbjJ+9UbE&DHvhc_@9n~K7mYYmmS1cDIP*8>*4yt zZn%qqL#4q$ZDMbn-be|tdp=))k@yo*Q&BymsLMXCb7nP%@JrC}^K89e*$y8&WO{5^ zDqGlusgy&wZ6eM{o2S2VTj1SfwUcoXZE8Q`XV*SYYCB8vu1#KKmYiSql zX10*SZ*c6CjPGII;P28$?>}{%c00o4ALfQl*>@AJq*@Cl(~4 z>lc)*EuV7L96Q8Lc8$*aKkH3W3LpZDyuT>X=g=2|1zJN<3Q$!|nm{&6pP8SeW~Dcn z3UoM5PcMNLxAS7_8b&h*S}ZMcy!NTwV#7Q_w1zf0KVHjxu?QXdgg^d{npdVwtiN89 zrv`@i%9kt8jcmpVe-hVrLZB9)a;#CKmLn7~6)U%lh>4!G(46id~JTeXh=! z_W4eki%)J3ol+j|L=a~7we`o)Uf4>()4hJ%P&sFKj)49`l$`yXumTY*e9k>Zkr-`h z@|*){mk5&&@hs-&=Hez<%&e1$LWagpvb=@H9GQ8Ay7H}s^I^x9s?+b!WXF5CWe4dB z;uaz|z?FctAQReBBvdv-vT-uzBnG!^78Y_#N*2sJA9fJMiV@%-KS^C0Ala}Yf=!;} zJm=q2h`wX$hxo%oBv~CHQ$FXD<8*z)jf;)A;s%6XEX%$VKh7^_i z^Ytw~E}v}v$OZ!9>9;r|GZngUib4aZaUw-ORKssJvcm#&%e2QvT!XPC_j4PingmXN z=$uJnLJIZXM38R8@lq#Y7CztJ#&38Bd|w-;uaLBc=m&?d-E{`ect0)QV0BqPIK@+b zf7pcDXSH&t=NBS*pfJ~~K)BytTy=KNc^5ddIZIWVt*avzKle2-|9oP7fdL*! z9#G+GAAW_}X$IbD;}_+*k(o-19Pz`sq7gE|!B=#Jsv^djzx|zgJm%Z|v!pKNK)SjZ zSB$j=dv$fjYdlWoG^Ba)HiONbV(IDR{N-k>C!*2uKF0MNFBqTcg$>QFSXWM7gWm+@p;$;sV z(gp{H`Da=~SH?1<3R>t0a|Dy9 zUQ!gZ!%@wk$aA*!_%@4AwzQFm*^$QUJaLe#m}?e=`|io`&t+MyCRB}eQ4G-ND{g*1 zSd$&f4Y>9B2-PM|h2ZDCq`|4srTbXFJcyZA;vT2_Ho9&D3wfA7Hac5>gtNrd{BTn< zIq;q@p8QRU?ljS+Uk(vsYLj-sgtZC%Vlg%Wl(S_e-Awn#qUJOT6NMb-KzTw-{SVs@ zrm9NUpzhKeRBcU7_M$u$-u0MF(erP^S)0gg zwb)2yph}I%EzyhMUqs;m_TVs^!xyQh<8z7S6Ch>&D3{NzN%dWm>~mtpfTfPjr`4SEFJkT02~&J?xevq~9V3J|jkapY57 zZXM_eH>_8Q3FLF1k&#TF3AG$r^egw_&j-61nkzJx{vYdA(zW9Z*`eO%Q(+EdH1d*g z9XXY)HMOakkqHTm35@h~_aWmd!RLLT%pYU&wKWv=RPJ|rHblDH9ETqy($*p_I^D4q z@VrA?IT<8JDygIdS=dSV${C|)(l&L=yT2nVP!H9asxAe0ZH5Caz@9K)%N=THzFq?7 zLsq(*4(eN`G4o*qG02;g}k(@;GFADk^k@is+uw zr>rS&c*O`Bj|u#7n{t+LeVf$4PkG4P=!T{)tAQ!&%DImAver$VR!Ad`$6$;?yWdMH z>1JttrO5~qpmdN1Bg%>-XWxA(%xHeDiV-1(^vW&l%ZCmYDHLUuj{2|Xl4a$v%rq8B zxyZsq<3eckeXTawfRR3v6RrS=o*n*Z2&*;xWrnrvJZyW`aHsW zORKuOXX%{0-f~f#u!~G)Qxc7N5tnQ&-8=Q&7R$7AX(L;zfvF zFX*eli!6Ta4R$ILg=I0%V=YXM7}|w^n&-NASvfMJreFY`Ta&sVW=GD)-Z;c|)KUfy zK?ih_M7GzdHv+gKem(+AvL5Ju7JHl|XEM-U*+8Ob+*VaLR zm1Jq|8KBOf22Nb$wrJS_Ms8X?c0^M|8+Y7ZZgc!PzZe8xT?XZBo$ite9o>U(s{

scBY`MEL`lnsQ`xKXY@7O3k~Eah!}vK(S;b5~>$0 zp)W*rq^#GMMbLcW#n*FQLP9>-(8Ll`P)Vvf8px6;r2%t*=4#@$%C*~5x3{qwO>9HR zyOYi72?Uqz;bLQ>E`O-m!FjlIBQ84|GtLrUQ>o6we&eQ0;B7+$zOuRyGx@nd@Lb#_ zF-UXlOl*B$>8Exl-Kj*A04d#hyZP#Yx4@5;yP|>HpMH@lebrS++9~5S2wdSI>_I;f z=N(!T5hXD8Dd-ONaDZL-4X+J4m{Z7(0D^}SIAX|uNTEg+8YoY?yA1O4V>(v@5e?}( zk9V&@Qirwaue09pIuOU7rt8jF(z!n8P8)r_AdR$PQ-wKW*Lw&Yc&H(0w-vZqiDu16 z^j<%49>m9l3YMqMX+IbfhHOk5b1cxr$gSe5ZjJ$lC1F89a4BA#C@-RFGO4k1$xGo# zPz8SKR*U05dXKjswL$_%R@>f7DmJ++D}LC2US77mrdf8g)g%^;xyp6E^sq>5#ve(0 zo|MOniWS!oEylTQhoo?~<)L}n%{FzvY+I|5>d+pyc1;@G7piSGl{vC`2ubG%-x8ZF1@E3d{%t+U!h$M- z7)SHaWeN2qBh=0=p_rGU3``_|x1eT<2801_Oy$^FpPhWar@^cbu={`b| zvm6>2uAvms(|e0WrlFgqhI!R@zHvz9T}D>Zdbls0a_yj`Pumj9GR0+y4TFf1PJL@( z4yjZ&@ofX6!s`1k*JEIn!Mvexw`xcK55Y$Cw{lVb(L)+6x0cKT<#7hRNMyZBcWk)Q zLmf%}%UmC@u^~1f0w8=aR(Uijl6N(J-nw+6o|M%3+Bu7G=9FezY3obgI`a<@ON+;g zt&98t;vBV!({nn?(x_FXy4UuXd`H`y)@Qz@sb5G7YmU7VIS?yU^1f)7Mzek_SWVz& zVc%SAI)%Tr#|Zt<>VqNNt_9?w#>*9z$E2ya$D?*yY>1e>8h&35o%yJ-!qWLJo$$KW>%2R!%4EAyGJ%!D8?3hgW-y;>77Zxo1e65p zAkk0w>q`X%f(B_{k5f%EOs#;Y3JGg2J4n7A`_>-k zWVr$ETEK6F8X=lLHUcYn@^v61p@x6|{jl*TRpitO5ZrB^BFqQmSDL{ea$RZR%pskY zn4pD8F@VfYXuf*0aATRXGWRFLbG6U!ysg~?q9Z}UfGt-T z^+Z?=U&!1G(##Gt#tx7Jgy?ovwg$z^5DMaDSKhwb8jchv6)Yduu3^K_vVZaPT5Y*U zi$5}Ag?t45kw%Uin+&dFY?@1w%v>?N8ffJ zhHVj^elS41@tfCXw;&>!yS{l^)Q2 zuXCA(rRJ%%cIGsl7DtWq-;S$V%|n>fr(E4lBnhdVt*svBTgp>$m8Fz-%E`-Cap^zx zyg5C3HFSR9Q`pF|ThG4m8%a9v^nu;sHKlD%tV`7`WaZ9$XTL#g`nlP&4lmY~!Q}uv z#nH3=T@2h&Y}4P-1xBnZh3f_gXN7M4kj?>g@xc>4{CH9s+aV9MH>;uFgb64MqeQ{* zUWn@19_<)SVG4c5ix6bi_}M8tmT}XFGp0P{n#SYyDQb9rQo#7f4>un-i4FgXbhZbP zjkL`hy!D3{|B|s2L!g5GQ~S#(6%GJX#kj|6F{mYfehi)ZF`P2j(`QHjNZ98PrPR1| zQBd)mq7or3SkH6ftwmuFaaI=?@7N(GB^?vKTklTw|;tM;& z{(7IaX6?k#Jl}jJj1BOt;mQs%W7-*X6bu!)F=eFHG>Zu79CP`&>LldcR}f{QMz~{?(m#LW+G84Raip~Y9xg-L5mMk0%RT@pBoW4?nWr}gUD&f=WIVfs_YB| zYiF-*A12P`K+MNY3a#fOUXShV;PN<(=gOs@k86Lai!$ty$xX~oPL%k91@L}BW-lQn zZ2CGML+Q7k-~Hu5y@V#cBwie4s8kE?Q}G}dXU&diI+21zNz|1Mg19l8+Pt>oiNo2n zT@TA$_pWNLiC7}hqSO749ch(|ZrZ96BFEc{%J$z$k(KbHTtH9U$VStA4i5A}7gMo2Bu-epec z>#!!d!9b~AZ8L13DfmF9}h!UH0_zqKSsYsTp%SJ zKH!&#*qulB7H@cpon+V+llZAj0A~@>Y{7!{O5TVMfM%3&4i27pPc!*eTQ22SLQ1kW z>gDE~8d64Q=R6uzih90x*G(B?0p+4ChAhqa=;7D|Qn<*Z5dF zlTDr0q{NB1A|;JXW!2>}pn=)t_c;@CgyEnRQrJ}C zhB_w;;Zj*55?M>K?~EDjqxI?e1`AuU!o^%#XA)Cr@#O98>Z5(Q#E0?r{y^=jJ2Pw?YgD2#2?p#p_90 zD7{&hwO=e zTtx~V(BX)?9`Q)AFlk5}@MAOq$H0Zc`YSha$$$Z+frCRVVHhaKa6y3R4ys23+WOD7 zN4M)=IUge1u6l`0@1Jg{3v4s~MFk9?LA?RJqGCZhJ3aas4Zh+9b$&=WDMt`VlCOG; zTti6DsO;Mqt%I(|E^M6ytL?=X)$M=M)?AnR;m$vl{hRGI2vl#3+dUt<*m4(BO((mUpcZgXi?!yWo-HeNrr&RoD3NE zX4LsZ-DGL-(_DCwuQ9>m(t)ili<{SP56di91K`cQNBfE?!Ju-Y-5b2n)ZD^7dg3lB z>ruFvFU@&K31F^QfAo1!^0Po-@)vg@LIE;VK=YYBB1G~{!82tS8Nbm@9=!7()sI11 zCa?>r=Id2kvN4ufE=e2sssc{LDiTR$Z$H>9lAAy$NPqKsmbu?vTAt29nO5?X1G4Ma zo~KJ8?nsr8g3@A>^diQPshdO8QBXJ#pWsi zOug~FeoNFUaI!iFP>M}xSRf;c)BPuGXZ12-ZA;9`+9{33R7|YCa}_Sbt-)ZJx~&PlZIejqEy zVJvf^YW(`H`t+k^UbH0vGzqT{lFno_r9hnIjzY%;5(9ehPuPB@^Ud4I{VdeYia+T6 z2C=WZg}43asu+~r6_@L#|5vS2-=3@`$fJ$dOzFTM$#JnYo^kPsJH`5~nP>^RVJ&W8 zCAr2l!B7aY_Lvv@!C-r-7+J9Rpc(??6XwAF{lCs}c<(bze{Ecy*>0j?@;!q-?jE>q z?Z@26`BxJWh=K3L=2M7iJdq-y%`@AT36K`y-<+*D3zUfIAWvK6BPT;-3;lQ8%u_PqrU>a+ua!D3uI&KDsfTAnM=wz7iwLoLNG$n$q9nJw2(ZBW&p&$-z|=fx>( z8R3qd#S4y3PCoS(qGK;r-fSDn&D9*uRe3JPo=0UOv`xIa9cu!e@ei%*qm;cOr_2qw z&7O@en(nUQm;ER8u~j|$giQIPkpq;4VnL-IBV~!WgX8?};2m!W4yl)_m{;?Z%xdc9(FoDNL$q9OGji13^g(uz?gq)_+%U6C^ z=Lqk3=<3fH$gZC453+i6IBMz!>VKTRbV32l-i3a!DKbGJBN&nLqs$DFK!OI# zMQPZyO5?TeNK~(9=03K@2mtD!mPDdgFI@MC{)UKO2LnMGC5#u+Uq-`1p9z~px*=WJE~{yt=KZ~eBL zW`_SnUh&XxW@u>mV8Ln+(jRd_K@vNPbT#ASa8ti`IIT;P^BV;)x!8>*8-d}5cIP1q z7zXpg1x_iPBVxVdj6sxeVuq(_zSR(=k`Z8q^|gYD)N9sfxJy`)5!iRBDP3{o5i_xr z(KFfC(K8_gN(DAgD6=M%L`3x-3?_9^vL@f7@clCA?0!vdWnz=NM{~yk?;bv&u+h}8 zrc}y4d{@#S{tZ@cWDzrYCX-UMvzK$UuZI&_ELI(Fxu*d?7{1!xkDJ76X>Og{vS}jA z4q{%C05jZ9%>&!%{?;;F%CO49iaL1$b9Ff`nUJThkSYA_1oh?HQyuW{@01kZGKw<8 zS}={#^~j%gqgFWlnwZ$``S z)7YMw7O0oUeEDnkHhyPRJpJmy|3rVYqZbcjrsM&Qa>$d z4{l23HjQJbF0A)Z1opU9vjOp4d(qMUbsAgaa(;3NopM^TVDXl{g^WV&$?QuuAeTP`>r>WgvDXLv6lJKMu?ux z2jVCmJwQqlT3NQqS;PjZOHhT+pt9}&nNoY-cc0KFVWg*6Ni9E|Sj}MeR;jWDa2N=J zJx+qRD2zrBQ3PXColan=@azeQZ2k|&@BX9bn7tDIru6&AWoJ42*6NGOn(0*92-G@h zs}38kn&o34c#h@#M$#Pbj>S)w#Hr$^0 z0>|j_fRG^=2@icAQE{IW?^+~iyVxr{iW>uu=^5-=vbxTB&`12FxG000kV)1;-trOC z@Beu+afUUGmqnZl|GQQ?3Sd^gt6XlGc%r>_nk+|4Rhqrsh`y493MCwn@OyTAFo+^7 zeFhd~SGigG{XunIqc9N@3;HCCQh{g|71_xdfXD;Id~%oO_O{14iAj_*YSo4`6Y&}I zRq^SyGu{{@tj0!lENU0e4fv6(hU6v?iRe3u&^v9HBlw=iVMCn0tv`BCtKuy0dKU~v$pH;h@ zVqMunKeec1?Lgs(Rn&iYQ0*#&zu8iUS2A;~lN|Smkj%;^elNQWO*F|G zGI2hE_!aI1=3n}&6MpYZbv24AZPsuHUP-xq+xM5Nb)CJI@za@g$7!cg=k-f{bi=Sq z`cu6Qmy4H7;Cb6*k-Zj*85Rsy>PFfIuDgpVC)3)bXriCuFOhm71)`)I&?+j#xO}QA zNpmofAPAVEpCvc3L@I)z1lbnKv9Szqhk*9eWo6oYg8ciEtmlIXj?d4WOTNR2DYK;r zO^~u_YoDBnc=J?J@*eWmO%Yq+#Xm@{$D&qITjo9-UHrK*s|iF8p~O0{ZOk73=z)D{m&a$EpoMI)?|#7JEnbVJ^HQ5)K`vHxok7 zj*kK>hcEcfjya3hm-g*H=bkHqy1K}_U!Ds#H?ET(dEnp!Zpe=v%WW0{udECc{%F8F z3-Rh6!Nqp@Lr(vEdL5Ao{n;62RSv$bEC3s2k1Ltgy-AwGg`?+b zNQM}=oX_!}4ghx^Zf5$GD=r={OoY3I&B^wKkW@f`;m4EF&CIO-#zhJe69m!65X@wp zx+4LS4Rj+;R)4~~b<|HZ=*ElhfkLrSPyYH3k>iIa=$rgiW}lTcgdM9#@Ss2KIDB`0 zFCMVGy3>WZE%;FMpiMHmK;cI{EN|tVUUG!N%ZMvKK<~vr;Z*1RYz3+%#oNmy6 zm5*M-zxw%WJ~rrG5N0ChK@Ie<9Q&BXRvR`tZv^NVN9Fk@+yl z&G97uJibW#h&}d(3pcRa%5}ZtjQi{}liG5UqqZ}|hSbFpH&730o;Ev}I+ztCHk{Z6 z(K^YMtY?j9&8yB`=Q0MEc+?ii+sbF|C+(-Ef2TiouN_?173EIZC&z~!xgfifF}BZm zZAB~ip@m(*ZVl`K!!> z_3ZepDbN;})>?2>veo#l-(>RSVoCFM+Tx)`4#eBHD+}BlNc>G&Gi(rUAh*u*`v<*O z>GsVJ#n)Fx6wOHO$j*&zFzz|~hTVW@_=hvF!f#vU1<{-*rMsVaz74a_D^sVip3^{G zGWHRKyg2lmq;A{a-@5)X_^(#oaNMHT>^j4z+FxFPb}Zi8EVXZJUm$O&edD_fd(15B z1;f6}>3!s49ev!UOgT!ngMgkV?#miEwR5}>>_6g}+Moz#Wq-`I5%Y5d8pM&9!k&2! z$E80JBb@SvzE%)4jVM($}}d{#XFCjX4EELDezpK64GT zy_6X;)AC5==Gx+|B{!6o9m&LlY3c!(x--f=9%Y|TurDUxmHrou~z&o<-t-CHvAi3V|6CsVO2H?4}CE0B6R_eBhc;7E|+R z1NqQs;0H*QHtmr)ElJHiaU|dWIPMyh?0Pq6+G)ts$tb(FxL-Pl}4XXH@g+@C!CsR?%T{ zg+PV;kVKG(x|sS%E=Lir04h9EsB^u7n3D7I*?9^GO}{jn#+l^#L>lU~>V74Jlc~su zJfWsjYSr=Aw+o{VG1D6_qnoS#&{6+5TP>6>;2>xvHxw3yDhDbnQK}ki3^WRPnl*Q- zv`*KIduALDlXVoht2^SDqY~Mz9S)N8B$@ZBZBd6wh=wxMlqjAH85qVg<)1h4* z!uvg8o4<27g-79Zmsl!mzI;*nqYQu!EiVPehm=FV)YhWRoFtu^~03$ zt$kIsN@_u|8Bjx;-s)tGyIcm*{CIAUTa5`)NM1>gc5hn4Fu;3S0ZK}`>KIjxh|lsc zKwBVL>^}RHd>?*IltnMH8ZT^VI^Qg0QSPMuykwYIOrd2A@DcBzEN31+ z_qD(+tp*Zm#5bBkCv=!oENr-VW8nsP*&*d9&IOxTV8TpW23KR|7nuc-WGksyQLJPd z8wjx)?=t?7oU#N{QW8O?CPS+;4vo)5k20<_u1!j?q%nr8DoxmFOkNuNNt7`CD8sbL8!R__bJA2LedPcy}E-(EUZi1g| zV3g!cYZ>ZM&7If`(C7uYtMoA$jL9cUbXtU(C@iUnBr}x74oGPr9u5NN(gAm1FJj?! zMca*p5y_c7@dhX5>au!u1o|8Df2^>|M`}Z|kLu&pXkaFazH|*$B*wuEU}RI(nXKXo z@sQR~=iy|iimO1$6ouA6%?-Kap<5D_=33K7BuQX`8Z{CL=#!3`ergPLO5!KqQic|3 z;L><0H#W8vqSTWtCFd26Vw7?cOj0+0R|4}uy)qbe2k60qbx3NIxsuR87MTx=a=Oi zUh2;Beb4=cSl%I5`R*7SGm!u7@T?}K!!mI}F!>fO;d&Z@*K`jCid&a;0Tfowox>kp zxT4nam=7pc6M%foc`)imy!NwNmBvcmBsjH| z5%KYIyK%Z%+gX1tL*Qm@W#h={#zUlUWNTo|`E~qPH$4%-KTMn~d5DRhH zxgCs5I2DCO|2gTa#Y1G~}cpGzu|7+&okpAi2-+KP1*hYr`&1E}h2djTLY-C7pY-Mb1Y~$qk1<&|@0{@lO|AznH zx$dTK_l3>y59}`^P9X0R%s|b+z{$YCP5(bw za{twqu{AO`asU4_^KX{_yXpE`P)6qeJtAxCe+4BY!zpZQ==@hAC4_mMoz0Cn83BT9 zY#hSuv>eQg%(Tox3<9+5qRi~H!Xk_uA}oR&EKEX7{|NKHpZiy!Up*2wj!ybEhQ|Lp zXn&jgKM9`T|H23Q|H2vs|5@bU%JP5G^`CV8TN(JbjQ?|X{U=@jRtEkp)-wtUFH2^82{qCy#EhhHn#a9$*x~)_Ho;la(=nlY_JI zUo`v+_9JS^%u=FHncS|{?`=*69a(b?^h6RnJlZ$nMuYwL;4qDb?vCNwe9WL?feLJgWm>K zQQE(8sSc{r@V5aR9gK3`7r z&EI^2tuXs;a9 zjy0#KwXOeHaef@L(NuA{R6F(n_>|(*+7!KZCE;DFdQ_`$93@NE;8Ta3{ouH}9^1B5 zj&7-U*!z{VX{j3B)#PABHSAn1S!|hfKsP{EqxN)ljyu6L2!Z9L7kE@H>oh6R7-!gz=!OfjDUP2F_H#WXi`1?x z_x0qiV&AFWUHYh#kRg<(9`-@Jo_~8&37tqJdh(U8FF_ShJ-YV5B|)qf_&DDDF~A5s zPSPLF_1R+T;QOeIWQWC9#^Z#Ury_pcNf@IDv1t^;_ZBdg7K0taPpUi2&#uBeY>j*^ z1AG*Z1)?g*%}cMt-9zvsOqELOK)R~n=^)=5O(){cI3SvF7@OeEU*L8`JYMl`+T?9q zxj5>%Oa$k)rod}l+{QVdiqYoKn8o~HpgtHNTgHIVx0wiXXM{f(_EJZH$pt~{?Nf)1 zFo2?oE~+I_;G^Xx=}}_))%S#nN)|RI*6r?i>+^68RT5|eR0@h839{Q z$trmAnxpw@^0^|Wxi@(kTGJ51D&oAB$E7!V8H&pg-l?~G8Lr(B|17MtmaWY|_blXn z7G%TjTU!D8cVRi4z_2!IAMmf*kZdFI5E335Z?Akviy9Rq4RbC+1|3F zn0b5fsR0gl7*oSkkjNsdfTEYG;NCEa7)jdru&}zF_Z(vK?9_xOD zEr@K}ChO6fcGNcg8!aHNJ9O(Io(w3D1{fE^AZ`f6jO)|=TVBk-@cJ~O`piRmL__-A zWO~qK`T)G4T{qB}9Y*db@+*?;zFRl&=^c)aNc1ZroxW2yu$mnf=A|39E3(bLS2u{u z9iBH_{M^<=X0a<|uh5t)#t(nFYu_i>&jIDF=mW&Ao|LEZ_=ECKp056-)L_iiXj=y4 ztsUKqO7mgcC!o(ExhKT#Kc;WtpDih5QlEpDPspGB_%@Vrh=WJ!jg0vi3XzJUpZT>4 zV-lWkHm}7==~G zVyGJ4?BtP&6O$%C5pi7H$cSn4y;kPF!dQ#C$aTK&>_VxT6B8AdOjNiiTS30PedLD- z8*$_85U@=ZAPndcC6k5&BO%>H3PBovS zO8xS~%898BlTju??mkNI07CB9eQV;2kNBp06|YqtTtu&WWv>Aonq{qez+fs3n#ot! zyIN&08k$Ax>G4+6#(hUB#H}GOO(<9`16pss`b5LWgjj?j6it}1CZ4V6Ve{~*U(pN{ zZXIm$kb^p2R-MLama}Dh18NX4*5YK5M2rN6W0rLp{4XJrt}*Y+M7QisPj@V4@c zs)b^8=Kt6(n5^Y!?r~lQS~H}!3bU?dY3^@sL2K71KMU2aWpWWg$MNH-<$CDLJ_@d0 z#(veuKZ|&`hxEwh^4Q_Wi42&5>9oiAK8VPUBepG`8EI(89Nk~X4n>|1FUzls6XU}U zU$TRe89i@D2mS{(Gl*#x-*gv8D*(ohm##0U1uMXgk*=S#1qH-jj@$3l9^_(JH?wMz_R`ur&~^=Pn`}Llum$ti4%&M3njQH?&qfQ3kUjiGzZ-0S z0EYiIMo66-WC0^m0Rwo99ub)yfJ`46Z)ocp18)%74ac|N(G6+(4<&b$>9xuDb!MyA z+O-$Z^e$;fsM-}kr@z7tq-GbSBk1vpb+fnK4c}M9QQ!p z{viGlw`-8uYd_Iqs`vN_i-{5Bvybg!zKKQV_ea#_HSvEb?%ad*s>(C2)&NaOkpdwQ zsB{q263Mssy6n9xVlNUqG!_}BG@yZ8I5CI`5>kd1#HtVy63Q@K8pV+rm{4s+=0Lbq z!IHp1i3MA=7!@c;br^;bA{8vO&}SWr`mN{pcg;V{S-fkn^{m@(zw2A;-RIx+ji24O ze|+r4887d;@5GZXJ@5Hj4}E#=`BNX;_4b$UdilJ?&(8SR3xB-wy07d#wf-X)?3a4dBxPl^YX;x z+>H+}dg|U~|F++=lXEsH>4a08H2IgHJ9fX_FtuSVx;+c@A}i; z)f~A0mQ8zVN!fh--T%4r9p5C^XJUfN~#yz3{LpI-c)?{44u;66{? zck4b2Z_%Q)4Vvt8ue+kGg!|4v_JA!~;mUd;dHd!yv&)~e$~w7n`G17p zI^fKWrAVZ?;ZaBFV5JpUs-97IrOr zO`l)ARtvdR@_WSg=-#T&XsI1KIS}<3O*7rWQbnE1*(XB^Led?XJ zo&M6pqql6Har3qBSaJ7Li{5b7lGXpb;U7oh`5l}0y8p%Ne`D#=IRCX;307Y9gC8t< z-JdLb>)PLc_uB2>T(sNQmkskSePGdRk63ot7d~E~zU}W99enz-kH#}D`{Kr1H1QR) z?hSL7F8}Z+R?J$x?zEi;-T%(RS8upM)BO*gedLL=cmDQ!9zT2PZ+6aj`_d1t-L`t? z!RIbH?x_p!oZRcVsq=Tfaq+J7rN>^g_T76OwEnaG9(R6Z8tr>dqy4&nnMV7@X|x|T zjrPl@(caJcyT|wZ%!Zey(f+`;X|%s?8tq4J+j9G!zt-$AjrJ?2(Z2Ajx7_}l-+6qu zc=yu_9=hP_=JmHddcs5NzJKQKKfY)2?Q@@B@|GV@?Rm$BAN~8Riyk}wp^J9k^_oZS zT6xq3d(XM>vU3hz-t2bc(t}Q3^_L&L=CoCRyW`jAT>7KM-`;S}oXdCZas8vsQ5V1Y znf|leFF$9u;~pQ5+PMESN1eQV<2f_tKYqhiA6)$8{M)WrbMnN4r=0YuAKv`J)qi^P zd5`?VPo|E&a{i4gxBSl~?>pj;p1koVTmNaxOEdrc#qU3P#tHYI{of0&+-KdNeP!-n z|IU?9pYoxJ=Z0(U+O*>XXFYoLvCmITPHg$=UtM|pPrtKy#Wn5L#b17T_a7d7)^hY| z&RH|DV%E%2aYq{c_mzK58V<=Rg>*>yf3GI$V{7H#A*+9$*7W+FqDl)xYiW6qD>H7_ zhE~2*l@xvUq*>yv(v_9$!c;j~RYOF4y%~r-RvN|_y-`3ii&@^=!O&%pVZDZx? zYjdHlbCYB5cG?H8^Y(qL+qoG=tvzpObFHlzQm*s1P2a_;jJ6$(>h^2ZA9elOHaB&- zZ97l zsO?&Bmo5cstFHI7zR9&+2tF4==tJE{O3RiOM^;9N&8TjJ5QDXIh_SExBgACmImF!6 z{SjgZ&l?7-pB`7YX-L7wOBkA1ml4%2^;nB)gSy|eX%g#lW7J5k##NMIJq}__rY*+K z>k`)VqGo`#UsFSTCh6m6`<6bH}SS^vh=Tl>Y_*t!<87Q4C)vI?ovk~Vtkwo0RD zYe@>DuI`T%^wrV&c|nb3X}PWYD1|Q7<23c^q&jb(x_Zv!RuitW(+55Kx{Ta)rdOl6 zugl2&sIfBoCR!Q23a-lS+Gum3Yo)~Oy0U#Y#)YnRMs@Ab)#IS+G(+mVnu2xx^c~Yw zm#Zq94w1|l(1+2eF1L>%)McoPY&`dauS5MH!c}$d2dyxcmWh(`)!>H;vEp(&uHQ`?#yGm>7ajG=E5Sg8=yRy@wXm+;V z%dXekWnJ!2_hr+JM)kN-nm+PdT}t}`rSflxqiP=T35frDb41u(uR6&HN~)+ zTS{wV-BwMb#j~z+ldMhk)>*HAdR{-O7^<|Pes@%{_I{u=ygBAOGqOuHYn7Jk zcP^#%^}JNtP|s<})rc7{SDmdlX!AA7dsFRy=&c&k0;EMqOOTc!t%I~4(%e64#7nEQ zSmtS=SZ^FW8*Pu&i5$meuB(4qH9 zvlCZ64RmOnx*h1yyP4a84!!HS9q5q%TieN5gEZICYW{j&*U@UdcRSb7%71e^*U@Sn zay!r=U()Qf)_EG}Xh25;I`q!v&jTF|=x9Jk13JVCD?>h_r-2T=gSZ{&XhDY<>Ulwj zd>6L^9panW$^Y;)(4qH4w*wv8L2^6LAwSCPK!@JB%uYUpr-2UbQMeuG5cAv)bZEcH z?Lde8OSc0ZdQUVvy^DGp=+OIt+kp=GU~UIGv|r+Opab>^Tj05NVElQ&^H%R`R<7P7 zJPmZ{9oX$aM+P0*6STa*^A>on9U{mJI)LZJzw~lJ2k^YryS(QG9l-NezJcWhp0~hr zIkAuzbO6ugh(cb_(Sr`)c?&#mwI5;Hfak6DuiOrFXurhmK!^4*-OhE$@ix0K^8P6M zIrZ~`_H8}Qbp-jLZs$6*$pdz-Loe=b2RtwSpq1Nz4&ZqJo(JH0ke}yefDYh!0G#!1Dk+FZ(Z67vOo&o{Zap4(&y{9q0g_>jx>%3p@|N^8o&N0G?};8_ED3 z!1Dk+58$5%;CTR^2jIDWX!802&x7`Otet`90eBw3KM%n306Z`I-c~N~JOIxF@Vxx? zn!AjaRofrSrg9-JdeP0{jv*rK?m?$zxG02&;dM;z;pd7 z?9T(9NAS;M?Tc&szR_Op*zX_uBLdI$LpGEPI%;;S44u~SGJxmhH(^^Nfam4+lrg(f zhW(Z=9pImr-xkO67QNt~N8ot`o=4z$1fECWxqjsHx&Y60I0fuL2k<-s&m-`>oE5Tm z0iH+Tc?6!9b29!s&;dM;!1D+^kHGT?JTK=3tS-QF-E;vv&;kB=Ia}dn!2E#y_5?gn zz;m6XurdFdNUn^8`Fk z!1Dw=Pr&m8{&_h&=yic{1w2o{^8`Fk!1Hpp%*q9xC-Bb`@H_#}b;!`m0G=n{c>yJ_}3;CTl;FL#nWFZ2iSyaS$h!1E4x-T}`$;CTl;FL!0E z&fuSSHRCnSI^cN+Jnw+#9q_yZo_D}=U6%1W1J66)xo$Z@Ugvqa+hXkkJl7>1w*#J+ zwaK0bJnw+#9q_yZo_D}=U08#1VSWJ5JK%W-JTLdBO&joBmzTf}`U8000na<&dAajb z*F_ifAkF)u2cGx9^KviC%Wxe%@Vwl!@x0z2J@C8-|GcjmuX))6&vhZu%LSh6k}=r% z{Llq6umc^y^B#C!?)+H0)Qm6Mfag8%ya%4^HY1b)I>0~I4M)#g`{IS&n!l>%*gHt! zxoHEQ_rUWW{PP}o-UH9e-E}J$c&jj?o!1Eq>-UH8j;CT-`?}6v#p1<`u@Vp0}m;3Ra7v=}> zya%55!1Eq>-UH9e9b>Bt@Vp0}>tZV81s%Zia=+Wk1)lf7bHz=Eyr2Vk-UH8j;CT-` z?_s}P7jeBV!1Eq>-q-9d^H=q=`3pSnYoA@2bR!$;0{sCzAAsir@LWMntPEW|hBWVw z0eC)ue?9=u2jIB^z<9a9^8t810M7^Dxq@Cm8U9|Pi}YaU{V@Q~2k_4a;Q0VNAAsjN zEaY_oo)5rt1*n0%pacAK9U$_&z;j(d2Rj&7z;pf31bLx9fae47d;p%87zXv)q$mcE z20Fk$S7Zao3p&6*AHY8!YIf^-_ek}t*Np*qUg8>jyk9aScod@La(= zzz+HY{PO{Lt{@QpJmC2NJRgAP1Ni3y@VxNS^a9TZ;Q0VNAAsir@O%KC58$7dcuQ74 z;Q0VNAAsir_~-gcOI?P7ZCHOO&DJZW*|<`g&2y!h4yD<;t2FBmrP;Vrn!T4O4Rkoq zn-T}8YEz|w4(GY-K!^M1vI8By-!41Q;XGHM6X*};d5L7>+MMUI10BwD*?|uC&t(TX zoaYM80y>=MvI8B?bJ>B8n%#wOnu8VJlo!U8^IUc?uAJuzG6Unvc`iGcAMT&a4(5mR zTy~(NX1pfv$a$_XG0-2*bJ;|k8Ee=a*1SI%<<^8p>s^AhyO=ZEuL zcA&#~E<4cSJeM8laGomw5$JH9%MNrn&t(TXoaeFw9qymY4s*P#Uv z>|BQ?E7-XX4I;2}9TMkuz;lJb0z1$FJa2&K4e-3gfUVyd8sNDibb%e{0G=yqm*=h7 zEtYxALcP%d&$S%{&jTI6b4B-pyr2Vku86sw7kJ(P&lMaE@`8?<@#0$pJa2&K4e-1H zp6gpIUKikb=?@zl!1D%p-T==V;CYFi>SaKG0M8X%&hrA#8{m0~vuNc4&l})*iNEW4 zK?m?0;=^eQf)3z$iAQVY0?!p-5A0xm0M8rXc>_F$_;6Y_KnL)=0iHL&^9Fcc?i5-Z z0M8rXc>_EzaVqV3!1D%p-T==V;CTZ)Z-D0tZVh#TaRoeARBg`-JlAbTu!C_0JXb_+ z$P4`eJa2&K`i!bQ58}f$`g|zZxsDci4)NjiJl6s7;biCi0rBBv2ReY~E%3Yr|GWjB z>swjg2Eg+YH?$tlE%02C)WHsP0MAPdaVrD-^Ae-h?LY_cyu`rvywD%Ob47LcyukAo zc&@*OZnh4}$Ihxl;iP1c_WJcsyj$_qMx=Pmf>C04t& zDe$~}Gs5h^KZp2m4aA328q5#iImCxkUKm%vbBGV8yr2Vk4)NhikY8^D;5o#HQ(hQX zz;lQXr@Sz(fafLVfb|jZ9OA<%STXbm@Vo_{mw5VKE{rSSxjv?0c_BWW0w??YfcS8- za~%Qp+aW%j^12R)4<|eC4~P#Z*U$R{;={?#$5jBHLwq>p^>GF9;biCi5rF3qA5Nbg z0Uf~e06Y)C^8o(2KCIy50C*1Z;Z#5958!zKo%x#G|t;GgTGFJ5QhxxRP;cF-Td z^8h@D_;A`PfcXJDhxl;H3p#-3`Z9{^0Gtd4V>8|c!1Dn9ImCz4b`$gm z@Eqd9DKF>%o%dew8iM_6~u>=osTPh0LjKK#D`N}?+=I% zCp+f{#D~)sXw^sBXNCB1O7s4J_;9i_9i_X+wP_rb`|M-mpwL|V0##aD*7mV9IXEM& zFLhcuYhR_MR&&2j(-(%u)3o4}cb_pkr48bFm8Pp{RT)9IQtRg_C|%jZ8_TP-68mI4 zO;JuXr|Yy{dni?!J{?lERryquxHWF4wE8!2*_HR4+RnZorNC6>eQn%MY2t64R^m~N zr71X4d7rG(%Ez57t-MS9+-~ifrKf#(V$H0X`iANUT7SpI!$SLsg$9BAvhYr&4; H|LXp~a@%}t literal 0 HcmV?d00001 diff --git a/api-specs/include/psa/crypto.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto.h similarity index 100% rename from api-specs/include/psa/crypto.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto.h diff --git a/api-specs/include/psa/crypto_extra.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_extra.h similarity index 100% rename from api-specs/include/psa/crypto_extra.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_extra.h diff --git a/api-specs/include/psa/crypto_platform.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_platform.h similarity index 100% rename from api-specs/include/psa/crypto_platform.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_platform.h diff --git a/api-specs/include/psa/crypto_sizes.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_sizes.h similarity index 100% rename from api-specs/include/psa/crypto_sizes.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_sizes.h diff --git a/api-specs/include/psa/crypto_struct.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_struct.h similarity index 100% rename from api-specs/include/psa/crypto_struct.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_struct.h diff --git a/api-specs/include/psa/crypto_types.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_types.h similarity index 100% rename from api-specs/include/psa/crypto_types.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_types.h diff --git a/api-specs/include/psa/crypto_values.h b/api-specs/crypto/v1.0-beta1/include/psa/crypto_values.h similarity index 100% rename from api-specs/include/psa/crypto_values.h rename to api-specs/crypto/v1.0-beta1/include/psa/crypto_values.h diff --git a/api-specs/crypto/v1.0-beta3/doc/IHI0086-PSA_Cryptography_API-1.0.0-beta.3.pdf b/api-specs/crypto/v1.0-beta3/doc/IHI0086-PSA_Cryptography_API-1.0.0-beta.3.pdf new file mode 100755 index 0000000000000000000000000000000000000000..ada13ba86a531756010969c8a88c6dbac32d2eb5 GIT binary patch literal 1965216 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%0D>gHTc=Xx8X`pzwpo7j`}R6oSM2-QMQnnbZo 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

Dl1wT#vio!i48Odp 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

}A!xdan}ztY82 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 literal 0 HcmV?d00001 diff --git a/api-specs/include/psa/internal_trusted_storage.h b/api-specs/storage/v1.0-beta2/include/psa/internal_trusted_storage.h similarity index 100% rename from api-specs/include/psa/internal_trusted_storage.h rename to api-specs/storage/v1.0-beta2/include/psa/internal_trusted_storage.h diff --git a/api-specs/include/psa/protected_storage.h b/api-specs/storage/v1.0-beta2/include/psa/protected_storage.h similarity index 100% rename from api-specs/include/psa/protected_storage.h rename to api-specs/storage/v1.0-beta2/include/psa/protected_storage.h diff --git a/api-specs/storage/v1.0/doc/IHI0087-PSA_Storage_API-1.0.0.pdf b/api-specs/storage/v1.0/doc/IHI0087-PSA_Storage_API-1.0.0.pdf new file mode 100755 index 0000000000000000000000000000000000000000..8153e080489eadebe7ca83fbb6b596bd3be814fc GIT binary patch literal 511152 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±A)=P6x}BhJzieK%5ykKSyo@JYS9{G=0)@ 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

ZguhQ3sLv5Ull$ZXT@N4F#I`l}%F^ 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 z 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 I|0?_c0}sNJumAu6 literal 0 HcmV?d00001 diff --git a/api-tests/README.md b/api-tests/README.md index cb664216..2b652a93 100644 --- a/api-tests/README.md +++ b/api-tests/README.md @@ -24,12 +24,12 @@ The test suite for this specification is located in the **dev_apis** directory o 1. Developer APIs test list: -| Test Category | Specification Version | Header File | -|--------------------------|--------------------------------------|-----------------------------------------------------------------------------------| -| Crypto | PSA Crypto API 1.0-Beta([mbedcrypto-1.0.0](https://github.com/ARMmbed/mbed-crypto/tree/mbedcrypto-1.0.0)) | [crypto.h](../api-specs/include/psa/crypto.h) | -| Protected Storage | PSA Protected Storage API 1.0-Beta2 | [protected_storage.h](../api-specs/include/psa/protected_storage.h) | -| Internal Trusted Storage | PSA Internal Trusted Storage API 1.0-Beta2 | [internal_trusted_storage.h](../api-specs/include/psa/internal_trusted_storage.h) | -| Initial Attestation | PSA Initial Attestation API 1.0-Beta0 | [initial_attestation.h](../api-specs/include/psa/initial_attestation.h) | +| Test Category | Specification Version | +|--------------------------|--------------------------------------| +| Crypto | [PSA Crypto API 1.0-Beta1](../api-specs/crypto/v1.0-beta1/) | +| Protected Storage | [PSA Protected Storage API 1.0-Beta2](../api-specs/storage/v1.0-beta2/) | +| Internal Trusted Storage | [PSA Internal Trusted Storage API 1.0-Beta2](../api-specs/storage/v1.0-beta2/) | +| Initial Attestation | [PSA Initial Attestation API 1.0-Beta0](../api-specs/attestation/v1.0-beta0/) | 2. PSA-FF tests that are written for version 1.0-Beta1 of the PSA FF specification. From 892382439d261a27e09252dd26bbdb39d15e904c Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Thu, 11 Jul 2019 14:59:18 +0530 Subject: [PATCH 03/54] Uniquify test_entry files --- api-tests/dev_apis/crypto/test_c001/source.mk | 2 +- .../crypto/test_c001/{test_entry.c => test_entry_c001.c} | 0 api-tests/dev_apis/crypto/test_c002/source.mk | 2 +- .../crypto/test_c002/{test_entry.c => test_entry_c002.c} | 0 api-tests/dev_apis/crypto/test_c003/source.mk | 2 +- .../crypto/test_c003/{test_entry.c => test_entry_c003.c} | 0 api-tests/dev_apis/crypto/test_c004/source.mk | 2 +- .../crypto/test_c004/{test_entry.c => test_entry_c004.c} | 0 api-tests/dev_apis/crypto/test_c005/source.mk | 2 +- .../crypto/test_c005/{test_entry.c => test_entry_c005.c} | 0 api-tests/dev_apis/crypto/test_c006/source.mk | 2 +- .../crypto/test_c006/{test_entry.c => test_entry_c006.c} | 0 api-tests/dev_apis/crypto/test_c007/source.mk | 2 +- .../crypto/test_c007/{test_entry.c => test_entry_c007.c} | 0 api-tests/dev_apis/crypto/test_c008/source.mk | 2 +- .../crypto/test_c008/{test_entry.c => test_entry_c008.c} | 0 api-tests/dev_apis/crypto/test_c009/source.mk | 2 +- .../crypto/test_c009/{test_entry.c => test_entry_c009.c} | 0 api-tests/dev_apis/crypto/test_c010/source.mk | 2 +- .../crypto/test_c010/{test_entry.c => test_entry_c010.c} | 0 api-tests/dev_apis/crypto/test_c011/source.mk | 2 +- .../crypto/test_c011/{test_entry.c => test_entry_c011.c} | 0 api-tests/dev_apis/crypto/test_c012/source.mk | 2 +- .../crypto/test_c012/{test_entry.c => test_entry_c012.c} | 0 api-tests/dev_apis/crypto/test_c013/source.mk | 2 +- .../crypto/test_c013/{test_entry.c => test_entry_c013.c} | 0 api-tests/dev_apis/crypto/test_c014/source.mk | 2 +- .../crypto/test_c014/{test_entry.c => test_entry_c014.c} | 0 api-tests/dev_apis/crypto/test_c015/source.mk | 2 +- .../crypto/test_c015/{test_entry.c => test_entry_c015.c} | 0 api-tests/dev_apis/crypto/test_c016/source.mk | 2 +- .../crypto/test_c016/{test_entry.c => test_entry_c016.c} | 0 api-tests/dev_apis/crypto/test_c017/source.mk | 2 +- .../crypto/test_c017/{test_entry.c => test_entry_c017.c} | 0 api-tests/dev_apis/crypto/test_c018/source.mk | 2 +- .../crypto/test_c018/{test_entry.c => test_entry_c018.c} | 0 api-tests/dev_apis/crypto/test_c019/source.mk | 2 +- .../crypto/test_c019/{test_entry.c => test_entry_c019.c} | 0 api-tests/dev_apis/crypto/test_c020/source.mk | 2 +- .../crypto/test_c020/{test_entry.c => test_entry_c020.c} | 0 api-tests/dev_apis/crypto/test_c021/source.mk | 2 +- .../crypto/test_c021/{test_entry.c => test_entry_c021.c} | 0 api-tests/dev_apis/crypto/test_c022/source.mk | 2 +- .../crypto/test_c022/{test_entry.c => test_entry_c022.c} | 0 api-tests/dev_apis/crypto/test_c023/source.mk | 2 +- .../crypto/test_c023/{test_entry.c => test_entry_c023.c} | 0 api-tests/dev_apis/crypto/test_c024/source.mk | 2 +- .../crypto/test_c024/{test_entry.c => test_entry_c024.c} | 0 api-tests/dev_apis/crypto/test_c025/source.mk | 2 +- .../crypto/test_c025/{test_entry.c => test_entry_c025.c} | 0 api-tests/dev_apis/crypto/test_c026/source.mk | 2 +- .../crypto/test_c026/{test_entry.c => test_entry_c026.c} | 0 api-tests/dev_apis/crypto/test_c027/source.mk | 2 +- .../crypto/test_c027/{test_entry.c => test_entry_c027.c} | 0 api-tests/dev_apis/crypto/test_c028/source.mk | 2 +- .../crypto/test_c028/{test_entry.c => test_entry_c028.c} | 0 api-tests/dev_apis/crypto/test_c029/source.mk | 2 +- .../crypto/test_c029/{test_entry.c => test_entry_c029.c} | 0 api-tests/dev_apis/crypto/test_c030/source.mk | 2 +- .../crypto/test_c030/{test_entry.c => test_entry_c030.c} | 0 api-tests/dev_apis/crypto/test_c031/source.mk | 2 +- .../crypto/test_c031/{test_entry.c => test_entry_c031.c} | 0 api-tests/dev_apis/crypto/test_c032/source.mk | 2 +- .../crypto/test_c032/{test_entry.c => test_entry_c032.c} | 0 api-tests/dev_apis/crypto/test_c033/source.mk | 2 +- .../crypto/test_c033/{test_entry.c => test_entry_c033.c} | 0 api-tests/dev_apis/crypto/test_c034/source.mk | 2 +- .../crypto/test_c034/{test_entry.c => test_entry_c034.c} | 0 api-tests/dev_apis/crypto/test_c035/source.mk | 2 +- .../crypto/test_c035/{test_entry.c => test_entry_c035.c} | 0 api-tests/dev_apis/crypto/test_c036/source.mk | 2 +- .../crypto/test_c036/{test_entry.c => test_entry_c036.c} | 0 api-tests/dev_apis/crypto/test_c037/source.mk | 2 +- .../crypto/test_c037/{test_entry.c => test_entry_c037.c} | 0 api-tests/dev_apis/crypto/test_c038/source.mk | 2 +- .../crypto/test_c038/{test_entry.c => test_entry_c038.c} | 0 api-tests/dev_apis/crypto/test_c039/source.mk | 2 +- .../crypto/test_c039/{test_entry.c => test_entry_c039.c} | 0 api-tests/dev_apis/crypto/test_c040/source.mk | 2 +- .../crypto/test_c040/{test_entry.c => test_entry_c040.c} | 0 api-tests/dev_apis/crypto/test_c041/source.mk | 2 +- .../crypto/test_c041/{test_entry.c => test_entry_c041.c} | 0 api-tests/dev_apis/crypto/test_c042/source.mk | 2 +- .../crypto/test_c042/{test_entry.c => test_entry_c042.c} | 0 api-tests/dev_apis/crypto/test_c043/source.mk | 2 +- .../crypto/test_c043/{test_entry.c => test_entry_c043.c} | 0 api-tests/dev_apis/crypto/test_c044/source.mk | 2 +- .../crypto/test_c044/{test_entry.c => test_entry_c044.c} | 0 api-tests/dev_apis/initial_attestation/test_a001/source.mk | 2 +- .../test_a001/{test_entry.c => test_entry_a001.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk | 2 +- .../test_s001/{test_entry.c => test_entry_s001.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk | 2 +- .../test_s002/{test_entry.c => test_entry_s002.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk | 2 +- .../test_s003/{test_entry.c => test_entry_s003.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk | 2 +- .../test_s004/{test_entry.c => test_entry_s004.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk | 2 +- .../test_s005/{test_entry.c => test_entry_s005.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk | 2 +- .../test_s006/{test_entry.c => test_entry_s006.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk | 2 +- .../test_s007/{test_entry.c => test_entry_s007.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk | 2 +- .../test_s008/{test_entry.c => test_entry_s008.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk | 2 +- .../test_s009/{test_entry.c => test_entry_s009.c} | 0 api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk | 2 +- .../test_s010/{test_entry.c => test_entry_s010.c} | 0 api-tests/dev_apis/protected_storage/test_p011/source.mk | 2 +- .../test_p011/{test_entry.c => test_entry_p011.c} | 0 api-tests/dev_apis/protected_storage/test_p012/source.mk | 2 +- .../test_p012/{test_entry.c => test_entry_p012.c} | 0 api-tests/dev_apis/protected_storage/test_p013/source.mk | 2 +- .../test_p013/{test_entry.c => test_entry_p013.c} | 0 api-tests/dev_apis/protected_storage/test_p014/source.mk | 2 +- .../test_p014/{test_entry.c => test_entry_p014.c} | 0 api-tests/dev_apis/protected_storage/test_p015/source.mk | 2 +- .../test_p015/{test_entry.c => test_entry_p015.c} | 0 api-tests/dev_apis/protected_storage/test_s001/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s002/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s003/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s004/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s005/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s006/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s007/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s008/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s009/source.mk | 2 +- api-tests/dev_apis/protected_storage/test_s010/source.mk | 2 +- api-tests/ff/ipc/test_i001/source.mk | 2 +- api-tests/ff/ipc/test_i001/{test_entry.c => test_entry_i001.c} | 0 api-tests/ff/ipc/test_i002/source.mk | 2 +- api-tests/ff/ipc/test_i002/{test_entry.c => test_entry_i002.c} | 0 api-tests/ff/ipc/test_i003/source.mk | 2 +- api-tests/ff/ipc/test_i003/{test_entry.c => test_entry_i003.c} | 0 api-tests/ff/ipc/test_i004/source.mk | 2 +- api-tests/ff/ipc/test_i004/{test_entry.c => test_entry_i004.c} | 0 api-tests/ff/ipc/test_i005/source.mk | 2 +- api-tests/ff/ipc/test_i005/{test_entry.c => test_entry_i005.c} | 0 api-tests/ff/ipc/test_i006/source.mk | 2 +- api-tests/ff/ipc/test_i006/{test_entry.c => test_entry_i006.c} | 0 api-tests/ff/ipc/test_i007/source.mk | 2 +- api-tests/ff/ipc/test_i007/{test_entry.c => test_entry_i007.c} | 0 api-tests/ff/ipc/test_i008/source.mk | 2 +- api-tests/ff/ipc/test_i008/{test_entry.c => test_entry_i008.c} | 0 api-tests/ff/ipc/test_i009/source.mk | 2 +- api-tests/ff/ipc/test_i009/{test_entry.c => test_entry_i009.c} | 0 api-tests/ff/ipc/test_i010/source.mk | 2 +- api-tests/ff/ipc/test_i010/{test_entry.c => test_entry_i010.c} | 0 api-tests/ff/ipc/test_i011/source.mk | 2 +- api-tests/ff/ipc/test_i011/{test_entry.c => test_entry_i011.c} | 0 api-tests/ff/ipc/test_i012/source.mk | 2 +- api-tests/ff/ipc/test_i012/{test_entry.c => test_entry_i012.c} | 0 api-tests/ff/ipc/test_i013/source.mk | 2 +- api-tests/ff/ipc/test_i013/{test_entry.c => test_entry_i013.c} | 0 api-tests/ff/ipc/test_i014/source.mk | 2 +- api-tests/ff/ipc/test_i014/{test_entry.c => test_entry_i014.c} | 0 api-tests/ff/ipc/test_i015/source.mk | 2 +- api-tests/ff/ipc/test_i015/{test_entry.c => test_entry_i015.c} | 0 api-tests/ff/ipc/test_i016/source.mk | 2 +- api-tests/ff/ipc/test_i016/{test_entry.c => test_entry_i016.c} | 0 api-tests/ff/ipc/test_i017/source.mk | 2 +- api-tests/ff/ipc/test_i017/{test_entry.c => test_entry_i017.c} | 0 api-tests/ff/ipc/test_i018/source.mk | 2 +- api-tests/ff/ipc/test_i018/{test_entry.c => test_entry_i018.c} | 0 api-tests/ff/ipc/test_i019/source.mk | 2 +- api-tests/ff/ipc/test_i019/{test_entry.c => test_entry_i019.c} | 0 api-tests/ff/ipc/test_i020/source.mk | 2 +- api-tests/ff/ipc/test_i020/{test_entry.c => test_entry_i020.c} | 0 api-tests/ff/ipc/test_i021/source.mk | 2 +- api-tests/ff/ipc/test_i021/{test_entry.c => test_entry_i021.c} | 0 api-tests/ff/ipc/test_i022/source.mk | 2 +- api-tests/ff/ipc/test_i022/{test_entry.c => test_entry_i022.c} | 0 api-tests/ff/ipc/test_i023/source.mk | 2 +- api-tests/ff/ipc/test_i023/{test_entry.c => test_entry_i023.c} | 0 api-tests/ff/ipc/test_i024/source.mk | 2 +- api-tests/ff/ipc/test_i024/{test_entry.c => test_entry_i024.c} | 0 api-tests/ff/ipc/test_i025/source.mk | 2 +- api-tests/ff/ipc/test_i025/{test_entry.c => test_entry_i025.c} | 0 api-tests/ff/ipc/test_i026/source.mk | 2 +- api-tests/ff/ipc/test_i026/{test_entry.c => test_entry_i026.c} | 0 api-tests/ff/ipc/test_i027/source.mk | 2 +- api-tests/ff/ipc/test_i027/{test_entry.c => test_entry_i027.c} | 0 api-tests/ff/ipc/test_i028/source.mk | 2 +- api-tests/ff/ipc/test_i028/{test_entry.c => test_entry_i028.c} | 0 api-tests/ff/ipc/test_i029/source.mk | 2 +- api-tests/ff/ipc/test_i029/{test_entry.c => test_entry_i029.c} | 0 api-tests/ff/ipc/test_i030/source.mk | 2 +- api-tests/ff/ipc/test_i030/{test_entry.c => test_entry_i030.c} | 0 api-tests/ff/ipc/test_i031/source.mk | 2 +- api-tests/ff/ipc/test_i031/{test_entry.c => test_entry_i031.c} | 0 api-tests/ff/ipc/test_i032/source.mk | 2 +- api-tests/ff/ipc/test_i032/{test_entry.c => test_entry_i032.c} | 0 api-tests/ff/ipc/test_i033/source.mk | 2 +- api-tests/ff/ipc/test_i033/{test_entry.c => test_entry_i033.c} | 0 api-tests/ff/ipc/test_i034/source.mk | 2 +- api-tests/ff/ipc/test_i034/{test_entry.c => test_entry_i034.c} | 0 api-tests/ff/ipc/test_i035/source.mk | 2 +- api-tests/ff/ipc/test_i035/{test_entry.c => test_entry_i035.c} | 0 api-tests/ff/ipc/test_i036/source.mk | 2 +- api-tests/ff/ipc/test_i036/{test_entry.c => test_entry_i036.c} | 0 api-tests/ff/ipc/test_i037/source.mk | 2 +- api-tests/ff/ipc/test_i037/{test_entry.c => test_entry_i037.c} | 0 api-tests/ff/ipc/test_i038/source.mk | 2 +- api-tests/ff/ipc/test_i038/{test_entry.c => test_entry_i038.c} | 0 api-tests/ff/ipc/test_i039/source.mk | 2 +- api-tests/ff/ipc/test_i039/{test_entry.c => test_entry_i039.c} | 0 api-tests/ff/ipc/test_i040/source.mk | 2 +- api-tests/ff/ipc/test_i040/{test_entry.c => test_entry_i040.c} | 0 api-tests/ff/ipc/test_i041/source.mk | 2 +- api-tests/ff/ipc/test_i041/{test_entry.c => test_entry_i041.c} | 0 api-tests/ff/ipc/test_i042/source.mk | 2 +- api-tests/ff/ipc/test_i042/{test_entry.c => test_entry_i042.c} | 0 api-tests/ff/ipc/test_i043/source.mk | 2 +- api-tests/ff/ipc/test_i043/{test_entry.c => test_entry_i043.c} | 0 api-tests/ff/ipc/test_i044/source.mk | 2 +- api-tests/ff/ipc/test_i044/{test_entry.c => test_entry_i044.c} | 0 api-tests/ff/ipc/test_i045/source.mk | 2 +- api-tests/ff/ipc/test_i045/{test_entry.c => test_entry_i045.c} | 0 api-tests/ff/ipc/test_i046/source.mk | 2 +- api-tests/ff/ipc/test_i046/{test_entry.c => test_entry_i046.c} | 0 api-tests/ff/ipc/test_i047/source.mk | 2 +- api-tests/ff/ipc/test_i047/{test_entry.c => test_entry_i047.c} | 0 api-tests/ff/ipc/test_i048/source.mk | 2 +- api-tests/ff/ipc/test_i048/{test_entry.c => test_entry_i048.c} | 0 api-tests/ff/ipc/test_i049/source.mk | 2 +- api-tests/ff/ipc/test_i049/{test_entry.c => test_entry_i049.c} | 0 api-tests/ff/ipc/test_i050/source.mk | 2 +- api-tests/ff/ipc/test_i050/{test_entry.c => test_entry_i050.c} | 0 api-tests/ff/ipc/test_i051/source.mk | 2 +- api-tests/ff/ipc/test_i051/{test_entry.c => test_entry_i051.c} | 0 api-tests/ff/ipc/test_i052/source.mk | 2 +- api-tests/ff/ipc/test_i052/{test_entry.c => test_entry_i052.c} | 0 api-tests/ff/ipc/test_i053/source.mk | 2 +- api-tests/ff/ipc/test_i053/{test_entry.c => test_entry_i053.c} | 0 api-tests/ff/ipc/test_i054/source.mk | 2 +- api-tests/ff/ipc/test_i054/{test_entry.c => test_entry_i054.c} | 0 api-tests/ff/ipc/test_i055/source.mk | 2 +- api-tests/ff/ipc/test_i055/{test_entry.c => test_entry_i055.c} | 0 api-tests/ff/ipc/test_i056/source.mk | 2 +- api-tests/ff/ipc/test_i056/{test_entry.c => test_entry_i056.c} | 0 api-tests/ff/ipc/test_i057/source.mk | 2 +- api-tests/ff/ipc/test_i057/{test_entry.c => test_entry_i057.c} | 0 api-tests/ff/ipc/test_i058/source.mk | 2 +- api-tests/ff/ipc/test_i058/{test_entry.c => test_entry_i058.c} | 0 api-tests/ff/ipc/test_i059/source.mk | 2 +- api-tests/ff/ipc/test_i059/{test_entry.c => test_entry_i059.c} | 0 api-tests/ff/ipc/test_i060/source.mk | 2 +- api-tests/ff/ipc/test_i060/{test_entry.c => test_entry_i060.c} | 0 api-tests/ff/ipc/test_i061/source.mk | 2 +- api-tests/ff/ipc/test_i061/{test_entry.c => test_entry_i061.c} | 0 api-tests/ff/ipc/test_i062/source.mk | 2 +- api-tests/ff/ipc/test_i062/{test_entry.c => test_entry_i062.c} | 0 api-tests/ff/ipc/test_i063/source.mk | 2 +- api-tests/ff/ipc/test_i063/{test_entry.c => test_entry_i063.c} | 0 api-tests/ff/ipc/test_i064/source.mk | 2 +- api-tests/ff/ipc/test_i064/{test_entry.c => test_entry_i064.c} | 0 api-tests/ff/ipc/test_i065/source.mk | 2 +- api-tests/ff/ipc/test_i065/{test_entry.c => test_entry_i065.c} | 0 api-tests/ff/ipc/test_i066/source.mk | 2 +- api-tests/ff/ipc/test_i066/{test_entry.c => test_entry_i066.c} | 0 api-tests/ff/ipc/test_i067/source.mk | 2 +- api-tests/ff/ipc/test_i067/{test_entry.c => test_entry_i067.c} | 0 api-tests/ff/ipc/test_i068/source.mk | 2 +- api-tests/ff/ipc/test_i068/{test_entry.c => test_entry_i068.c} | 0 api-tests/ff/ipc/test_i069/source.mk | 2 +- api-tests/ff/ipc/test_i069/{test_entry.c => test_entry_i069.c} | 0 api-tests/ff/ipc/test_i070/source.mk | 2 +- api-tests/ff/ipc/test_i070/{test_entry.c => test_entry_i070.c} | 0 api-tests/ff/ipc/test_i071/source.mk | 2 +- api-tests/ff/ipc/test_i071/{test_entry.c => test_entry_i071.c} | 0 api-tests/ff/ipc/test_i072/source.mk | 2 +- api-tests/ff/ipc/test_i072/{test_entry.c => test_entry_i072.c} | 0 api-tests/ff/ipc/test_i073/source.mk | 2 +- api-tests/ff/ipc/test_i073/{test_entry.c => test_entry_i073.c} | 0 api-tests/ff/ipc/test_i074/source.mk | 2 +- api-tests/ff/ipc/test_i074/{test_entry.c => test_entry_i074.c} | 0 api-tests/ff/ipc/test_i075/source.mk | 2 +- api-tests/ff/ipc/test_i075/{test_entry.c => test_entry_i075.c} | 0 api-tests/ff/ipc/test_i076/source.mk | 2 +- api-tests/ff/ipc/test_i076/{test_entry.c => test_entry_i076.c} | 0 api-tests/ff/ipc/test_i077/source.mk | 2 +- api-tests/ff/ipc/test_i077/{test_entry.c => test_entry_i077.c} | 0 api-tests/ff/ipc/test_i078/source.mk | 2 +- api-tests/ff/ipc/test_i078/{test_entry.c => test_entry_i078.c} | 0 api-tests/ff/ipc/test_i079/source.mk | 2 +- api-tests/ff/ipc/test_i079/{test_entry.c => test_entry_i079.c} | 0 api-tests/ff/ipc/test_i080/source.mk | 2 +- api-tests/ff/ipc/test_i080/{test_entry.c => test_entry_i080.c} | 0 api-tests/ff/ipc/test_i081/source.mk | 2 +- api-tests/ff/ipc/test_i081/{test_entry.c => test_entry_i081.c} | 0 api-tests/ff/ipc/test_i082/source.mk | 2 +- api-tests/ff/ipc/test_i082/{test_entry.c => test_entry_i082.c} | 0 api-tests/ff/ipc/test_i083/source.mk | 2 +- api-tests/ff/ipc/test_i083/{test_entry.c => test_entry_i083.c} | 0 api-tests/ff/ipc/test_i084/source.mk | 2 +- api-tests/ff/ipc/test_i084/{test_entry.c => test_entry_i084.c} | 0 api-tests/ff/ipc/test_i085/source.mk | 2 +- api-tests/ff/ipc/test_i085/{test_entry.c => test_entry_i085.c} | 0 api-tests/ff/ipc/test_i086/source.mk | 2 +- api-tests/ff/ipc/test_i086/{test_entry.c => test_entry_i086.c} | 0 api-tests/ff/ipc/test_i087/source.mk | 2 +- api-tests/ff/ipc/test_i087/{test_entry.c => test_entry_i087.c} | 0 api-tests/ff/ipc/test_l088/source.mk | 2 +- api-tests/ff/ipc/test_l088/{test_entry.c => test_entry_l088.c} | 0 api-tests/tools/makefiles/linker/test.sct | 2 +- 307 files changed, 159 insertions(+), 159 deletions(-) rename api-tests/dev_apis/crypto/test_c001/{test_entry.c => test_entry_c001.c} (100%) rename api-tests/dev_apis/crypto/test_c002/{test_entry.c => test_entry_c002.c} (100%) rename api-tests/dev_apis/crypto/test_c003/{test_entry.c => test_entry_c003.c} (100%) rename api-tests/dev_apis/crypto/test_c004/{test_entry.c => test_entry_c004.c} (100%) rename api-tests/dev_apis/crypto/test_c005/{test_entry.c => test_entry_c005.c} (100%) rename api-tests/dev_apis/crypto/test_c006/{test_entry.c => test_entry_c006.c} (100%) rename api-tests/dev_apis/crypto/test_c007/{test_entry.c => test_entry_c007.c} (100%) rename api-tests/dev_apis/crypto/test_c008/{test_entry.c => test_entry_c008.c} (100%) rename api-tests/dev_apis/crypto/test_c009/{test_entry.c => test_entry_c009.c} (100%) rename api-tests/dev_apis/crypto/test_c010/{test_entry.c => test_entry_c010.c} (100%) rename api-tests/dev_apis/crypto/test_c011/{test_entry.c => test_entry_c011.c} (100%) rename api-tests/dev_apis/crypto/test_c012/{test_entry.c => test_entry_c012.c} (100%) rename api-tests/dev_apis/crypto/test_c013/{test_entry.c => test_entry_c013.c} (100%) rename api-tests/dev_apis/crypto/test_c014/{test_entry.c => test_entry_c014.c} (100%) rename api-tests/dev_apis/crypto/test_c015/{test_entry.c => test_entry_c015.c} (100%) rename api-tests/dev_apis/crypto/test_c016/{test_entry.c => test_entry_c016.c} (100%) rename api-tests/dev_apis/crypto/test_c017/{test_entry.c => test_entry_c017.c} (100%) rename api-tests/dev_apis/crypto/test_c018/{test_entry.c => test_entry_c018.c} (100%) rename api-tests/dev_apis/crypto/test_c019/{test_entry.c => test_entry_c019.c} (100%) rename api-tests/dev_apis/crypto/test_c020/{test_entry.c => test_entry_c020.c} (100%) rename api-tests/dev_apis/crypto/test_c021/{test_entry.c => test_entry_c021.c} (100%) rename api-tests/dev_apis/crypto/test_c022/{test_entry.c => test_entry_c022.c} (100%) rename api-tests/dev_apis/crypto/test_c023/{test_entry.c => test_entry_c023.c} (100%) rename api-tests/dev_apis/crypto/test_c024/{test_entry.c => test_entry_c024.c} (100%) rename api-tests/dev_apis/crypto/test_c025/{test_entry.c => test_entry_c025.c} (100%) rename api-tests/dev_apis/crypto/test_c026/{test_entry.c => test_entry_c026.c} (100%) rename api-tests/dev_apis/crypto/test_c027/{test_entry.c => test_entry_c027.c} (100%) rename api-tests/dev_apis/crypto/test_c028/{test_entry.c => test_entry_c028.c} (100%) rename api-tests/dev_apis/crypto/test_c029/{test_entry.c => test_entry_c029.c} (100%) rename api-tests/dev_apis/crypto/test_c030/{test_entry.c => test_entry_c030.c} (100%) rename api-tests/dev_apis/crypto/test_c031/{test_entry.c => test_entry_c031.c} (100%) rename api-tests/dev_apis/crypto/test_c032/{test_entry.c => test_entry_c032.c} (100%) rename api-tests/dev_apis/crypto/test_c033/{test_entry.c => test_entry_c033.c} (100%) rename api-tests/dev_apis/crypto/test_c034/{test_entry.c => test_entry_c034.c} (100%) rename api-tests/dev_apis/crypto/test_c035/{test_entry.c => test_entry_c035.c} (100%) rename api-tests/dev_apis/crypto/test_c036/{test_entry.c => test_entry_c036.c} (100%) rename api-tests/dev_apis/crypto/test_c037/{test_entry.c => test_entry_c037.c} (100%) rename api-tests/dev_apis/crypto/test_c038/{test_entry.c => test_entry_c038.c} (100%) rename api-tests/dev_apis/crypto/test_c039/{test_entry.c => test_entry_c039.c} (100%) rename api-tests/dev_apis/crypto/test_c040/{test_entry.c => test_entry_c040.c} (100%) rename api-tests/dev_apis/crypto/test_c041/{test_entry.c => test_entry_c041.c} (100%) rename api-tests/dev_apis/crypto/test_c042/{test_entry.c => test_entry_c042.c} (100%) rename api-tests/dev_apis/crypto/test_c043/{test_entry.c => test_entry_c043.c} (100%) rename api-tests/dev_apis/crypto/test_c044/{test_entry.c => test_entry_c044.c} (100%) rename api-tests/dev_apis/initial_attestation/test_a001/{test_entry.c => test_entry_a001.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s001/{test_entry.c => test_entry_s001.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s002/{test_entry.c => test_entry_s002.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s003/{test_entry.c => test_entry_s003.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s004/{test_entry.c => test_entry_s004.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s005/{test_entry.c => test_entry_s005.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s006/{test_entry.c => test_entry_s006.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s007/{test_entry.c => test_entry_s007.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s008/{test_entry.c => test_entry_s008.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s009/{test_entry.c => test_entry_s009.c} (100%) rename api-tests/dev_apis/internal_trusted_storage/test_s010/{test_entry.c => test_entry_s010.c} (100%) rename api-tests/dev_apis/protected_storage/test_p011/{test_entry.c => test_entry_p011.c} (100%) rename api-tests/dev_apis/protected_storage/test_p012/{test_entry.c => test_entry_p012.c} (100%) rename api-tests/dev_apis/protected_storage/test_p013/{test_entry.c => test_entry_p013.c} (100%) rename api-tests/dev_apis/protected_storage/test_p014/{test_entry.c => test_entry_p014.c} (100%) rename api-tests/dev_apis/protected_storage/test_p015/{test_entry.c => test_entry_p015.c} (100%) rename api-tests/ff/ipc/test_i001/{test_entry.c => test_entry_i001.c} (100%) rename api-tests/ff/ipc/test_i002/{test_entry.c => test_entry_i002.c} (100%) rename api-tests/ff/ipc/test_i003/{test_entry.c => test_entry_i003.c} (100%) rename api-tests/ff/ipc/test_i004/{test_entry.c => test_entry_i004.c} (100%) rename api-tests/ff/ipc/test_i005/{test_entry.c => test_entry_i005.c} (100%) rename api-tests/ff/ipc/test_i006/{test_entry.c => test_entry_i006.c} (100%) rename api-tests/ff/ipc/test_i007/{test_entry.c => test_entry_i007.c} (100%) rename api-tests/ff/ipc/test_i008/{test_entry.c => test_entry_i008.c} (100%) rename api-tests/ff/ipc/test_i009/{test_entry.c => test_entry_i009.c} (100%) rename api-tests/ff/ipc/test_i010/{test_entry.c => test_entry_i010.c} (100%) rename api-tests/ff/ipc/test_i011/{test_entry.c => test_entry_i011.c} (100%) rename api-tests/ff/ipc/test_i012/{test_entry.c => test_entry_i012.c} (100%) rename api-tests/ff/ipc/test_i013/{test_entry.c => test_entry_i013.c} (100%) rename api-tests/ff/ipc/test_i014/{test_entry.c => test_entry_i014.c} (100%) rename api-tests/ff/ipc/test_i015/{test_entry.c => test_entry_i015.c} (100%) rename api-tests/ff/ipc/test_i016/{test_entry.c => test_entry_i016.c} (100%) rename api-tests/ff/ipc/test_i017/{test_entry.c => test_entry_i017.c} (100%) rename api-tests/ff/ipc/test_i018/{test_entry.c => test_entry_i018.c} (100%) rename api-tests/ff/ipc/test_i019/{test_entry.c => test_entry_i019.c} (100%) rename api-tests/ff/ipc/test_i020/{test_entry.c => test_entry_i020.c} (100%) rename api-tests/ff/ipc/test_i021/{test_entry.c => test_entry_i021.c} (100%) rename api-tests/ff/ipc/test_i022/{test_entry.c => test_entry_i022.c} (100%) rename api-tests/ff/ipc/test_i023/{test_entry.c => test_entry_i023.c} (100%) rename api-tests/ff/ipc/test_i024/{test_entry.c => test_entry_i024.c} (100%) rename api-tests/ff/ipc/test_i025/{test_entry.c => test_entry_i025.c} (100%) rename api-tests/ff/ipc/test_i026/{test_entry.c => test_entry_i026.c} (100%) rename api-tests/ff/ipc/test_i027/{test_entry.c => test_entry_i027.c} (100%) rename api-tests/ff/ipc/test_i028/{test_entry.c => test_entry_i028.c} (100%) rename api-tests/ff/ipc/test_i029/{test_entry.c => test_entry_i029.c} (100%) rename api-tests/ff/ipc/test_i030/{test_entry.c => test_entry_i030.c} (100%) rename api-tests/ff/ipc/test_i031/{test_entry.c => test_entry_i031.c} (100%) rename api-tests/ff/ipc/test_i032/{test_entry.c => test_entry_i032.c} (100%) rename api-tests/ff/ipc/test_i033/{test_entry.c => test_entry_i033.c} (100%) rename api-tests/ff/ipc/test_i034/{test_entry.c => test_entry_i034.c} (100%) rename api-tests/ff/ipc/test_i035/{test_entry.c => test_entry_i035.c} (100%) rename api-tests/ff/ipc/test_i036/{test_entry.c => test_entry_i036.c} (100%) rename api-tests/ff/ipc/test_i037/{test_entry.c => test_entry_i037.c} (100%) rename api-tests/ff/ipc/test_i038/{test_entry.c => test_entry_i038.c} (100%) rename api-tests/ff/ipc/test_i039/{test_entry.c => test_entry_i039.c} (100%) rename api-tests/ff/ipc/test_i040/{test_entry.c => test_entry_i040.c} (100%) rename api-tests/ff/ipc/test_i041/{test_entry.c => test_entry_i041.c} (100%) rename api-tests/ff/ipc/test_i042/{test_entry.c => test_entry_i042.c} (100%) rename api-tests/ff/ipc/test_i043/{test_entry.c => test_entry_i043.c} (100%) rename api-tests/ff/ipc/test_i044/{test_entry.c => test_entry_i044.c} (100%) rename api-tests/ff/ipc/test_i045/{test_entry.c => test_entry_i045.c} (100%) rename api-tests/ff/ipc/test_i046/{test_entry.c => test_entry_i046.c} (100%) rename api-tests/ff/ipc/test_i047/{test_entry.c => test_entry_i047.c} (100%) rename api-tests/ff/ipc/test_i048/{test_entry.c => test_entry_i048.c} (100%) rename api-tests/ff/ipc/test_i049/{test_entry.c => test_entry_i049.c} (100%) rename api-tests/ff/ipc/test_i050/{test_entry.c => test_entry_i050.c} (100%) rename api-tests/ff/ipc/test_i051/{test_entry.c => test_entry_i051.c} (100%) rename api-tests/ff/ipc/test_i052/{test_entry.c => test_entry_i052.c} (100%) rename api-tests/ff/ipc/test_i053/{test_entry.c => test_entry_i053.c} (100%) rename api-tests/ff/ipc/test_i054/{test_entry.c => test_entry_i054.c} (100%) rename api-tests/ff/ipc/test_i055/{test_entry.c => test_entry_i055.c} (100%) rename api-tests/ff/ipc/test_i056/{test_entry.c => test_entry_i056.c} (100%) rename api-tests/ff/ipc/test_i057/{test_entry.c => test_entry_i057.c} (100%) rename api-tests/ff/ipc/test_i058/{test_entry.c => test_entry_i058.c} (100%) rename api-tests/ff/ipc/test_i059/{test_entry.c => test_entry_i059.c} (100%) rename api-tests/ff/ipc/test_i060/{test_entry.c => test_entry_i060.c} (100%) rename api-tests/ff/ipc/test_i061/{test_entry.c => test_entry_i061.c} (100%) rename api-tests/ff/ipc/test_i062/{test_entry.c => test_entry_i062.c} (100%) rename api-tests/ff/ipc/test_i063/{test_entry.c => test_entry_i063.c} (100%) rename api-tests/ff/ipc/test_i064/{test_entry.c => test_entry_i064.c} (100%) rename api-tests/ff/ipc/test_i065/{test_entry.c => test_entry_i065.c} (100%) rename api-tests/ff/ipc/test_i066/{test_entry.c => test_entry_i066.c} (100%) rename api-tests/ff/ipc/test_i067/{test_entry.c => test_entry_i067.c} (100%) rename api-tests/ff/ipc/test_i068/{test_entry.c => test_entry_i068.c} (100%) rename api-tests/ff/ipc/test_i069/{test_entry.c => test_entry_i069.c} (100%) rename api-tests/ff/ipc/test_i070/{test_entry.c => test_entry_i070.c} (100%) rename api-tests/ff/ipc/test_i071/{test_entry.c => test_entry_i071.c} (100%) rename api-tests/ff/ipc/test_i072/{test_entry.c => test_entry_i072.c} (100%) rename api-tests/ff/ipc/test_i073/{test_entry.c => test_entry_i073.c} (100%) rename api-tests/ff/ipc/test_i074/{test_entry.c => test_entry_i074.c} (100%) rename api-tests/ff/ipc/test_i075/{test_entry.c => test_entry_i075.c} (100%) rename api-tests/ff/ipc/test_i076/{test_entry.c => test_entry_i076.c} (100%) rename api-tests/ff/ipc/test_i077/{test_entry.c => test_entry_i077.c} (100%) rename api-tests/ff/ipc/test_i078/{test_entry.c => test_entry_i078.c} (100%) rename api-tests/ff/ipc/test_i079/{test_entry.c => test_entry_i079.c} (100%) rename api-tests/ff/ipc/test_i080/{test_entry.c => test_entry_i080.c} (100%) rename api-tests/ff/ipc/test_i081/{test_entry.c => test_entry_i081.c} (100%) rename api-tests/ff/ipc/test_i082/{test_entry.c => test_entry_i082.c} (100%) rename api-tests/ff/ipc/test_i083/{test_entry.c => test_entry_i083.c} (100%) rename api-tests/ff/ipc/test_i084/{test_entry.c => test_entry_i084.c} (100%) rename api-tests/ff/ipc/test_i085/{test_entry.c => test_entry_i085.c} (100%) rename api-tests/ff/ipc/test_i086/{test_entry.c => test_entry_i086.c} (100%) rename api-tests/ff/ipc/test_i087/{test_entry.c => test_entry_i087.c} (100%) rename api-tests/ff/ipc/test_l088/{test_entry.c => test_entry_l088.c} (100%) diff --git a/api-tests/dev_apis/crypto/test_c001/source.mk b/api-tests/dev_apis/crypto/test_c001/source.mk index c24e740a..f066e825 100644 --- a/api-tests/dev_apis/crypto/test_c001/source.mk +++ b/api-tests/dev_apis/crypto/test_c001/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c001.c +CC_SOURCE = test_entry_c001.c test_c001.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c001/test_entry.c b/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c001/test_entry.c rename to api-tests/dev_apis/crypto/test_c001/test_entry_c001.c diff --git a/api-tests/dev_apis/crypto/test_c002/source.mk b/api-tests/dev_apis/crypto/test_c002/source.mk index d56ef668..b05e89af 100644 --- a/api-tests/dev_apis/crypto/test_c002/source.mk +++ b/api-tests/dev_apis/crypto/test_c002/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c002.c +CC_SOURCE = test_entry_c002.c test_c002.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c002/test_entry.c b/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c002/test_entry.c rename to api-tests/dev_apis/crypto/test_c002/test_entry_c002.c diff --git a/api-tests/dev_apis/crypto/test_c003/source.mk b/api-tests/dev_apis/crypto/test_c003/source.mk index 350748f1..6f213784 100644 --- a/api-tests/dev_apis/crypto/test_c003/source.mk +++ b/api-tests/dev_apis/crypto/test_c003/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c003.c +CC_SOURCE = test_entry_c003.c test_c003.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c003/test_entry.c b/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c003/test_entry.c rename to api-tests/dev_apis/crypto/test_c003/test_entry_c003.c diff --git a/api-tests/dev_apis/crypto/test_c004/source.mk b/api-tests/dev_apis/crypto/test_c004/source.mk index 559bf61c..0c6aef1b 100644 --- a/api-tests/dev_apis/crypto/test_c004/source.mk +++ b/api-tests/dev_apis/crypto/test_c004/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c004.c +CC_SOURCE = test_entry_c004.c test_c004.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c004/test_entry.c b/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c004/test_entry.c rename to api-tests/dev_apis/crypto/test_c004/test_entry_c004.c diff --git a/api-tests/dev_apis/crypto/test_c005/source.mk b/api-tests/dev_apis/crypto/test_c005/source.mk index 0aa393b8..23bd36e3 100644 --- a/api-tests/dev_apis/crypto/test_c005/source.mk +++ b/api-tests/dev_apis/crypto/test_c005/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c005.c +CC_SOURCE = test_entry_c005.c test_c005.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c005/test_entry.c b/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c005/test_entry.c rename to api-tests/dev_apis/crypto/test_c005/test_entry_c005.c diff --git a/api-tests/dev_apis/crypto/test_c006/source.mk b/api-tests/dev_apis/crypto/test_c006/source.mk index e2e1be7a..11be5c57 100644 --- a/api-tests/dev_apis/crypto/test_c006/source.mk +++ b/api-tests/dev_apis/crypto/test_c006/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c006.c +CC_SOURCE = test_entry_c006.c test_c006.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c006/test_entry.c b/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c006/test_entry.c rename to api-tests/dev_apis/crypto/test_c006/test_entry_c006.c diff --git a/api-tests/dev_apis/crypto/test_c007/source.mk b/api-tests/dev_apis/crypto/test_c007/source.mk index 0144796d..3e76b148 100644 --- a/api-tests/dev_apis/crypto/test_c007/source.mk +++ b/api-tests/dev_apis/crypto/test_c007/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c007.c +CC_SOURCE = test_entry_c007.c test_c007.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c007/test_entry.c b/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c007/test_entry.c rename to api-tests/dev_apis/crypto/test_c007/test_entry_c007.c diff --git a/api-tests/dev_apis/crypto/test_c008/source.mk b/api-tests/dev_apis/crypto/test_c008/source.mk index 3bc136e7..62d4727a 100644 --- a/api-tests/dev_apis/crypto/test_c008/source.mk +++ b/api-tests/dev_apis/crypto/test_c008/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c008.c +CC_SOURCE = test_entry_c008.c test_c008.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c008/test_entry.c b/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c008/test_entry.c rename to api-tests/dev_apis/crypto/test_c008/test_entry_c008.c diff --git a/api-tests/dev_apis/crypto/test_c009/source.mk b/api-tests/dev_apis/crypto/test_c009/source.mk index e5f4c6f6..c865e8eb 100644 --- a/api-tests/dev_apis/crypto/test_c009/source.mk +++ b/api-tests/dev_apis/crypto/test_c009/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c009.c +CC_SOURCE = test_entry_c009.c test_c009.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c009/test_entry.c b/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c009/test_entry.c rename to api-tests/dev_apis/crypto/test_c009/test_entry_c009.c diff --git a/api-tests/dev_apis/crypto/test_c010/source.mk b/api-tests/dev_apis/crypto/test_c010/source.mk index da0bb911..8b32fcf0 100644 --- a/api-tests/dev_apis/crypto/test_c010/source.mk +++ b/api-tests/dev_apis/crypto/test_c010/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c010.c +CC_SOURCE = test_entry_c010.c test_c010.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c010/test_entry.c b/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c010/test_entry.c rename to api-tests/dev_apis/crypto/test_c010/test_entry_c010.c diff --git a/api-tests/dev_apis/crypto/test_c011/source.mk b/api-tests/dev_apis/crypto/test_c011/source.mk index 10a5d4ba..4ab62a91 100644 --- a/api-tests/dev_apis/crypto/test_c011/source.mk +++ b/api-tests/dev_apis/crypto/test_c011/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c011.c +CC_SOURCE = test_entry_c011.c test_c011.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c011/test_entry.c b/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c011/test_entry.c rename to api-tests/dev_apis/crypto/test_c011/test_entry_c011.c diff --git a/api-tests/dev_apis/crypto/test_c012/source.mk b/api-tests/dev_apis/crypto/test_c012/source.mk index 5379fd9f..f6c4ec3c 100644 --- a/api-tests/dev_apis/crypto/test_c012/source.mk +++ b/api-tests/dev_apis/crypto/test_c012/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c012.c +CC_SOURCE = test_entry_c012.c test_c012.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c012/test_entry.c b/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c012/test_entry.c rename to api-tests/dev_apis/crypto/test_c012/test_entry_c012.c diff --git a/api-tests/dev_apis/crypto/test_c013/source.mk b/api-tests/dev_apis/crypto/test_c013/source.mk index 3039e72f..8d63e457 100644 --- a/api-tests/dev_apis/crypto/test_c013/source.mk +++ b/api-tests/dev_apis/crypto/test_c013/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c013.c +CC_SOURCE = test_entry_c013.c test_c013.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c013/test_entry.c b/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c013/test_entry.c rename to api-tests/dev_apis/crypto/test_c013/test_entry_c013.c diff --git a/api-tests/dev_apis/crypto/test_c014/source.mk b/api-tests/dev_apis/crypto/test_c014/source.mk index 4e75c890..44a2bdb4 100644 --- a/api-tests/dev_apis/crypto/test_c014/source.mk +++ b/api-tests/dev_apis/crypto/test_c014/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c014.c +CC_SOURCE = test_entry_c014.c test_c014.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c014/test_entry.c b/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c014/test_entry.c rename to api-tests/dev_apis/crypto/test_c014/test_entry_c014.c diff --git a/api-tests/dev_apis/crypto/test_c015/source.mk b/api-tests/dev_apis/crypto/test_c015/source.mk index 66ef2a23..70abb3ce 100644 --- a/api-tests/dev_apis/crypto/test_c015/source.mk +++ b/api-tests/dev_apis/crypto/test_c015/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c015.c +CC_SOURCE = test_entry_c015.c test_c015.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c015/test_entry.c b/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c015/test_entry.c rename to api-tests/dev_apis/crypto/test_c015/test_entry_c015.c diff --git a/api-tests/dev_apis/crypto/test_c016/source.mk b/api-tests/dev_apis/crypto/test_c016/source.mk index 320e43be..f7d0b7e4 100644 --- a/api-tests/dev_apis/crypto/test_c016/source.mk +++ b/api-tests/dev_apis/crypto/test_c016/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c016.c +CC_SOURCE = test_entry_c016.c test_c016.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c016/test_entry.c b/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c016/test_entry.c rename to api-tests/dev_apis/crypto/test_c016/test_entry_c016.c diff --git a/api-tests/dev_apis/crypto/test_c017/source.mk b/api-tests/dev_apis/crypto/test_c017/source.mk index fbb15fd0..6147e4cc 100644 --- a/api-tests/dev_apis/crypto/test_c017/source.mk +++ b/api-tests/dev_apis/crypto/test_c017/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c017.c +CC_SOURCE = test_entry_c017.c test_c017.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c017/test_entry.c b/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c017/test_entry.c rename to api-tests/dev_apis/crypto/test_c017/test_entry_c017.c diff --git a/api-tests/dev_apis/crypto/test_c018/source.mk b/api-tests/dev_apis/crypto/test_c018/source.mk index e78ff20f..fbfbcae9 100644 --- a/api-tests/dev_apis/crypto/test_c018/source.mk +++ b/api-tests/dev_apis/crypto/test_c018/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c018.c +CC_SOURCE = test_entry_c018.c test_c018.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c018/test_entry.c b/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c018/test_entry.c rename to api-tests/dev_apis/crypto/test_c018/test_entry_c018.c diff --git a/api-tests/dev_apis/crypto/test_c019/source.mk b/api-tests/dev_apis/crypto/test_c019/source.mk index 05572758..a0a473bf 100644 --- a/api-tests/dev_apis/crypto/test_c019/source.mk +++ b/api-tests/dev_apis/crypto/test_c019/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c019.c +CC_SOURCE = test_entry_c019.c test_c019.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c019/test_entry.c b/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c019/test_entry.c rename to api-tests/dev_apis/crypto/test_c019/test_entry_c019.c diff --git a/api-tests/dev_apis/crypto/test_c020/source.mk b/api-tests/dev_apis/crypto/test_c020/source.mk index 96665a21..accb40d3 100644 --- a/api-tests/dev_apis/crypto/test_c020/source.mk +++ b/api-tests/dev_apis/crypto/test_c020/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c020.c +CC_SOURCE = test_entry_c020.c test_c020.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c020/test_entry.c b/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c020/test_entry.c rename to api-tests/dev_apis/crypto/test_c020/test_entry_c020.c diff --git a/api-tests/dev_apis/crypto/test_c021/source.mk b/api-tests/dev_apis/crypto/test_c021/source.mk index 39736c8d..97618667 100644 --- a/api-tests/dev_apis/crypto/test_c021/source.mk +++ b/api-tests/dev_apis/crypto/test_c021/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c021.c +CC_SOURCE = test_entry_c021.c test_c021.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c021/test_entry.c b/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c021/test_entry.c rename to api-tests/dev_apis/crypto/test_c021/test_entry_c021.c diff --git a/api-tests/dev_apis/crypto/test_c022/source.mk b/api-tests/dev_apis/crypto/test_c022/source.mk index cd406017..2ef3d732 100644 --- a/api-tests/dev_apis/crypto/test_c022/source.mk +++ b/api-tests/dev_apis/crypto/test_c022/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c022.c +CC_SOURCE = test_entry_c022.c test_c022.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c022/test_entry.c b/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c022/test_entry.c rename to api-tests/dev_apis/crypto/test_c022/test_entry_c022.c diff --git a/api-tests/dev_apis/crypto/test_c023/source.mk b/api-tests/dev_apis/crypto/test_c023/source.mk index 8c971704..bd0d7e75 100644 --- a/api-tests/dev_apis/crypto/test_c023/source.mk +++ b/api-tests/dev_apis/crypto/test_c023/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c023.c +CC_SOURCE = test_entry_c023.c test_c023.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c023/test_entry.c b/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c023/test_entry.c rename to api-tests/dev_apis/crypto/test_c023/test_entry_c023.c diff --git a/api-tests/dev_apis/crypto/test_c024/source.mk b/api-tests/dev_apis/crypto/test_c024/source.mk index 301c6d23..bfa9beea 100644 --- a/api-tests/dev_apis/crypto/test_c024/source.mk +++ b/api-tests/dev_apis/crypto/test_c024/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c024.c +CC_SOURCE = test_entry_c024.c test_c024.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c024/test_entry.c b/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c024/test_entry.c rename to api-tests/dev_apis/crypto/test_c024/test_entry_c024.c diff --git a/api-tests/dev_apis/crypto/test_c025/source.mk b/api-tests/dev_apis/crypto/test_c025/source.mk index cd669a93..e5ef05c3 100644 --- a/api-tests/dev_apis/crypto/test_c025/source.mk +++ b/api-tests/dev_apis/crypto/test_c025/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c025.c +CC_SOURCE = test_entry_c025.c test_c025.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c025/test_entry.c b/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c025/test_entry.c rename to api-tests/dev_apis/crypto/test_c025/test_entry_c025.c diff --git a/api-tests/dev_apis/crypto/test_c026/source.mk b/api-tests/dev_apis/crypto/test_c026/source.mk index fa602b6a..ab8acf2a 100644 --- a/api-tests/dev_apis/crypto/test_c026/source.mk +++ b/api-tests/dev_apis/crypto/test_c026/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c026.c +CC_SOURCE = test_entry_c026.c test_c026.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c026/test_entry.c b/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c026/test_entry.c rename to api-tests/dev_apis/crypto/test_c026/test_entry_c026.c diff --git a/api-tests/dev_apis/crypto/test_c027/source.mk b/api-tests/dev_apis/crypto/test_c027/source.mk index 98826de1..243dff74 100644 --- a/api-tests/dev_apis/crypto/test_c027/source.mk +++ b/api-tests/dev_apis/crypto/test_c027/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c027.c +CC_SOURCE = test_entry_c027.c test_c027.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c027/test_entry.c b/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c027/test_entry.c rename to api-tests/dev_apis/crypto/test_c027/test_entry_c027.c diff --git a/api-tests/dev_apis/crypto/test_c028/source.mk b/api-tests/dev_apis/crypto/test_c028/source.mk index 1d6b81ce..f7dd1932 100644 --- a/api-tests/dev_apis/crypto/test_c028/source.mk +++ b/api-tests/dev_apis/crypto/test_c028/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c028.c +CC_SOURCE = test_entry_c028.c test_c028.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c028/test_entry.c b/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c028/test_entry.c rename to api-tests/dev_apis/crypto/test_c028/test_entry_c028.c diff --git a/api-tests/dev_apis/crypto/test_c029/source.mk b/api-tests/dev_apis/crypto/test_c029/source.mk index 55897848..31b0f421 100644 --- a/api-tests/dev_apis/crypto/test_c029/source.mk +++ b/api-tests/dev_apis/crypto/test_c029/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c029.c +CC_SOURCE = test_entry_c029.c test_c029.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c029/test_entry.c b/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c029/test_entry.c rename to api-tests/dev_apis/crypto/test_c029/test_entry_c029.c diff --git a/api-tests/dev_apis/crypto/test_c030/source.mk b/api-tests/dev_apis/crypto/test_c030/source.mk index ba8ca2ef..1cb3c47f 100644 --- a/api-tests/dev_apis/crypto/test_c030/source.mk +++ b/api-tests/dev_apis/crypto/test_c030/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c030.c +CC_SOURCE = test_entry_c030.c test_c030.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c030/test_entry.c b/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c030/test_entry.c rename to api-tests/dev_apis/crypto/test_c030/test_entry_c030.c diff --git a/api-tests/dev_apis/crypto/test_c031/source.mk b/api-tests/dev_apis/crypto/test_c031/source.mk index cc8d3ced..be9d3063 100644 --- a/api-tests/dev_apis/crypto/test_c031/source.mk +++ b/api-tests/dev_apis/crypto/test_c031/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c031.c +CC_SOURCE = test_entry_c031.c test_c031.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c031/test_entry.c b/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c031/test_entry.c rename to api-tests/dev_apis/crypto/test_c031/test_entry_c031.c diff --git a/api-tests/dev_apis/crypto/test_c032/source.mk b/api-tests/dev_apis/crypto/test_c032/source.mk index e098947a..15305a1a 100644 --- a/api-tests/dev_apis/crypto/test_c032/source.mk +++ b/api-tests/dev_apis/crypto/test_c032/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c032.c +CC_SOURCE = test_entry_c032.c test_c032.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c032/test_entry.c b/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c032/test_entry.c rename to api-tests/dev_apis/crypto/test_c032/test_entry_c032.c diff --git a/api-tests/dev_apis/crypto/test_c033/source.mk b/api-tests/dev_apis/crypto/test_c033/source.mk index 22c93a65..e1925ed3 100644 --- a/api-tests/dev_apis/crypto/test_c033/source.mk +++ b/api-tests/dev_apis/crypto/test_c033/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c033.c +CC_SOURCE = test_entry_c033.c test_c033.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c033/test_entry.c b/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c033/test_entry.c rename to api-tests/dev_apis/crypto/test_c033/test_entry_c033.c diff --git a/api-tests/dev_apis/crypto/test_c034/source.mk b/api-tests/dev_apis/crypto/test_c034/source.mk index cfb15f57..48b0dde0 100644 --- a/api-tests/dev_apis/crypto/test_c034/source.mk +++ b/api-tests/dev_apis/crypto/test_c034/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c034.c +CC_SOURCE = test_entry_c034.c test_c034.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c034/test_entry.c b/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c034/test_entry.c rename to api-tests/dev_apis/crypto/test_c034/test_entry_c034.c diff --git a/api-tests/dev_apis/crypto/test_c035/source.mk b/api-tests/dev_apis/crypto/test_c035/source.mk index 6e4b9742..b3318fe6 100644 --- a/api-tests/dev_apis/crypto/test_c035/source.mk +++ b/api-tests/dev_apis/crypto/test_c035/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c035.c +CC_SOURCE = test_entry_c035.c test_c035.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c035/test_entry.c b/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c035/test_entry.c rename to api-tests/dev_apis/crypto/test_c035/test_entry_c035.c diff --git a/api-tests/dev_apis/crypto/test_c036/source.mk b/api-tests/dev_apis/crypto/test_c036/source.mk index 03fe831b..7a061322 100644 --- a/api-tests/dev_apis/crypto/test_c036/source.mk +++ b/api-tests/dev_apis/crypto/test_c036/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c036.c +CC_SOURCE = test_entry_c036.c test_c036.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c036/test_entry.c b/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c036/test_entry.c rename to api-tests/dev_apis/crypto/test_c036/test_entry_c036.c diff --git a/api-tests/dev_apis/crypto/test_c037/source.mk b/api-tests/dev_apis/crypto/test_c037/source.mk index 9aa0674d..0915b8aa 100644 --- a/api-tests/dev_apis/crypto/test_c037/source.mk +++ b/api-tests/dev_apis/crypto/test_c037/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c037.c +CC_SOURCE = test_entry_c037.c test_c037.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c037/test_entry.c b/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c037/test_entry.c rename to api-tests/dev_apis/crypto/test_c037/test_entry_c037.c diff --git a/api-tests/dev_apis/crypto/test_c038/source.mk b/api-tests/dev_apis/crypto/test_c038/source.mk index b0442d2a..2f6d4f0e 100644 --- a/api-tests/dev_apis/crypto/test_c038/source.mk +++ b/api-tests/dev_apis/crypto/test_c038/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c038.c +CC_SOURCE = test_entry_c038.c test_c038.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c038/test_entry.c b/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c038/test_entry.c rename to api-tests/dev_apis/crypto/test_c038/test_entry_c038.c diff --git a/api-tests/dev_apis/crypto/test_c039/source.mk b/api-tests/dev_apis/crypto/test_c039/source.mk index 61f86c62..710a57ca 100644 --- a/api-tests/dev_apis/crypto/test_c039/source.mk +++ b/api-tests/dev_apis/crypto/test_c039/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c039.c +CC_SOURCE = test_entry_c039.c test_c039.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c039/test_entry.c b/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c039/test_entry.c rename to api-tests/dev_apis/crypto/test_c039/test_entry_c039.c diff --git a/api-tests/dev_apis/crypto/test_c040/source.mk b/api-tests/dev_apis/crypto/test_c040/source.mk index e4eaffe5..8033ae4e 100644 --- a/api-tests/dev_apis/crypto/test_c040/source.mk +++ b/api-tests/dev_apis/crypto/test_c040/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c040.c +CC_SOURCE = test_entry_c040.c test_c040.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c040/test_entry.c b/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c040/test_entry.c rename to api-tests/dev_apis/crypto/test_c040/test_entry_c040.c diff --git a/api-tests/dev_apis/crypto/test_c041/source.mk b/api-tests/dev_apis/crypto/test_c041/source.mk index cad0302d..1263a668 100644 --- a/api-tests/dev_apis/crypto/test_c041/source.mk +++ b/api-tests/dev_apis/crypto/test_c041/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c041.c +CC_SOURCE = test_entry_c041.c test_c041.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c041/test_entry.c b/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c041/test_entry.c rename to api-tests/dev_apis/crypto/test_c041/test_entry_c041.c diff --git a/api-tests/dev_apis/crypto/test_c042/source.mk b/api-tests/dev_apis/crypto/test_c042/source.mk index b8a3cf89..570ce55b 100644 --- a/api-tests/dev_apis/crypto/test_c042/source.mk +++ b/api-tests/dev_apis/crypto/test_c042/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c042.c +CC_SOURCE = test_entry_c042.c test_c042.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c042/test_entry.c b/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c042/test_entry.c rename to api-tests/dev_apis/crypto/test_c042/test_entry_c042.c diff --git a/api-tests/dev_apis/crypto/test_c043/source.mk b/api-tests/dev_apis/crypto/test_c043/source.mk index e6c34686..9e58f791 100644 --- a/api-tests/dev_apis/crypto/test_c043/source.mk +++ b/api-tests/dev_apis/crypto/test_c043/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c043.c +CC_SOURCE = test_entry_c043.c test_c043.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c043/test_entry.c b/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c043/test_entry.c rename to api-tests/dev_apis/crypto/test_c043/test_entry_c043.c diff --git a/api-tests/dev_apis/crypto/test_c044/source.mk b/api-tests/dev_apis/crypto/test_c044/source.mk index 3e694cc3..f205658f 100644 --- a/api-tests/dev_apis/crypto/test_c044/source.mk +++ b/api-tests/dev_apis/crypto/test_c044/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_c044.c +CC_SOURCE = test_entry_c044.c test_c044.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c044/test_entry.c b/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c similarity index 100% rename from api-tests/dev_apis/crypto/test_c044/test_entry.c rename to api-tests/dev_apis/crypto/test_c044/test_entry_c044.c diff --git a/api-tests/dev_apis/initial_attestation/test_a001/source.mk b/api-tests/dev_apis/initial_attestation/test_a001/source.mk index befc490b..601bde93 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/source.mk +++ b/api-tests/dev_apis/initial_attestation/test_a001/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_a001.c +CC_SOURCE = test_entry_a001.c test_a001.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_entry.c b/api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c similarity index 100% rename from api-tests/dev_apis/initial_attestation/test_a001/test_entry.c rename to api-tests/dev_apis/initial_attestation/test_a001/test_entry_a001.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk index 4893e7c5..14e152d7 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s001.c +CC_SOURCE = test_entry_s001.c test_s001.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_entry_s001.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s001/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s001/test_entry_s001.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk index 614b897a..abc1a1f0 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s002.c +CC_SOURCE = test_entry_s002.c test_s002.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_entry_s002.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s002/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s002/test_entry_s002.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk index 6ab2796f..d24a930e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s003.c +CC_SOURCE = test_entry_s003.c test_s003.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_entry_s003.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s003/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s003/test_entry_s003.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk index 8c265c59..804d4e5b 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s004.c +CC_SOURCE = test_entry_s004.c test_s004.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_entry_s004.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s004/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s004/test_entry_s004.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk index c7d00f7b..1f9a30e0 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s005.c +CC_SOURCE = test_entry_s005.c test_s005.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_entry_s005.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s005/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s005/test_entry_s005.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk index cdcebd25..3b64b74e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s006.c +CC_SOURCE = test_entry_s006.c test_s006.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk index f57b3918..4ba5f696 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s007.c +CC_SOURCE = test_entry_s007.c test_s007.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_entry_s007.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s007/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s007/test_entry_s007.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk index fce0cd0f..b1ec4458 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s008.c +CC_SOURCE = test_entry_s008.c test_s008.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_entry_s008.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s008/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s008/test_entry_s008.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk index dff1830f..639ba270 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s009.c +CC_SOURCE = test_entry_s009.c test_s009.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_entry_s009.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s009/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s009/test_entry_s009.c diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk index b1862f76..9824203d 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s010.c +CC_SOURCE = test_entry_s010.c test_s010.c CC_OPTIONS = -DITS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_entry.c b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_entry_s010.c similarity index 100% rename from api-tests/dev_apis/internal_trusted_storage/test_s010/test_entry.c rename to api-tests/dev_apis/internal_trusted_storage/test_s010/test_entry_s010.c diff --git a/api-tests/dev_apis/protected_storage/test_p011/source.mk b/api-tests/dev_apis/protected_storage/test_p011/source.mk index e3b72357..beb30be3 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/source.mk +++ b/api-tests/dev_apis/protected_storage/test_p011/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_p011.c +CC_SOURCE = test_entry_p011.c test_p011.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_entry.c b/api-tests/dev_apis/protected_storage/test_p011/test_entry_p011.c similarity index 100% rename from api-tests/dev_apis/protected_storage/test_p011/test_entry.c rename to api-tests/dev_apis/protected_storage/test_p011/test_entry_p011.c diff --git a/api-tests/dev_apis/protected_storage/test_p012/source.mk b/api-tests/dev_apis/protected_storage/test_p012/source.mk index 20354091..1820ace7 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/source.mk +++ b/api-tests/dev_apis/protected_storage/test_p012/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_p012.c +CC_SOURCE = test_entry_p012.c test_p012.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_entry.c b/api-tests/dev_apis/protected_storage/test_p012/test_entry_p012.c similarity index 100% rename from api-tests/dev_apis/protected_storage/test_p012/test_entry.c rename to api-tests/dev_apis/protected_storage/test_p012/test_entry_p012.c diff --git a/api-tests/dev_apis/protected_storage/test_p013/source.mk b/api-tests/dev_apis/protected_storage/test_p013/source.mk index 4ae9f4ba..c966717a 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/source.mk +++ b/api-tests/dev_apis/protected_storage/test_p013/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_p013.c +CC_SOURCE = test_entry_p013.c test_p013.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_entry.c b/api-tests/dev_apis/protected_storage/test_p013/test_entry_p013.c similarity index 100% rename from api-tests/dev_apis/protected_storage/test_p013/test_entry.c rename to api-tests/dev_apis/protected_storage/test_p013/test_entry_p013.c diff --git a/api-tests/dev_apis/protected_storage/test_p014/source.mk b/api-tests/dev_apis/protected_storage/test_p014/source.mk index 09f07a5c..931b6704 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/source.mk +++ b/api-tests/dev_apis/protected_storage/test_p014/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_p014.c +CC_SOURCE = test_entry_p014.c test_p014.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_entry.c b/api-tests/dev_apis/protected_storage/test_p014/test_entry_p014.c similarity index 100% rename from api-tests/dev_apis/protected_storage/test_p014/test_entry.c rename to api-tests/dev_apis/protected_storage/test_p014/test_entry_p014.c diff --git a/api-tests/dev_apis/protected_storage/test_p015/source.mk b/api-tests/dev_apis/protected_storage/test_p015/source.mk index eae0ddb7..81b14e94 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/source.mk +++ b/api-tests/dev_apis/protected_storage/test_p015/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_p015.c +CC_SOURCE = test_entry_p015.c test_p015.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_entry.c b/api-tests/dev_apis/protected_storage/test_p015/test_entry_p015.c similarity index 100% rename from api-tests/dev_apis/protected_storage/test_p015/test_entry.c rename to api-tests/dev_apis/protected_storage/test_p015/test_entry_p015.c diff --git a/api-tests/dev_apis/protected_storage/test_s001/source.mk b/api-tests/dev_apis/protected_storage/test_s001/source.mk index bccfcb0a..6a92d9fc 100644 --- a/api-tests/dev_apis/protected_storage/test_s001/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s001/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s001.c +CC_SOURCE = test_entry_s001.c test_s001.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s002/source.mk b/api-tests/dev_apis/protected_storage/test_s002/source.mk index 36258fcb..3d5771cb 100644 --- a/api-tests/dev_apis/protected_storage/test_s002/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s002/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s002.c +CC_SOURCE = test_entry_s002.c test_s002.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s003/source.mk b/api-tests/dev_apis/protected_storage/test_s003/source.mk index 9296c79f..afdb886c 100644 --- a/api-tests/dev_apis/protected_storage/test_s003/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s003/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s003.c +CC_SOURCE = test_entry_s003.c test_s003.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s004/source.mk b/api-tests/dev_apis/protected_storage/test_s004/source.mk index 53c0f57f..c73824d2 100644 --- a/api-tests/dev_apis/protected_storage/test_s004/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s004/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s004.c +CC_SOURCE = test_entry_s004.c test_s004.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s005/source.mk b/api-tests/dev_apis/protected_storage/test_s005/source.mk index bc2938be..627438f4 100644 --- a/api-tests/dev_apis/protected_storage/test_s005/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s005/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s005.c +CC_SOURCE = test_entry_s005.c test_s005.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s006/source.mk b/api-tests/dev_apis/protected_storage/test_s006/source.mk index 084d424c..b64fb217 100644 --- a/api-tests/dev_apis/protected_storage/test_s006/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s006/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s006.c +CC_SOURCE = test_entry_s006.c test_s006.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s007/source.mk b/api-tests/dev_apis/protected_storage/test_s007/source.mk index 7af6777c..2e242ccf 100644 --- a/api-tests/dev_apis/protected_storage/test_s007/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s007/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s007.c +CC_SOURCE = test_entry_s007.c test_s007.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s008/source.mk b/api-tests/dev_apis/protected_storage/test_s008/source.mk index e843437a..1e8bc769 100644 --- a/api-tests/dev_apis/protected_storage/test_s008/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s008/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s008.c +CC_SOURCE = test_entry_s008.c test_s008.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s009/source.mk b/api-tests/dev_apis/protected_storage/test_s009/source.mk index 10eae95a..5a2c3b02 100644 --- a/api-tests/dev_apis/protected_storage/test_s009/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s009/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s009.c +CC_SOURCE = test_entry_s009.c test_s009.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s010/source.mk b/api-tests/dev_apis/protected_storage/test_s010/source.mk index 1530965f..e0b22d5c 100644 --- a/api-tests/dev_apis/protected_storage/test_s010/source.mk +++ b/api-tests/dev_apis/protected_storage/test_s010/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_s010.c +CC_SOURCE = test_entry_s010.c test_s010.c CC_OPTIONS = -DPS_TEST AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i001/source.mk b/api-tests/ff/ipc/test_i001/source.mk index 979cdc0c..32314346 100644 --- a/api-tests/ff/ipc/test_i001/source.mk +++ b/api-tests/ff/ipc/test_i001/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i001.c +CC_SOURCE = test_entry_i001.c test_i001.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i001/test_entry.c b/api-tests/ff/ipc/test_i001/test_entry_i001.c similarity index 100% rename from api-tests/ff/ipc/test_i001/test_entry.c rename to api-tests/ff/ipc/test_i001/test_entry_i001.c diff --git a/api-tests/ff/ipc/test_i002/source.mk b/api-tests/ff/ipc/test_i002/source.mk index 4410eac9..60cbe401 100644 --- a/api-tests/ff/ipc/test_i002/source.mk +++ b/api-tests/ff/ipc/test_i002/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i002.c +CC_SOURCE = test_entry_i002.c test_i002.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i002/test_entry.c b/api-tests/ff/ipc/test_i002/test_entry_i002.c similarity index 100% rename from api-tests/ff/ipc/test_i002/test_entry.c rename to api-tests/ff/ipc/test_i002/test_entry_i002.c diff --git a/api-tests/ff/ipc/test_i003/source.mk b/api-tests/ff/ipc/test_i003/source.mk index 1ae4cf6e..37f72992 100644 --- a/api-tests/ff/ipc/test_i003/source.mk +++ b/api-tests/ff/ipc/test_i003/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i003.c +CC_SOURCE = test_entry_i003.c test_i003.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i003/test_entry.c b/api-tests/ff/ipc/test_i003/test_entry_i003.c similarity index 100% rename from api-tests/ff/ipc/test_i003/test_entry.c rename to api-tests/ff/ipc/test_i003/test_entry_i003.c diff --git a/api-tests/ff/ipc/test_i004/source.mk b/api-tests/ff/ipc/test_i004/source.mk index 5aa9dc65..2a23e73e 100644 --- a/api-tests/ff/ipc/test_i004/source.mk +++ b/api-tests/ff/ipc/test_i004/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i004.c +CC_SOURCE = test_entry_i004.c test_i004.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i004/test_entry.c b/api-tests/ff/ipc/test_i004/test_entry_i004.c similarity index 100% rename from api-tests/ff/ipc/test_i004/test_entry.c rename to api-tests/ff/ipc/test_i004/test_entry_i004.c diff --git a/api-tests/ff/ipc/test_i005/source.mk b/api-tests/ff/ipc/test_i005/source.mk index df8fee02..b139dbcd 100644 --- a/api-tests/ff/ipc/test_i005/source.mk +++ b/api-tests/ff/ipc/test_i005/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i005.c +CC_SOURCE = test_entry_i005.c test_i005.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i005/test_entry.c b/api-tests/ff/ipc/test_i005/test_entry_i005.c similarity index 100% rename from api-tests/ff/ipc/test_i005/test_entry.c rename to api-tests/ff/ipc/test_i005/test_entry_i005.c diff --git a/api-tests/ff/ipc/test_i006/source.mk b/api-tests/ff/ipc/test_i006/source.mk index ab4daa67..f889299c 100644 --- a/api-tests/ff/ipc/test_i006/source.mk +++ b/api-tests/ff/ipc/test_i006/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i006.c +CC_SOURCE = test_entry_i006.c test_i006.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i006/test_entry.c b/api-tests/ff/ipc/test_i006/test_entry_i006.c similarity index 100% rename from api-tests/ff/ipc/test_i006/test_entry.c rename to api-tests/ff/ipc/test_i006/test_entry_i006.c diff --git a/api-tests/ff/ipc/test_i007/source.mk b/api-tests/ff/ipc/test_i007/source.mk index 4a412049..10aebefc 100644 --- a/api-tests/ff/ipc/test_i007/source.mk +++ b/api-tests/ff/ipc/test_i007/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i007.c +CC_SOURCE = test_entry_i007.c test_i007.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i007/test_entry.c b/api-tests/ff/ipc/test_i007/test_entry_i007.c similarity index 100% rename from api-tests/ff/ipc/test_i007/test_entry.c rename to api-tests/ff/ipc/test_i007/test_entry_i007.c diff --git a/api-tests/ff/ipc/test_i008/source.mk b/api-tests/ff/ipc/test_i008/source.mk index 776583bd..383855d0 100644 --- a/api-tests/ff/ipc/test_i008/source.mk +++ b/api-tests/ff/ipc/test_i008/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i008.c +CC_SOURCE = test_entry_i008.c test_i008.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i008/test_entry.c b/api-tests/ff/ipc/test_i008/test_entry_i008.c similarity index 100% rename from api-tests/ff/ipc/test_i008/test_entry.c rename to api-tests/ff/ipc/test_i008/test_entry_i008.c diff --git a/api-tests/ff/ipc/test_i009/source.mk b/api-tests/ff/ipc/test_i009/source.mk index 49ce1873..a4f3ef06 100644 --- a/api-tests/ff/ipc/test_i009/source.mk +++ b/api-tests/ff/ipc/test_i009/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i009.c +CC_SOURCE = test_entry_i009.c test_i009.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i009/test_entry.c b/api-tests/ff/ipc/test_i009/test_entry_i009.c similarity index 100% rename from api-tests/ff/ipc/test_i009/test_entry.c rename to api-tests/ff/ipc/test_i009/test_entry_i009.c diff --git a/api-tests/ff/ipc/test_i010/source.mk b/api-tests/ff/ipc/test_i010/source.mk index 59040daa..02e1d3b7 100644 --- a/api-tests/ff/ipc/test_i010/source.mk +++ b/api-tests/ff/ipc/test_i010/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i010.c +CC_SOURCE = test_entry_i010.c test_i010.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i010/test_entry.c b/api-tests/ff/ipc/test_i010/test_entry_i010.c similarity index 100% rename from api-tests/ff/ipc/test_i010/test_entry.c rename to api-tests/ff/ipc/test_i010/test_entry_i010.c diff --git a/api-tests/ff/ipc/test_i011/source.mk b/api-tests/ff/ipc/test_i011/source.mk index 97bf396f..0e227a88 100644 --- a/api-tests/ff/ipc/test_i011/source.mk +++ b/api-tests/ff/ipc/test_i011/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i011.c +CC_SOURCE = test_entry_i011.c test_i011.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i011/test_entry.c b/api-tests/ff/ipc/test_i011/test_entry_i011.c similarity index 100% rename from api-tests/ff/ipc/test_i011/test_entry.c rename to api-tests/ff/ipc/test_i011/test_entry_i011.c diff --git a/api-tests/ff/ipc/test_i012/source.mk b/api-tests/ff/ipc/test_i012/source.mk index c0547255..49cb593c 100644 --- a/api-tests/ff/ipc/test_i012/source.mk +++ b/api-tests/ff/ipc/test_i012/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i012.c +CC_SOURCE = test_entry_i012.c test_i012.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i012/test_entry.c b/api-tests/ff/ipc/test_i012/test_entry_i012.c similarity index 100% rename from api-tests/ff/ipc/test_i012/test_entry.c rename to api-tests/ff/ipc/test_i012/test_entry_i012.c diff --git a/api-tests/ff/ipc/test_i013/source.mk b/api-tests/ff/ipc/test_i013/source.mk index 44494988..4a5dde50 100644 --- a/api-tests/ff/ipc/test_i013/source.mk +++ b/api-tests/ff/ipc/test_i013/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i013.c +CC_SOURCE = test_entry_i013.c test_i013.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i013/test_entry.c b/api-tests/ff/ipc/test_i013/test_entry_i013.c similarity index 100% rename from api-tests/ff/ipc/test_i013/test_entry.c rename to api-tests/ff/ipc/test_i013/test_entry_i013.c diff --git a/api-tests/ff/ipc/test_i014/source.mk b/api-tests/ff/ipc/test_i014/source.mk index 5fd66f39..fb8fc6ee 100644 --- a/api-tests/ff/ipc/test_i014/source.mk +++ b/api-tests/ff/ipc/test_i014/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i014.c +CC_SOURCE = test_entry_i014.c test_i014.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i014/test_entry.c b/api-tests/ff/ipc/test_i014/test_entry_i014.c similarity index 100% rename from api-tests/ff/ipc/test_i014/test_entry.c rename to api-tests/ff/ipc/test_i014/test_entry_i014.c diff --git a/api-tests/ff/ipc/test_i015/source.mk b/api-tests/ff/ipc/test_i015/source.mk index 287434ee..c55f830e 100644 --- a/api-tests/ff/ipc/test_i015/source.mk +++ b/api-tests/ff/ipc/test_i015/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i015.c +CC_SOURCE = test_entry_i015.c test_i015.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i015/test_entry.c b/api-tests/ff/ipc/test_i015/test_entry_i015.c similarity index 100% rename from api-tests/ff/ipc/test_i015/test_entry.c rename to api-tests/ff/ipc/test_i015/test_entry_i015.c diff --git a/api-tests/ff/ipc/test_i016/source.mk b/api-tests/ff/ipc/test_i016/source.mk index 70930bbe..d1d196f1 100644 --- a/api-tests/ff/ipc/test_i016/source.mk +++ b/api-tests/ff/ipc/test_i016/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i016.c +CC_SOURCE = test_entry_i016.c test_i016.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i016/test_entry.c b/api-tests/ff/ipc/test_i016/test_entry_i016.c similarity index 100% rename from api-tests/ff/ipc/test_i016/test_entry.c rename to api-tests/ff/ipc/test_i016/test_entry_i016.c diff --git a/api-tests/ff/ipc/test_i017/source.mk b/api-tests/ff/ipc/test_i017/source.mk index 00ce2050..74458cc2 100644 --- a/api-tests/ff/ipc/test_i017/source.mk +++ b/api-tests/ff/ipc/test_i017/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i017.c +CC_SOURCE = test_entry_i017.c test_i017.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i017/test_entry.c b/api-tests/ff/ipc/test_i017/test_entry_i017.c similarity index 100% rename from api-tests/ff/ipc/test_i017/test_entry.c rename to api-tests/ff/ipc/test_i017/test_entry_i017.c diff --git a/api-tests/ff/ipc/test_i018/source.mk b/api-tests/ff/ipc/test_i018/source.mk index 11caa7dd..51e7becb 100644 --- a/api-tests/ff/ipc/test_i018/source.mk +++ b/api-tests/ff/ipc/test_i018/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i018.c +CC_SOURCE = test_entry_i018.c test_i018.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i018/test_entry.c b/api-tests/ff/ipc/test_i018/test_entry_i018.c similarity index 100% rename from api-tests/ff/ipc/test_i018/test_entry.c rename to api-tests/ff/ipc/test_i018/test_entry_i018.c diff --git a/api-tests/ff/ipc/test_i019/source.mk b/api-tests/ff/ipc/test_i019/source.mk index d0542a70..483b29a6 100644 --- a/api-tests/ff/ipc/test_i019/source.mk +++ b/api-tests/ff/ipc/test_i019/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i019.c +CC_SOURCE = test_entry_i019.c test_i019.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i019/test_entry.c b/api-tests/ff/ipc/test_i019/test_entry_i019.c similarity index 100% rename from api-tests/ff/ipc/test_i019/test_entry.c rename to api-tests/ff/ipc/test_i019/test_entry_i019.c diff --git a/api-tests/ff/ipc/test_i020/source.mk b/api-tests/ff/ipc/test_i020/source.mk index e87d8318..0d7c05ec 100644 --- a/api-tests/ff/ipc/test_i020/source.mk +++ b/api-tests/ff/ipc/test_i020/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i020.c +CC_SOURCE = test_entry_i020.c test_i020.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i020/test_entry.c b/api-tests/ff/ipc/test_i020/test_entry_i020.c similarity index 100% rename from api-tests/ff/ipc/test_i020/test_entry.c rename to api-tests/ff/ipc/test_i020/test_entry_i020.c diff --git a/api-tests/ff/ipc/test_i021/source.mk b/api-tests/ff/ipc/test_i021/source.mk index 5bfe15b6..2cf268d2 100644 --- a/api-tests/ff/ipc/test_i021/source.mk +++ b/api-tests/ff/ipc/test_i021/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i021.c +CC_SOURCE = test_entry_i021.c test_i021.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i021/test_entry.c b/api-tests/ff/ipc/test_i021/test_entry_i021.c similarity index 100% rename from api-tests/ff/ipc/test_i021/test_entry.c rename to api-tests/ff/ipc/test_i021/test_entry_i021.c diff --git a/api-tests/ff/ipc/test_i022/source.mk b/api-tests/ff/ipc/test_i022/source.mk index 9d31ee6f..0afb1b94 100644 --- a/api-tests/ff/ipc/test_i022/source.mk +++ b/api-tests/ff/ipc/test_i022/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i022.c +CC_SOURCE = test_entry_i022.c test_i022.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i022/test_entry.c b/api-tests/ff/ipc/test_i022/test_entry_i022.c similarity index 100% rename from api-tests/ff/ipc/test_i022/test_entry.c rename to api-tests/ff/ipc/test_i022/test_entry_i022.c diff --git a/api-tests/ff/ipc/test_i023/source.mk b/api-tests/ff/ipc/test_i023/source.mk index e323ac65..516deb1b 100644 --- a/api-tests/ff/ipc/test_i023/source.mk +++ b/api-tests/ff/ipc/test_i023/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i023.c +CC_SOURCE = test_entry_i023.c test_i023.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i023/test_entry.c b/api-tests/ff/ipc/test_i023/test_entry_i023.c similarity index 100% rename from api-tests/ff/ipc/test_i023/test_entry.c rename to api-tests/ff/ipc/test_i023/test_entry_i023.c diff --git a/api-tests/ff/ipc/test_i024/source.mk b/api-tests/ff/ipc/test_i024/source.mk index 7ce5d51f..1213b261 100644 --- a/api-tests/ff/ipc/test_i024/source.mk +++ b/api-tests/ff/ipc/test_i024/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i024.c +CC_SOURCE = test_entry_i024.c test_i024.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i024/test_entry.c b/api-tests/ff/ipc/test_i024/test_entry_i024.c similarity index 100% rename from api-tests/ff/ipc/test_i024/test_entry.c rename to api-tests/ff/ipc/test_i024/test_entry_i024.c diff --git a/api-tests/ff/ipc/test_i025/source.mk b/api-tests/ff/ipc/test_i025/source.mk index e7d27c94..e4b66736 100644 --- a/api-tests/ff/ipc/test_i025/source.mk +++ b/api-tests/ff/ipc/test_i025/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i025.c +CC_SOURCE = test_entry_i025.c test_i025.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i025/test_entry.c b/api-tests/ff/ipc/test_i025/test_entry_i025.c similarity index 100% rename from api-tests/ff/ipc/test_i025/test_entry.c rename to api-tests/ff/ipc/test_i025/test_entry_i025.c diff --git a/api-tests/ff/ipc/test_i026/source.mk b/api-tests/ff/ipc/test_i026/source.mk index e6271d7d..b3255853 100644 --- a/api-tests/ff/ipc/test_i026/source.mk +++ b/api-tests/ff/ipc/test_i026/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i026.c +CC_SOURCE = test_entry_i026.c test_i026.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i026/test_entry.c b/api-tests/ff/ipc/test_i026/test_entry_i026.c similarity index 100% rename from api-tests/ff/ipc/test_i026/test_entry.c rename to api-tests/ff/ipc/test_i026/test_entry_i026.c diff --git a/api-tests/ff/ipc/test_i027/source.mk b/api-tests/ff/ipc/test_i027/source.mk index 6010eb14..7094e767 100644 --- a/api-tests/ff/ipc/test_i027/source.mk +++ b/api-tests/ff/ipc/test_i027/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i027.c +CC_SOURCE = test_entry_i027.c test_i027.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i027/test_entry.c b/api-tests/ff/ipc/test_i027/test_entry_i027.c similarity index 100% rename from api-tests/ff/ipc/test_i027/test_entry.c rename to api-tests/ff/ipc/test_i027/test_entry_i027.c diff --git a/api-tests/ff/ipc/test_i028/source.mk b/api-tests/ff/ipc/test_i028/source.mk index 7998ba20..4cfdd10c 100644 --- a/api-tests/ff/ipc/test_i028/source.mk +++ b/api-tests/ff/ipc/test_i028/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i028.c +CC_SOURCE = test_entry_i028.c test_i028.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i028/test_entry.c b/api-tests/ff/ipc/test_i028/test_entry_i028.c similarity index 100% rename from api-tests/ff/ipc/test_i028/test_entry.c rename to api-tests/ff/ipc/test_i028/test_entry_i028.c diff --git a/api-tests/ff/ipc/test_i029/source.mk b/api-tests/ff/ipc/test_i029/source.mk index 8e6eff2b..0d91668f 100644 --- a/api-tests/ff/ipc/test_i029/source.mk +++ b/api-tests/ff/ipc/test_i029/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i029.c +CC_SOURCE = test_entry_i029.c test_i029.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i029/test_entry.c b/api-tests/ff/ipc/test_i029/test_entry_i029.c similarity index 100% rename from api-tests/ff/ipc/test_i029/test_entry.c rename to api-tests/ff/ipc/test_i029/test_entry_i029.c diff --git a/api-tests/ff/ipc/test_i030/source.mk b/api-tests/ff/ipc/test_i030/source.mk index 36250e4f..23d38edb 100644 --- a/api-tests/ff/ipc/test_i030/source.mk +++ b/api-tests/ff/ipc/test_i030/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i030.c +CC_SOURCE = test_entry_i030.c test_i030.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i030/test_entry.c b/api-tests/ff/ipc/test_i030/test_entry_i030.c similarity index 100% rename from api-tests/ff/ipc/test_i030/test_entry.c rename to api-tests/ff/ipc/test_i030/test_entry_i030.c diff --git a/api-tests/ff/ipc/test_i031/source.mk b/api-tests/ff/ipc/test_i031/source.mk index 7195db9e..415a8fc4 100644 --- a/api-tests/ff/ipc/test_i031/source.mk +++ b/api-tests/ff/ipc/test_i031/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i031.c +CC_SOURCE = test_entry_i031.c test_i031.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i031/test_entry.c b/api-tests/ff/ipc/test_i031/test_entry_i031.c similarity index 100% rename from api-tests/ff/ipc/test_i031/test_entry.c rename to api-tests/ff/ipc/test_i031/test_entry_i031.c diff --git a/api-tests/ff/ipc/test_i032/source.mk b/api-tests/ff/ipc/test_i032/source.mk index 8070501f..0806e3a0 100644 --- a/api-tests/ff/ipc/test_i032/source.mk +++ b/api-tests/ff/ipc/test_i032/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i032.c +CC_SOURCE = test_entry_i032.c test_i032.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i032/test_entry.c b/api-tests/ff/ipc/test_i032/test_entry_i032.c similarity index 100% rename from api-tests/ff/ipc/test_i032/test_entry.c rename to api-tests/ff/ipc/test_i032/test_entry_i032.c diff --git a/api-tests/ff/ipc/test_i033/source.mk b/api-tests/ff/ipc/test_i033/source.mk index 47af032b..350d2455 100644 --- a/api-tests/ff/ipc/test_i033/source.mk +++ b/api-tests/ff/ipc/test_i033/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i033.c +CC_SOURCE = test_entry_i033.c test_i033.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i033/test_entry.c b/api-tests/ff/ipc/test_i033/test_entry_i033.c similarity index 100% rename from api-tests/ff/ipc/test_i033/test_entry.c rename to api-tests/ff/ipc/test_i033/test_entry_i033.c diff --git a/api-tests/ff/ipc/test_i034/source.mk b/api-tests/ff/ipc/test_i034/source.mk index 3bb8d510..108a4dca 100644 --- a/api-tests/ff/ipc/test_i034/source.mk +++ b/api-tests/ff/ipc/test_i034/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i034.c +CC_SOURCE = test_entry_i034.c test_i034.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i034/test_entry.c b/api-tests/ff/ipc/test_i034/test_entry_i034.c similarity index 100% rename from api-tests/ff/ipc/test_i034/test_entry.c rename to api-tests/ff/ipc/test_i034/test_entry_i034.c diff --git a/api-tests/ff/ipc/test_i035/source.mk b/api-tests/ff/ipc/test_i035/source.mk index a854b9fc..68ca3426 100644 --- a/api-tests/ff/ipc/test_i035/source.mk +++ b/api-tests/ff/ipc/test_i035/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i035.c +CC_SOURCE = test_entry_i035.c test_i035.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i035/test_entry.c b/api-tests/ff/ipc/test_i035/test_entry_i035.c similarity index 100% rename from api-tests/ff/ipc/test_i035/test_entry.c rename to api-tests/ff/ipc/test_i035/test_entry_i035.c diff --git a/api-tests/ff/ipc/test_i036/source.mk b/api-tests/ff/ipc/test_i036/source.mk index a24fddc5..ed3dc57a 100644 --- a/api-tests/ff/ipc/test_i036/source.mk +++ b/api-tests/ff/ipc/test_i036/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i036.c +CC_SOURCE = test_entry_i036.c test_i036.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i036/test_entry.c b/api-tests/ff/ipc/test_i036/test_entry_i036.c similarity index 100% rename from api-tests/ff/ipc/test_i036/test_entry.c rename to api-tests/ff/ipc/test_i036/test_entry_i036.c diff --git a/api-tests/ff/ipc/test_i037/source.mk b/api-tests/ff/ipc/test_i037/source.mk index 3f01cd8c..cfcf6e43 100644 --- a/api-tests/ff/ipc/test_i037/source.mk +++ b/api-tests/ff/ipc/test_i037/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i037.c +CC_SOURCE = test_entry_i037.c test_i037.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i037/test_entry.c b/api-tests/ff/ipc/test_i037/test_entry_i037.c similarity index 100% rename from api-tests/ff/ipc/test_i037/test_entry.c rename to api-tests/ff/ipc/test_i037/test_entry_i037.c diff --git a/api-tests/ff/ipc/test_i038/source.mk b/api-tests/ff/ipc/test_i038/source.mk index 912cd2f6..0553d678 100644 --- a/api-tests/ff/ipc/test_i038/source.mk +++ b/api-tests/ff/ipc/test_i038/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i038.c +CC_SOURCE = test_entry_i038.c test_i038.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i038/test_entry.c b/api-tests/ff/ipc/test_i038/test_entry_i038.c similarity index 100% rename from api-tests/ff/ipc/test_i038/test_entry.c rename to api-tests/ff/ipc/test_i038/test_entry_i038.c diff --git a/api-tests/ff/ipc/test_i039/source.mk b/api-tests/ff/ipc/test_i039/source.mk index 938b6450..0c2d68e5 100644 --- a/api-tests/ff/ipc/test_i039/source.mk +++ b/api-tests/ff/ipc/test_i039/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i039.c +CC_SOURCE = test_entry_i039.c test_i039.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i039/test_entry.c b/api-tests/ff/ipc/test_i039/test_entry_i039.c similarity index 100% rename from api-tests/ff/ipc/test_i039/test_entry.c rename to api-tests/ff/ipc/test_i039/test_entry_i039.c diff --git a/api-tests/ff/ipc/test_i040/source.mk b/api-tests/ff/ipc/test_i040/source.mk index 31952876..ba62c46c 100644 --- a/api-tests/ff/ipc/test_i040/source.mk +++ b/api-tests/ff/ipc/test_i040/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i040.c +CC_SOURCE = test_entry_i040.c test_i040.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i040/test_entry.c b/api-tests/ff/ipc/test_i040/test_entry_i040.c similarity index 100% rename from api-tests/ff/ipc/test_i040/test_entry.c rename to api-tests/ff/ipc/test_i040/test_entry_i040.c diff --git a/api-tests/ff/ipc/test_i041/source.mk b/api-tests/ff/ipc/test_i041/source.mk index 233e0918..40028a7a 100644 --- a/api-tests/ff/ipc/test_i041/source.mk +++ b/api-tests/ff/ipc/test_i041/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i041.c +CC_SOURCE = test_entry_i041.c test_i041.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i041/test_entry.c b/api-tests/ff/ipc/test_i041/test_entry_i041.c similarity index 100% rename from api-tests/ff/ipc/test_i041/test_entry.c rename to api-tests/ff/ipc/test_i041/test_entry_i041.c diff --git a/api-tests/ff/ipc/test_i042/source.mk b/api-tests/ff/ipc/test_i042/source.mk index 8f9e2a05..a5f0f2ef 100644 --- a/api-tests/ff/ipc/test_i042/source.mk +++ b/api-tests/ff/ipc/test_i042/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i042.c +CC_SOURCE = test_entry_i042.c test_i042.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i042/test_entry.c b/api-tests/ff/ipc/test_i042/test_entry_i042.c similarity index 100% rename from api-tests/ff/ipc/test_i042/test_entry.c rename to api-tests/ff/ipc/test_i042/test_entry_i042.c diff --git a/api-tests/ff/ipc/test_i043/source.mk b/api-tests/ff/ipc/test_i043/source.mk index 2785c3ea..c7f19e58 100644 --- a/api-tests/ff/ipc/test_i043/source.mk +++ b/api-tests/ff/ipc/test_i043/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i043.c +CC_SOURCE = test_entry_i043.c test_i043.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i043/test_entry.c b/api-tests/ff/ipc/test_i043/test_entry_i043.c similarity index 100% rename from api-tests/ff/ipc/test_i043/test_entry.c rename to api-tests/ff/ipc/test_i043/test_entry_i043.c diff --git a/api-tests/ff/ipc/test_i044/source.mk b/api-tests/ff/ipc/test_i044/source.mk index 03510c47..73fb6205 100644 --- a/api-tests/ff/ipc/test_i044/source.mk +++ b/api-tests/ff/ipc/test_i044/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i044.c +CC_SOURCE = test_entry_i044.c test_i044.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i044/test_entry.c b/api-tests/ff/ipc/test_i044/test_entry_i044.c similarity index 100% rename from api-tests/ff/ipc/test_i044/test_entry.c rename to api-tests/ff/ipc/test_i044/test_entry_i044.c diff --git a/api-tests/ff/ipc/test_i045/source.mk b/api-tests/ff/ipc/test_i045/source.mk index 88775e0f..602e53eb 100644 --- a/api-tests/ff/ipc/test_i045/source.mk +++ b/api-tests/ff/ipc/test_i045/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i045.c +CC_SOURCE = test_entry_i045.c test_i045.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i045/test_entry.c b/api-tests/ff/ipc/test_i045/test_entry_i045.c similarity index 100% rename from api-tests/ff/ipc/test_i045/test_entry.c rename to api-tests/ff/ipc/test_i045/test_entry_i045.c diff --git a/api-tests/ff/ipc/test_i046/source.mk b/api-tests/ff/ipc/test_i046/source.mk index 8dd528d8..257c1776 100644 --- a/api-tests/ff/ipc/test_i046/source.mk +++ b/api-tests/ff/ipc/test_i046/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i046.c +CC_SOURCE = test_entry_i046.c test_i046.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i046/test_entry.c b/api-tests/ff/ipc/test_i046/test_entry_i046.c similarity index 100% rename from api-tests/ff/ipc/test_i046/test_entry.c rename to api-tests/ff/ipc/test_i046/test_entry_i046.c diff --git a/api-tests/ff/ipc/test_i047/source.mk b/api-tests/ff/ipc/test_i047/source.mk index 2ac49eb0..5bb5a69d 100644 --- a/api-tests/ff/ipc/test_i047/source.mk +++ b/api-tests/ff/ipc/test_i047/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i047.c +CC_SOURCE = test_entry_i047.c test_i047.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i047/test_entry.c b/api-tests/ff/ipc/test_i047/test_entry_i047.c similarity index 100% rename from api-tests/ff/ipc/test_i047/test_entry.c rename to api-tests/ff/ipc/test_i047/test_entry_i047.c diff --git a/api-tests/ff/ipc/test_i048/source.mk b/api-tests/ff/ipc/test_i048/source.mk index 6f4b483c..0c8e3a57 100644 --- a/api-tests/ff/ipc/test_i048/source.mk +++ b/api-tests/ff/ipc/test_i048/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i048.c +CC_SOURCE = test_entry_i048.c test_i048.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i048/test_entry.c b/api-tests/ff/ipc/test_i048/test_entry_i048.c similarity index 100% rename from api-tests/ff/ipc/test_i048/test_entry.c rename to api-tests/ff/ipc/test_i048/test_entry_i048.c diff --git a/api-tests/ff/ipc/test_i049/source.mk b/api-tests/ff/ipc/test_i049/source.mk index 6d6a3f4a..9e3d969b 100644 --- a/api-tests/ff/ipc/test_i049/source.mk +++ b/api-tests/ff/ipc/test_i049/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i049.c +CC_SOURCE = test_entry_i049.c test_i049.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i049/test_entry.c b/api-tests/ff/ipc/test_i049/test_entry_i049.c similarity index 100% rename from api-tests/ff/ipc/test_i049/test_entry.c rename to api-tests/ff/ipc/test_i049/test_entry_i049.c diff --git a/api-tests/ff/ipc/test_i050/source.mk b/api-tests/ff/ipc/test_i050/source.mk index 790c1ccd..de52ee30 100644 --- a/api-tests/ff/ipc/test_i050/source.mk +++ b/api-tests/ff/ipc/test_i050/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i050.c +CC_SOURCE = test_entry_i050.c test_i050.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i050/test_entry.c b/api-tests/ff/ipc/test_i050/test_entry_i050.c similarity index 100% rename from api-tests/ff/ipc/test_i050/test_entry.c rename to api-tests/ff/ipc/test_i050/test_entry_i050.c diff --git a/api-tests/ff/ipc/test_i051/source.mk b/api-tests/ff/ipc/test_i051/source.mk index 70d114a2..5ea476ce 100644 --- a/api-tests/ff/ipc/test_i051/source.mk +++ b/api-tests/ff/ipc/test_i051/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i051.c +CC_SOURCE = test_entry_i051.c test_i051.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i051/test_entry.c b/api-tests/ff/ipc/test_i051/test_entry_i051.c similarity index 100% rename from api-tests/ff/ipc/test_i051/test_entry.c rename to api-tests/ff/ipc/test_i051/test_entry_i051.c diff --git a/api-tests/ff/ipc/test_i052/source.mk b/api-tests/ff/ipc/test_i052/source.mk index 29268c6f..e1aaf825 100644 --- a/api-tests/ff/ipc/test_i052/source.mk +++ b/api-tests/ff/ipc/test_i052/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i052.c +CC_SOURCE = test_entry_i052.c test_i052.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i052/test_entry.c b/api-tests/ff/ipc/test_i052/test_entry_i052.c similarity index 100% rename from api-tests/ff/ipc/test_i052/test_entry.c rename to api-tests/ff/ipc/test_i052/test_entry_i052.c diff --git a/api-tests/ff/ipc/test_i053/source.mk b/api-tests/ff/ipc/test_i053/source.mk index a34d622c..07e6f54b 100644 --- a/api-tests/ff/ipc/test_i053/source.mk +++ b/api-tests/ff/ipc/test_i053/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i053.c +CC_SOURCE = test_entry_i053.c test_i053.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i053/test_entry.c b/api-tests/ff/ipc/test_i053/test_entry_i053.c similarity index 100% rename from api-tests/ff/ipc/test_i053/test_entry.c rename to api-tests/ff/ipc/test_i053/test_entry_i053.c diff --git a/api-tests/ff/ipc/test_i054/source.mk b/api-tests/ff/ipc/test_i054/source.mk index bad2298f..8aae70f5 100644 --- a/api-tests/ff/ipc/test_i054/source.mk +++ b/api-tests/ff/ipc/test_i054/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i054.c +CC_SOURCE = test_entry_i054.c test_i054.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i054/test_entry.c b/api-tests/ff/ipc/test_i054/test_entry_i054.c similarity index 100% rename from api-tests/ff/ipc/test_i054/test_entry.c rename to api-tests/ff/ipc/test_i054/test_entry_i054.c diff --git a/api-tests/ff/ipc/test_i055/source.mk b/api-tests/ff/ipc/test_i055/source.mk index 742d2ce0..80a02635 100644 --- a/api-tests/ff/ipc/test_i055/source.mk +++ b/api-tests/ff/ipc/test_i055/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i055.c +CC_SOURCE = test_entry_i055.c test_i055.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i055/test_entry.c b/api-tests/ff/ipc/test_i055/test_entry_i055.c similarity index 100% rename from api-tests/ff/ipc/test_i055/test_entry.c rename to api-tests/ff/ipc/test_i055/test_entry_i055.c diff --git a/api-tests/ff/ipc/test_i056/source.mk b/api-tests/ff/ipc/test_i056/source.mk index 1e4739de..108c471c 100644 --- a/api-tests/ff/ipc/test_i056/source.mk +++ b/api-tests/ff/ipc/test_i056/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i056.c +CC_SOURCE = test_entry_i056.c test_i056.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i056/test_entry.c b/api-tests/ff/ipc/test_i056/test_entry_i056.c similarity index 100% rename from api-tests/ff/ipc/test_i056/test_entry.c rename to api-tests/ff/ipc/test_i056/test_entry_i056.c diff --git a/api-tests/ff/ipc/test_i057/source.mk b/api-tests/ff/ipc/test_i057/source.mk index f9f2e1be..25fbaa9e 100644 --- a/api-tests/ff/ipc/test_i057/source.mk +++ b/api-tests/ff/ipc/test_i057/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i057.c +CC_SOURCE = test_entry_i057.c test_i057.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i057/test_entry.c b/api-tests/ff/ipc/test_i057/test_entry_i057.c similarity index 100% rename from api-tests/ff/ipc/test_i057/test_entry.c rename to api-tests/ff/ipc/test_i057/test_entry_i057.c diff --git a/api-tests/ff/ipc/test_i058/source.mk b/api-tests/ff/ipc/test_i058/source.mk index 38cbf72e..e4adfa9b 100644 --- a/api-tests/ff/ipc/test_i058/source.mk +++ b/api-tests/ff/ipc/test_i058/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i058.c +CC_SOURCE = test_entry_i058.c test_i058.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i058/test_entry.c b/api-tests/ff/ipc/test_i058/test_entry_i058.c similarity index 100% rename from api-tests/ff/ipc/test_i058/test_entry.c rename to api-tests/ff/ipc/test_i058/test_entry_i058.c diff --git a/api-tests/ff/ipc/test_i059/source.mk b/api-tests/ff/ipc/test_i059/source.mk index b649fa8f..b72db0ba 100644 --- a/api-tests/ff/ipc/test_i059/source.mk +++ b/api-tests/ff/ipc/test_i059/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i059.c +CC_SOURCE = test_entry_i059.c test_i059.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i059/test_entry.c b/api-tests/ff/ipc/test_i059/test_entry_i059.c similarity index 100% rename from api-tests/ff/ipc/test_i059/test_entry.c rename to api-tests/ff/ipc/test_i059/test_entry_i059.c diff --git a/api-tests/ff/ipc/test_i060/source.mk b/api-tests/ff/ipc/test_i060/source.mk index 2b3e1854..5f4d02d8 100644 --- a/api-tests/ff/ipc/test_i060/source.mk +++ b/api-tests/ff/ipc/test_i060/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i060.c +CC_SOURCE = test_entry_i060.c test_i060.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i060/test_entry.c b/api-tests/ff/ipc/test_i060/test_entry_i060.c similarity index 100% rename from api-tests/ff/ipc/test_i060/test_entry.c rename to api-tests/ff/ipc/test_i060/test_entry_i060.c diff --git a/api-tests/ff/ipc/test_i061/source.mk b/api-tests/ff/ipc/test_i061/source.mk index f5e49fcd..dc4d9131 100644 --- a/api-tests/ff/ipc/test_i061/source.mk +++ b/api-tests/ff/ipc/test_i061/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i061.c +CC_SOURCE = test_entry_i061.c test_i061.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i061/test_entry.c b/api-tests/ff/ipc/test_i061/test_entry_i061.c similarity index 100% rename from api-tests/ff/ipc/test_i061/test_entry.c rename to api-tests/ff/ipc/test_i061/test_entry_i061.c diff --git a/api-tests/ff/ipc/test_i062/source.mk b/api-tests/ff/ipc/test_i062/source.mk index 4dcf5d3e..b14d3c31 100644 --- a/api-tests/ff/ipc/test_i062/source.mk +++ b/api-tests/ff/ipc/test_i062/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i062.c +CC_SOURCE = test_entry_i062.c test_i062.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i062/test_entry.c b/api-tests/ff/ipc/test_i062/test_entry_i062.c similarity index 100% rename from api-tests/ff/ipc/test_i062/test_entry.c rename to api-tests/ff/ipc/test_i062/test_entry_i062.c diff --git a/api-tests/ff/ipc/test_i063/source.mk b/api-tests/ff/ipc/test_i063/source.mk index 29f0e49e..b23ec714 100644 --- a/api-tests/ff/ipc/test_i063/source.mk +++ b/api-tests/ff/ipc/test_i063/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i063.c +CC_SOURCE = test_entry_i063.c test_i063.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i063/test_entry.c b/api-tests/ff/ipc/test_i063/test_entry_i063.c similarity index 100% rename from api-tests/ff/ipc/test_i063/test_entry.c rename to api-tests/ff/ipc/test_i063/test_entry_i063.c diff --git a/api-tests/ff/ipc/test_i064/source.mk b/api-tests/ff/ipc/test_i064/source.mk index 4f5a4869..1796e278 100644 --- a/api-tests/ff/ipc/test_i064/source.mk +++ b/api-tests/ff/ipc/test_i064/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i064.c +CC_SOURCE = test_entry_i064.c test_i064.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i064/test_entry.c b/api-tests/ff/ipc/test_i064/test_entry_i064.c similarity index 100% rename from api-tests/ff/ipc/test_i064/test_entry.c rename to api-tests/ff/ipc/test_i064/test_entry_i064.c diff --git a/api-tests/ff/ipc/test_i065/source.mk b/api-tests/ff/ipc/test_i065/source.mk index 9be71cf9..9f622830 100644 --- a/api-tests/ff/ipc/test_i065/source.mk +++ b/api-tests/ff/ipc/test_i065/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i065.c +CC_SOURCE = test_entry_i065.c test_i065.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i065/test_entry.c b/api-tests/ff/ipc/test_i065/test_entry_i065.c similarity index 100% rename from api-tests/ff/ipc/test_i065/test_entry.c rename to api-tests/ff/ipc/test_i065/test_entry_i065.c diff --git a/api-tests/ff/ipc/test_i066/source.mk b/api-tests/ff/ipc/test_i066/source.mk index 818fcc53..604c13c5 100644 --- a/api-tests/ff/ipc/test_i066/source.mk +++ b/api-tests/ff/ipc/test_i066/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i066.c +CC_SOURCE = test_entry_i066.c test_i066.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i066/test_entry.c b/api-tests/ff/ipc/test_i066/test_entry_i066.c similarity index 100% rename from api-tests/ff/ipc/test_i066/test_entry.c rename to api-tests/ff/ipc/test_i066/test_entry_i066.c diff --git a/api-tests/ff/ipc/test_i067/source.mk b/api-tests/ff/ipc/test_i067/source.mk index a3472640..cce0b538 100644 --- a/api-tests/ff/ipc/test_i067/source.mk +++ b/api-tests/ff/ipc/test_i067/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i067.c +CC_SOURCE = test_entry_i067.c test_i067.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i067/test_entry.c b/api-tests/ff/ipc/test_i067/test_entry_i067.c similarity index 100% rename from api-tests/ff/ipc/test_i067/test_entry.c rename to api-tests/ff/ipc/test_i067/test_entry_i067.c diff --git a/api-tests/ff/ipc/test_i068/source.mk b/api-tests/ff/ipc/test_i068/source.mk index d6cb0d7b..e85e11eb 100644 --- a/api-tests/ff/ipc/test_i068/source.mk +++ b/api-tests/ff/ipc/test_i068/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i068.c +CC_SOURCE = test_entry_i068.c test_i068.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i068/test_entry.c b/api-tests/ff/ipc/test_i068/test_entry_i068.c similarity index 100% rename from api-tests/ff/ipc/test_i068/test_entry.c rename to api-tests/ff/ipc/test_i068/test_entry_i068.c diff --git a/api-tests/ff/ipc/test_i069/source.mk b/api-tests/ff/ipc/test_i069/source.mk index 1a745a51..9bedeb2e 100644 --- a/api-tests/ff/ipc/test_i069/source.mk +++ b/api-tests/ff/ipc/test_i069/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i069.c +CC_SOURCE = test_entry_i069.c test_i069.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i069/test_entry.c b/api-tests/ff/ipc/test_i069/test_entry_i069.c similarity index 100% rename from api-tests/ff/ipc/test_i069/test_entry.c rename to api-tests/ff/ipc/test_i069/test_entry_i069.c diff --git a/api-tests/ff/ipc/test_i070/source.mk b/api-tests/ff/ipc/test_i070/source.mk index f399229b..9197155e 100644 --- a/api-tests/ff/ipc/test_i070/source.mk +++ b/api-tests/ff/ipc/test_i070/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i070.c +CC_SOURCE = test_entry_i070.c test_i070.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i070/test_entry.c b/api-tests/ff/ipc/test_i070/test_entry_i070.c similarity index 100% rename from api-tests/ff/ipc/test_i070/test_entry.c rename to api-tests/ff/ipc/test_i070/test_entry_i070.c diff --git a/api-tests/ff/ipc/test_i071/source.mk b/api-tests/ff/ipc/test_i071/source.mk index c6eade09..2eac129e 100644 --- a/api-tests/ff/ipc/test_i071/source.mk +++ b/api-tests/ff/ipc/test_i071/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i071.c +CC_SOURCE = test_entry_i071.c test_i071.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i071/test_entry.c b/api-tests/ff/ipc/test_i071/test_entry_i071.c similarity index 100% rename from api-tests/ff/ipc/test_i071/test_entry.c rename to api-tests/ff/ipc/test_i071/test_entry_i071.c diff --git a/api-tests/ff/ipc/test_i072/source.mk b/api-tests/ff/ipc/test_i072/source.mk index 7d3e4953..cdccca53 100644 --- a/api-tests/ff/ipc/test_i072/source.mk +++ b/api-tests/ff/ipc/test_i072/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i072.c +CC_SOURCE = test_entry_i072.c test_i072.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i072/test_entry.c b/api-tests/ff/ipc/test_i072/test_entry_i072.c similarity index 100% rename from api-tests/ff/ipc/test_i072/test_entry.c rename to api-tests/ff/ipc/test_i072/test_entry_i072.c diff --git a/api-tests/ff/ipc/test_i073/source.mk b/api-tests/ff/ipc/test_i073/source.mk index 2cea6c5f..d52216eb 100644 --- a/api-tests/ff/ipc/test_i073/source.mk +++ b/api-tests/ff/ipc/test_i073/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i073.c +CC_SOURCE = test_entry_i073.c test_i073.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i073/test_entry.c b/api-tests/ff/ipc/test_i073/test_entry_i073.c similarity index 100% rename from api-tests/ff/ipc/test_i073/test_entry.c rename to api-tests/ff/ipc/test_i073/test_entry_i073.c diff --git a/api-tests/ff/ipc/test_i074/source.mk b/api-tests/ff/ipc/test_i074/source.mk index e82e890e..df3f9bdc 100644 --- a/api-tests/ff/ipc/test_i074/source.mk +++ b/api-tests/ff/ipc/test_i074/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i074.c +CC_SOURCE = test_entry_i074.c test_i074.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i074/test_entry.c b/api-tests/ff/ipc/test_i074/test_entry_i074.c similarity index 100% rename from api-tests/ff/ipc/test_i074/test_entry.c rename to api-tests/ff/ipc/test_i074/test_entry_i074.c diff --git a/api-tests/ff/ipc/test_i075/source.mk b/api-tests/ff/ipc/test_i075/source.mk index db83c871..55b3a769 100644 --- a/api-tests/ff/ipc/test_i075/source.mk +++ b/api-tests/ff/ipc/test_i075/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i075.c +CC_SOURCE = test_entry_i075.c test_i075.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i075/test_entry.c b/api-tests/ff/ipc/test_i075/test_entry_i075.c similarity index 100% rename from api-tests/ff/ipc/test_i075/test_entry.c rename to api-tests/ff/ipc/test_i075/test_entry_i075.c diff --git a/api-tests/ff/ipc/test_i076/source.mk b/api-tests/ff/ipc/test_i076/source.mk index e98fc9db..31064b80 100644 --- a/api-tests/ff/ipc/test_i076/source.mk +++ b/api-tests/ff/ipc/test_i076/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i076.c +CC_SOURCE = test_entry_i076.c test_i076.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i076/test_entry.c b/api-tests/ff/ipc/test_i076/test_entry_i076.c similarity index 100% rename from api-tests/ff/ipc/test_i076/test_entry.c rename to api-tests/ff/ipc/test_i076/test_entry_i076.c diff --git a/api-tests/ff/ipc/test_i077/source.mk b/api-tests/ff/ipc/test_i077/source.mk index e1abcb0e..b5026c34 100644 --- a/api-tests/ff/ipc/test_i077/source.mk +++ b/api-tests/ff/ipc/test_i077/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i077.c +CC_SOURCE = test_entry_i077.c test_i077.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i077/test_entry.c b/api-tests/ff/ipc/test_i077/test_entry_i077.c similarity index 100% rename from api-tests/ff/ipc/test_i077/test_entry.c rename to api-tests/ff/ipc/test_i077/test_entry_i077.c diff --git a/api-tests/ff/ipc/test_i078/source.mk b/api-tests/ff/ipc/test_i078/source.mk index 628a2821..7f8dbe77 100644 --- a/api-tests/ff/ipc/test_i078/source.mk +++ b/api-tests/ff/ipc/test_i078/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i078.c +CC_SOURCE = test_entry_i078.c test_i078.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i078/test_entry.c b/api-tests/ff/ipc/test_i078/test_entry_i078.c similarity index 100% rename from api-tests/ff/ipc/test_i078/test_entry.c rename to api-tests/ff/ipc/test_i078/test_entry_i078.c diff --git a/api-tests/ff/ipc/test_i079/source.mk b/api-tests/ff/ipc/test_i079/source.mk index 09026a8a..e1357c4a 100644 --- a/api-tests/ff/ipc/test_i079/source.mk +++ b/api-tests/ff/ipc/test_i079/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i079.c +CC_SOURCE = test_entry_i079.c test_i079.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i079/test_entry.c b/api-tests/ff/ipc/test_i079/test_entry_i079.c similarity index 100% rename from api-tests/ff/ipc/test_i079/test_entry.c rename to api-tests/ff/ipc/test_i079/test_entry_i079.c diff --git a/api-tests/ff/ipc/test_i080/source.mk b/api-tests/ff/ipc/test_i080/source.mk index 0b19b917..8f88250a 100644 --- a/api-tests/ff/ipc/test_i080/source.mk +++ b/api-tests/ff/ipc/test_i080/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i080.c +CC_SOURCE = test_entry_i080.c test_i080.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i080/test_entry.c b/api-tests/ff/ipc/test_i080/test_entry_i080.c similarity index 100% rename from api-tests/ff/ipc/test_i080/test_entry.c rename to api-tests/ff/ipc/test_i080/test_entry_i080.c diff --git a/api-tests/ff/ipc/test_i081/source.mk b/api-tests/ff/ipc/test_i081/source.mk index f84c2cb6..3344b9e9 100644 --- a/api-tests/ff/ipc/test_i081/source.mk +++ b/api-tests/ff/ipc/test_i081/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i081.c +CC_SOURCE = test_entry_i081.c test_i081.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i081/test_entry.c b/api-tests/ff/ipc/test_i081/test_entry_i081.c similarity index 100% rename from api-tests/ff/ipc/test_i081/test_entry.c rename to api-tests/ff/ipc/test_i081/test_entry_i081.c diff --git a/api-tests/ff/ipc/test_i082/source.mk b/api-tests/ff/ipc/test_i082/source.mk index af85416d..7b568ce2 100644 --- a/api-tests/ff/ipc/test_i082/source.mk +++ b/api-tests/ff/ipc/test_i082/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i082.c +CC_SOURCE = test_entry_i082.c test_i082.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i082/test_entry.c b/api-tests/ff/ipc/test_i082/test_entry_i082.c similarity index 100% rename from api-tests/ff/ipc/test_i082/test_entry.c rename to api-tests/ff/ipc/test_i082/test_entry_i082.c diff --git a/api-tests/ff/ipc/test_i083/source.mk b/api-tests/ff/ipc/test_i083/source.mk index a0354eb0..a13ab841 100644 --- a/api-tests/ff/ipc/test_i083/source.mk +++ b/api-tests/ff/ipc/test_i083/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i083.c +CC_SOURCE = test_entry_i083.c test_i083.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i083/test_entry.c b/api-tests/ff/ipc/test_i083/test_entry_i083.c similarity index 100% rename from api-tests/ff/ipc/test_i083/test_entry.c rename to api-tests/ff/ipc/test_i083/test_entry_i083.c diff --git a/api-tests/ff/ipc/test_i084/source.mk b/api-tests/ff/ipc/test_i084/source.mk index 5d162ed9..428c0654 100644 --- a/api-tests/ff/ipc/test_i084/source.mk +++ b/api-tests/ff/ipc/test_i084/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i084.c +CC_SOURCE = test_entry_i084.c test_i084.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i084/test_entry.c b/api-tests/ff/ipc/test_i084/test_entry_i084.c similarity index 100% rename from api-tests/ff/ipc/test_i084/test_entry.c rename to api-tests/ff/ipc/test_i084/test_entry_i084.c diff --git a/api-tests/ff/ipc/test_i085/source.mk b/api-tests/ff/ipc/test_i085/source.mk index 2456cf49..2a8e13b9 100644 --- a/api-tests/ff/ipc/test_i085/source.mk +++ b/api-tests/ff/ipc/test_i085/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i085.c +CC_SOURCE = test_entry_i085.c test_i085.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i085/test_entry.c b/api-tests/ff/ipc/test_i085/test_entry_i085.c similarity index 100% rename from api-tests/ff/ipc/test_i085/test_entry.c rename to api-tests/ff/ipc/test_i085/test_entry_i085.c diff --git a/api-tests/ff/ipc/test_i086/source.mk b/api-tests/ff/ipc/test_i086/source.mk index c4127af3..d07ace17 100644 --- a/api-tests/ff/ipc/test_i086/source.mk +++ b/api-tests/ff/ipc/test_i086/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i086.c +CC_SOURCE = test_entry_i086.c test_i086.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i086/test_entry.c b/api-tests/ff/ipc/test_i086/test_entry_i086.c similarity index 100% rename from api-tests/ff/ipc/test_i086/test_entry.c rename to api-tests/ff/ipc/test_i086/test_entry_i086.c diff --git a/api-tests/ff/ipc/test_i087/source.mk b/api-tests/ff/ipc/test_i087/source.mk index 492f7953..d0cfd53e 100644 --- a/api-tests/ff/ipc/test_i087/source.mk +++ b/api-tests/ff/ipc/test_i087/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_i087.c +CC_SOURCE = test_entry_i087.c test_i087.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_i087/test_entry.c b/api-tests/ff/ipc/test_i087/test_entry_i087.c similarity index 100% rename from api-tests/ff/ipc/test_i087/test_entry.c rename to api-tests/ff/ipc/test_i087/test_entry_i087.c diff --git a/api-tests/ff/ipc/test_l088/source.mk b/api-tests/ff/ipc/test_l088/source.mk index c2004628..69cfbcfb 100644 --- a/api-tests/ff/ipc/test_l088/source.mk +++ b/api-tests/ff/ipc/test_l088/source.mk @@ -14,7 +14,7 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry.c test_l088.c +CC_SOURCE = test_entry_l088.c test_l088.c CC_OPTIONS = AS_SOURCE = AS_OPTIONS = diff --git a/api-tests/ff/ipc/test_l088/test_entry.c b/api-tests/ff/ipc/test_l088/test_entry_l088.c similarity index 100% rename from api-tests/ff/ipc/test_l088/test_entry.c rename to api-tests/ff/ipc/test_l088/test_entry_l088.c diff --git a/api-tests/tools/makefiles/linker/test.sct b/api-tests/tools/makefiles/linker/test.sct index 4d5a7a91..4de849d9 100644 --- a/api-tests/tools/makefiles/linker/test.sct +++ b/api-tests/tools/makefiles/linker/test.sct @@ -24,7 +24,7 @@ LR_CODE TEST_CODE_START ER_CODE TEST_CODE_START (TEST_INFO_SIZE+TEST_TEXT_SIZE+TEST_DATA_SIZE) { - test_entry_nspe.o(.acs_test_info +FIRST) + test_entry_*_nspe.o(.acs_test_info +FIRST) * (+CODE) * (+RO) * (+ZI +RW) From ed369dec96df5ee895f851e920416a75b3615ff1 Mon Sep 17 00:00:00 2001 From: Tamas Kaman Date: Fri, 12 Jul 2019 15:32:38 +0200 Subject: [PATCH 04/54] Add TF-M AN524 support for Developer API tests This commit creates the new target by copying all files from AN521 target and modifying the target.cfg file. Signed-off-by: Tamas Kaman --- .../targets/tgt_dev_apis_tfm_an524/Makefile | 160 ++++++ .../common/driver_partition_psa.json | 75 +++ .../manifests/ipc/client_partition_psa.json | 37 ++ .../manifests/ipc/server_partition_psa.json | 69 +++ .../nspe/common/pal_client_api_empty_intf.c | 93 ++++ .../nspe/common/pal_client_api_intf.c | 97 ++++ .../nspe/common/pal_client_api_intf.h | 32 ++ .../nspe/common/pal_common.h | 118 +++++ .../nspe/common/pal_config.h | 119 +++++ .../nspe/common/pal_driver_ipc_intf.c | 305 +++++++++++ .../nspe/common/pal_driver_ns_intf.c | 145 ++++++ .../nspe/crypto/pal_crypto_config.h | 323 ++++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c | 30 ++ .../nspe/crypto/pal_crypto_intf.c | 340 ++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 76 +++ .../pal_attestation_crypto.c | 346 ++++++++++++ .../pal_attestation_crypto.h | 102 ++++ .../initial_attestation/pal_attestation_eat.c | 491 ++++++++++++++++++ .../initial_attestation/pal_attestation_eat.h | 170 ++++++ .../pal_attestation_empty_intf.c | 30 ++ .../pal_attestation_intf.c | 54 ++ .../pal_attestation_intf.h | 30 ++ .../pal_internal_trusted_storage_empty_intf.c | 30 ++ .../pal_internal_trusted_storage_intf.c | 60 +++ .../pal_internal_trusted_storage_intf.h | 31 ++ .../pal_protected_storage_empty_intf.c | 30 ++ .../pal_protected_storage_intf.c | 75 +++ .../pal_protected_storage_intf.h | 34 ++ .../spe/pal_driver_intf.c | 132 +++++ .../spe/pal_driver_intf.h | 35 ++ .../targets/tgt_dev_apis_tfm_an524/target.cfg | 57 ++ 32 files changed, 3949 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile new file mode 100644 index 00000000..473879d5 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile @@ -0,0 +1,160 @@ +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +include $(SOURCE)/tools/makefiles/toolchain.mk + +# Make variables to select correct instances of PAL files + +## PSA_IPC_IMPLEMENTED must be true for IPC SUITE +PSA_IPC_IMPLEMENTED:=0 + +## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE +PSA_CRYPTO_IMPLEMENTED:=1 + +## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE +PSA_PROTECTED_STORAGE_IMPLEMENTED:=1 + +## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE +PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 + +## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE +PSA_INITIAL_ATTESTATION_IMPLEMENTED:=1 + +# Make variables holding NSPE/SPE source files + +## PAL C source files part of NSPE library +SRC_C_NSPE= + +## PAL ASM source files part of NSPE library +SRC_ASM_NSPE= + +## PAL C source files part of SPE library - driver partition +SRC_C_DRIVER_SP= + +## PAL ASM source files part of SPE library - driver partition +SRC_ASM_DRIVER_SP= + +ifeq (${PSA_IPC_IMPLEMENTED},1) +# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services +# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. +SRC_C_NSPE += pal_client_api_intf.c +SRC_C_NSPE += pal_driver_ipc_intf.c + +# Driver files will be compiled as part of driver partition +SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c +else + +# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE +SRC_C_NSPE += pal_client_api_empty_intf.c +SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c +endif + +ifeq (${PSA_CRYPTO_IMPLEMENTED},1) +SRC_C_NSPE += pal_crypto_intf.c +else +SRC_C_NSPE += pal_crypto_empty_intf.c +endif + +ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) +SRC_C_NSPE += pal_protected_storage_intf.c +else +SRC_C_NSPE += pal_protected_storage_empty_intf.c +endif + +ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) +SRC_C_NSPE += pal_internal_trusted_storage_intf.c +else +SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c +endif + +ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) +SRC_C_NSPE += pal_attestation_intf.c +SRC_C_NSPE += pal_attestation_eat.c +SRC_C_NSPE += pal_attestation_crypto.c +else +SRC_C_NSPE += pal_attestation_empty_intf.c +endif + +INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ + -I$(SOURCE)/platform/targets/$(TARGET)/spe \ + -I$(BUILD)/platform/$(TARGET)/ \ + -I$(SOURCE)/platform/drivers/uart/cmsdk \ + -I$(SOURCE)/platform/drivers/nvmem/ \ + -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ + -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ + +VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ + $(SOURCE)/platform/targets/$(TARGET)/spe: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe: \ + $(SOURCE)/platform/drivers/uart/cmsdk: \ + $(SOURCE)/platform/drivers/nvmem: \ + $(SOURCE)/platform/drivers/watchdog/cmsdk: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ + $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ + +all: build + +ifeq (${PSA_IPC_IMPLEMENTED},1) +build: mkdir build_nspe_pal build_spe_pal +else +build: mkdir build_nspe_pal +endif + +mkdir: + @mkdir -p $(BUILD)/platform/nspe/ + @mkdir -p $(BUILD)/platform/spe/ + +# BUILD NSPE PAL +build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a + +build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) +build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) + +$(BUILD)/platform/nspe/%.o : %.c + $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< + +$(BUILD)/platform/nspe/%.o : %.s + $(AS) $(INCLUDE) -o $@ $< + +pal_nspe.a: + $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o + +# BUILD SPE PAL +build_spe_pal: build_driver_sp + +build_driver_sp: build_c_driver_sp build_asm_driver_sp + +build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) +build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) + +# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a +$(BUILD)/platform/spe/%_driver_sp.o : %.c + $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< + +$(BUILD)/platform/spe/%_driver_sp.o : %.s + $(AS) $(INCLUDE) -o $@ $< + +clean: + @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json new file mode 100644 index 00000000..e3cec929 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json @@ -0,0 +1,75 @@ +{ + "psa_framework_version": 1.0, + "name": "DRIVER_PARTITION", + "type": "PSA-ROT", + "priority": "NORMAL", + "description": "Implements device services such print, flash read/write,. etc.", + "entry_point": "driver_main", + "stack_size": "0x400", + "services": [{ + "name": "DRIVER_UART_SID", + "sid": "0x0000FC01", + "signal": "DRIVER_UART_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_WATCHDOG_SID", + "sid": "0x0000FC02", + "signal": "DRIVER_WATCHDOG_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_NVMEM_SID", + "sid": "0x0000FC03", + "signal": "DRIVER_NVMEM_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_TEST_SID", + "sid": "0x0000FC04", + "signal": "DRIVER_TEST_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + } + ], + "mmio_regions" : [ + { + "name": "UART_REGION", + "base": "0x40004000", + "size": "0x1000", + "permission": "READ-WRITE" + }, + { + "name": "WATCHDOG_REGION", + "base": "0x40008000", + "size": "0x1000", + "permission": "READ-WRITE" + }, + { + "name": "NVMEM_REGION", + "base": "0x2002F000", + "size": "0x400", + "permission": "READ-WRITE" + }, + { + "name": "DRIVER_PARTITION_MMIO", + "base": "0x200AF040", + "size": "0x20", + "permission": "READ-WRITE" + } + ], + "irqs": [ + { + "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", + "signal": "DRIVER_UART_INTR_SIG", + "line_num": 37 + } + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json new file mode 100644 index 00000000..b93377bd --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json @@ -0,0 +1,37 @@ +{ + "psa_framework_version": 1.0, + "name": "CLIENT_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Client partition executing client test func from SPE", + "entry_point": "client_main", + "stack_size": "0x400", + "services": [{ + "name": "CLIENT_TEST_DISPATCHER_SID", + "sid": "0x0000FA01", + "signal": "CLIENT_TEST_DISPATCHER_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART_SID", + "DRIVER_NVMEM_SID", + "DRIVER_TEST_SID", + "SERVER_TEST_DISPATCHER_SID", + "SERVER_UNSPECIFED_MINOR_V_SID", + "SERVER_STRICT_MINOR_VERSION_SID", + "SERVER_RELAX_MINOR_VERSION_SID", + "SERVER_SECURE_CONNECT_ONLY_SID", + "SERVER_CONNECTION_DROP_SID" + ], + "mmio_regions" : [ + { + "name": "CLIENT_PARTITION_MMIO", + "base": "0x200AF000", + "size": "0x20", + "permission": "READ-WRITE" + } + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json new file mode 100644 index 00000000..146b8fbc --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json @@ -0,0 +1,69 @@ +{ + "psa_framework_version": 1.0, + "name": "SERVER_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Server partition executing server test func", + "entry_point": "server_main", + "stack_size": "0x400", + "heap_size": "0x100", + "services": [{ + "name": "SERVER_TEST_DISPATCHER_SID", + "sid": "0x0000FB01", + "signal": "SERVER_TEST_DISPATCHER_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_SECURE_CONNECT_ONLY_SID", + "sid": "0x0000FB02", + "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", + "non_secure_clients": false, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_STRICT_MINOR_VERSION_SID", + "sid": "0x0000FB03", + "signal": "SERVER_STRICT_MINOR_VERSION_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "STRICT" + }, + { + "name": "SERVER_UNSPECIFED_MINOR_V_SID", + "sid": "0x0000FB04", + "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", + "non_secure_clients": true + }, + { + "name": "SERVER_RELAX_MINOR_VERSION_SID", + "sid": "0x0000FB05", + "signal": "SERVER_RELAX_MINOR_VERSION_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_UNEXTERN_SID", + "sid": "0x0000FB06", + "signal": "SERVER_UNEXTERN_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_CONNECTION_DROP_SID", + "sid": "0x0000FB07", + "signal": "SERVER_CONNECTION_DROP_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART_SID", + "DRIVER_NVMEM_SID" + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..578b4cef --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,93 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - minor_version : minor_version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c new file mode 100644 index 00000000..20ddd118 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c @@ -0,0 +1,97 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return (psa_framework_version()); +} + +/** + * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return (psa_version(sid)); +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - minor_version : minor_version of RoT service + * @return - psa_handle_t : return connection handle + * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +{ + return (psa_connect(sid, minor_version)); +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + * Note - Return -1 if PSA IPC is not implemented. + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (psa_call(handle, in_vec, in_len, out_vec, out_len)); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param - handle Handle for the connection. + * @return - void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + psa_close(handle); +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..3f5741e0 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h new file mode 100644 index 00000000..3ebe1e10 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h @@ -0,0 +1,118 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#ifndef TARGET_CFG_BUILD +#include "pal_config.h" +#include "pal_crypto_config.h" +#endif + +/* typedef's */ +typedef uint8_t bool_t; +typedef uint32_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum +{ + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#if (PSA_IPC_IMPLEMENTED == 0) + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* PSA_IPC_IMPLEMENTED */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h new file mode 100644 index 00000000..e3f70ad7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -0,0 +1,119 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* + * List of macros used by test suite + */ +#if !defined(PSA_IPC_IMPLEMENTED) +#define PSA_IPC_IMPLEMENTED 0 +#endif + +#if !defined(PSA_CRYPTO_IMPLEMENTED) +#define PSA_CRYPTO_IMPLEMENTED 0 +#endif + +#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) +#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 +#endif + +#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) +#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 +#endif + +#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) +#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 +#endif + +#if (PSA_IPC_IMPLEMENTED == 0) && \ + (PSA_CRYPTO_IMPLEMENTED == 0) && \ + (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ + (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ + (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) +#error "You must define at least one of these macros to run test suite" +#endif + +#if !defined(VERBOSE) +#define VERBOSE 3 /* Print verbosity = TEST */ +#endif + +#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) +#define VAL_NSPE_BUILD 1 +#endif + +#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) +#define NONSECURE_TEST_BUILD 1 +#endif + +#if !defined(TEST_COMBINE_ARCHIVE) +#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ +#endif + +#if !defined(WATCHDOG_AVAILABLE) +#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ +#endif + +#if !defined(SP_HEAP_MEM_SUPP) +#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ +#endif + +/* + * Include of PSA defined Header files + */ + +#if PSA_IPC_IMPLEMENTED +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#if PSA_CRYPTO_IMPLEMENTED +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#if PSA_PROTECTED_STORAGE_IMPLEMENTED +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c new file mode 100644 index 00000000..f8f773fb --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c @@ -0,0 +1,305 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_INIT; + + psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, + {&uart_base_addr, sizeof(uart_base_addr)}, + {NULL, 0}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); + if (print_handle < 0) + { + return(PAL_STATUS_ERROR); + } + + status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + return(PAL_STATUS_ERROR); + } + + pal_ipc_close(print_handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + int string_len = 0; + char *p = str; + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + pal_status_t status = PAL_STATUS_SUCCESS; + uart_fn_type_t uart_fn = UART_PRINT; + + while (*p != '\0') + { + string_len++; + p++; + } + + psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, + {str, string_len+1}, + {&data, sizeof(data)}}; + print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); + + if (print_handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + status = PAL_STATUS_ERROR; + } + } + pal_ipc_close(print_handle); + return status; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_INIT_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = time_us; + wd_param.wd_timer_tick_us = timer_tick_us; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_ENABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_DISABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_READ; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; + psa_outvec outvec[1] = {{buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + psa_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_WRITE; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..2af6fcc7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + pal_uart_cmsdk_init(uart_base_addr); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + pal_cmsdk_print(str, data); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_read(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_write(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..ab11fd16 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,323 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_DES +//#define ARCH_TEST_DES_1KEY +//#define ARCH_TEST_DES_2KEY +//#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +//#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_MD2 +//#define ARCH_TEST_MD4 +//#define ARCH_TEST_MD5 +//#define ARCH_TEST_RIPEMD160 +#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +//#define ARCH_TEST_SHA512_224 +//#define ARCH_TEST_SHA512_256 +//#define ARCH_TEST_SHA3_224 +//#define ARCH_TEST_SHA3_256 +//#define ARCH_TEST_SHA3_384 +//#define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_GMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..f18a7852 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c new file mode 100644 index 00000000..2a28f397 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..3df6aa8d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,340 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + size_t size, *length, salt_length, label_length, ciphertext_size; + uint8_t *buffer, *ciphertext; + const uint8_t *salt, *label, *nonce, *additional_data; + uint8_t *plaintext; + uint32_t status; + const void *extra; + size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; + psa_key_handle_t handle, *key_handle, target_handle; + psa_key_type_t key_type, *key_type_out; + psa_key_policy_t *policy; + psa_key_usage_t usage, *usage_out; + psa_key_lifetime_t *lifetime_out; + psa_algorithm_t alg, *alg_out; + psa_hash_operation_t *hash_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_crypto_generator_t *generator; + + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + status = psa_import_key(handle, key_type, buffer, size); + return status; + case PAL_CRYPTO_EXPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t*)); + size = va_arg(valist, int); + length = (size_t *)va_arg(valist, size_t*); + status = psa_export_key(handle, buffer, size, length); + return status; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t*)); + size = va_arg(valist, int); + length = (size_t *)va_arg(valist, size_t*); + status = psa_export_public_key(handle, buffer, size, length); + return status; + case PAL_CRYPTO_KEY_POLICY_INIT: + policy = va_arg(valist, psa_key_policy_t*); + memset(policy, 0, sizeof(psa_key_policy_t)); + return 0; + case PAL_CRYPTO_KEY_POLICY_SET_USAGE: + policy = va_arg(valist, psa_key_policy_t*); + usage = va_arg(valist, psa_key_usage_t); + alg = va_arg(valist, psa_algorithm_t); + psa_key_policy_set_usage(policy, usage, alg); + return 0; + case PAL_CRYPTO_SET_KEY_POLICY: + handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_set_key_policy(handle, policy); + case PAL_CRYPTO_DESTROY_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + status = psa_destroy_key(handle); + return status; + case PAL_CRYPTO_GET_KEY_INFORMATION: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type_out = va_arg(valist, psa_key_type_t*); + length = (size_t *)va_arg(valist, size_t*); + status = psa_get_key_information(handle, key_type_out, length); + return status; + case PAL_CRYPTO_GET_KEY_POLICY: + handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_get_key_policy(handle, policy); + case PAL_CRYPTO_KEY_POLICY_GET_USAGE: + policy = va_arg(valist, psa_key_policy_t*); + usage_out = va_arg(valist, psa_key_usage_t*); + *usage_out = psa_key_policy_get_usage(policy); + return 0; + case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: + policy = va_arg(valist, psa_key_policy_t*); + alg_out = va_arg(valist, psa_algorithm_t*); + *alg_out = psa_key_policy_get_algorithm(policy); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + handle = (psa_key_handle_t)va_arg(valist, int); + lifetime_out = va_arg(valist, psa_key_lifetime_t*); + return psa_get_key_lifetime(handle, lifetime_out); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); + case PAL_CRYPTO_GENERATE_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + size = va_arg(valist, size_t); + extra = va_arg(valist, const void*); + extra_size = va_arg(valist, size_t); + return psa_generate_key(handle, key_type, size, extra, extra_size); + case PAL_CRYPTO_GENERATOR_READ: + generator = va_arg(valist, psa_crypto_generator_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + return psa_generator_read(generator, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION: + generator = va_arg(valist, psa_crypto_generator_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + label = va_arg(valist, const uint8_t *); + label_length = va_arg(valist, size_t); + capacity = va_arg(valist, size_t); + return psa_key_derivation(generator, handle, alg, salt, salt_length, label, + label_length, capacity); + case PAL_CRYPTO_GET_GENERATOR_CAPACITY: + generator = va_arg(valist, psa_crypto_generator_t*); + gen_cap = va_arg(valist, size_t*); + return psa_get_generator_capacity(generator, gen_cap); + case PAL_CRYPTO_GENERATOR_IMPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + size = va_arg(valist, size_t); + generator = va_arg(valist, psa_crypto_generator_t*); + return psa_generator_import_key(handle, key_type, size, generator); + case PAL_CRYPTO_GENERATOR_ABORT: + generator = va_arg(valist, psa_crypto_generator_t*); + return psa_generator_abort(generator); + case PAL_CRYPTO_AEAD_ENCRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_ASYMMTERIC_SIGN: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); + case PAL_CRYPTO_KEY_AGREEMENT: + generator = va_arg(valist, psa_crypto_generator_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_agreement(generator, handle, buffer, size, alg); + case PAL_CRYPTO_ALLOCATE_KEY: + key_handle = (psa_key_handle_t *)va_arg(valist, int*); + return psa_allocate_key(key_handle); + case PAL_CRYPTO_COPY_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + target_handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_copy_key(handle, target_handle, policy); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..d1dabfa4 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,76 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_H_ +#define _PAL_CRYPTO_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_GET_KEY_INFO = 0x7, + PAL_CRYPTO_KEY_POLICY_INIT = 0x8, + PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, + PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, + PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, + PAL_CRYPTO_SET_KEY_POLICY = 0xC, + PAL_CRYPTO_GET_KEY_POLICY = 0xD, + PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, + PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, + PAL_CRYPTO_HASH_SETUP = 0x11, + PAL_CRYPTO_HASH_UPDATE = 0x12, + PAL_CRYPTO_HASH_VERIFY = 0x13, + PAL_CRYPTO_HASH_FINISH = 0x14, + PAL_CRYPTO_HASH_ABORT = 0x15, + PAL_CRYPTO_GENERATE_KEY = 0x16, + PAL_CRYPTO_GENERATOR_READ = 0x17, + PAL_CRYPTO_KEY_DERIVATION = 0x18, + PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, + PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, + PAL_CRYPTO_GENERATOR_ABORT = 0x1B, + PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, + PAL_CRYPTO_AEAD_DECRYPT = 0x1D, + PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, + PAL_CRYPTO_MAC_UPDATE = 0x1F, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, + PAL_CRYPTO_MAC_ABORT = 0x23, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, + PAL_CRYPTO_CIPHER_SET_IV = 0x2C, + PAL_CRYPTO_CIPHER_UPDATE = 0x2D, + PAL_CRYPTO_CIPHER_FINISH = 0x2E, + PAL_CRYPTO_CIPHER_ABORT = 0x2F, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, + PAL_CRYPTO_KEY_AGREEMENT = 0x32, + PAL_CRYPTO_ALLOCATE_KEY = 0x33, + PAL_CRYPTO_COPY_KEY = 0x34, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c new file mode 100644 index 00000000..ae2bdba4 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -0,0 +1,346 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +static uint32_t public_key_registered = 0; + +static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, + size_t amount) +{ + return UsefulBuf_Head(buf, amount); +} + +static uint32_t check_hash_sizes(void) +{ + if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) + { + return PAL_ATTEST_HASH_FAIL; + } + + return PAL_ATTEST_SUCCESS; +} + +static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) +{ + psa_ecc_curve_t psa_curve; + + /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ + switch (cose_curve) + { + case P_256: + psa_curve = PSA_ECC_CURVE_SECP256R1; + break; + default: + psa_curve = USHRT_MAX; + } + + return psa_curve; +} + +static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) +{ + psa_algorithm_t status; + + switch (cose_hash_alg_id) + { + case COSE_ALG_SHA256_PROPRIETARY: + status = PSA_ALG_SHA_256; + break; + default: + status = PSA_ALG_MD4; + break; + } + + return status; +} + +static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) +{ + switch (cose_sig_alg_id) + { + case COSE_ALGORITHM_ES256: + return COSE_ALG_SHA256_PROPRIETARY; + default: + return INT32_MAX; + } +} + +int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +{ + int32_t cose_ret = PAL_ATTEST_SUCCESS; + psa_status_t psa_ret; + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + cose_ret = check_hash_sizes(); + if (cose_ret) + { + goto error; + } + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + cose_ret = PAL_ATTEST_HASH_FAIL; + goto error; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + + if (psa_ret == PAL_ATTEST_SUCCESS) + { + psa_hash_ctx->status = PAL_ATTEST_SUCCESS; + cose_ret = PAL_ATTEST_SUCCESS; + } + else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) + { + cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + +error: + return cose_ret; +} + +void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf_c data_to_hash) +{ + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + return; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + + if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) + { + if (data_to_hash.ptr != NULL) + { + psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, + data_to_hash.ptr, + data_to_hash.len); + } + else + { + /* Intentionally do nothing, just computing the size of the token */ + } + } +} + +int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result) +{ + uint32_t cose_ret = PAL_ATTEST_SUCCESS; + psa_status_t psa_ret; + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + cose_ret = PAL_ATTEST_HASH_FAIL; + goto error; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + + if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) + { + psa_ret = psa_hash_finish(&psa_hash_ctx->operation, + buffer_to_hold_result.ptr, + buffer_to_hold_result.len, + &(hash_result->len)); + + if (psa_ret == PAL_ATTEST_SUCCESS) + { + hash_result->ptr = buffer_to_hold_result.ptr; + cose_ret = 0; + } + else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) + { + cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + +error: + return cose_ret; +} + +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash) +{ + uint32_t status = PAL_ATTEST_SUCCESS; + struct pal_cose_crypto_hash hash_ctx; + + status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (status) + return status; + + pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + + return status; +} + +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload) +{ + uint32_t status; + QCBOREncodeContext cbor_encode_ctx; + struct q_useful_buf_c tbs_first_part; + QCBORError qcbor_result; + struct pal_cose_crypto_hash hash_ctx = {{0}}; + int32_t hash_alg_id; + UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + + /* This builds the CBOR-format to-be-signed bytes */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); + QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ + QCBOREncode_AddSZString(&cbor_encode_ctx, + COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, + protected_headers); + /* sign_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + /* external_aad */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + /* fake payload */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_CloseArray(&cbor_encode_ctx); + + /* Get the result and convert it to struct q_useful_buf_c representation */ + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); + if (qcbor_result) + { + /* Mainly means that the protected_headers were too big + (which should never happen) */ + status = PAL_ATTEST_ERR_SIGN_STRUCT; + goto Done; + } + + /* Start the hashing */ + hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); + + /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() + * will handle it properly + */ + status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + if (status) + goto Done; + + /* Hash the first part of the TBS. Take all but the last two + * bytes. The last two bytes are the fake payload from above. It + * is replaced by the real payload which is hashed next. The fake + * payload is needed so the array count is right. This is one of + * the main things that make it possible to implement with one + * buffer for the whole cose sign1. + */ + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, + tbs_first_part.len - 2)); + + /* Hash the payload */ + pal_cose_crypto_hash_update(&hash_ctx, payload); + + /* Finish the hash and set up to return it */ + status = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); + +Done: + return status; +} + +uint32_t pal_import_attest_key(int32_t alg) +{ + psa_key_type_t attest_key_type; + size_t public_key_size; + psa_status_t status = PSA_SUCCESS; + psa_key_policy_t policy; + psa_ecc_curve_t psa_curve; + psa_key_handle_t public_key_handle; + + /* Mapping of COSE curve type to PSA curve types */ + psa_curve = attest_map_elliptic_curve_type(P_256); + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); + + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return status; + + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return status; + + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + + /* Register public key to crypto service */ + public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + + status = psa_import_key(public_key_handle, + attest_key_type, + (const uint8_t *)&attest_public_key, + public_key_size + 1); + + return status; +} + + +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, + struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature) +{ + uint32_t status = PAL_ATTEST_SUCCESS; + + if (!public_key_registered) + { + status = pal_import_attest_key(cose_algorithm_id); + if (status != PAL_ATTEST_SUCCESS) + return status; + + public_key_registered = 1; + } + +/* + * Enable the verify function when Trusted Firmare - M Supports + + * Verify the signature a hash or short message using a public key. + status = psa_asymmetric_verify(public_key_handle, + cose_algorithm_id, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); +*/ + return status; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h new file mode 100644 index 00000000..2d63ad13 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h @@ -0,0 +1,102 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_attestation_eat.h" + +#define ATTEST_PUBLIC_KEY_SLOT 4 + +typedef struct{ + uint8_t *pubx_key; + uint32_t pubx_key_size; + uint8_t *puby_key; + uint32_t puby_key_size; +} ecc_key_t; + +struct ecc_public_key_t { + const uint8_t a; + uint8_t public_key[]; /* X-coordinate || Y-coordinate */ +}; + +static const struct ecc_public_key_t attest_public_key = { + /* Constant byte */ + 0x04, + /* X-coordinate */ + {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, + /* Y-coordinate */ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, +}; + +struct pal_cose_crypto_hash { + /* Can't put the actual size here without creating dependecy on + * actual hash implementation, so this is a fairly large and + * accommodating size. + */ + uint8_t bytes[128]; +}; + +struct pal_cose_psa_crypto_hash { + psa_status_t status; + psa_hash_operation_t operation; +}; + +static const uint8_t initial_attestation_public_x_key[] = +{ + 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F +}; + +static const uint8_t initial_attestation_public_y_key[] = +{ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 +}; + +/* Initialize the structure with given public key */ +static const ecc_key_t attest_key = { + (uint8_t *)initial_attestation_public_x_key, + sizeof(initial_attestation_public_x_key), + (uint8_t *)initial_attestation_public_y_key, + sizeof(initial_attestation_public_y_key) +}; + +int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf_c data_to_hash); +int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result); +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash); +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload); +uint32_t pal_import_attest_key(int32_t alg); +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature); + + diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c new file mode 100644 index 00000000..178fdc9c --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c @@ -0,0 +1,491 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +uint32_t mandatory_claims = 0; +uint32_t mandaroty_sw_components = 0; +bool_t sw_component_present = 0; + +static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, + struct q_useful_buf buffer_for_cose_key, + struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) +{ + uint32_t return_value; + QCBORError qcbor_result; + QCBOREncodeContext cbor_encode_ctx; + int32_t cose_curve_id = P_256; + struct q_useful_buf_c encoded_key_id; + + /* Get the public key x and y */ + /* Encode it into a COSE_Key structure */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); + QCBOREncode_OpenMap(&cbor_encode_ctx); + QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, + COSE_KEY_COMMON_KTY, + COSE_KEY_TYPE_EC2); + QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_CRV, + cose_curve_id); + QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_X_COORDINATE, + x_cord); + QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_Y_COORDINATE, + y_cord); + QCBOREncode_CloseMap(&cbor_encode_ctx); + + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); + if (qcbor_result != QCBOR_SUCCESS) + { + /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ + return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; + goto Done; + } + + /* Finish up and return */ + *cose_key = encoded_key_id; + return_value = PAL_ATTEST_SUCCESS; + +Done: + return return_value; +} + + +static int get_items_in_map(QCBORDecodeContext *decode_context, + struct items_to_get_t *item_list) +{ + int item_index; + QCBORItem item; + struct items_to_get_t *item_ptr = item_list; + + /* initialize the data type of all items in the list */ + while (item_ptr->label != 0) + { + item_ptr->item.uDataType = QCBOR_TYPE_NONE; + item_ptr++; + } + + QCBORDecode_GetNext(decode_context, &item); + if (item.uDataType != QCBOR_TYPE_MAP) + { + return PAL_ATTEST_ERROR; + } + + for (item_index = item.val.uCount; item_index != 0; item_index--) + { + if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + if (item.uLabelType != QCBOR_TYPE_INT64) + { + continue; + } + + item_ptr = item_list; + while (item_ptr->label != 0) + { + if (item.label.int64 == item_ptr->label) + { + item_ptr->item = item; + } + item_ptr++; + } + } + + return PAL_ATTEST_SUCCESS; +} + +static int get_item_in_map(QCBORDecodeContext *decode_context, + int32_t label, + QCBORItem *item) +{ + struct items_to_get_t item_list[2]; + + item_list[0].label = label; + item_list[1].label = 0; + + if (get_items_in_map(decode_context, item_list)) + { + return PAL_ATTEST_ERROR; + } + + if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + *item = item_list[0].item; + + return PAL_ATTEST_SUCCESS; +} + +static int parse_unprotected_headers(QCBORDecodeContext *decode_context, + struct q_useful_buf_c *child, + bool *loop_back) +{ + struct items_to_get_t item_list[3]; + + item_list[0].label = COSE_HEADER_PARAM_KID; + item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; + item_list[2].label = 0; + *loop_back = false; + + if (get_items_in_map(decode_context, item_list)) + { + return PAL_ATTEST_ERROR; + } + + if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) + { + *loop_back = true; + } + + if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + *child = item_list[0].item.val.string; + + return PAL_ATTEST_SUCCESS; +} + +static int parse_protected_headers(struct q_useful_buf_c protected_headers, + int32_t *alg_id) +{ + QCBORDecodeContext decode_context; + QCBORItem item; + + QCBORDecode_Init(&decode_context, protected_headers, 0); + + if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) + { + return PAL_ATTEST_ERROR; + } + + if (QCBORDecode_Finish(&decode_context)) + { + return PAL_ATTEST_ERROR; + } + + if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) + { + return PAL_ATTEST_ERROR; + } + + *alg_id = (int32_t)item.val.int64; + + return PAL_ATTEST_SUCCESS; +} + +/** + @brief - This API will verify the claims + @param - decode_context : The buffer containing the challenge + item : context for decoding the data items + completed_challenge : Buffer containing the challenge + @return - error status +**/ +static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, + struct q_useful_buf_c completed_challenge) +{ + int i, count = 0; + int status = PAL_ATTEST_SUCCESS; + + /* Parse each claim and validate their data type */ + while (status == PAL_ATTEST_SUCCESS) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + break; + + mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); + if (item.uLabelType == QCBOR_TYPE_INT64) + { + if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) + { + if (item.uDataType == QCBOR_TYPE_BYTE_STRING) + { + /* Given challenge vs challenge in token */ + if (UsefulBuf_Compare(item.val.string, completed_challenge)) + return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; + } + else + return PAL_ATTEST_TOKEN_NOT_SUPPORTED; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || + item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || + item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || + item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) + { + if (item.uDataType != QCBOR_TYPE_ARRAY) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + sw_component_present = 1; + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + continue; + + count = item.val.uCount; + for (i = 0; i <= count; i++) + { + mandaroty_sw_components |= 1 << item.label.int64; + + if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + if (i < count) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + } + + } + } + else + { + /* ToDo: Add other claim types */ + } + } + + if (status == QCBOR_ERR_HIT_END) + return PAL_ATTEST_SUCCESS; + else + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; +} + +/** + @brief - This API will verify the attestation token + @param - challenge : The buffer containing the challenge + challenge_size : Size of the challenge buffer + token : The buffer containing the attestation token + token_size : Size of the token buffer + @return - error status +**/ +int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, + uint8_t *token, uint32_t token_size) +{ + int32_t status = PAL_ATTEST_SUCCESS; + bool short_circuit; + int32_t cose_algorithm_id; + QCBORItem item; + QCBORDecodeContext decode_context; + struct q_useful_buf_c completed_challenge; + struct q_useful_buf_c completed_token; + struct q_useful_buf_c payload; + struct q_useful_buf_c signature; + struct q_useful_buf_c protected_headers; + struct q_useful_buf_c kid; + struct q_useful_buf_c x_cord; + struct q_useful_buf_c y_cord; + struct q_useful_buf_c cose_key_to_hash; + struct q_useful_buf_c key_hash; + struct q_useful_buf_c token_hash; + USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); + + kid.ptr = buffer_for_encoded_key.ptr; + + memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); + memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); + + /* Update size */ + buf_to_hold_x_coord.len = attest_key.pubx_key_size; + buf_to_hold_y_coord.len = attest_key.puby_key_size; + + x_cord.ptr = buf_to_hold_x_coord.ptr; + x_cord.len = buf_to_hold_x_coord.len; + y_cord.ptr = buf_to_hold_y_coord.ptr; + y_cord.len = buf_to_hold_y_coord.len; + + /* Construct the token buffer for validation */ + completed_token.ptr = token; + completed_token.len = token_size; + + /* Construct the challenge buffer for validation */ + completed_challenge.ptr = challenge; + completed_challenge.len = challenge_size; + +/* + ------------------------- + | CBOR Array Type | + ------------------------- + | Protected Headers | + ------------------------- + | Unprotected Headers | + ------------------------- + | Payload | + ------------------------- + | Signature | + ------------------------- +*/ + + /* Initialize the decorder */ + QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); + + /* Get the Header */ + QCBORDecode_GetNext(&decode_context, &item); + + /* Check the CBOR Array type. Check if the count is 4. + * Only COSE_SIGN1 is supported now. + */ + if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || + !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Get the next headers */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + protected_headers = item.val.string; + + /* Parse the protected headers and check the data type and value*/ + status = parse_protected_headers(protected_headers, &cose_algorithm_id); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Parse the unprotected headers and check the data type and value */ + short_circuit = false; + status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Encode the given public key */ + status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Create hash of the given public key */ + status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); + if (status != PSA_SUCCESS) + return status; + + /* Compare the hash of the public key in token and hash of the given public key */ + if (kid.len != key_hash.len) + { + return PAL_ATTEST_HASH_LENGTH_MISMATCH; + } + + if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) + { + return PAL_ATTEST_HASH_MISMATCH; + } + + /* Get the payload */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + payload = item.val.string; + + /* Get the digital signature */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + signature = item.val.string; + + /* Compute the hash from the token */ + status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, + protected_headers, payload); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Initialize the Decoder and validate the payload format */ + QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); + status = QCBORDecode_GetNext(&decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + return status; + + if (item.uDataType != QCBOR_TYPE_MAP) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Parse the payload and check the data type of each claim */ + status = parse_claims(&decode_context, item, completed_challenge); + if (status != PAL_ATTEST_SUCCESS) + return status; + + if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) + { + if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) + return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) + { + return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + + return PAL_ATTEST_SUCCESS; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h new file mode 100644 index 00000000..8a0c5455 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -0,0 +1,170 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "qcbor.h" +#include "pal_common.h" +#include "psa/crypto.h" + +#define PAL_ATTEST_MIN_ERROR 30 + +/* NIST P-256 also known as secp256r1 */ +#define P_256 1 + +#define COSE_HEADER_PARAM_ALG 1 +#define COSE_HEADER_PARAM_KID 4 + +#define COSE_KEY_COMMON_KTY 1 +#define COSE_KEY_TYPE_EC2 2 +#define COSE_KEY_PARAM_CRV -1 +#define COSE_KEY_PARAM_X_COORDINATE -2 +#define COSE_KEY_PARAM_Y_COORDINATE -3 +#define COSE_ALGORITHM_ES256 -7 +#define COSE_ALG_SHA256_PROPRIETARY -72000 + +/** + * The size of X and Y coordinate in 2 parameter style EC public + * key. Format is as defined in [COSE (RFC 8152)] + * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve + * Cryptography](http://www.secg.org/sec1-v2.pdf). + * + * This size is well-known and documented in public standards. + */ +#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 +#define T_COSE_CRYPTO_SHA256_SIZE 32 + +#define MAX_ENCODED_COSE_KEY_SIZE \ + 1 + /* 1 byte to encode map */ \ + 2 + /* 2 bytes to encode key type */ \ + 2 + /* 2 bytes to encode curve */ \ + 2 * /* the X and Y coordinates at 32 bytes each */ \ + (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + +#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" + +/* Private value. Intentionally not documented for Doxygen. + * This is the size allocated for the encoded protected headers. It + * needs to be big enough for make_protected_header() to succeed. It + * currently sized for one header with an algorithm ID up to 32 bits + * long -- one byte for the wrapping map, one byte for the label, 5 + * bytes for the ID. If this is made accidentially too small, QCBOR will + * only return an error, and not overrun any buffers. + * + * 9 extra bytes are added, rounding it up to 16 total, in case some + * other protected header is to be added. + */ +#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) + +/** + * This is the size of the first part of the CBOR encoded TBS + * bytes. It is around 20 bytes. See create_tbs_hash(). + */ +#define T_COSE_SIZE_OF_TBS \ + 1 + /* For opening the array */ \ + sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ + 2 + /* Overhead for encoding string */ \ + T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ + 3 * ( /* 3 NULL bstrs for fields not used */ \ + 1 /* size of a NULL bstr */ \ + ) + +/* + CBOR Label for proprietary header indicating short-circuit + signing was used. Just a random number in the proprietary + label space */ +#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) + +#define EAT_CBOR_ARM_RANGE_BASE (-75000) +#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) +#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) +#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) +#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) +#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) +#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) +#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) +#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) +#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) +#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) +#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) + +#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 + +#define EAT_CBOR_SW_COMPONENT_TYPE (1u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) +#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) +#define EAT_CBOR_SW_COMPONENT_VERSION (4u) +#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) + +#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) + +#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) + +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) + +#define NULL_USEFUL_BUF_C NULLUsefulBufC + +enum attestation_error_code { + PAL_ATTEST_SUCCESS = 0, + PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, + PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + PAL_ATTEST_TOKEN_NOT_SUPPORTED, + PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + PAL_ATTEST_HASH_LENGTH_MISMATCH, + PAL_ATTEST_HASH_MISMATCH, + PAL_ATTEST_HASH_FAIL, + PAL_ATTEST_HASH_UNSUPPORTED, + PAL_ATTEST_HASH_BUFFER_SIZE, + PAL_ATTEST_ERR_PROTECTED_HEADERS, + PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERROR, +}; + +struct items_to_get_t { + int64_t label; + QCBORItem item; +}; + +int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, + uint8_t *token, uint32_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c new file mode 100644 index 00000000..faf3f493 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c new file mode 100644 index 00000000..2d99f74d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_attestation_intf.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + uint8_t *challenge, *token; + uint32_t challenge_size, *token_size, verify_token_size; + + switch (type) + { + case PAL_INITIAL_ATTEST_GET_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, uint32_t); + token = va_arg(valist, uint8_t*); + token_size = va_arg(valist, uint32_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: + challenge_size = va_arg(valist, uint32_t); + token_size = va_arg(valist, uint32_t*); + return psa_initial_attest_get_token_size(challenge_size, token_size); + case PAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, uint32_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, uint32_t); + return pal_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h new file mode 100644 index 00000000..12f6ee94 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INITIAL_ATTESTATION_H_ +#define _PAL_INITIAL_ATTESTATION_H_ + +#include "pal_attestation_crypto.h" + +enum attestation_function_code { + PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, + PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, + PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, +}; + +int32_t pal_attestation_function(int type, va_list valist); +#endif /* _PAL_INITIAL_ATTESTATION_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..133cfa9d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..4f04ab01 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,60 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_its_uid_t uid; + uint32_t data_length, offset; + const void *p_write_data; + void *p_read_data; + psa_its_create_flags_t its_create_flags; + struct psa_its_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_its_uid_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_its_create_flags_t); + return psa_its_set(uid, data_length, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_its_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + return psa_its_get(uid, offset, data_length, p_read_data); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_its_uid_t); + its_p_info = va_arg(valist, struct psa_its_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_its_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..6db6aac6 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..ee9b13da --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..a4241533 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,75 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_ps_uid_t uid; + uint32_t data_length, size, offset; + const void *p_write_data; + void *p_read_data; + psa_ps_create_flags_t ps_create_flags; + struct psa_ps_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_ps_uid_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_ps_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + return psa_ps_get(uid, offset, data_length, p_read_data); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_ps_uid_t); + ps_p_info = va_arg(valist, struct psa_ps_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_ps_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_ps_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_ps_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_length, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..a338cdf7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c new file mode 100644 index 00000000..fd307839 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c @@ -0,0 +1,132 @@ + /** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#include "pal_driver_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - void +**/ +void pal_uart_init(uint32_t uart_base_addr) +{ + pal_uart_cmsdk_init(uart_base_addr); +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier +**/ + +void pal_print(char *str, int32_t data) +{ + pal_cmsdk_print(str,data); + +} + + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_write(base, offset, buffer, size); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_read(base, offset, buffer, size); +} + + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); + +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Checks whether hardware watchdog timer is enabled + @param - base_addr : Base address of the watchdog module + @return - Enabled : 1, Disabled : 0 +**/ +int pal_wd_timer_is_enabled(addr_t base_addr) +{ + return (pal_wd_cmsdk_is_enabled(base_addr)); +} + +/** + @brief - Trigger interrupt for irq signal assigned to driver partition + before return to caller. + @param - void + @return - void +**/ +void pal_generate_interrupt(void) +{ + pal_uart_cmsdk_generate_irq(); +} + +/** + @brief - Disable interrupt that was generated using pal_generate_interrupt API. + @param - void + @return - void +**/ +void pal_disable_interrupt(void) +{ + pal_uart_cmsdk_disable_irq(); +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h new file mode 100644 index 00000000..cef34ca8 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h @@ -0,0 +1,35 @@ + /** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#ifndef _PAL_DRIVER_INTF_H_ +#define _PAL_DRIVER_INTF_H_ + +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +void pal_uart_init(uint32_t uart_base_addr); +void pal_print(char *str, int32_t data); +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); +int pal_wd_timer_enable(addr_t base_addr); +int pal_wd_timer_disable(addr_t base_addr); +int pal_wd_timer_is_enabled(addr_t base_addr); +void pal_generate_interrupt(void); +void pal_disable_interrupt(void); +#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg new file mode 100644 index 00000000..a8f3700e --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg @@ -0,0 +1,57 @@ +///** @file +// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +uart.num=1; +uart.0.base = 0x41303000; // UART0_NS +uart.0.size = 0xFFF; +uart.0.intr_id = 0xFF; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +watchdog.num = 1; +watchdog.0.base = 0x40081000; +watchdog.0.size = 0xFFF; +watchdog.0.intr_id = 0xFF; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) +watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 + +// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH +nvmem.num =1; +nvmem.0.start = 0x20018000; +nvmem.0.end = 0x200183FF; +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x28110000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file. +dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + +// Level of Isolation +dut.0.implemented_psa_firmware_isolation_level = LEVEL1; From 9982f90c3717488501b2b40365b5217606ea52c6 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Mon, 15 Jul 2019 09:13:54 +0530 Subject: [PATCH 05/54] Adding CMake build support. --- api-tests/CMakeLists.txt | 385 ++++++++++++++ api-tests/dev_apis/README.md | 33 +- api-tests/dev_apis/crypto/suite.cmake | 56 ++ api-tests/dev_apis/crypto/test_c001/source.mk | 20 - .../source.mk => test_c001/test.cmake} | 12 +- api-tests/dev_apis/crypto/test_c002/source.mk | 20 - .../source.mk => test_c002/test.cmake} | 12 +- api-tests/dev_apis/crypto/test_c003/source.mk | 20 - .../source.mk => test_c003/test.cmake} | 12 +- api-tests/dev_apis/crypto/test_c004/source.mk | 20 - .../source.mk => test_c004/test.cmake} | 12 +- api-tests/dev_apis/crypto/test_c005/source.mk | 20 - .../dev_apis/crypto/test_c005/test.cmake | 24 + api-tests/dev_apis/crypto/test_c006/source.mk | 20 - .../dev_apis/crypto/test_c006/test.cmake | 24 + api-tests/dev_apis/crypto/test_c007/source.mk | 20 - .../dev_apis/crypto/test_c007/test.cmake | 24 + api-tests/dev_apis/crypto/test_c008/source.mk | 20 - .../dev_apis/crypto/test_c008/test.cmake | 24 + api-tests/dev_apis/crypto/test_c009/source.mk | 20 - .../dev_apis/crypto/test_c009/test.cmake | 24 + api-tests/dev_apis/crypto/test_c010/source.mk | 20 - .../dev_apis/crypto/test_c010/test.cmake | 24 + api-tests/dev_apis/crypto/test_c011/source.mk | 20 - .../dev_apis/crypto/test_c011/test.cmake | 24 + api-tests/dev_apis/crypto/test_c012/source.mk | 20 - .../dev_apis/crypto/test_c012/test.cmake | 24 + api-tests/dev_apis/crypto/test_c013/source.mk | 20 - .../dev_apis/crypto/test_c013/test.cmake | 24 + api-tests/dev_apis/crypto/test_c014/source.mk | 20 - .../dev_apis/crypto/test_c014/test.cmake | 24 + api-tests/dev_apis/crypto/test_c015/source.mk | 20 - .../dev_apis/crypto/test_c015/test.cmake | 24 + .../dev_apis/crypto/test_c016/test.cmake | 24 + .../dev_apis/crypto/test_c017/test.cmake | 24 + .../dev_apis/crypto/test_c018/test.cmake | 24 + .../dev_apis/crypto/test_c019/test.cmake | 24 + api-tests/dev_apis/crypto/test_c020/source.mk | 20 - .../dev_apis/crypto/test_c020/test.cmake | 24 + api-tests/dev_apis/crypto/test_c021/source.mk | 20 - .../dev_apis/crypto/test_c021/test.cmake | 24 + api-tests/dev_apis/crypto/test_c022/source.mk | 20 - .../dev_apis/crypto/test_c022/test.cmake | 24 + api-tests/dev_apis/crypto/test_c023/source.mk | 20 - .../dev_apis/crypto/test_c023/test.cmake | 24 + api-tests/dev_apis/crypto/test_c024/source.mk | 20 - .../dev_apis/crypto/test_c024/test.cmake | 24 + api-tests/dev_apis/crypto/test_c025/source.mk | 20 - .../dev_apis/crypto/test_c025/test.cmake | 24 + api-tests/dev_apis/crypto/test_c026/source.mk | 20 - .../dev_apis/crypto/test_c026/test.cmake | 24 + api-tests/dev_apis/crypto/test_c027/source.mk | 20 - .../dev_apis/crypto/test_c027/test.cmake | 24 + api-tests/dev_apis/crypto/test_c028/source.mk | 20 - .../dev_apis/crypto/test_c028/test.cmake | 24 + api-tests/dev_apis/crypto/test_c029/source.mk | 20 - .../dev_apis/crypto/test_c029/test.cmake | 24 + api-tests/dev_apis/crypto/test_c030/source.mk | 20 - .../dev_apis/crypto/test_c030/test.cmake | 24 + api-tests/dev_apis/crypto/test_c031/source.mk | 20 - .../dev_apis/crypto/test_c031/test.cmake | 24 + api-tests/dev_apis/crypto/test_c032/source.mk | 20 - .../dev_apis/crypto/test_c032/test.cmake | 24 + api-tests/dev_apis/crypto/test_c033/source.mk | 20 - .../dev_apis/crypto/test_c033/test.cmake | 24 + api-tests/dev_apis/crypto/test_c034/source.mk | 20 - .../dev_apis/crypto/test_c034/test.cmake | 24 + api-tests/dev_apis/crypto/test_c035/source.mk | 20 - .../dev_apis/crypto/test_c035/test.cmake | 24 + api-tests/dev_apis/crypto/test_c036/source.mk | 20 - .../dev_apis/crypto/test_c036/test.cmake | 24 + api-tests/dev_apis/crypto/test_c037/source.mk | 20 - .../dev_apis/crypto/test_c037/test.cmake | 24 + api-tests/dev_apis/crypto/test_c038/source.mk | 20 - .../dev_apis/crypto/test_c038/test.cmake | 24 + api-tests/dev_apis/crypto/test_c039/source.mk | 20 - .../dev_apis/crypto/test_c039/test.cmake | 24 + api-tests/dev_apis/crypto/test_c040/source.mk | 20 - .../dev_apis/crypto/test_c040/test.cmake | 24 + api-tests/dev_apis/crypto/test_c041/source.mk | 20 - .../dev_apis/crypto/test_c041/test.cmake | 24 + api-tests/dev_apis/crypto/test_c042/source.mk | 20 - .../dev_apis/crypto/test_c042/test.cmake | 24 + api-tests/dev_apis/crypto/test_c043/source.mk | 20 - .../dev_apis/crypto/test_c043/test.cmake | 24 + api-tests/dev_apis/crypto/test_c044/source.mk | 20 - .../dev_apis/crypto/test_c044/test.cmake | 24 + .../dev_apis/initial_attestation/suite.cmake | 56 ++ .../initial_attestation/test_a001/source.mk | 20 - .../initial_attestation/test_a001/test.cmake | 24 + .../internal_trusted_storage/suite.cmake | 57 ++ .../test_s001/source.mk | 20 - .../test_s001/test.cmake | 24 + .../test_s002/source.mk | 20 - .../test_s002/test.cmake | 24 + .../test_s003/source.mk | 20 - .../test_s003/test.cmake | 24 + .../test_s004/source.mk | 20 - .../test_s004/test.cmake | 24 + .../test_s005/source.mk | 20 - .../test_s005/test.cmake | 24 + .../test_s006/source.mk | 20 - .../test_s006/test.cmake | 24 + .../test_s007/source.mk | 20 - .../test_s007/test.cmake | 24 + .../test_s008/source.mk | 20 - .../test_s008/test.cmake | 24 + .../test_s009/source.mk | 20 - .../test_s009/test.cmake | 24 + .../test_s010/source.mk | 20 - .../test_s010/test.cmake | 24 + .../dev_apis/protected_storage/suite.cmake | 78 +++ .../protected_storage/test_p011/source.mk | 20 - .../protected_storage/test_p011/test.cmake | 24 + .../protected_storage/test_p012/source.mk | 20 - .../protected_storage/test_p012/test.cmake | 24 + .../protected_storage/test_p013/source.mk | 20 - .../protected_storage/test_p013/test.cmake | 24 + .../protected_storage/test_p014/source.mk | 20 - .../protected_storage/test_p014/test.cmake | 24 + .../protected_storage/test_p015/source.mk | 20 - .../protected_storage/test_p015/test.cmake | 24 + .../protected_storage/test_s001/source.mk | 20 - .../protected_storage/test_s001/test.cmake | 24 + .../protected_storage/test_s002/source.mk | 20 - .../protected_storage/test_s002/test.cmake | 24 + .../protected_storage/test_s003/source.mk | 20 - .../protected_storage/test_s003/test.cmake | 24 + .../protected_storage/test_s004/source.mk | 20 - .../protected_storage/test_s004/test.cmake | 24 + .../protected_storage/test_s005/source.mk | 20 - .../protected_storage/test_s005/test.cmake | 24 + .../protected_storage/test_s006/source.mk | 20 - .../protected_storage/test_s006/test.cmake | 24 + .../protected_storage/test_s007/source.mk | 20 - .../protected_storage/test_s007/test.cmake | 24 + .../protected_storage/test_s008/source.mk | 20 - .../protected_storage/test_s008/test.cmake | 24 + .../protected_storage/test_s009/source.mk | 20 - .../protected_storage/test_s009/test.cmake | 24 + .../protected_storage/test_s010/source.mk | 20 - .../protected_storage/test_s010/test.cmake | 24 + api-tests/docs/porting_guide_dev_apis.md | 34 +- api-tests/docs/porting_guide_ff.md | 18 +- api-tests/docs/sw_requirements.md | 5 +- api-tests/ff/README.md | 38 +- api-tests/ff/ipc/suite.cmake | 68 +++ api-tests/ff/ipc/test_i001/source.mk | 25 - api-tests/ff/ipc/test_i001/test.cmake | 32 ++ api-tests/ff/ipc/test_i002/source.mk | 25 - .../source.mk => test_i002/test.cmake} | 23 +- api-tests/ff/ipc/test_i003/source.mk | 25 - .../source.mk => test_i003/test.cmake} | 23 +- api-tests/ff/ipc/test_i004/source.mk | 25 - .../source.mk => test_i004/test.cmake} | 23 +- api-tests/ff/ipc/test_i005/source.mk | 25 - api-tests/ff/ipc/test_i005/test.cmake | 32 ++ api-tests/ff/ipc/test_i006/source.mk | 25 - api-tests/ff/ipc/test_i006/test.cmake | 32 ++ api-tests/ff/ipc/test_i007/source.mk | 25 - api-tests/ff/ipc/test_i007/test.cmake | 32 ++ api-tests/ff/ipc/test_i008/source.mk | 25 - api-tests/ff/ipc/test_i008/test.cmake | 32 ++ api-tests/ff/ipc/test_i009/source.mk | 25 - api-tests/ff/ipc/test_i009/test.cmake | 32 ++ api-tests/ff/ipc/test_i010/source.mk | 25 - api-tests/ff/ipc/test_i010/test.cmake | 32 ++ api-tests/ff/ipc/test_i011/source.mk | 25 - api-tests/ff/ipc/test_i011/test.cmake | 32 ++ api-tests/ff/ipc/test_i012/source.mk | 25 - api-tests/ff/ipc/test_i012/test.cmake | 32 ++ api-tests/ff/ipc/test_i013/source.mk | 25 - api-tests/ff/ipc/test_i013/test.cmake | 32 ++ api-tests/ff/ipc/test_i014/source.mk | 25 - api-tests/ff/ipc/test_i014/test.cmake | 32 ++ api-tests/ff/ipc/test_i015/source.mk | 25 - api-tests/ff/ipc/test_i015/test.cmake | 32 ++ api-tests/ff/ipc/test_i016/source.mk | 25 - api-tests/ff/ipc/test_i016/test.cmake | 32 ++ api-tests/ff/ipc/test_i017/source.mk | 25 - api-tests/ff/ipc/test_i017/test.cmake | 32 ++ api-tests/ff/ipc/test_i018/source.mk | 25 - api-tests/ff/ipc/test_i018/test.cmake | 32 ++ api-tests/ff/ipc/test_i019/source.mk | 25 - api-tests/ff/ipc/test_i019/test.cmake | 32 ++ api-tests/ff/ipc/test_i020/source.mk | 25 - api-tests/ff/ipc/test_i020/test.cmake | 32 ++ api-tests/ff/ipc/test_i021/source.mk | 25 - api-tests/ff/ipc/test_i021/test.cmake | 32 ++ api-tests/ff/ipc/test_i022/source.mk | 25 - api-tests/ff/ipc/test_i022/test.cmake | 32 ++ api-tests/ff/ipc/test_i023/source.mk | 25 - api-tests/ff/ipc/test_i023/test.cmake | 32 ++ api-tests/ff/ipc/test_i024/source.mk | 25 - api-tests/ff/ipc/test_i024/test.cmake | 32 ++ api-tests/ff/ipc/test_i025/source.mk | 25 - api-tests/ff/ipc/test_i025/test.cmake | 32 ++ api-tests/ff/ipc/test_i026/source.mk | 25 - api-tests/ff/ipc/test_i026/test.cmake | 32 ++ api-tests/ff/ipc/test_i027/source.mk | 25 - api-tests/ff/ipc/test_i027/test.cmake | 32 ++ api-tests/ff/ipc/test_i028/source.mk | 25 - api-tests/ff/ipc/test_i028/test.cmake | 32 ++ api-tests/ff/ipc/test_i029/source.mk | 25 - api-tests/ff/ipc/test_i029/test.cmake | 32 ++ api-tests/ff/ipc/test_i030/source.mk | 25 - api-tests/ff/ipc/test_i030/test.cmake | 32 ++ api-tests/ff/ipc/test_i031/source.mk | 25 - api-tests/ff/ipc/test_i031/test.cmake | 32 ++ api-tests/ff/ipc/test_i032/source.mk | 25 - api-tests/ff/ipc/test_i032/test.cmake | 32 ++ api-tests/ff/ipc/test_i033/source.mk | 25 - api-tests/ff/ipc/test_i033/test.cmake | 32 ++ api-tests/ff/ipc/test_i034/source.mk | 25 - api-tests/ff/ipc/test_i034/test.cmake | 32 ++ api-tests/ff/ipc/test_i035/source.mk | 25 - api-tests/ff/ipc/test_i035/test.cmake | 32 ++ api-tests/ff/ipc/test_i036/source.mk | 25 - api-tests/ff/ipc/test_i036/test.cmake | 32 ++ api-tests/ff/ipc/test_i037/source.mk | 25 - api-tests/ff/ipc/test_i037/test.cmake | 32 ++ api-tests/ff/ipc/test_i038/source.mk | 25 - api-tests/ff/ipc/test_i038/test.cmake | 32 ++ api-tests/ff/ipc/test_i039/source.mk | 25 - api-tests/ff/ipc/test_i039/test.cmake | 32 ++ api-tests/ff/ipc/test_i040/source.mk | 25 - api-tests/ff/ipc/test_i040/test.cmake | 32 ++ api-tests/ff/ipc/test_i041/source.mk | 25 - api-tests/ff/ipc/test_i041/test.cmake | 32 ++ api-tests/ff/ipc/test_i042/source.mk | 25 - api-tests/ff/ipc/test_i042/test.cmake | 32 ++ api-tests/ff/ipc/test_i043/source.mk | 25 - api-tests/ff/ipc/test_i043/test.cmake | 32 ++ api-tests/ff/ipc/test_i044/source.mk | 25 - api-tests/ff/ipc/test_i044/test.cmake | 32 ++ api-tests/ff/ipc/test_i045/source.mk | 25 - api-tests/ff/ipc/test_i045/test.cmake | 32 ++ api-tests/ff/ipc/test_i046/source.mk | 25 - api-tests/ff/ipc/test_i046/test.cmake | 32 ++ api-tests/ff/ipc/test_i047/test.cmake | 32 ++ api-tests/ff/ipc/test_i048/test.cmake | 32 ++ api-tests/ff/ipc/test_i049/test.cmake | 32 ++ api-tests/ff/ipc/test_i050/test.cmake | 32 ++ api-tests/ff/ipc/test_i051/source.mk | 25 - api-tests/ff/ipc/test_i051/test.cmake | 32 ++ api-tests/ff/ipc/test_i052/source.mk | 25 - api-tests/ff/ipc/test_i052/test.cmake | 32 ++ api-tests/ff/ipc/test_i053/source.mk | 25 - api-tests/ff/ipc/test_i053/test.cmake | 32 ++ api-tests/ff/ipc/test_i054/source.mk | 25 - api-tests/ff/ipc/test_i054/test.cmake | 32 ++ api-tests/ff/ipc/test_i055/source.mk | 25 - api-tests/ff/ipc/test_i055/test.cmake | 32 ++ api-tests/ff/ipc/test_i056/source.mk | 25 - api-tests/ff/ipc/test_i056/test.cmake | 32 ++ api-tests/ff/ipc/test_i057/source.mk | 25 - api-tests/ff/ipc/test_i057/test.cmake | 32 ++ api-tests/ff/ipc/test_i058/source.mk | 25 - api-tests/ff/ipc/test_i058/test.cmake | 32 ++ api-tests/ff/ipc/test_i059/source.mk | 25 - api-tests/ff/ipc/test_i059/test.cmake | 32 ++ api-tests/ff/ipc/test_i060/source.mk | 25 - api-tests/ff/ipc/test_i060/test.cmake | 32 ++ api-tests/ff/ipc/test_i061/source.mk | 25 - api-tests/ff/ipc/test_i061/test.cmake | 32 ++ api-tests/ff/ipc/test_i062/source.mk | 25 - api-tests/ff/ipc/test_i062/test.cmake | 32 ++ api-tests/ff/ipc/test_i063/source.mk | 25 - api-tests/ff/ipc/test_i063/test.cmake | 32 ++ api-tests/ff/ipc/test_i064/source.mk | 25 - api-tests/ff/ipc/test_i064/test.cmake | 32 ++ api-tests/ff/ipc/test_i065/source.mk | 25 - api-tests/ff/ipc/test_i065/test.cmake | 32 ++ api-tests/ff/ipc/test_i066/source.mk | 25 - api-tests/ff/ipc/test_i066/test.cmake | 32 ++ api-tests/ff/ipc/test_i067/source.mk | 25 - api-tests/ff/ipc/test_i067/test.cmake | 32 ++ api-tests/ff/ipc/test_i067/test_i067.c | 8 +- api-tests/ff/ipc/test_i067/test_supp_i067.c | 4 +- api-tests/ff/ipc/test_i068/source.mk | 25 - api-tests/ff/ipc/test_i068/test.cmake | 32 ++ api-tests/ff/ipc/test_i068/test_i068.c | 4 +- api-tests/ff/ipc/test_i069/source.mk | 25 - api-tests/ff/ipc/test_i069/test.cmake | 32 ++ api-tests/ff/ipc/test_i069/test_i069.c | 4 +- api-tests/ff/ipc/test_i070/source.mk | 25 - api-tests/ff/ipc/test_i070/test.cmake | 32 ++ api-tests/ff/ipc/test_i070/test_i070.c | 4 +- api-tests/ff/ipc/test_i071/source.mk | 25 - api-tests/ff/ipc/test_i071/test.cmake | 32 ++ api-tests/ff/ipc/test_i071/test_i071.c | 4 +- api-tests/ff/ipc/test_i072/source.mk | 25 - api-tests/ff/ipc/test_i072/test.cmake | 32 ++ api-tests/ff/ipc/test_i073/source.mk | 25 - api-tests/ff/ipc/test_i073/test.cmake | 32 ++ api-tests/ff/ipc/test_i074/source.mk | 25 - api-tests/ff/ipc/test_i074/test.cmake | 32 ++ api-tests/ff/ipc/test_i074/test_i074.c | 2 +- api-tests/ff/ipc/test_i074/test_supp_i074.c | 4 +- api-tests/ff/ipc/test_i075/source.mk | 25 - api-tests/ff/ipc/test_i075/test.cmake | 32 ++ api-tests/ff/ipc/test_i076/source.mk | 25 - api-tests/ff/ipc/test_i076/test.cmake | 32 ++ api-tests/ff/ipc/test_i077/source.mk | 25 - api-tests/ff/ipc/test_i077/test.cmake | 32 ++ api-tests/ff/ipc/test_i078/source.mk | 25 - api-tests/ff/ipc/test_i078/test.cmake | 32 ++ api-tests/ff/ipc/test_i078/test_i078.c | 2 +- api-tests/ff/ipc/test_i079/source.mk | 25 - api-tests/ff/ipc/test_i079/test.cmake | 32 ++ api-tests/ff/ipc/test_i080/source.mk | 25 - api-tests/ff/ipc/test_i080/test.cmake | 32 ++ api-tests/ff/ipc/test_i081/source.mk | 25 - api-tests/ff/ipc/test_i081/test.cmake | 32 ++ api-tests/ff/ipc/test_i082/source.mk | 25 - api-tests/ff/ipc/test_i082/test.cmake | 32 ++ api-tests/ff/ipc/test_i082/test_i082.c | 2 +- api-tests/ff/ipc/test_i083/source.mk | 25 - api-tests/ff/ipc/test_i083/test.cmake | 32 ++ api-tests/ff/ipc/test_i084/source.mk | 25 - api-tests/ff/ipc/test_i084/test.cmake | 32 ++ api-tests/ff/ipc/test_i085/source.mk | 25 - api-tests/ff/ipc/test_i085/test.cmake | 32 ++ api-tests/ff/ipc/test_i086/source.mk | 25 - api-tests/ff/ipc/test_i086/test.cmake | 32 ++ api-tests/ff/ipc/test_i086/test_i086.c | 2 +- api-tests/ff/ipc/test_i086/test_supp_i086.c | 4 +- api-tests/ff/ipc/test_i087/source.mk | 25 - api-tests/ff/ipc/test_i087/test.cmake | 32 ++ api-tests/ff/ipc/test_l088/source.mk | 25 - api-tests/ff/ipc/test_l088/test.cmake | 32 ++ .../ff/partition/common/driver_partition.c | 6 +- .../platform/drivers/uart/cmsdk/pal_uart.c | 4 +- .../platform/drivers/uart/pl011/pal_uart.c | 4 +- .../tgt_dev_apis_mbedos_fvp_mps2_m4/Makefile | 160 ------ .../nspe/common/pal_common.h | 6 +- .../nspe/common/pal_config.h | 74 +-- .../target.cmake | 106 ++++ .../targets/tgt_dev_apis_tfm_an521/Makefile | 160 ------ .../nspe/common/pal_common.h | 6 +- .../nspe/common/pal_config.h | 74 +-- .../tgt_dev_apis_tfm_an521/target.cmake | 106 ++++ .../common/driver_partition_psa.json | 75 +++ .../manifests/ipc/client_partition_psa.json | 37 ++ .../manifests/ipc/server_partition_psa.json | 69 +++ .../nspe/common/pal_client_api_empty_intf.c | 93 ++++ .../nspe/common/pal_client_api_intf.c | 97 ++++ .../nspe/common/pal_client_api_intf.h | 32 ++ .../nspe/common/pal_common.h | 116 ++++ .../nspe/common/pal_config.h | 85 +++ .../nspe/common/pal_driver_ipc_intf.c | 305 +++++++++++ .../nspe/common/pal_driver_ns_intf.c | 145 +++++ .../nspe/crypto/pal_crypto_config.h | 323 ++++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c} | 27 +- .../nspe/crypto/pal_crypto_intf.c | 340 ++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 76 +++ .../pal_attestation_crypto.c | 346 ++++++++++++ .../pal_attestation_crypto.h | 102 ++++ .../initial_attestation/pal_attestation_eat.c | 491 +++++++++++++++++ .../initial_attestation/pal_attestation_eat.h | 170 ++++++ .../pal_attestation_empty_intf.c | 30 ++ .../pal_attestation_intf.c | 54 ++ .../pal_attestation_intf.h | 30 ++ .../pal_internal_trusted_storage_empty_intf.c | 30 ++ .../pal_internal_trusted_storage_intf.c | 60 +++ .../pal_internal_trusted_storage_intf.h | 31 ++ .../pal_protected_storage_empty_intf.c | 30 ++ .../pal_protected_storage_intf.c | 75 +++ .../pal_protected_storage_intf.h | 34 ++ .../spe/pal_driver_intf.c | 132 +++++ .../spe/pal_driver_intf.h | 35 ++ .../targets/tgt_dev_apis_tfm_an524/target.cfg | 57 ++ .../tgt_dev_apis_tfm_an524/target.cmake | 106 ++++ .../targets/tgt_dev_apis_tfm_musca_a/Makefile | 160 ------ .../nspe/common/pal_common.h | 6 +- .../nspe/common/pal_config.h | 74 +-- .../tgt_dev_apis_tfm_musca_a/target.cmake | 106 ++++ .../tgt_dev_apis_tfm_musca_b1/Makefile | 160 ------ .../nspe/common/pal_common.h | 6 +- .../nspe/common/pal_config.h | 74 +-- .../tgt_dev_apis_tfm_musca_b1/target.cmake | 106 ++++ .../tgt_ff_mbedos_fvp_mps2_m4/Makefile | 160 ------ .../nspe/common/pal_common.h | 6 +- .../nspe/common/pal_config.h | 74 +-- .../tgt_ff_mbedos_fvp_mps2_m4/target.cmake | 106 ++++ .../cmake/common/CMakeSettings.cmake} | 15 +- api-tests/tools/cmake/common/Utils.cmake | 37 ++ api-tests/tools/cmake/compiler/ARMCLANG.cmake | 63 +++ api-tests/tools/cmake/compiler/GNUARM.cmake | 63 +++ api-tests/tools/cmake/compiler/HOST_GCC.cmake | 51 ++ api-tests/tools/makefiles/Makefile | 131 ----- api-tests/tools/makefiles/linker/test.linker | 55 -- api-tests/tools/makefiles/spbuild.mk | 74 --- api-tests/tools/makefiles/testbuild.mk | 78 --- api-tests/tools/makefiles/toolchain.mk | 119 ----- api-tests/tools/makefiles/valbuild.mk | 52 -- api-tests/tools/scripts/gen_tests_list.pl | 127 ----- api-tests/tools/scripts/gen_tests_list.py | 126 +++++ .../tools/scripts/process_test_linker_file.pl | 77 --- api-tests/tools/scripts/setup.sh | 497 ------------------ .../tools/scripts/target_cfg/CMakeLists.txt | 76 +++ .../{ => target_cfg}/targetConfigGen.py | 3 + api-tests/tools/scripts/test_elf_combine.pl | 85 --- api-tests/val/nspe/val_attestation.c | 4 + api-tests/val/nspe/val_crypto.c | 4 + api-tests/val/nspe/val_dispatcher.c | 6 +- api-tests/val/nspe/val_framework.c | 4 +- .../val/nspe/val_internal_trusted_storage.c | 4 + api-tests/val/nspe/val_peripherals.c | 2 + api-tests/val/nspe/val_protected_storage.c | 4 + api-tests/val/val_nspe.cmake | 58 ++ api-tests/val/val_spe.cmake | 93 ++++ 413 files changed, 10256 insertions(+), 5965 deletions(-) create mode 100644 api-tests/CMakeLists.txt create mode 100644 api-tests/dev_apis/crypto/suite.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c001/source.mk rename api-tests/dev_apis/crypto/{test_c016/source.mk => test_c001/test.cmake} (82%) delete mode 100644 api-tests/dev_apis/crypto/test_c002/source.mk rename api-tests/dev_apis/crypto/{test_c017/source.mk => test_c002/test.cmake} (82%) delete mode 100644 api-tests/dev_apis/crypto/test_c003/source.mk rename api-tests/dev_apis/crypto/{test_c018/source.mk => test_c003/test.cmake} (82%) delete mode 100644 api-tests/dev_apis/crypto/test_c004/source.mk rename api-tests/dev_apis/crypto/{test_c019/source.mk => test_c004/test.cmake} (82%) delete mode 100644 api-tests/dev_apis/crypto/test_c005/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c005/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c006/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c006/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c007/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c007/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c008/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c008/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c009/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c009/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c010/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c010/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c011/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c011/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c012/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c012/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c013/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c013/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c014/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c014/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c015/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c015/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c016/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c017/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c018/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c019/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c020/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c020/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c021/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c021/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c022/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c022/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c023/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c023/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c024/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c024/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c025/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c025/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c026/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c026/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c027/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c027/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c028/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c028/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c029/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c029/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c030/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c030/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c031/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c031/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c032/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c032/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c033/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c033/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c034/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c034/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c035/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c035/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c036/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c036/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c037/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c037/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c038/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c038/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c039/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c039/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c040/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c040/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c041/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c041/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c042/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c042/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c043/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c043/test.cmake delete mode 100644 api-tests/dev_apis/crypto/test_c044/source.mk create mode 100644 api-tests/dev_apis/crypto/test_c044/test.cmake create mode 100644 api-tests/dev_apis/initial_attestation/suite.cmake delete mode 100644 api-tests/dev_apis/initial_attestation/test_a001/source.mk create mode 100644 api-tests/dev_apis/initial_attestation/test_a001/test.cmake create mode 100644 api-tests/dev_apis/internal_trusted_storage/suite.cmake delete mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s001/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s002/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s003/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s004/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s005/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s006/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s007/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s008/test.cmake delete mode 100755 api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s009/test.cmake delete mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk create mode 100644 api-tests/dev_apis/internal_trusted_storage/test_s010/test.cmake create mode 100644 api-tests/dev_apis/protected_storage/suite.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_p011/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_p011/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_p012/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_p012/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_p013/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_p013/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_p014/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_p014/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_p015/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_p015/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s001/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s001/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s002/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s002/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s003/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s003/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s004/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s004/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s005/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s005/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s006/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s006/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s007/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s007/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s008/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s008/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s009/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s009/test.cmake delete mode 100644 api-tests/dev_apis/protected_storage/test_s010/source.mk create mode 100644 api-tests/dev_apis/protected_storage/test_s010/test.cmake create mode 100644 api-tests/ff/ipc/suite.cmake delete mode 100644 api-tests/ff/ipc/test_i001/source.mk create mode 100644 api-tests/ff/ipc/test_i001/test.cmake delete mode 100644 api-tests/ff/ipc/test_i002/source.mk rename api-tests/ff/ipc/{test_i048/source.mk => test_i002/test.cmake} (70%) delete mode 100644 api-tests/ff/ipc/test_i003/source.mk rename api-tests/ff/ipc/{test_i049/source.mk => test_i003/test.cmake} (70%) delete mode 100644 api-tests/ff/ipc/test_i004/source.mk rename api-tests/ff/ipc/{test_i050/source.mk => test_i004/test.cmake} (70%) delete mode 100644 api-tests/ff/ipc/test_i005/source.mk create mode 100644 api-tests/ff/ipc/test_i005/test.cmake delete mode 100644 api-tests/ff/ipc/test_i006/source.mk create mode 100644 api-tests/ff/ipc/test_i006/test.cmake delete mode 100644 api-tests/ff/ipc/test_i007/source.mk create mode 100644 api-tests/ff/ipc/test_i007/test.cmake delete mode 100644 api-tests/ff/ipc/test_i008/source.mk create mode 100644 api-tests/ff/ipc/test_i008/test.cmake delete mode 100644 api-tests/ff/ipc/test_i009/source.mk create mode 100644 api-tests/ff/ipc/test_i009/test.cmake delete mode 100644 api-tests/ff/ipc/test_i010/source.mk create mode 100644 api-tests/ff/ipc/test_i010/test.cmake delete mode 100644 api-tests/ff/ipc/test_i011/source.mk create mode 100644 api-tests/ff/ipc/test_i011/test.cmake delete mode 100644 api-tests/ff/ipc/test_i012/source.mk create mode 100644 api-tests/ff/ipc/test_i012/test.cmake delete mode 100644 api-tests/ff/ipc/test_i013/source.mk create mode 100644 api-tests/ff/ipc/test_i013/test.cmake delete mode 100644 api-tests/ff/ipc/test_i014/source.mk create mode 100644 api-tests/ff/ipc/test_i014/test.cmake delete mode 100644 api-tests/ff/ipc/test_i015/source.mk create mode 100644 api-tests/ff/ipc/test_i015/test.cmake delete mode 100644 api-tests/ff/ipc/test_i016/source.mk create mode 100644 api-tests/ff/ipc/test_i016/test.cmake delete mode 100644 api-tests/ff/ipc/test_i017/source.mk create mode 100644 api-tests/ff/ipc/test_i017/test.cmake delete mode 100644 api-tests/ff/ipc/test_i018/source.mk create mode 100644 api-tests/ff/ipc/test_i018/test.cmake delete mode 100644 api-tests/ff/ipc/test_i019/source.mk create mode 100644 api-tests/ff/ipc/test_i019/test.cmake delete mode 100644 api-tests/ff/ipc/test_i020/source.mk create mode 100644 api-tests/ff/ipc/test_i020/test.cmake delete mode 100644 api-tests/ff/ipc/test_i021/source.mk create mode 100644 api-tests/ff/ipc/test_i021/test.cmake delete mode 100644 api-tests/ff/ipc/test_i022/source.mk create mode 100644 api-tests/ff/ipc/test_i022/test.cmake delete mode 100644 api-tests/ff/ipc/test_i023/source.mk create mode 100644 api-tests/ff/ipc/test_i023/test.cmake delete mode 100644 api-tests/ff/ipc/test_i024/source.mk create mode 100644 api-tests/ff/ipc/test_i024/test.cmake delete mode 100644 api-tests/ff/ipc/test_i025/source.mk create mode 100644 api-tests/ff/ipc/test_i025/test.cmake delete mode 100644 api-tests/ff/ipc/test_i026/source.mk create mode 100644 api-tests/ff/ipc/test_i026/test.cmake delete mode 100644 api-tests/ff/ipc/test_i027/source.mk create mode 100644 api-tests/ff/ipc/test_i027/test.cmake delete mode 100644 api-tests/ff/ipc/test_i028/source.mk create mode 100644 api-tests/ff/ipc/test_i028/test.cmake delete mode 100644 api-tests/ff/ipc/test_i029/source.mk create mode 100644 api-tests/ff/ipc/test_i029/test.cmake delete mode 100644 api-tests/ff/ipc/test_i030/source.mk create mode 100644 api-tests/ff/ipc/test_i030/test.cmake delete mode 100644 api-tests/ff/ipc/test_i031/source.mk create mode 100644 api-tests/ff/ipc/test_i031/test.cmake delete mode 100644 api-tests/ff/ipc/test_i032/source.mk create mode 100644 api-tests/ff/ipc/test_i032/test.cmake delete mode 100644 api-tests/ff/ipc/test_i033/source.mk create mode 100644 api-tests/ff/ipc/test_i033/test.cmake delete mode 100644 api-tests/ff/ipc/test_i034/source.mk create mode 100644 api-tests/ff/ipc/test_i034/test.cmake delete mode 100644 api-tests/ff/ipc/test_i035/source.mk create mode 100644 api-tests/ff/ipc/test_i035/test.cmake delete mode 100644 api-tests/ff/ipc/test_i036/source.mk create mode 100644 api-tests/ff/ipc/test_i036/test.cmake delete mode 100644 api-tests/ff/ipc/test_i037/source.mk create mode 100644 api-tests/ff/ipc/test_i037/test.cmake delete mode 100644 api-tests/ff/ipc/test_i038/source.mk create mode 100644 api-tests/ff/ipc/test_i038/test.cmake delete mode 100644 api-tests/ff/ipc/test_i039/source.mk create mode 100644 api-tests/ff/ipc/test_i039/test.cmake delete mode 100644 api-tests/ff/ipc/test_i040/source.mk create mode 100644 api-tests/ff/ipc/test_i040/test.cmake delete mode 100644 api-tests/ff/ipc/test_i041/source.mk create mode 100644 api-tests/ff/ipc/test_i041/test.cmake delete mode 100644 api-tests/ff/ipc/test_i042/source.mk create mode 100644 api-tests/ff/ipc/test_i042/test.cmake delete mode 100644 api-tests/ff/ipc/test_i043/source.mk create mode 100644 api-tests/ff/ipc/test_i043/test.cmake delete mode 100644 api-tests/ff/ipc/test_i044/source.mk create mode 100644 api-tests/ff/ipc/test_i044/test.cmake delete mode 100644 api-tests/ff/ipc/test_i045/source.mk create mode 100644 api-tests/ff/ipc/test_i045/test.cmake delete mode 100644 api-tests/ff/ipc/test_i046/source.mk create mode 100644 api-tests/ff/ipc/test_i046/test.cmake create mode 100644 api-tests/ff/ipc/test_i047/test.cmake create mode 100644 api-tests/ff/ipc/test_i048/test.cmake create mode 100644 api-tests/ff/ipc/test_i049/test.cmake create mode 100644 api-tests/ff/ipc/test_i050/test.cmake delete mode 100644 api-tests/ff/ipc/test_i051/source.mk create mode 100644 api-tests/ff/ipc/test_i051/test.cmake delete mode 100644 api-tests/ff/ipc/test_i052/source.mk create mode 100644 api-tests/ff/ipc/test_i052/test.cmake delete mode 100644 api-tests/ff/ipc/test_i053/source.mk create mode 100644 api-tests/ff/ipc/test_i053/test.cmake delete mode 100644 api-tests/ff/ipc/test_i054/source.mk create mode 100644 api-tests/ff/ipc/test_i054/test.cmake delete mode 100644 api-tests/ff/ipc/test_i055/source.mk create mode 100644 api-tests/ff/ipc/test_i055/test.cmake delete mode 100644 api-tests/ff/ipc/test_i056/source.mk create mode 100644 api-tests/ff/ipc/test_i056/test.cmake delete mode 100644 api-tests/ff/ipc/test_i057/source.mk create mode 100644 api-tests/ff/ipc/test_i057/test.cmake delete mode 100644 api-tests/ff/ipc/test_i058/source.mk create mode 100644 api-tests/ff/ipc/test_i058/test.cmake delete mode 100644 api-tests/ff/ipc/test_i059/source.mk create mode 100644 api-tests/ff/ipc/test_i059/test.cmake delete mode 100644 api-tests/ff/ipc/test_i060/source.mk create mode 100644 api-tests/ff/ipc/test_i060/test.cmake delete mode 100644 api-tests/ff/ipc/test_i061/source.mk create mode 100644 api-tests/ff/ipc/test_i061/test.cmake delete mode 100644 api-tests/ff/ipc/test_i062/source.mk create mode 100644 api-tests/ff/ipc/test_i062/test.cmake delete mode 100644 api-tests/ff/ipc/test_i063/source.mk create mode 100644 api-tests/ff/ipc/test_i063/test.cmake delete mode 100644 api-tests/ff/ipc/test_i064/source.mk create mode 100644 api-tests/ff/ipc/test_i064/test.cmake delete mode 100644 api-tests/ff/ipc/test_i065/source.mk create mode 100644 api-tests/ff/ipc/test_i065/test.cmake delete mode 100644 api-tests/ff/ipc/test_i066/source.mk create mode 100644 api-tests/ff/ipc/test_i066/test.cmake delete mode 100644 api-tests/ff/ipc/test_i067/source.mk create mode 100644 api-tests/ff/ipc/test_i067/test.cmake delete mode 100644 api-tests/ff/ipc/test_i068/source.mk create mode 100644 api-tests/ff/ipc/test_i068/test.cmake delete mode 100644 api-tests/ff/ipc/test_i069/source.mk create mode 100644 api-tests/ff/ipc/test_i069/test.cmake delete mode 100644 api-tests/ff/ipc/test_i070/source.mk create mode 100644 api-tests/ff/ipc/test_i070/test.cmake delete mode 100644 api-tests/ff/ipc/test_i071/source.mk create mode 100644 api-tests/ff/ipc/test_i071/test.cmake delete mode 100644 api-tests/ff/ipc/test_i072/source.mk create mode 100644 api-tests/ff/ipc/test_i072/test.cmake delete mode 100644 api-tests/ff/ipc/test_i073/source.mk create mode 100644 api-tests/ff/ipc/test_i073/test.cmake delete mode 100644 api-tests/ff/ipc/test_i074/source.mk create mode 100644 api-tests/ff/ipc/test_i074/test.cmake delete mode 100644 api-tests/ff/ipc/test_i075/source.mk create mode 100644 api-tests/ff/ipc/test_i075/test.cmake delete mode 100644 api-tests/ff/ipc/test_i076/source.mk create mode 100644 api-tests/ff/ipc/test_i076/test.cmake delete mode 100644 api-tests/ff/ipc/test_i077/source.mk create mode 100644 api-tests/ff/ipc/test_i077/test.cmake delete mode 100644 api-tests/ff/ipc/test_i078/source.mk create mode 100644 api-tests/ff/ipc/test_i078/test.cmake delete mode 100644 api-tests/ff/ipc/test_i079/source.mk create mode 100644 api-tests/ff/ipc/test_i079/test.cmake delete mode 100644 api-tests/ff/ipc/test_i080/source.mk create mode 100644 api-tests/ff/ipc/test_i080/test.cmake delete mode 100644 api-tests/ff/ipc/test_i081/source.mk create mode 100644 api-tests/ff/ipc/test_i081/test.cmake delete mode 100644 api-tests/ff/ipc/test_i082/source.mk create mode 100644 api-tests/ff/ipc/test_i082/test.cmake delete mode 100644 api-tests/ff/ipc/test_i083/source.mk create mode 100644 api-tests/ff/ipc/test_i083/test.cmake delete mode 100644 api-tests/ff/ipc/test_i084/source.mk create mode 100644 api-tests/ff/ipc/test_i084/test.cmake delete mode 100644 api-tests/ff/ipc/test_i085/source.mk create mode 100644 api-tests/ff/ipc/test_i085/test.cmake delete mode 100644 api-tests/ff/ipc/test_i086/source.mk create mode 100644 api-tests/ff/ipc/test_i086/test.cmake delete mode 100644 api-tests/ff/ipc/test_i087/source.mk create mode 100644 api-tests/ff/ipc/test_i087/test.cmake delete mode 100644 api-tests/ff/ipc/test_l088/source.mk create mode 100644 api-tests/ff/ipc/test_l088/test.cmake delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/Makefile create mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an521/Makefile create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h rename api-tests/{tools/makefiles/linker/test.sct => platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c} (59%) create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/Makefile create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/Makefile create mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/Makefile create mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake rename api-tests/{ff/ipc/test_i047/source.mk => tools/cmake/common/CMakeSettings.cmake} (74%) create mode 100644 api-tests/tools/cmake/common/Utils.cmake create mode 100644 api-tests/tools/cmake/compiler/ARMCLANG.cmake create mode 100644 api-tests/tools/cmake/compiler/GNUARM.cmake create mode 100644 api-tests/tools/cmake/compiler/HOST_GCC.cmake delete mode 100644 api-tests/tools/makefiles/Makefile delete mode 100644 api-tests/tools/makefiles/linker/test.linker delete mode 100644 api-tests/tools/makefiles/spbuild.mk delete mode 100644 api-tests/tools/makefiles/testbuild.mk delete mode 100644 api-tests/tools/makefiles/toolchain.mk delete mode 100644 api-tests/tools/makefiles/valbuild.mk delete mode 100644 api-tests/tools/scripts/gen_tests_list.pl create mode 100644 api-tests/tools/scripts/gen_tests_list.py delete mode 100755 api-tests/tools/scripts/process_test_linker_file.pl delete mode 100755 api-tests/tools/scripts/setup.sh create mode 100644 api-tests/tools/scripts/target_cfg/CMakeLists.txt rename api-tests/tools/scripts/{ => target_cfg}/targetConfigGen.py (99%) delete mode 100755 api-tests/tools/scripts/test_elf_combine.pl create mode 100644 api-tests/val/val_nspe.cmake create mode 100644 api-tests/val/val_spe.cmake diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt new file mode 100644 index 00000000..fa949a38 --- /dev/null +++ b/api-tests/CMakeLists.txt @@ -0,0 +1,385 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Set the minimum required version of CMake for the project +cmake_minimum_required(VERSION 3.10) + +# cmake_policy +cmake_policy(SET CMP0057 NEW) + +# Find python interpreter version 3 or greater +find_package(PythonInterp 3 REQUIRED) +# Find Git package +find_package(Git REQUIRED) + +get_filename_component(PSA_ROOT_DIR . ABSOLUTE) + +list(APPEND CMAKE_MODULE_PATH ${PSA_ROOT_DIR}/tools/cmake) +include("common/Utils") +include(${PSA_ROOT_DIR}/tools/cmake/common/CMakeSettings.cmake) + +# list of supported suites +list(APPEND PSA_SUITES + "IPC" + "CRYPTO" + "PROTECTED_STORAGE" + "INTERNAL_TRUSTED_STORAGE" + "INITIAL_ATTESTATION" +) + +# list of ipc files required +list(APPEND PSA_IPC_FILES + "psa/client.h" + "psa/service.h" + "psa_manifest/sid.h" + "psa_manifest/pid.h" + "psa/lifecycle.h" +) + +# list of crypto files required +list(APPEND PSA_CRYPTO_FILES + "psa/crypto.h" +) + +# list of protected_storage files required +list(APPEND PSA_PROTECTED_STORAGE_FILES + "psa/protected_storage.h" +) + +# list of internal_trusted_storage files required +list(APPEND PSA_INTERNAL_TRUSTED_STORAGE_FILES + "psa/internal_trusted_storage.h" +) + +# list of initial_attestation files required +list(APPEND PSA_INITIAL_ATTESTATION_FILES + "psa/initial_attestation.h" + "psa/crypto.h" +) + +# list of supported toolchains +list(APPEND PSA_TOOLCHAIN_SUPPORT + GNUARM + ARMCLANG + HOST_GCC +) + +# list of suported CPU arch +list(APPEND PSA_CPU_ARCH_SUPPORT + armv8m_ml + armv8m_bl + armv7m +) + +# list of VERBOSE options +list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5) + +message(STATUS "[PSA] : ----------Process input arguments- start-------------") + +# Check for TARGET command line argument +_check_arguments("TARGET") +# Check for SUTIE command line argument +_check_arguments("SUITE") +# Check for PSA_INCLUDE_PATHS command line argument +_check_arguments("PSA_INCLUDE_PATHS") +# Check for CPU_ARCH command line argument +_check_arguments("CPU_ARCH") + +string(TOLOWER ${SUITE} SUITE_LOWER) + +# Check for valid targets +_get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/targets) +if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST) + message(FATAL_ERROR "[PSA] : Error: Unspported value for -DTARGET=, supported targets are : ${PSA_TARGET_LIST}") +endif() + +# Check for the presence of required test suite directories +if((NOT IS_DIRECTORY ${PSA_ROOT_DIR}/dev_apis) OR (NOT IS_DIRECTORY ${PSA_ROOT_DIR}/ff)) + message(STATUS "[PSA] : Error: Could not find architecture test suite directories in psa root path ${PSA_ROOT_DIR}") +endif() + +if(FALSE) +# Check for build directory specified +if(NOT DEFINED BUILD) + set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE) +else() + set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/${BUILD}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE) +endif() +endif() + +# Check for valid suite cmake argument passed +if(NOT ${SUITE} IN_LIST PSA_SUITES) + message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSUITE=, select one from supported suites which are : ${PSA_SUITES}") +endif() + +# Project variables +set(PSA_TARGET_PRE_BUILD psa_pre_build) +set(PSA_TARGET_GENERATE_DATABASE_PRE psa_generate_database_prerequisite) +set(PSA_TARGET_GENERATE_DATABASE psa_generate_database) +set(PSA_TARGET_GENERATE_DATABASE_POST psa_generate_database_cleanup) +set(PSA_TARGET_QCBOR psa_qcbor) +set(PSA_TARGET_PAL_NSPE_LIB pal_nspe) +set(PSA_TARGET_VAL_NSPE_LIB val_nspe) +set(PSA_TARGET_TEST_COMBINE_LIB test_combine) +set(PSA_TARGET_DRIVER_PARTITION_LIB driver_partition) +set(PSA_TARGET_CLIENT_PARTITION_LIB client_partition) +set(PSA_TARGET_SERVER_PARTITION_LIB server_partition) +if(${SUITE} STREQUAL "IPC") + set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/ff/${SUITE_LOWER}) + set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/ff/${SUITE_LOWER}) +else() + set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/dev_apis/${SUITE_LOWER}) + set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/dev_apis/${SUITE_LOWER}) +endif() +set(PSA_TARGET_CONFIG_HEADER_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/target_cfg/targetConfigGen.py) +set(PSA_TESTLIST_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/gen_tests_list.py) +set(TARGET_CONFIGURATION_FILE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg) +set(TGT_CONFIG_SOURCE_C ${CMAKE_CURRENT_BINARY_DIR}/targetConfigGen.c) +set(OUTPUT_HEADER target_database.h) +set(DATABASE_TABLE_NAME target_database) +set(DATABASE_TABLE_SECTION_NAME "NOSECTION") +set(TARGET_HEADER_GEN_INCLUDE_PATHS "${PSA_ROOT_DIR}/val/nspe|${PSA_ROOT_DIR}/val/common|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto") +set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db) +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +set(PSA_QCBOR_GIT_REPO_LINK https://github.com/laurencelundblade/QCBOR.git) +set(PSA_QCBOR_GIT_REPO_TAG da53227db1488dde0952bdff66c3d904dce270b3) +set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/src/psa_qcbor/inc) +endif() +set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/testlist.txt) +set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc) +set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc) +set(PSA_CLIENT_TEST_LIST_DELCARE_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list_declare.inc) +set(PSA_CLIENT_TEST_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list.inc) +set(PSA_SERVER_TEST_LIST_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list_declare.inc) +set(PSA_SERVER_TEST_LIST ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list.inc) + +# Validity check for required files for a given suite +if(NOT DEFINED PSA_${SUITE}_FILES) + message(FATAL_ERROR "[PSA] : List of file/s to verify against ${suite} is not defined") +endif() +foreach(file_item ${PSA_${SUITE}_FILES}) + set(PSA_FILE_FOUND FALSE) + foreach(include_path ${PSA_INCLUDE_PATHS}) + if((EXISTS ${include_path}/${file_item}) AND + (NOT PSA_FILE_FOUND)) + set(PSA_FILE_FOUND TRUE) + break() + endif() + endforeach() + if(NOT PSA_FILE_FOUND) + message(FATAL_ERROR "[PSA] : Couldn't find ${file_item} in ${PSA_INCLUDE_PATHS}") + endif() +endforeach() + +# Check for TOOLCHAIN command line argument +if(NOT DEFINED TOOLCHAIN) + set(TOOLCHAIN "GNUARM" CACHE INTERNAL "Compiler used" FORCE) + message(STATUS "[PSA] : Defaulting compiler to ${TOOLCHAIN}") +endif() + +# Check for CPU architecture +if(NOT ${CPU_ARCH} IN_LIST PSA_CPU_ARCH_SUPPORT) + message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DCPU_ARCH=, supported CPU arch are : ${PSA_CPU_ARCH_SUPPORT}") +endif() + + +# Check for VERBOSE +if(NOT DEFINED VERBOSE) + set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE) + message(STATUS "[PSA] : Defaulting to VERBOSE=3") +else() + if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS) + message(FATAL_ERROR "[PSA] : Error: Unspported value for -DVERBOSE=, supported values are : ${PSA_VERBOSE_OPTIONS}") + endif() +endif() + +if(NOT DEFINED INCLUDE_PANIC_TESTS) + set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "By default panic tests are disabled" FORCE) + message(STATUS "[PSA] : Defaulting to INCLUDE_PANIC_TESTS=0") +else() + if(INCLUDE_PANIC_TESTS EQUAL 1) + message(STATUS "[PSA] : Ensure you set watchdog.num to 1 in ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg") + message(STATUS "[PSA] : To test PSA APIs panic conditions, test harness may require to access watchdog timer " + "to recover from panic and to be able to continue with next test. " + "Ignore this warning if system under test has capability to reset the system " + "when it encounters panic condition.") + endif() +endif() + +if(NOT DEFINED WATCHDOG_AVAILABLE) + set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "By default watchdog is enabled" FORCE) + message(STATUS "[PSA] : Watchdog is enabled by default") +endif() + +if((INCLUDE_PANIC_TESTS EQUAL 1) AND + (WATCHDOG_AVAILABLE EQUAL 0)) + message(FATAL_ERROR "[PSA]: Panic test execution needs watchdog to be enabled! set -DWATCHDOG_AVAILABLE=1") +endif() + +if(NOT DEFINED SP_HEAP_MEM_SUPP) + set(SP_HEAP_MEM_SUPP 1 CACHE INTERNAL "Are dynamic memory functions available to secure partition?" FORCE) + message(STATUS "[PSA] : Default value for SP_HEAP_MEM_SUPP is ${SP_HEAP_MEM_SUPP}") +endif() + +if(NOT DEFINED TEST_COMBINE_ARCHIVE) + set(TEST_COMBINE_ARCHIVE 1 CACHE INTERNAL "Default option is to create archive" FORCE) + message(STATUS "[PSA] : Default value for TEST_COMBINE_ARCHIVE is ${TEST_COMBINE_ARCHIVE}") +endif() + +message(STATUS "[PSA] : ----------Process input arguments- complete-------------") + +# Create PSA clean list +list(APPEND PSA_CLEAN_LIST + ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER} + ${PSA_TESTLIST_FILE} + ${PSA_TEST_ENTRY_LIST_INC} + ${PSA_TEST_ENTRY_FUN_DECLARE_INC} + ${PSA_CLIENT_TEST_LIST_DELCARE_INC} + ${PSA_CLIENT_TEST_LIST_INC} + ${PSA_SERVER_TEST_LIST_DECLARE_INC} + ${PSA_SERVER_TEST_LIST} +) + +# Process testsuite.db +message(STATUS "[PSA] : Creating testlist.txt 'available at ${PSA_TESTLIST_FILE}'") +execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR} + ${SUITE_LOWER} + ${TESTSUITE_DB} + ${INCLUDE_PANIC_TESTS} + ${PSA_TESTLIST_FILE} + ${PSA_TEST_ENTRY_LIST_INC} + ${PSA_TEST_ENTRY_FUN_DECLARE_INC} + ${PSA_CLIENT_TEST_LIST_DELCARE_INC} + ${PSA_CLIENT_TEST_LIST_INC} + ${PSA_SERVER_TEST_LIST_DECLARE_INC} + ${PSA_SERVER_TEST_LIST}) +# Creating CMake list variable from file +file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST) +string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}") + +add_custom_target( + ${PSA_TARGET_GENERATE_DATABASE_PRE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/platform + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/val + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/partition + COMMAND ${CMAKE_COMMAND} -E make_directory ${PSA_SUITE_OUT_DIR} +) + +# Generate target files from User provided data base +include(ExternalProject) +ExternalProject_Add( + ${PSA_TARGET_GENERATE_DATABASE} + PREFIX ${CMAKE_CURRENT_BINARY_DIR} + DOWNLOAD_COMMAND "" + UPDATE_COMMAND "" + PATCH_COMMAND "" + BUILD_COMMAND "" + SOURCE_DIR "${PSA_ROOT_DIR}/tools/scripts/target_cfg" + CMAKE_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DOUT_DIR=${CMAKE_CURRENT_BINARY_DIR} + -DTARGET=${TARGET} + -DGENERATOR_FILE=${PSA_TARGET_CONFIG_HEADER_GENERATOR} + -DINCLUDE_DIR=${PSA_ROOT_DIR}/val/common + -DTARGET_CONFIGURATION_FILE=${TARGET_CONFIGURATION_FILE} + -DTGT_CONFIG_SOURCE_C=${TGT_CONFIG_SOURCE_C} + -DOUTPUT_HEADER=${OUTPUT_HEADER} + -DDATABASE_TABLE_NAME=${DATABASE_TABLE_NAME} + -DDATABASE_TABLE_SECTION_NAME=${DATABASE_TABLE_SECTION_NAME} + -DTARGET_HEADER_GEN_INCLUDE_PATHS=${TARGET_HEADER_GEN_INCLUDE_PATHS} + LIST_SEPARATOR | + TEST_COMMAND "" +) + +# Add custom target to clean generated files of the external project +add_custom_target( + ${PSA_TARGET_GENERATE_DATABASE_POST} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src/${PSA_TARGET_GENERATE_DATABASE}-build/ -- clean +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +# Cloning CMSIS_5 repo +ExternalProject_Add( + ${PSA_TARGET_QCBOR} + PREFIX ${CMAKE_CURRENT_BINARY_DIR} + GIT_REPOSITORY ${PSA_QCBOR_GIT_REPO_LINK} + GIT_TAG ${PSA_QCBOR_GIT_REPO_TAG} + CONFIGURE_COMMAND "" + UPDATE_COMMAND "" + PATCH_COMMAND "" + BUILD_COMMAND "" + TEST_COMMAND "" + INSTALL_COMMAND "" +) +endif() + +# Check for supported toolchain/s +if(${TOOLCHAIN} IN_LIST PSA_TOOLCHAIN_SUPPORT) + include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake) +else() + message(FATAL_ERROR "[PSA] : Error: Unspported value for -DTOOLCHAIN=, supported toolchain are : ${PSA_TOOLCHAIN_SUPPORT}") +endif() + +# Global macro to identify the PSA test suite cmake build +add_definitions(-DPSA_CMAKE_BUILD) +add_definitions(-D${SUITE}) +add_definitions(-DVERBOSE=${VERBOSE}) + +if(${SP_HEAP_MEM_SUPP} EQUAL 1) + add_definitions(-DSP_HEAP_MEM_SUPP) +endif() + +# Build PAL NSPE LIB +include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake) +# Build VAL NSPE LIB +#add_definitions(-DVAL_NSPE_BUILD) +include(${PSA_ROOT_DIR}/val/val_nspe.cmake) +# Build test +include(${PSA_SUITE_DIR}/suite.cmake) +if(${SUITE} STREQUAL "IPC") +# Build SPE LIB +include(${PSA_ROOT_DIR}/val/val_spe.cmake) +endif() + +add_dependencies(${PSA_TARGET_GENERATE_DATABASE} ${PSA_TARGET_GENERATE_DATABASE_PRE}) +add_dependencies(${PSA_TARGET_GENERATE_DATABASE_POST} ${PSA_TARGET_GENERATE_DATABASE}) +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +add_dependencies(${PSA_TARGET_QCBOR} ${PSA_TARGET_GENERATE_DATABASE_POST}) +add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_QCBOR}) +else() +add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_GENERATE_DATABASE_POST}) +endif() +add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_PAL_NSPE_LIB}) +add_dependencies(${PSA_TARGET_TEST_COMBINE_LIB} ${PSA_TARGET_VAL_NSPE_LIB}) +if(${SUITE} STREQUAL "IPC") +add_dependencies(${PSA_TARGET_DRIVER_PARTITION_LIB} ${PSA_TARGET_TEST_COMBINE_LIB}) +add_dependencies(${PSA_TARGET_CLIENT_PARTITION_LIB} ${PSA_TARGET_DRIVER_PARTITION_LIB}) +add_dependencies(${PSA_TARGET_SERVER_PARTITION_LIB} ${PSA_TARGET_CLIENT_PARTITION_LIB}) +endif() + +# Include the files for make clean +foreach(clean_item ${PSA_CLEAN_LIST}) + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item}) +endforeach() + +set_property(TARGET ${PSA_TARGET_VAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/val) +set_property(TARGET ${PSA_TARGET_PAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/platform) +set_property(TARGET ${PSA_TARGET_TEST_COMBINE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${PSA_SUITE_OUT_DIR}) +if(${SUITE} STREQUAL "IPC") +set_property(TARGET ${PSA_TARGET_DRIVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition) +set_property(TARGET ${PSA_TARGET_CLIENT_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition) +set_property(TARGET ${PSA_TARGET_SERVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition) +endif() diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md index 518fe60e..6b8fabf8 100644 --- a/api-tests/dev_apis/README.md +++ b/api-tests/dev_apis/README.md @@ -31,32 +31,35 @@ Refer to the [PSA Developer APIs Test Suite Porting Guide](../docs/porting_guide To build the test suite for your target platform, execute the following commands: ``` -cd api-tests -./tools/scripts/setup.sh --target --cpu_arch --suite --build --include --archive_tests + cd api-tests + mkdir + cd + cmake ../ -G" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" + cmake --build . ```
where: -- is the same as the name of the target-specific directory created in the **platform/targets/** directory.
+- "Unix Makefiles" to generate Makefiles for Linux and Cygwin
+ "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
+- is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
- is the Arm Architecture version name for which the tests should be compiled. For example, Armv7M, Armv8M-Baseline and Armv8M-Mainline Architecture.
- is the suite name that is the same as the suite name available in **dev_apis/** directory.
-- is a directory to store build output files.
-- is an additional directory to be included into the compiler search path.
-Note: You must provide Developer APIs header file implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system.
-- Use **--archive_tests** option to create a combined test archive (**test_combine.a**) file by combining available test object files. Absence of this option creates a combined test binary (**test_elf_combine.bin**) by combining the available test ELF files. +- ;;...; is an additional directory to be included into the compiler search path.You must provide Developer APIs header file implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system.
-For details about options, refer to **./tools/scripts/setup.sh --help**. - -To compile Crypto tests for **tgt_dev_apis_mbedos_fvp_mps2_m4** platform, execute the following commands: +To compile Crypto tests for **tgt_dev_apis_tfm_an521** platform, execute the following commands: ``` -cd api-tests -./tools/scripts/setup.sh --target tgt_dev_apis_mbedos_fvp_mps2_m4 --cpu_arch armv7m --suite crypto --build BUILD_CRYPTO --include --archive_tests + cd api-tests + mkdir BUILD + cd BUILD + cmake ../ -G"Unix Makefiles" -DTARGET=tgt_dev_apis_tfm_an521 -DCPU_ARCH=armv8m_ml -DSUITE=CRYPTO -DPSA_INCLUDE_PATHS=";;...;" + cmake --build . ``` ### Build output Building the test suite generates the following NSPE binaries:
-- **/BUILD/val/val_nspe.a** -- **/BUILD/platform/pal_nspe.a** -- **/BUILD/dev_apis//test_combine.a** +- **/val/val_nspe.a** +- **/platform/pal_nspe.a** +- **/dev_apis//test_combine.a** ### Integrating the libraries into your target platform diff --git a/api-tests/dev_apis/crypto/suite.cmake b/api-tests/dev_apis/crypto/suite.cmake new file mode 100644 index 00000000..ddb3128e --- /dev/null +++ b/api-tests/dev_apis/crypto/suite.cmake @@ -0,0 +1,56 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +foreach(test ${PSA_TEST_LIST}) + include(${PSA_SUITE_DIR}/${test}/test.cmake) + foreach(source_file ${CC_SOURCE}) + list(APPEND SUITE_CC_SOURCE + ${PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE}) + list(APPEND SUITE_AS_SOURCE + ${PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + unset(CC_SOURCE) + unset(AS_SOURCE) +endforeach() + +add_definitions(${CC_OPTIONS}) +add_definitions(${AS_OPTIONS}) +add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) + +# Test related Include directories +foreach(test ${PSA_TEST_LIST}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${PSA_SUITE_DIR}/${test}) +endforeach() + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${psa_inc_path} + ) +endforeach() + +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto +) diff --git a/api-tests/dev_apis/crypto/test_c001/source.mk b/api-tests/dev_apis/crypto/test_c001/source.mk deleted file mode 100644 index f066e825..00000000 --- a/api-tests/dev_apis/crypto/test_c001/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c001.c test_c001.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c016/source.mk b/api-tests/dev_apis/crypto/test_c001/test.cmake similarity index 82% rename from api-tests/dev_apis/crypto/test_c016/source.mk rename to api-tests/dev_apis/crypto/test_c001/test.cmake index f7d0b7e4..bed11f85 100644 --- a/api-tests/dev_apis/crypto/test_c016/source.mk +++ b/api-tests/dev_apis/crypto/test_c001/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,7 +15,10 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_c016.c test_c016.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_c001.c + test_c001.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c002/source.mk b/api-tests/dev_apis/crypto/test_c002/source.mk deleted file mode 100644 index b05e89af..00000000 --- a/api-tests/dev_apis/crypto/test_c002/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c002.c test_c002.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c017/source.mk b/api-tests/dev_apis/crypto/test_c002/test.cmake similarity index 82% rename from api-tests/dev_apis/crypto/test_c017/source.mk rename to api-tests/dev_apis/crypto/test_c002/test.cmake index 6147e4cc..c4762aad 100644 --- a/api-tests/dev_apis/crypto/test_c017/source.mk +++ b/api-tests/dev_apis/crypto/test_c002/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,7 +15,10 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_c017.c test_c017.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_c002.c + test_c002.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c003/source.mk b/api-tests/dev_apis/crypto/test_c003/source.mk deleted file mode 100644 index 6f213784..00000000 --- a/api-tests/dev_apis/crypto/test_c003/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c003.c test_c003.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c018/source.mk b/api-tests/dev_apis/crypto/test_c003/test.cmake similarity index 82% rename from api-tests/dev_apis/crypto/test_c018/source.mk rename to api-tests/dev_apis/crypto/test_c003/test.cmake index fbfbcae9..4d1ef6bd 100644 --- a/api-tests/dev_apis/crypto/test_c018/source.mk +++ b/api-tests/dev_apis/crypto/test_c003/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,7 +15,10 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_c018.c test_c018.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_c003.c + test_c003.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c004/source.mk b/api-tests/dev_apis/crypto/test_c004/source.mk deleted file mode 100644 index 0c6aef1b..00000000 --- a/api-tests/dev_apis/crypto/test_c004/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c004.c test_c004.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c019/source.mk b/api-tests/dev_apis/crypto/test_c004/test.cmake similarity index 82% rename from api-tests/dev_apis/crypto/test_c019/source.mk rename to api-tests/dev_apis/crypto/test_c004/test.cmake index a0a473bf..3107f11b 100644 --- a/api-tests/dev_apis/crypto/test_c019/source.mk +++ b/api-tests/dev_apis/crypto/test_c004/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,7 +15,10 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_c019.c test_c019.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_c004.c + test_c004.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c005/source.mk b/api-tests/dev_apis/crypto/test_c005/source.mk deleted file mode 100644 index 23bd36e3..00000000 --- a/api-tests/dev_apis/crypto/test_c005/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c005.c test_c005.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c005/test.cmake b/api-tests/dev_apis/crypto/test_c005/test.cmake new file mode 100644 index 00000000..33fc0a67 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c005/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c005.c + test_c005.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c006/source.mk b/api-tests/dev_apis/crypto/test_c006/source.mk deleted file mode 100644 index 11be5c57..00000000 --- a/api-tests/dev_apis/crypto/test_c006/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c006.c test_c006.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c006/test.cmake b/api-tests/dev_apis/crypto/test_c006/test.cmake new file mode 100644 index 00000000..22db5355 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c006/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c006.c + test_c006.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c007/source.mk b/api-tests/dev_apis/crypto/test_c007/source.mk deleted file mode 100644 index 3e76b148..00000000 --- a/api-tests/dev_apis/crypto/test_c007/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c007.c test_c007.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c007/test.cmake b/api-tests/dev_apis/crypto/test_c007/test.cmake new file mode 100644 index 00000000..53b06251 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c007/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c007.c + test_c007.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c008/source.mk b/api-tests/dev_apis/crypto/test_c008/source.mk deleted file mode 100644 index 62d4727a..00000000 --- a/api-tests/dev_apis/crypto/test_c008/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c008.c test_c008.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c008/test.cmake b/api-tests/dev_apis/crypto/test_c008/test.cmake new file mode 100644 index 00000000..625227ae --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c008/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c008.c + test_c008.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c009/source.mk b/api-tests/dev_apis/crypto/test_c009/source.mk deleted file mode 100644 index c865e8eb..00000000 --- a/api-tests/dev_apis/crypto/test_c009/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c009.c test_c009.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c009/test.cmake b/api-tests/dev_apis/crypto/test_c009/test.cmake new file mode 100644 index 00000000..93b0c943 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c009/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c009.c + test_c009.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c010/source.mk b/api-tests/dev_apis/crypto/test_c010/source.mk deleted file mode 100644 index 8b32fcf0..00000000 --- a/api-tests/dev_apis/crypto/test_c010/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c010.c test_c010.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c010/test.cmake b/api-tests/dev_apis/crypto/test_c010/test.cmake new file mode 100644 index 00000000..c3ca1054 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c010/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c010.c + test_c010.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c011/source.mk b/api-tests/dev_apis/crypto/test_c011/source.mk deleted file mode 100644 index 4ab62a91..00000000 --- a/api-tests/dev_apis/crypto/test_c011/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c011.c test_c011.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c011/test.cmake b/api-tests/dev_apis/crypto/test_c011/test.cmake new file mode 100644 index 00000000..7c2b04ed --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c011/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c011.c + test_c011.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c012/source.mk b/api-tests/dev_apis/crypto/test_c012/source.mk deleted file mode 100644 index f6c4ec3c..00000000 --- a/api-tests/dev_apis/crypto/test_c012/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c012.c test_c012.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c012/test.cmake b/api-tests/dev_apis/crypto/test_c012/test.cmake new file mode 100644 index 00000000..9ea7f0d4 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c012/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c012.c + test_c012.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c013/source.mk b/api-tests/dev_apis/crypto/test_c013/source.mk deleted file mode 100644 index 8d63e457..00000000 --- a/api-tests/dev_apis/crypto/test_c013/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c013.c test_c013.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c013/test.cmake b/api-tests/dev_apis/crypto/test_c013/test.cmake new file mode 100644 index 00000000..3939d2c1 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c013/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c013.c + test_c013.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c014/source.mk b/api-tests/dev_apis/crypto/test_c014/source.mk deleted file mode 100644 index 44a2bdb4..00000000 --- a/api-tests/dev_apis/crypto/test_c014/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c014.c test_c014.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c014/test.cmake b/api-tests/dev_apis/crypto/test_c014/test.cmake new file mode 100644 index 00000000..6bf060fa --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c014/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c014.c + test_c014.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c015/source.mk b/api-tests/dev_apis/crypto/test_c015/source.mk deleted file mode 100644 index 70abb3ce..00000000 --- a/api-tests/dev_apis/crypto/test_c015/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c015.c test_c015.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c015/test.cmake b/api-tests/dev_apis/crypto/test_c015/test.cmake new file mode 100644 index 00000000..69bf742b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c015/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c015.c + test_c015.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c016/test.cmake b/api-tests/dev_apis/crypto/test_c016/test.cmake new file mode 100644 index 00000000..a4aa7135 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c016/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c016.c + test_c016.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c017/test.cmake b/api-tests/dev_apis/crypto/test_c017/test.cmake new file mode 100644 index 00000000..4314199a --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c017/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c017.c + test_c017.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c018/test.cmake b/api-tests/dev_apis/crypto/test_c018/test.cmake new file mode 100644 index 00000000..32d01a54 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c018/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c018.c + test_c018.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c019/test.cmake b/api-tests/dev_apis/crypto/test_c019/test.cmake new file mode 100644 index 00000000..c2405580 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c019/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c019.c + test_c019.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c020/source.mk b/api-tests/dev_apis/crypto/test_c020/source.mk deleted file mode 100644 index accb40d3..00000000 --- a/api-tests/dev_apis/crypto/test_c020/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c020.c test_c020.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c020/test.cmake b/api-tests/dev_apis/crypto/test_c020/test.cmake new file mode 100644 index 00000000..8ceb228b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c020/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c020.c + test_c020.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c021/source.mk b/api-tests/dev_apis/crypto/test_c021/source.mk deleted file mode 100644 index 97618667..00000000 --- a/api-tests/dev_apis/crypto/test_c021/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c021.c test_c021.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c021/test.cmake b/api-tests/dev_apis/crypto/test_c021/test.cmake new file mode 100644 index 00000000..e1a7891b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c021/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c021.c + test_c021.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c022/source.mk b/api-tests/dev_apis/crypto/test_c022/source.mk deleted file mode 100644 index 2ef3d732..00000000 --- a/api-tests/dev_apis/crypto/test_c022/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c022.c test_c022.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c022/test.cmake b/api-tests/dev_apis/crypto/test_c022/test.cmake new file mode 100644 index 00000000..c095e550 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c022/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c022.c + test_c022.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c023/source.mk b/api-tests/dev_apis/crypto/test_c023/source.mk deleted file mode 100644 index bd0d7e75..00000000 --- a/api-tests/dev_apis/crypto/test_c023/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c023.c test_c023.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c023/test.cmake b/api-tests/dev_apis/crypto/test_c023/test.cmake new file mode 100644 index 00000000..ceca9afb --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c023/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c023.c + test_c023.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c024/source.mk b/api-tests/dev_apis/crypto/test_c024/source.mk deleted file mode 100644 index bfa9beea..00000000 --- a/api-tests/dev_apis/crypto/test_c024/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c024.c test_c024.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c024/test.cmake b/api-tests/dev_apis/crypto/test_c024/test.cmake new file mode 100644 index 00000000..5904afc7 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c024/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c024.c + test_c024.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c025/source.mk b/api-tests/dev_apis/crypto/test_c025/source.mk deleted file mode 100644 index e5ef05c3..00000000 --- a/api-tests/dev_apis/crypto/test_c025/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c025.c test_c025.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c025/test.cmake b/api-tests/dev_apis/crypto/test_c025/test.cmake new file mode 100644 index 00000000..af89d017 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c025/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c025.c + test_c025.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c026/source.mk b/api-tests/dev_apis/crypto/test_c026/source.mk deleted file mode 100644 index ab8acf2a..00000000 --- a/api-tests/dev_apis/crypto/test_c026/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c026.c test_c026.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c026/test.cmake b/api-tests/dev_apis/crypto/test_c026/test.cmake new file mode 100644 index 00000000..29ddd0ab --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c026/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c026.c + test_c026.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c027/source.mk b/api-tests/dev_apis/crypto/test_c027/source.mk deleted file mode 100644 index 243dff74..00000000 --- a/api-tests/dev_apis/crypto/test_c027/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c027.c test_c027.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c027/test.cmake b/api-tests/dev_apis/crypto/test_c027/test.cmake new file mode 100644 index 00000000..15623b72 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c027/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c027.c + test_c027.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c028/source.mk b/api-tests/dev_apis/crypto/test_c028/source.mk deleted file mode 100644 index f7dd1932..00000000 --- a/api-tests/dev_apis/crypto/test_c028/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c028.c test_c028.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c028/test.cmake b/api-tests/dev_apis/crypto/test_c028/test.cmake new file mode 100644 index 00000000..eae954e5 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c028/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c028.c + test_c028.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c029/source.mk b/api-tests/dev_apis/crypto/test_c029/source.mk deleted file mode 100644 index 31b0f421..00000000 --- a/api-tests/dev_apis/crypto/test_c029/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c029.c test_c029.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c029/test.cmake b/api-tests/dev_apis/crypto/test_c029/test.cmake new file mode 100644 index 00000000..112f7ab4 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c029/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c029.c + test_c029.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c030/source.mk b/api-tests/dev_apis/crypto/test_c030/source.mk deleted file mode 100644 index 1cb3c47f..00000000 --- a/api-tests/dev_apis/crypto/test_c030/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c030.c test_c030.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c030/test.cmake b/api-tests/dev_apis/crypto/test_c030/test.cmake new file mode 100644 index 00000000..ba46882a --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c030/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c030.c + test_c030.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c031/source.mk b/api-tests/dev_apis/crypto/test_c031/source.mk deleted file mode 100644 index be9d3063..00000000 --- a/api-tests/dev_apis/crypto/test_c031/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c031.c test_c031.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c031/test.cmake b/api-tests/dev_apis/crypto/test_c031/test.cmake new file mode 100644 index 00000000..5ff1ecf0 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c031/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c031.c + test_c031.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c032/source.mk b/api-tests/dev_apis/crypto/test_c032/source.mk deleted file mode 100644 index 15305a1a..00000000 --- a/api-tests/dev_apis/crypto/test_c032/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c032.c test_c032.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c032/test.cmake b/api-tests/dev_apis/crypto/test_c032/test.cmake new file mode 100644 index 00000000..769b43ee --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c032/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c032.c + test_c032.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c033/source.mk b/api-tests/dev_apis/crypto/test_c033/source.mk deleted file mode 100644 index e1925ed3..00000000 --- a/api-tests/dev_apis/crypto/test_c033/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c033.c test_c033.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c033/test.cmake b/api-tests/dev_apis/crypto/test_c033/test.cmake new file mode 100644 index 00000000..505bd9e9 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c033/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c033.c + test_c033.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c034/source.mk b/api-tests/dev_apis/crypto/test_c034/source.mk deleted file mode 100644 index 48b0dde0..00000000 --- a/api-tests/dev_apis/crypto/test_c034/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c034.c test_c034.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c034/test.cmake b/api-tests/dev_apis/crypto/test_c034/test.cmake new file mode 100644 index 00000000..dac62464 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c034/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c034.c + test_c034.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c035/source.mk b/api-tests/dev_apis/crypto/test_c035/source.mk deleted file mode 100644 index b3318fe6..00000000 --- a/api-tests/dev_apis/crypto/test_c035/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c035.c test_c035.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c035/test.cmake b/api-tests/dev_apis/crypto/test_c035/test.cmake new file mode 100644 index 00000000..049eb982 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c035/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c035.c + test_c035.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c036/source.mk b/api-tests/dev_apis/crypto/test_c036/source.mk deleted file mode 100644 index 7a061322..00000000 --- a/api-tests/dev_apis/crypto/test_c036/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c036.c test_c036.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c036/test.cmake b/api-tests/dev_apis/crypto/test_c036/test.cmake new file mode 100644 index 00000000..e8b9666c --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c036/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c036.c + test_c036.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c037/source.mk b/api-tests/dev_apis/crypto/test_c037/source.mk deleted file mode 100644 index 0915b8aa..00000000 --- a/api-tests/dev_apis/crypto/test_c037/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c037.c test_c037.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c037/test.cmake b/api-tests/dev_apis/crypto/test_c037/test.cmake new file mode 100644 index 00000000..0a6a24b6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c037/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c037.c + test_c037.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c038/source.mk b/api-tests/dev_apis/crypto/test_c038/source.mk deleted file mode 100644 index 2f6d4f0e..00000000 --- a/api-tests/dev_apis/crypto/test_c038/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c038.c test_c038.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c038/test.cmake b/api-tests/dev_apis/crypto/test_c038/test.cmake new file mode 100644 index 00000000..59a6c5e8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c038/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c038.c + test_c038.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c039/source.mk b/api-tests/dev_apis/crypto/test_c039/source.mk deleted file mode 100644 index 710a57ca..00000000 --- a/api-tests/dev_apis/crypto/test_c039/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c039.c test_c039.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c039/test.cmake b/api-tests/dev_apis/crypto/test_c039/test.cmake new file mode 100644 index 00000000..3ed4781e --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c039/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c039.c + test_c039.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c040/source.mk b/api-tests/dev_apis/crypto/test_c040/source.mk deleted file mode 100644 index 8033ae4e..00000000 --- a/api-tests/dev_apis/crypto/test_c040/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c040.c test_c040.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c040/test.cmake b/api-tests/dev_apis/crypto/test_c040/test.cmake new file mode 100644 index 00000000..3d339452 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c040/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c040.c + test_c040.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c041/source.mk b/api-tests/dev_apis/crypto/test_c041/source.mk deleted file mode 100644 index 1263a668..00000000 --- a/api-tests/dev_apis/crypto/test_c041/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c041.c test_c041.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c041/test.cmake b/api-tests/dev_apis/crypto/test_c041/test.cmake new file mode 100644 index 00000000..0e96d93e --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c041/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c041.c + test_c041.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c042/source.mk b/api-tests/dev_apis/crypto/test_c042/source.mk deleted file mode 100644 index 570ce55b..00000000 --- a/api-tests/dev_apis/crypto/test_c042/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c042.c test_c042.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c042/test.cmake b/api-tests/dev_apis/crypto/test_c042/test.cmake new file mode 100644 index 00000000..f67e12f7 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c042/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c042.c + test_c042.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c043/source.mk b/api-tests/dev_apis/crypto/test_c043/source.mk deleted file mode 100644 index 9e58f791..00000000 --- a/api-tests/dev_apis/crypto/test_c043/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c043.c test_c043.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c043/test.cmake b/api-tests/dev_apis/crypto/test_c043/test.cmake new file mode 100644 index 00000000..42e185d8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c043/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c043.c + test_c043.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c044/source.mk b/api-tests/dev_apis/crypto/test_c044/source.mk deleted file mode 100644 index f205658f..00000000 --- a/api-tests/dev_apis/crypto/test_c044/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_c044.c test_c044.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/crypto/test_c044/test.cmake b/api-tests/dev_apis/crypto/test_c044/test.cmake new file mode 100644 index 00000000..0ceea826 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c044/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c044.c + test_c044.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/initial_attestation/suite.cmake b/api-tests/dev_apis/initial_attestation/suite.cmake new file mode 100644 index 00000000..ddb3128e --- /dev/null +++ b/api-tests/dev_apis/initial_attestation/suite.cmake @@ -0,0 +1,56 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +foreach(test ${PSA_TEST_LIST}) + include(${PSA_SUITE_DIR}/${test}/test.cmake) + foreach(source_file ${CC_SOURCE}) + list(APPEND SUITE_CC_SOURCE + ${PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE}) + list(APPEND SUITE_AS_SOURCE + ${PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + unset(CC_SOURCE) + unset(AS_SOURCE) +endforeach() + +add_definitions(${CC_OPTIONS}) +add_definitions(${AS_OPTIONS}) +add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) + +# Test related Include directories +foreach(test ${PSA_TEST_LIST}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${PSA_SUITE_DIR}/${test}) +endforeach() + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${psa_inc_path} + ) +endforeach() + +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto +) diff --git a/api-tests/dev_apis/initial_attestation/test_a001/source.mk b/api-tests/dev_apis/initial_attestation/test_a001/source.mk deleted file mode 100644 index 601bde93..00000000 --- a/api-tests/dev_apis/initial_attestation/test_a001/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_a001.c test_a001.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test.cmake b/api-tests/dev_apis/initial_attestation/test_a001/test.cmake new file mode 100644 index 00000000..55df1fa6 --- /dev/null +++ b/api-tests/dev_apis/initial_attestation/test_a001/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_a001.c + test_a001.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/suite.cmake b/api-tests/dev_apis/internal_trusted_storage/suite.cmake new file mode 100644 index 00000000..e4de40c8 --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/suite.cmake @@ -0,0 +1,57 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +foreach(test ${PSA_TEST_LIST}) + include(${PSA_SUITE_DIR}/${test}/test.cmake) + foreach(source_file ${CC_SOURCE}) + list(APPEND SUITE_CC_SOURCE + ${PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE}) + list(APPEND SUITE_AS_SOURCE + ${PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + unset(CC_SOURCE) + unset(AS_SOURCE) +endforeach() + +add_definitions(${CC_OPTIONS}) +add_definitions(${AS_OPTIONS}) +add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) + +# Test related Include directories +foreach(test ${PSA_TEST_LIST}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${PSA_SUITE_DIR}/${test}) +endforeach() + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${psa_inc_path} + ) +endforeach() + +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage +) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk deleted file mode 100644 index 14e152d7..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s001.c test_s001.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s001/test.cmake new file mode 100644 index 00000000..fb61ac17 --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s001.c + test_s001.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk deleted file mode 100755 index abc1a1f0..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s002.c test_s002.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s002/test.cmake new file mode 100644 index 00000000..e8cfe6ac --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s002.c + test_s002.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk deleted file mode 100755 index d24a930e..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s003.c test_s003.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s003/test.cmake new file mode 100644 index 00000000..da2f1adf --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s003.c + test_s003.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk deleted file mode 100755 index 804d4e5b..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s004.c test_s004.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s004/test.cmake new file mode 100644 index 00000000..88caf832 --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s004.c + test_s004.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk deleted file mode 100755 index 1f9a30e0..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s005.c test_s005.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s005/test.cmake new file mode 100644 index 00000000..33559cb1 --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s005.c + test_s005.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk deleted file mode 100755 index 3b64b74e..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s006.c test_s006.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s006/test.cmake new file mode 100644 index 00000000..7810ff6e --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s006.c + test_s006.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk deleted file mode 100755 index 4ba5f696..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s007.c test_s007.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s007/test.cmake new file mode 100644 index 00000000..cee8525f --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s007.c + test_s007.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk deleted file mode 100755 index b1ec4458..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s008.c test_s008.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s008/test.cmake new file mode 100644 index 00000000..ecba9c3a --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s008.c + test_s008.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk deleted file mode 100755 index 639ba270..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s009.c test_s009.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s009/test.cmake new file mode 100644 index 00000000..e5fe7ee5 --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s009.c + test_s009.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk b/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk deleted file mode 100644 index 9824203d..00000000 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s010.c test_s010.c -CC_OPTIONS = -DITS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test.cmake b/api-tests/dev_apis/internal_trusted_storage/test_s010/test.cmake new file mode 100644 index 00000000..4c3dc6ad --- /dev/null +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s010.c + test_s010.c +) +list(APPEND CC_OPTIONS -DITS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/suite.cmake b/api-tests/dev_apis/protected_storage/suite.cmake new file mode 100644 index 00000000..2dc9b5b4 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/suite.cmake @@ -0,0 +1,78 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +foreach(test ${PSA_TEST_LIST}) + string(SUBSTRING ${test} 0 6 ITS_TEST_STR) + if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND + (${ITS_TEST_STR} STREQUAL "test_s")) + string(REPLACE ${SUITE_LOWER} "internal_trusted_storage" ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) + else() + set(ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) + endif() + include(${ACTUAL_PSA_SUITE_DIR}/${test}/test.cmake) + foreach(source_file ${CC_SOURCE}) + list(APPEND SUITE_CC_SOURCE + ${ACTUAL_PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE}) + list(APPEND SUITE_AS_SOURCE + ${ACTUAL_PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND + (${ITS_TEST_STR} STREQUAL "test_p")) + add_definitions(${CC_OPTIONS}) + add_definitions(${AS_OPTIONS}) + endif() + unset(CC_SOURCE) + unset(AS_SOURCE) + unset(ACTUAL_PSA_SUITE_DIR) + unset(CC_OPTIONS) +endforeach() + +add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) + +# Test related Include directories +foreach(test ${PSA_TEST_LIST}) + string(SUBSTRING ${test} 0 6 ITS_TEST_STR) + if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND + (${ITS_TEST_STR} STREQUAL "test_s")) + string(REPLACE ${SUITE_LOWER} "internal_trusted_storage" ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) + else() + set(ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) + endif() + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${ACTUAL_PSA_SUITE_DIR}/${test}) + unset(ACTUAL_PSA_SUITE_DIR) +endforeach() + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${psa_inc_path} + ) +endforeach() + +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage +) diff --git a/api-tests/dev_apis/protected_storage/test_p011/source.mk b/api-tests/dev_apis/protected_storage/test_p011/source.mk deleted file mode 100644 index beb30be3..00000000 --- a/api-tests/dev_apis/protected_storage/test_p011/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_p011.c test_p011.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p011/test.cmake b/api-tests/dev_apis/protected_storage/test_p011/test.cmake new file mode 100644 index 00000000..67884da4 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p011/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p011.c + test_p011.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p012/source.mk b/api-tests/dev_apis/protected_storage/test_p012/source.mk deleted file mode 100644 index 1820ace7..00000000 --- a/api-tests/dev_apis/protected_storage/test_p012/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_p012.c test_p012.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p012/test.cmake b/api-tests/dev_apis/protected_storage/test_p012/test.cmake new file mode 100644 index 00000000..28b41034 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p012/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p012.c + test_p012.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p013/source.mk b/api-tests/dev_apis/protected_storage/test_p013/source.mk deleted file mode 100644 index c966717a..00000000 --- a/api-tests/dev_apis/protected_storage/test_p013/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_p013.c test_p013.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p013/test.cmake b/api-tests/dev_apis/protected_storage/test_p013/test.cmake new file mode 100644 index 00000000..6c1913f4 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p013/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p013.c + test_p013.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p014/source.mk b/api-tests/dev_apis/protected_storage/test_p014/source.mk deleted file mode 100644 index 931b6704..00000000 --- a/api-tests/dev_apis/protected_storage/test_p014/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_p014.c test_p014.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p014/test.cmake b/api-tests/dev_apis/protected_storage/test_p014/test.cmake new file mode 100644 index 00000000..a794d8c8 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p014/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p014.c + test_p014.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p015/source.mk b/api-tests/dev_apis/protected_storage/test_p015/source.mk deleted file mode 100644 index 81b14e94..00000000 --- a/api-tests/dev_apis/protected_storage/test_p015/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_p015.c test_p015.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_p015/test.cmake b/api-tests/dev_apis/protected_storage/test_p015/test.cmake new file mode 100644 index 00000000..b2a8b62d --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p015/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p015.c + test_p015.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s001/source.mk b/api-tests/dev_apis/protected_storage/test_s001/source.mk deleted file mode 100644 index 6a92d9fc..00000000 --- a/api-tests/dev_apis/protected_storage/test_s001/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s001.c test_s001.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s001/test.cmake b/api-tests/dev_apis/protected_storage/test_s001/test.cmake new file mode 100644 index 00000000..ee15ef43 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s001/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s001.c + test_s001.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s002/source.mk b/api-tests/dev_apis/protected_storage/test_s002/source.mk deleted file mode 100644 index 3d5771cb..00000000 --- a/api-tests/dev_apis/protected_storage/test_s002/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s002.c test_s002.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s002/test.cmake b/api-tests/dev_apis/protected_storage/test_s002/test.cmake new file mode 100644 index 00000000..c588caa6 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s002/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s002.c + test_s002.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s003/source.mk b/api-tests/dev_apis/protected_storage/test_s003/source.mk deleted file mode 100644 index afdb886c..00000000 --- a/api-tests/dev_apis/protected_storage/test_s003/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s003.c test_s003.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s003/test.cmake b/api-tests/dev_apis/protected_storage/test_s003/test.cmake new file mode 100644 index 00000000..6a38d567 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s003/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s003.c + test_s003.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s004/source.mk b/api-tests/dev_apis/protected_storage/test_s004/source.mk deleted file mode 100644 index c73824d2..00000000 --- a/api-tests/dev_apis/protected_storage/test_s004/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s004.c test_s004.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s004/test.cmake b/api-tests/dev_apis/protected_storage/test_s004/test.cmake new file mode 100644 index 00000000..1210631f --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s004/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s004.c + test_s004.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s005/source.mk b/api-tests/dev_apis/protected_storage/test_s005/source.mk deleted file mode 100644 index 627438f4..00000000 --- a/api-tests/dev_apis/protected_storage/test_s005/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s005.c test_s005.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s005/test.cmake b/api-tests/dev_apis/protected_storage/test_s005/test.cmake new file mode 100644 index 00000000..bf3786ad --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s005/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s005.c + test_s005.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s006/source.mk b/api-tests/dev_apis/protected_storage/test_s006/source.mk deleted file mode 100644 index b64fb217..00000000 --- a/api-tests/dev_apis/protected_storage/test_s006/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s006.c test_s006.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s006/test.cmake b/api-tests/dev_apis/protected_storage/test_s006/test.cmake new file mode 100644 index 00000000..c661ac32 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s006/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s006.c + test_s006.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s007/source.mk b/api-tests/dev_apis/protected_storage/test_s007/source.mk deleted file mode 100644 index 2e242ccf..00000000 --- a/api-tests/dev_apis/protected_storage/test_s007/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s007.c test_s007.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s007/test.cmake b/api-tests/dev_apis/protected_storage/test_s007/test.cmake new file mode 100644 index 00000000..5c6606d5 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s007/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s007.c + test_s007.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s008/source.mk b/api-tests/dev_apis/protected_storage/test_s008/source.mk deleted file mode 100644 index 1e8bc769..00000000 --- a/api-tests/dev_apis/protected_storage/test_s008/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s008.c test_s008.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s008/test.cmake b/api-tests/dev_apis/protected_storage/test_s008/test.cmake new file mode 100644 index 00000000..b91d92d5 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s008/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s008.c + test_s008.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s009/source.mk b/api-tests/dev_apis/protected_storage/test_s009/source.mk deleted file mode 100644 index 5a2c3b02..00000000 --- a/api-tests/dev_apis/protected_storage/test_s009/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s009.c test_s009.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s009/test.cmake b/api-tests/dev_apis/protected_storage/test_s009/test.cmake new file mode 100644 index 00000000..9d664362 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s009/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s009.c + test_s009.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_s010/source.mk b/api-tests/dev_apis/protected_storage/test_s010/source.mk deleted file mode 100644 index e0b22d5c..00000000 --- a/api-tests/dev_apis/protected_storage/test_s010/source.mk +++ /dev/null @@ -1,20 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_s010.c test_s010.c -CC_OPTIONS = -DPS_TEST -AS_SOURCE = -AS_OPTIONS = diff --git a/api-tests/dev_apis/protected_storage/test_s010/test.cmake b/api-tests/dev_apis/protected_storage/test_s010/test.cmake new file mode 100644 index 00000000..b36e23f8 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_s010/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_s010.c + test_s010.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/docs/porting_guide_dev_apis.md b/api-tests/docs/porting_guide_dev_apis.md index 83491235..595038e3 100644 --- a/api-tests/docs/porting_guide_dev_apis.md +++ b/api-tests/docs/porting_guide_dev_apis.md @@ -33,16 +33,15 @@ An example input configuration file is as shown. ### Adding a new target - 1. Create a new directory in **platform/targets/**. For reference, see the existing platform **tgt_dev_apis_mbedos_fvp_mps2_m4** directory. - 2. Execute `cp -rf platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/ platform/targets//`. + 1. Create a new directory in **platform/targets/**. For reference, see the existing platform **tgt_dev_apis_tfm_an521** directory. + 2. Execute `cp -rf platform/targets/tgt_dev_apis_tfm_an521/ platform/targets//`. 3. Update **platform/targets//target.cfg** with your platform details. Refer to **val/common/val_target.h** for structure details. - 4. Update **platform/targets//Makefile** appropriately to select the correct instances of PAL files for compilation. To compile **dev_apis** suites, you must set **PSA_IPC_IMPLEMENTED** to 0. This selects the Non-secure PAL instances for the driver services and eliminates IPC dependency for dev_apis tests. - 5. Refer to the **List of PAL APIs** section to view the list of PAL APIs that must be ported for your target platform. These API definitions are available in **nspe//pal_\*\_intf.c**. These APIs are written for tgt_dev_apis_mbedos_fvp_mps2_m4 platform. You can reuse the code if it works for your platform. Otherwise, you must port them for your platform-specific peripherals. + 4. Update **platform/targets//target.cmake** appropriately to select the correct instances of PAL files for compilation. + 5. Refer to the **List of PAL APIs** section to view the list of PAL APIs that must be ported for your target platform. These API definitions are available in **nspe//pal_\*\_intf.c**. These APIs are written for tgt_dev_apis_tfm_an521 platform. You can reuse the code if it works for your platform. Otherwise, you must port them for your platform-specific peripherals. 6. Update Crypto configuration file **nspe/crypto/pal_crypto_config.h** to enable or disable Crypto features selectively for the Crypto test suite. **Note**: -- The platform makefile is invoked as part of test suite build tool (**./setup.sh**) step and it creates **/BUILD/platform/pal_nspe.a** archive. -- The test suite requires access the following peripherals: +The test suite requires access to the following peripherals: - One UART to print NSPE and SPE messages - One Watchdog timer to help recover from any fatal error conditions - Non-volatile memory support to preserve test status over watchdog timer reset @@ -53,18 +52,17 @@ Since the test suite is agnostic to various system targets, you must port the fo | No | Prototype | Description | Parameters | |----|-----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|----------------------------------------------------------| -| 01 | int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len); | Reads peripherals using SPI commands | addr : Address of the peripheral
data : Read buffer
len : Length of the read buffer in bytes
| -| 02 | int pal_uart_init_ns(uint32_t uart_base_addr); | Initializes the UART | UART base address
| -| 03 | int pal_print_ns(char *str, int32_t data); | Parses the input string and writes bytes into UART TX FIFO| str : Input String
data : Value for format specifier
| -| 04 | int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); | Initializes a hardware watchdog timer | base_addr : Base address of the watchdog module
time_us : Time in micro seconds
timer_tick_us : Number of ticks per micro second
| -| 05 | int pal_wd_timer_enable_ns(addr_t base_addr); | Enables a hardware watchdog timer | base_addr : Base address of the watchdog module
| -| 06 | int pal_wd_timer_disable_ns(addr_t base_addr); | Disables a hardware watchdog timer | base_addr : Base address of the watchdog module
| -| 07 | int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size); | Reads from the given non-volatile address. | base : Base address of nvmem
offset : Offset
buffer : Pointer to source address
size : Number of bytes
| -| 08 | int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size); | Writes into given non-volatile address. | base : Base address of nvmem
offset : Offset
buffer : Pointer to source address
size : Number of bytes
| -| 09 | int32_t pal_crypto_function(int type, va_list valist); | Calls the requested Crypto function | type : Function code
valist : variable argument list
| -| 10 | uint32_t pal_its_function(int type, va_list valist); | Calls the requested Internal Trusted Storage function | type : Function code
valist : Variable argument list
| -| 11 | uint32_t pal_ps_function(int type, va_list valist); | Calls the requested Protected Storage function | type : Function code
valist : Variable argument list
| -| 12 | int32_t pal_attestation_function(int type, va_list valist); | Calls the requested Initial Attestation function | type : Function code
valist : Variable argument list
| +| 01 | int pal_uart_init_ns(uint32_t uart_base_addr); | Initializes the UART | UART base address
| +| 02 | int pal_print_ns(char *str, int32_t data); | Parses the input string and writes bytes into UART TX FIFO| str : Input String
data : Value for format specifier
| +| 03 | int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); | Initializes a hardware watchdog timer | base_addr : Base address of the watchdog module
time_us : Time in micro seconds
timer_tick_us : Number of ticks per micro second
| +| 04 | int pal_wd_timer_enable_ns(addr_t base_addr); | Enables a hardware watchdog timer | base_addr : Base address of the watchdog module
| +| 05 | int pal_wd_timer_disable_ns(addr_t base_addr); | Disables a hardware watchdog timer | base_addr : Base address of the watchdog module
| +| 06 | int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size); | Reads from the given non-volatile address. | base : Base address of nvmem
offset : Offset
buffer : Pointer to source address
size : Number of bytes
| +| 07 | int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size); | Writes into given non-volatile address. | base : Base address of nvmem
offset : Offset
buffer : Pointer to source address
size : Number of bytes
| +| 08 | int32_t pal_crypto_function(int type, va_list valist); | Calls the requested Crypto function | type : Function code
valist : variable argument list
| +| 09 | uint32_t pal_its_function(int type, va_list valist); | Calls the requested Internal Trusted Storage function | type : Function code
valist : Variable argument list
| +| 10 | uint32_t pal_ps_function(int type, va_list valist); | Calls the requested Protected Storage function | type : Function code
valist : Variable argument list
| +| 11 | int32_t pal_attestation_function(int type, va_list valist); | Calls the requested Initial Attestation function | type : Function code
valist : Variable argument list
| ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/docs/porting_guide_ff.md b/api-tests/docs/porting_guide_ff.md index adceb371..4e5f6123 100644 --- a/api-tests/docs/porting_guide_ff.md +++ b/api-tests/docs/porting_guide_ff.md @@ -33,30 +33,24 @@ An example input configuration file is as shown. ### Adding a new target - 1. Create a new directory in **platform/targets/**. For reference, see the existing platform tgt_ff_mbedos_fvp_mps2_m4 directory. - 2. Execute `cp -rf platform/targets/tgt_ff_mbedos_fvp_mps2_m4/ platform/targets//`. + 1. Create a new directory in **platform/targets/**. For reference, see the existing platform tgt_ff_tfm_an521 directory. + 2. Execute `cp -rf platform/targets/tgt_ff_tfm_an521/ platform/targets//`. 3. Update **platform/targets//target.cfg** with your target platform details. Refer to **val/common/val_target.h** for structure details. 4. Update the platform information available in manifest files located in **platform/targets//manifests/** directory with your platform information. The platform details must match the device details provided in the target.cfg file. - 5. Update **platform/targets//Makefile** appropriately to select the correct instances of PAL files for compilation. To compile IPC tests, you must set PSA_IPC_IMPLEMENTED to 1 and the remaining Developer APIs related variables to 0. This selects the Secure PAL instances for the driver services and eliminates dev_apis dependency for IPC tests. - 6. Refer to the **List of PAL APIs** section to view the list of PAL APIs that must be ported for your target platform. These API definitions are available in **nspe//pal_\*\_intf.c** and **spe/pal_\*\_intf.c** files. These APIs are written for **tgt_ff_mbedos_fvp_mps2_m4** platform. You can reuse the code if it works for your platform. Otherwise, you must port them for your platform-specific peripherals. + 5. Update **platform/targets//target.cmake** appropriately to select the correct instances of PAL files for compilation. + 6. Refer to the **List of PAL APIs** section to view the list of PAL APIs that must be ported for your target platform. These API definitions are available in **nspe//pal_\*\_intf.c** and **spe/pal_\*\_intf.c** files. These APIs are written for **tgt_ff_tfm_an521** platform. You can reuse the code if it works for your platform. Otherwise, you must port them for your platform-specific peripherals. **Note**: -- The platform makefile is invoked as part of test suite build tool (**./setup.sh**) step and it creates **/BUILD/platform/pal_nspe.a** archive for NPSE files and respective object for SPE files at **/BUILD/platform/spe/\*\_driver_sp.o**. These SPE objects are used by **spbuild.mk** to create the appropriate SPE partition archive file. -- The test suite requires access to the peripherals mentioned below. When PSA_IPC_IMPLEMENTED is set to 1, driver functionalities are implemented as RoT-services in driver partition. Other Secure partitions and Non-secure code calls to these RoT-services to get appropriate driver services. +- The test suite requires access to the peripherals mentioned below. For IPC suite, driver functionalities are implemented as RoT-services in driver partition. Other Secure partitions and Non-secure code calls to these RoT-services to get appropriate driver services. - One UART to print NSPE or SPE messages and to cover secure partition interrupt handling scenarios - One Watchdog timer to help recover from any fatal error conditions - Non-volatile memory support to preserve test status over watchdog timer reset + ## List of PAL APIs Since the test suite is agnostic to various system targets, you must port the following PAL NSPE APIs before building the tests. Implement these functions for your target platform.
-The following is the list of PAL APIs used in NSPE:
- -| No | Prototype | Description | Parameters | -|----|-----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|----------------------------------------------------------| -| 01 | int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len); | Reads peripherals using SPI commands | addr : Address of the peripheral
data : Read buffer
len : Length of the read buffer in bytes
| - The following is the list of PAL APIs used in SPE:
| No | Prototype | Description | Parameters | diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index 7a747254..68fef756 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -3,9 +3,10 @@ Before starting the test suite build, ensure that the following requirements are met:
-- Host Operating System : Ubuntu 16.04 -- Scripting tools : Perl 5.12.3, Python 3.1.7 +- Host Operating System : Ubuntu 16.04, Windows 10 +- Scripting tools : Python 3.1.7 - Compiler toolchain : GNU Arm Embedded Toolchain 6.3.1, Arm Compiler v6.7 +- Build tools : CMake 3.10 **Note**: To compile the test suite code, at least one of the above supported compiler toolchains must be available in the build environment. diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index 8c820865..f3e46b46 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -49,39 +49,43 @@ To build the test suite for your target platform, perform the following steps. 3. Compile the tests as shown below.
``` - ./tools/scripts/setup.sh --target --cpu_arch --suite --build --include --archive_tests + cd api-tests + mkdir + cd + cmake ../ -G" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" + cmake --build . ```
where: +- "Unix Makefiles" to generate Makefiles for Linux and Cygwin
+ "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
- is the same as the name of the target specific directory created in the **platform/targets/** directory.
- is the Arm Architecture version name for which the tests should be compiled. For example, Armv7M, Armv8M-Baseline and Armv8M-Mainline Architecture.
- is the suite name which is the same as the suite name available in **ff/** directory.
-- is a directory to store the build output files.
-- is an additional directory to be included into the compiler search path.
-Note: To compile IPC tests, the include path must point to the path where **psa/client.h**, **psa/service.h**, **psa/lifecycle.h** and test partition manifest output files(**psa_manifest/sid.h**, **psa_manifest/pid.h** and **psa_manifest/.h**) are located in your build system.
-- Use **--archive_tests** option to create a combined test archive(test_combine.a) file by combining the available test objects files. Not using this option will create a combined test binary(test_elf_combine.bin) by combining the available test ELFs. +- ;;...; is an additional directory to be included into the compiler search path. To compile IPC tests, the include path must point to the path where **psa/client.h**, **psa/service.h**, **psa/lifecycle.h** and test partition manifest output files(**psa_manifest/sid.h**, **psa_manifest/pid.h** and **psa_manifest/.h**) are located in your build system.
-For more information about options, refer to **./tools/scripts/setup.sh --help**. - -To compile IPC tests for **tgt_ff_mbedos_fvp_mps2_m4** platform, execute the following commands: +To compile IPC tests for **tgt_ff_tfm_an521** platform, execute the following commands: ``` -cd api-tests -./tools/scripts/setup.sh --target tgt_ff_mbedos_fvp_mps2_m4 --cpu_arch armv7m --suite ipc --build BUILD_IPC --include --include --archive_tests + cd api-tests + mkdir BUILD + cd BUILD + cmake ../ -G"Unix Makefiles" -DTARGET=tgt_ff_tfm_an521 -DCPU_ARCH=armv8m_ml -DSUITE=IPC -DPSA_INCLUDE_PATHS=";;...;" + cmake --build . ``` -**Note**: The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite just by passing **--include_panic_tests** option to script. +**Note**: The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite just by passing **-DINCLUDE_PANIC_TESTS=1** to CMake. ### Build output The test suite build generates the following binaries:
NSPE libraries:
-1. **/BUILD/val/val_nspe.a** -2. **/BUILD/platform/pal_nspe.a** -3. **/BUILD/ff//test_combine.a** +1. **/val/val_nspe.a** +2. **/platform/pal_nspe.a** +3. **/ff//test_combine.a** SPE libraries explicitly for IPC test suite:
-1. **/BUILD/partition/driver_partition.a** -2. **/BUILD/partition/client_partition.a** -3. **/BUILD/partition/server_partition.a** +1. **/partition/driver_partition.a** +2. **/partition/client_partition.a** +3. **/partition/server_partition.a** ### Integrating the libraries into your target platform diff --git a/api-tests/ff/ipc/suite.cmake b/api-tests/ff/ipc/suite.cmake new file mode 100644 index 00000000..aaaa0f2c --- /dev/null +++ b/api-tests/ff/ipc/suite.cmake @@ -0,0 +1,68 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +foreach(test ${PSA_TEST_LIST}) + include(${PSA_SUITE_DIR}/${test}/test.cmake) + foreach(source_file ${CC_SOURCE}) + list(APPEND SUITE_CC_SOURCE + ${PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE}) + list(APPEND SUITE_AS_SOURCE + ${PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + foreach(source_file ${CC_SOURCE_SPE}) + list(APPEND SUITE_CC_SOURCE_SPE + ${PSA_SUITE_DIR}/${test}/${source_file} + ) + endforeach() + foreach(asm_file ${AS_SOURCE_SPE}) + list(APPEND SUITE_AS_SOURCE_SPE + ${PSA_SUITE_DIR}/${test}/${asm_file} + ) + endforeach() + unset(CC_SOURCE) + unset(AS_SOURCE) + unset(CC_SOURCE_SPE) + unset(AS_SOURCE_SPE) +endforeach() + +add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) +target_compile_definitions(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE CC_OPTIONS) +target_compile_definitions(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE AS_OPTIONS) +target_compile_definitions(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE NONSECURE_TEST_BUILD) + +# Test related Include directories +foreach(test ${PSA_TEST_LIST}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${PSA_SUITE_DIR}/${test}) +endforeach() + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/val/spe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto +) diff --git a/api-tests/ff/ipc/test_i001/source.mk b/api-tests/ff/ipc/test_i001/source.mk deleted file mode 100644 index 32314346..00000000 --- a/api-tests/ff/ipc/test_i001/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i001.c test_i001.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i001.c test_supp_i001.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i001/test.cmake b/api-tests/ff/ipc/test_i001/test.cmake new file mode 100644 index 00000000..698a8ff1 --- /dev/null +++ b/api-tests/ff/ipc/test_i001/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i001.c + test_i001.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i001.c + test_supp_i001.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i002/source.mk b/api-tests/ff/ipc/test_i002/source.mk deleted file mode 100644 index 60cbe401..00000000 --- a/api-tests/ff/ipc/test_i002/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i002.c test_i002.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i002.c test_supp_i002.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i048/source.mk b/api-tests/ff/ipc/test_i002/test.cmake similarity index 70% rename from api-tests/ff/ipc/test_i048/source.mk rename to api-tests/ff/ipc/test_i002/test.cmake index 0c8e3a57..33679bd9 100644 --- a/api-tests/ff/ipc/test_i048/source.mk +++ b/api-tests/ff/ipc/test_i002/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,12 +15,18 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_i048.c test_i048.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_i002.c + test_i002.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) -CC_SOURCE_SPE = test_i048.c test_supp_i048.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file +list(APPEND CC_SOURCE_SPE + test_i002.c + test_supp_i002.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i003/source.mk b/api-tests/ff/ipc/test_i003/source.mk deleted file mode 100644 index 37f72992..00000000 --- a/api-tests/ff/ipc/test_i003/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i003.c test_i003.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i003.c test_supp_i003.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i049/source.mk b/api-tests/ff/ipc/test_i003/test.cmake similarity index 70% rename from api-tests/ff/ipc/test_i049/source.mk rename to api-tests/ff/ipc/test_i003/test.cmake index 9e3d969b..aaa5d986 100644 --- a/api-tests/ff/ipc/test_i049/source.mk +++ b/api-tests/ff/ipc/test_i003/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,12 +15,18 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_i049.c test_i049.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_i003.c + test_i003.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) -CC_SOURCE_SPE = test_i049.c test_supp_i049.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file +list(APPEND CC_SOURCE_SPE + test_i003.c + test_supp_i003.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i004/source.mk b/api-tests/ff/ipc/test_i004/source.mk deleted file mode 100644 index 2a23e73e..00000000 --- a/api-tests/ff/ipc/test_i004/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i004.c test_i004.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i004.c test_supp_i004.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i050/source.mk b/api-tests/ff/ipc/test_i004/test.cmake similarity index 70% rename from api-tests/ff/ipc/test_i050/source.mk rename to api-tests/ff/ipc/test_i004/test.cmake index de52ee30..4ec996ed 100644 --- a/api-tests/ff/ipc/test_i050/source.mk +++ b/api-tests/ff/ipc/test_i004/test.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,12 +15,18 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_i050.c test_i050.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +list(APPEND CC_SOURCE + test_entry_i004.c + test_i004.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) -CC_SOURCE_SPE = test_i050.c test_supp_i050.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file +list(APPEND CC_SOURCE_SPE + test_i004.c + test_supp_i004.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i005/source.mk b/api-tests/ff/ipc/test_i005/source.mk deleted file mode 100644 index b139dbcd..00000000 --- a/api-tests/ff/ipc/test_i005/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i005.c test_i005.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i005.c test_supp_i005.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i005/test.cmake b/api-tests/ff/ipc/test_i005/test.cmake new file mode 100644 index 00000000..68c51c56 --- /dev/null +++ b/api-tests/ff/ipc/test_i005/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i005.c + test_i005.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i005.c + test_supp_i005.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i006/source.mk b/api-tests/ff/ipc/test_i006/source.mk deleted file mode 100644 index f889299c..00000000 --- a/api-tests/ff/ipc/test_i006/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i006.c test_i006.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i006.c test_supp_i006.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i006/test.cmake b/api-tests/ff/ipc/test_i006/test.cmake new file mode 100644 index 00000000..96c034c3 --- /dev/null +++ b/api-tests/ff/ipc/test_i006/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i006.c + test_i006.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i006.c + test_supp_i006.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i007/source.mk b/api-tests/ff/ipc/test_i007/source.mk deleted file mode 100644 index 10aebefc..00000000 --- a/api-tests/ff/ipc/test_i007/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i007.c test_i007.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i007.c test_supp_i007.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i007/test.cmake b/api-tests/ff/ipc/test_i007/test.cmake new file mode 100644 index 00000000..f000d65d --- /dev/null +++ b/api-tests/ff/ipc/test_i007/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i007.c + test_i007.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i007.c + test_supp_i007.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i008/source.mk b/api-tests/ff/ipc/test_i008/source.mk deleted file mode 100644 index 383855d0..00000000 --- a/api-tests/ff/ipc/test_i008/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i008.c test_i008.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i008.c test_supp_i008.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i008/test.cmake b/api-tests/ff/ipc/test_i008/test.cmake new file mode 100644 index 00000000..7ed1bf52 --- /dev/null +++ b/api-tests/ff/ipc/test_i008/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i008.c + test_i008.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i008.c + test_supp_i008.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i009/source.mk b/api-tests/ff/ipc/test_i009/source.mk deleted file mode 100644 index a4f3ef06..00000000 --- a/api-tests/ff/ipc/test_i009/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i009.c test_i009.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i009.c test_supp_i009.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i009/test.cmake b/api-tests/ff/ipc/test_i009/test.cmake new file mode 100644 index 00000000..bad159db --- /dev/null +++ b/api-tests/ff/ipc/test_i009/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i009.c + test_i009.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i009.c + test_supp_i009.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i010/source.mk b/api-tests/ff/ipc/test_i010/source.mk deleted file mode 100644 index 02e1d3b7..00000000 --- a/api-tests/ff/ipc/test_i010/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i010.c test_i010.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i010.c test_supp_i010.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i010/test.cmake b/api-tests/ff/ipc/test_i010/test.cmake new file mode 100644 index 00000000..6e57eba6 --- /dev/null +++ b/api-tests/ff/ipc/test_i010/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i010.c + test_i010.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i010.c + test_supp_i010.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i011/source.mk b/api-tests/ff/ipc/test_i011/source.mk deleted file mode 100644 index 0e227a88..00000000 --- a/api-tests/ff/ipc/test_i011/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i011.c test_i011.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i011.c test_supp_i011.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i011/test.cmake b/api-tests/ff/ipc/test_i011/test.cmake new file mode 100644 index 00000000..338cce28 --- /dev/null +++ b/api-tests/ff/ipc/test_i011/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i011.c + test_i011.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i011.c + test_supp_i011.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i012/source.mk b/api-tests/ff/ipc/test_i012/source.mk deleted file mode 100644 index 49cb593c..00000000 --- a/api-tests/ff/ipc/test_i012/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i012.c test_i012.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i012.c test_supp_i012.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i012/test.cmake b/api-tests/ff/ipc/test_i012/test.cmake new file mode 100644 index 00000000..299f8ee1 --- /dev/null +++ b/api-tests/ff/ipc/test_i012/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i012.c + test_i012.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i012.c + test_supp_i012.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i013/source.mk b/api-tests/ff/ipc/test_i013/source.mk deleted file mode 100644 index 4a5dde50..00000000 --- a/api-tests/ff/ipc/test_i013/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i013.c test_i013.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i013.c test_supp_i013.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i013/test.cmake b/api-tests/ff/ipc/test_i013/test.cmake new file mode 100644 index 00000000..724efacd --- /dev/null +++ b/api-tests/ff/ipc/test_i013/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i013.c + test_i013.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i013.c + test_supp_i013.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i014/source.mk b/api-tests/ff/ipc/test_i014/source.mk deleted file mode 100644 index fb8fc6ee..00000000 --- a/api-tests/ff/ipc/test_i014/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i014.c test_i014.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i014.c test_supp_i014.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i014/test.cmake b/api-tests/ff/ipc/test_i014/test.cmake new file mode 100644 index 00000000..aabe4e22 --- /dev/null +++ b/api-tests/ff/ipc/test_i014/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i014.c + test_i014.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i014.c + test_supp_i014.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i015/source.mk b/api-tests/ff/ipc/test_i015/source.mk deleted file mode 100644 index c55f830e..00000000 --- a/api-tests/ff/ipc/test_i015/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i015.c test_i015.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i015.c test_supp_i015.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i015/test.cmake b/api-tests/ff/ipc/test_i015/test.cmake new file mode 100644 index 00000000..877f36b4 --- /dev/null +++ b/api-tests/ff/ipc/test_i015/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i015.c + test_i015.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i015.c + test_supp_i015.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i016/source.mk b/api-tests/ff/ipc/test_i016/source.mk deleted file mode 100644 index d1d196f1..00000000 --- a/api-tests/ff/ipc/test_i016/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i016.c test_i016.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i016.c test_supp_i016.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i016/test.cmake b/api-tests/ff/ipc/test_i016/test.cmake new file mode 100644 index 00000000..c4e90e49 --- /dev/null +++ b/api-tests/ff/ipc/test_i016/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i016.c + test_i016.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i016.c + test_supp_i016.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i017/source.mk b/api-tests/ff/ipc/test_i017/source.mk deleted file mode 100644 index 74458cc2..00000000 --- a/api-tests/ff/ipc/test_i017/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i017.c test_i017.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i017.c test_supp_i017.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i017/test.cmake b/api-tests/ff/ipc/test_i017/test.cmake new file mode 100644 index 00000000..f8520cf8 --- /dev/null +++ b/api-tests/ff/ipc/test_i017/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i017.c + test_i017.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i017.c + test_supp_i017.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i018/source.mk b/api-tests/ff/ipc/test_i018/source.mk deleted file mode 100644 index 51e7becb..00000000 --- a/api-tests/ff/ipc/test_i018/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i018.c test_i018.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i018.c test_supp_i018.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i018/test.cmake b/api-tests/ff/ipc/test_i018/test.cmake new file mode 100644 index 00000000..3e495dda --- /dev/null +++ b/api-tests/ff/ipc/test_i018/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i018.c + test_i018.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i018.c + test_supp_i018.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i019/source.mk b/api-tests/ff/ipc/test_i019/source.mk deleted file mode 100644 index 483b29a6..00000000 --- a/api-tests/ff/ipc/test_i019/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i019.c test_i019.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i019.c test_supp_i019.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i019/test.cmake b/api-tests/ff/ipc/test_i019/test.cmake new file mode 100644 index 00000000..3a3305fe --- /dev/null +++ b/api-tests/ff/ipc/test_i019/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i019.c + test_i019.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i019.c + test_supp_i019.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i020/source.mk b/api-tests/ff/ipc/test_i020/source.mk deleted file mode 100644 index 0d7c05ec..00000000 --- a/api-tests/ff/ipc/test_i020/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i020.c test_i020.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i020.c test_supp_i020.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i020/test.cmake b/api-tests/ff/ipc/test_i020/test.cmake new file mode 100644 index 00000000..530cae1f --- /dev/null +++ b/api-tests/ff/ipc/test_i020/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i020.c + test_i020.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i020.c + test_supp_i020.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i021/source.mk b/api-tests/ff/ipc/test_i021/source.mk deleted file mode 100644 index 2cf268d2..00000000 --- a/api-tests/ff/ipc/test_i021/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i021.c test_i021.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i021.c test_supp_i021.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i021/test.cmake b/api-tests/ff/ipc/test_i021/test.cmake new file mode 100644 index 00000000..d9ecfedb --- /dev/null +++ b/api-tests/ff/ipc/test_i021/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i021.c + test_i021.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i021.c + test_supp_i021.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i022/source.mk b/api-tests/ff/ipc/test_i022/source.mk deleted file mode 100644 index 0afb1b94..00000000 --- a/api-tests/ff/ipc/test_i022/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i022.c test_i022.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i022.c test_supp_i022.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i022/test.cmake b/api-tests/ff/ipc/test_i022/test.cmake new file mode 100644 index 00000000..915cddd5 --- /dev/null +++ b/api-tests/ff/ipc/test_i022/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i022.c + test_i022.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i022.c + test_supp_i022.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i023/source.mk b/api-tests/ff/ipc/test_i023/source.mk deleted file mode 100644 index 516deb1b..00000000 --- a/api-tests/ff/ipc/test_i023/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i023.c test_i023.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i023.c test_supp_i023.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i023/test.cmake b/api-tests/ff/ipc/test_i023/test.cmake new file mode 100644 index 00000000..176cfc8e --- /dev/null +++ b/api-tests/ff/ipc/test_i023/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i023.c + test_i023.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i023.c + test_supp_i023.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i024/source.mk b/api-tests/ff/ipc/test_i024/source.mk deleted file mode 100644 index 1213b261..00000000 --- a/api-tests/ff/ipc/test_i024/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i024.c test_i024.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i024.c test_supp_i024.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i024/test.cmake b/api-tests/ff/ipc/test_i024/test.cmake new file mode 100644 index 00000000..f0e02974 --- /dev/null +++ b/api-tests/ff/ipc/test_i024/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i024.c + test_i024.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i024.c + test_supp_i024.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i025/source.mk b/api-tests/ff/ipc/test_i025/source.mk deleted file mode 100644 index e4b66736..00000000 --- a/api-tests/ff/ipc/test_i025/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i025.c test_i025.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i025.c test_supp_i025.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i025/test.cmake b/api-tests/ff/ipc/test_i025/test.cmake new file mode 100644 index 00000000..e861a9a6 --- /dev/null +++ b/api-tests/ff/ipc/test_i025/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i025.c + test_i025.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i025.c + test_supp_i025.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i026/source.mk b/api-tests/ff/ipc/test_i026/source.mk deleted file mode 100644 index b3255853..00000000 --- a/api-tests/ff/ipc/test_i026/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i026.c test_i026.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i026.c test_supp_i026.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i026/test.cmake b/api-tests/ff/ipc/test_i026/test.cmake new file mode 100644 index 00000000..361dfbd4 --- /dev/null +++ b/api-tests/ff/ipc/test_i026/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i026.c + test_i026.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i026.c + test_supp_i026.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i027/source.mk b/api-tests/ff/ipc/test_i027/source.mk deleted file mode 100644 index 7094e767..00000000 --- a/api-tests/ff/ipc/test_i027/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i027.c test_i027.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i027.c test_supp_i027.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i027/test.cmake b/api-tests/ff/ipc/test_i027/test.cmake new file mode 100644 index 00000000..27babcf7 --- /dev/null +++ b/api-tests/ff/ipc/test_i027/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i027.c + test_i027.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i027.c + test_supp_i027.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i028/source.mk b/api-tests/ff/ipc/test_i028/source.mk deleted file mode 100644 index 4cfdd10c..00000000 --- a/api-tests/ff/ipc/test_i028/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i028.c test_i028.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i028.c test_supp_i028.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i028/test.cmake b/api-tests/ff/ipc/test_i028/test.cmake new file mode 100644 index 00000000..189e407e --- /dev/null +++ b/api-tests/ff/ipc/test_i028/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i028.c + test_i028.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i028.c + test_supp_i028.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i029/source.mk b/api-tests/ff/ipc/test_i029/source.mk deleted file mode 100644 index 0d91668f..00000000 --- a/api-tests/ff/ipc/test_i029/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i029.c test_i029.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i029.c test_supp_i029.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i029/test.cmake b/api-tests/ff/ipc/test_i029/test.cmake new file mode 100644 index 00000000..b083caa8 --- /dev/null +++ b/api-tests/ff/ipc/test_i029/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i029.c + test_i029.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i029.c + test_supp_i029.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i030/source.mk b/api-tests/ff/ipc/test_i030/source.mk deleted file mode 100644 index 23d38edb..00000000 --- a/api-tests/ff/ipc/test_i030/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i030.c test_i030.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i030.c test_supp_i030.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i030/test.cmake b/api-tests/ff/ipc/test_i030/test.cmake new file mode 100644 index 00000000..877ec83c --- /dev/null +++ b/api-tests/ff/ipc/test_i030/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i030.c + test_i030.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i030.c + test_supp_i030.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i031/source.mk b/api-tests/ff/ipc/test_i031/source.mk deleted file mode 100644 index 415a8fc4..00000000 --- a/api-tests/ff/ipc/test_i031/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i031.c test_i031.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i031.c test_supp_i031.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i031/test.cmake b/api-tests/ff/ipc/test_i031/test.cmake new file mode 100644 index 00000000..a9bbd097 --- /dev/null +++ b/api-tests/ff/ipc/test_i031/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i031.c + test_i031.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i031.c + test_supp_i031.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i032/source.mk b/api-tests/ff/ipc/test_i032/source.mk deleted file mode 100644 index 0806e3a0..00000000 --- a/api-tests/ff/ipc/test_i032/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i032.c test_i032.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i032.c test_supp_i032.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i032/test.cmake b/api-tests/ff/ipc/test_i032/test.cmake new file mode 100644 index 00000000..413d8392 --- /dev/null +++ b/api-tests/ff/ipc/test_i032/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i032.c + test_i032.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i032.c + test_supp_i032.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i033/source.mk b/api-tests/ff/ipc/test_i033/source.mk deleted file mode 100644 index 350d2455..00000000 --- a/api-tests/ff/ipc/test_i033/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i033.c test_i033.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i033.c test_supp_i033.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i033/test.cmake b/api-tests/ff/ipc/test_i033/test.cmake new file mode 100644 index 00000000..75a6dd6a --- /dev/null +++ b/api-tests/ff/ipc/test_i033/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i033.c + test_i033.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i033.c + test_supp_i033.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i034/source.mk b/api-tests/ff/ipc/test_i034/source.mk deleted file mode 100644 index 108a4dca..00000000 --- a/api-tests/ff/ipc/test_i034/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i034.c test_i034.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i034.c test_supp_i034.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i034/test.cmake b/api-tests/ff/ipc/test_i034/test.cmake new file mode 100644 index 00000000..87f14918 --- /dev/null +++ b/api-tests/ff/ipc/test_i034/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i034.c + test_i034.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i034.c + test_supp_i034.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i035/source.mk b/api-tests/ff/ipc/test_i035/source.mk deleted file mode 100644 index 68ca3426..00000000 --- a/api-tests/ff/ipc/test_i035/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i035.c test_i035.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i035.c test_supp_i035.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i035/test.cmake b/api-tests/ff/ipc/test_i035/test.cmake new file mode 100644 index 00000000..571d48af --- /dev/null +++ b/api-tests/ff/ipc/test_i035/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i035.c + test_i035.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i035.c + test_supp_i035.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i036/source.mk b/api-tests/ff/ipc/test_i036/source.mk deleted file mode 100644 index ed3dc57a..00000000 --- a/api-tests/ff/ipc/test_i036/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i036.c test_i036.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i036.c test_supp_i036.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i036/test.cmake b/api-tests/ff/ipc/test_i036/test.cmake new file mode 100644 index 00000000..4d89727c --- /dev/null +++ b/api-tests/ff/ipc/test_i036/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i036.c + test_i036.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i036.c + test_supp_i036.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i037/source.mk b/api-tests/ff/ipc/test_i037/source.mk deleted file mode 100644 index cfcf6e43..00000000 --- a/api-tests/ff/ipc/test_i037/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i037.c test_i037.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i037.c test_supp_i037.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i037/test.cmake b/api-tests/ff/ipc/test_i037/test.cmake new file mode 100644 index 00000000..2e64af5e --- /dev/null +++ b/api-tests/ff/ipc/test_i037/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i037.c + test_i037.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i037.c + test_supp_i037.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i038/source.mk b/api-tests/ff/ipc/test_i038/source.mk deleted file mode 100644 index 0553d678..00000000 --- a/api-tests/ff/ipc/test_i038/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i038.c test_i038.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i038.c test_supp_i038.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i038/test.cmake b/api-tests/ff/ipc/test_i038/test.cmake new file mode 100644 index 00000000..b0d7a968 --- /dev/null +++ b/api-tests/ff/ipc/test_i038/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i038.c + test_i038.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i038.c + test_supp_i038.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i039/source.mk b/api-tests/ff/ipc/test_i039/source.mk deleted file mode 100644 index 0c2d68e5..00000000 --- a/api-tests/ff/ipc/test_i039/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i039.c test_i039.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i039.c test_supp_i039.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i039/test.cmake b/api-tests/ff/ipc/test_i039/test.cmake new file mode 100644 index 00000000..616c732e --- /dev/null +++ b/api-tests/ff/ipc/test_i039/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i039.c + test_i039.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i039.c + test_supp_i039.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i040/source.mk b/api-tests/ff/ipc/test_i040/source.mk deleted file mode 100644 index ba62c46c..00000000 --- a/api-tests/ff/ipc/test_i040/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i040.c test_i040.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i040.c test_supp_i040.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i040/test.cmake b/api-tests/ff/ipc/test_i040/test.cmake new file mode 100644 index 00000000..336af6f7 --- /dev/null +++ b/api-tests/ff/ipc/test_i040/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i040.c + test_i040.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i040.c + test_supp_i040.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i041/source.mk b/api-tests/ff/ipc/test_i041/source.mk deleted file mode 100644 index 40028a7a..00000000 --- a/api-tests/ff/ipc/test_i041/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i041.c test_i041.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i041.c test_supp_i041.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i041/test.cmake b/api-tests/ff/ipc/test_i041/test.cmake new file mode 100644 index 00000000..e501752d --- /dev/null +++ b/api-tests/ff/ipc/test_i041/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i041.c + test_i041.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i041.c + test_supp_i041.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i042/source.mk b/api-tests/ff/ipc/test_i042/source.mk deleted file mode 100644 index a5f0f2ef..00000000 --- a/api-tests/ff/ipc/test_i042/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i042.c test_i042.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i042.c test_supp_i042.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i042/test.cmake b/api-tests/ff/ipc/test_i042/test.cmake new file mode 100644 index 00000000..5f01de20 --- /dev/null +++ b/api-tests/ff/ipc/test_i042/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i042.c + test_i042.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i042.c + test_supp_i042.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i043/source.mk b/api-tests/ff/ipc/test_i043/source.mk deleted file mode 100644 index c7f19e58..00000000 --- a/api-tests/ff/ipc/test_i043/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i043.c test_i043.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i043.c test_supp_i043.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i043/test.cmake b/api-tests/ff/ipc/test_i043/test.cmake new file mode 100644 index 00000000..5dfeb41f --- /dev/null +++ b/api-tests/ff/ipc/test_i043/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i043.c + test_i043.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i043.c + test_supp_i043.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i044/source.mk b/api-tests/ff/ipc/test_i044/source.mk deleted file mode 100644 index 73fb6205..00000000 --- a/api-tests/ff/ipc/test_i044/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i044.c test_i044.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i044.c test_supp_i044.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i044/test.cmake b/api-tests/ff/ipc/test_i044/test.cmake new file mode 100644 index 00000000..f7486d74 --- /dev/null +++ b/api-tests/ff/ipc/test_i044/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i044.c + test_i044.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i044.c + test_supp_i044.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i045/source.mk b/api-tests/ff/ipc/test_i045/source.mk deleted file mode 100644 index 602e53eb..00000000 --- a/api-tests/ff/ipc/test_i045/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i045.c test_i045.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i045.c test_supp_i045.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i045/test.cmake b/api-tests/ff/ipc/test_i045/test.cmake new file mode 100644 index 00000000..c7fd5ba5 --- /dev/null +++ b/api-tests/ff/ipc/test_i045/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i045.c + test_i045.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i045.c + test_supp_i045.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i046/source.mk b/api-tests/ff/ipc/test_i046/source.mk deleted file mode 100644 index 257c1776..00000000 --- a/api-tests/ff/ipc/test_i046/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i046.c test_i046.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i046.c test_supp_i046.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i046/test.cmake b/api-tests/ff/ipc/test_i046/test.cmake new file mode 100644 index 00000000..c91735fc --- /dev/null +++ b/api-tests/ff/ipc/test_i046/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i046.c + test_i046.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i046.c + test_supp_i046.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i047/test.cmake b/api-tests/ff/ipc/test_i047/test.cmake new file mode 100644 index 00000000..72be9a4d --- /dev/null +++ b/api-tests/ff/ipc/test_i047/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i047.c + test_i047.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i047.c + test_supp_i047.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i048/test.cmake b/api-tests/ff/ipc/test_i048/test.cmake new file mode 100644 index 00000000..a7f11bd1 --- /dev/null +++ b/api-tests/ff/ipc/test_i048/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i048.c + test_i048.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i048.c + test_supp_i048.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i049/test.cmake b/api-tests/ff/ipc/test_i049/test.cmake new file mode 100644 index 00000000..de1b322c --- /dev/null +++ b/api-tests/ff/ipc/test_i049/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i049.c + test_i049.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i049.c + test_supp_i049.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i050/test.cmake b/api-tests/ff/ipc/test_i050/test.cmake new file mode 100644 index 00000000..b70d3ea9 --- /dev/null +++ b/api-tests/ff/ipc/test_i050/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i050.c + test_i050.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i050.c + test_supp_i050.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i051/source.mk b/api-tests/ff/ipc/test_i051/source.mk deleted file mode 100644 index 5ea476ce..00000000 --- a/api-tests/ff/ipc/test_i051/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i051.c test_i051.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i051.c test_supp_i051.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i051/test.cmake b/api-tests/ff/ipc/test_i051/test.cmake new file mode 100644 index 00000000..ac938a96 --- /dev/null +++ b/api-tests/ff/ipc/test_i051/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i051.c + test_i051.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i051.c + test_supp_i051.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i052/source.mk b/api-tests/ff/ipc/test_i052/source.mk deleted file mode 100644 index e1aaf825..00000000 --- a/api-tests/ff/ipc/test_i052/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i052.c test_i052.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i052.c test_supp_i052.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i052/test.cmake b/api-tests/ff/ipc/test_i052/test.cmake new file mode 100644 index 00000000..c5524a2d --- /dev/null +++ b/api-tests/ff/ipc/test_i052/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i052.c + test_i052.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i052.c + test_supp_i052.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i053/source.mk b/api-tests/ff/ipc/test_i053/source.mk deleted file mode 100644 index 07e6f54b..00000000 --- a/api-tests/ff/ipc/test_i053/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i053.c test_i053.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i053.c test_supp_i053.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i053/test.cmake b/api-tests/ff/ipc/test_i053/test.cmake new file mode 100644 index 00000000..a9be727f --- /dev/null +++ b/api-tests/ff/ipc/test_i053/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i053.c + test_i053.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i053.c + test_supp_i053.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i054/source.mk b/api-tests/ff/ipc/test_i054/source.mk deleted file mode 100644 index 8aae70f5..00000000 --- a/api-tests/ff/ipc/test_i054/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i054.c test_i054.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i054.c test_supp_i054.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i054/test.cmake b/api-tests/ff/ipc/test_i054/test.cmake new file mode 100644 index 00000000..49495a6b --- /dev/null +++ b/api-tests/ff/ipc/test_i054/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i054.c + test_i054.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i054.c + test_supp_i054.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i055/source.mk b/api-tests/ff/ipc/test_i055/source.mk deleted file mode 100644 index 80a02635..00000000 --- a/api-tests/ff/ipc/test_i055/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i055.c test_i055.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i055.c test_supp_i055.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i055/test.cmake b/api-tests/ff/ipc/test_i055/test.cmake new file mode 100644 index 00000000..dfe9de8b --- /dev/null +++ b/api-tests/ff/ipc/test_i055/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i055.c + test_i055.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i055.c + test_supp_i055.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i056/source.mk b/api-tests/ff/ipc/test_i056/source.mk deleted file mode 100644 index 108c471c..00000000 --- a/api-tests/ff/ipc/test_i056/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i056.c test_i056.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i056.c test_supp_i056.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i056/test.cmake b/api-tests/ff/ipc/test_i056/test.cmake new file mode 100644 index 00000000..553070a6 --- /dev/null +++ b/api-tests/ff/ipc/test_i056/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i056.c + test_i056.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i056.c + test_supp_i056.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i057/source.mk b/api-tests/ff/ipc/test_i057/source.mk deleted file mode 100644 index 25fbaa9e..00000000 --- a/api-tests/ff/ipc/test_i057/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i057.c test_i057.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i057.c test_supp_i057.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i057/test.cmake b/api-tests/ff/ipc/test_i057/test.cmake new file mode 100644 index 00000000..97e5bef3 --- /dev/null +++ b/api-tests/ff/ipc/test_i057/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i057.c + test_i057.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i057.c + test_supp_i057.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i058/source.mk b/api-tests/ff/ipc/test_i058/source.mk deleted file mode 100644 index e4adfa9b..00000000 --- a/api-tests/ff/ipc/test_i058/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i058.c test_i058.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i058.c test_supp_i058.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i058/test.cmake b/api-tests/ff/ipc/test_i058/test.cmake new file mode 100644 index 00000000..19a8f188 --- /dev/null +++ b/api-tests/ff/ipc/test_i058/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i058.c + test_i058.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i058.c + test_supp_i058.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i059/source.mk b/api-tests/ff/ipc/test_i059/source.mk deleted file mode 100644 index b72db0ba..00000000 --- a/api-tests/ff/ipc/test_i059/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i059.c test_i059.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i059.c test_supp_i059.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i059/test.cmake b/api-tests/ff/ipc/test_i059/test.cmake new file mode 100644 index 00000000..92c44e53 --- /dev/null +++ b/api-tests/ff/ipc/test_i059/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i059.c + test_i059.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i059.c + test_supp_i059.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i060/source.mk b/api-tests/ff/ipc/test_i060/source.mk deleted file mode 100644 index 5f4d02d8..00000000 --- a/api-tests/ff/ipc/test_i060/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i060.c test_i060.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i060.c test_supp_i060.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i060/test.cmake b/api-tests/ff/ipc/test_i060/test.cmake new file mode 100644 index 00000000..aa6cdd5e --- /dev/null +++ b/api-tests/ff/ipc/test_i060/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i060.c + test_i060.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i060.c + test_supp_i060.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i061/source.mk b/api-tests/ff/ipc/test_i061/source.mk deleted file mode 100644 index dc4d9131..00000000 --- a/api-tests/ff/ipc/test_i061/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i061.c test_i061.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i061.c test_supp_i061.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i061/test.cmake b/api-tests/ff/ipc/test_i061/test.cmake new file mode 100644 index 00000000..23f79e38 --- /dev/null +++ b/api-tests/ff/ipc/test_i061/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i061.c + test_i061.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i061.c + test_supp_i061.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i062/source.mk b/api-tests/ff/ipc/test_i062/source.mk deleted file mode 100644 index b14d3c31..00000000 --- a/api-tests/ff/ipc/test_i062/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i062.c test_i062.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i062.c test_supp_i062.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i062/test.cmake b/api-tests/ff/ipc/test_i062/test.cmake new file mode 100644 index 00000000..b0ae70a7 --- /dev/null +++ b/api-tests/ff/ipc/test_i062/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i062.c + test_i062.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i062.c + test_supp_i062.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i063/source.mk b/api-tests/ff/ipc/test_i063/source.mk deleted file mode 100644 index b23ec714..00000000 --- a/api-tests/ff/ipc/test_i063/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i063.c test_i063.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i063.c test_supp_i063.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i063/test.cmake b/api-tests/ff/ipc/test_i063/test.cmake new file mode 100644 index 00000000..bdbf6e81 --- /dev/null +++ b/api-tests/ff/ipc/test_i063/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i063.c + test_i063.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i063.c + test_supp_i063.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i064/source.mk b/api-tests/ff/ipc/test_i064/source.mk deleted file mode 100644 index 1796e278..00000000 --- a/api-tests/ff/ipc/test_i064/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i064.c test_i064.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i064.c test_supp_i064.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i064/test.cmake b/api-tests/ff/ipc/test_i064/test.cmake new file mode 100644 index 00000000..4e2a2275 --- /dev/null +++ b/api-tests/ff/ipc/test_i064/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i064.c + test_i064.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i064.c + test_supp_i064.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i065/source.mk b/api-tests/ff/ipc/test_i065/source.mk deleted file mode 100644 index 9f622830..00000000 --- a/api-tests/ff/ipc/test_i065/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i065.c test_i065.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i065.c test_supp_i065.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i065/test.cmake b/api-tests/ff/ipc/test_i065/test.cmake new file mode 100644 index 00000000..567b71f4 --- /dev/null +++ b/api-tests/ff/ipc/test_i065/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i065.c + test_i065.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i065.c + test_supp_i065.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i066/source.mk b/api-tests/ff/ipc/test_i066/source.mk deleted file mode 100644 index 604c13c5..00000000 --- a/api-tests/ff/ipc/test_i066/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i066.c test_i066.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i066.c test_supp_i066.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i066/test.cmake b/api-tests/ff/ipc/test_i066/test.cmake new file mode 100644 index 00000000..5de49651 --- /dev/null +++ b/api-tests/ff/ipc/test_i066/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i066.c + test_i066.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i066.c + test_supp_i066.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i067/source.mk b/api-tests/ff/ipc/test_i067/source.mk deleted file mode 100644 index cce0b538..00000000 --- a/api-tests/ff/ipc/test_i067/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i067.c test_i067.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i067.c test_supp_i067.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i067/test.cmake b/api-tests/ff/ipc/test_i067/test.cmake new file mode 100644 index 00000000..66fabc80 --- /dev/null +++ b/api-tests/ff/ipc/test_i067/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i067.c + test_i067.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i067.c + test_supp_i067.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i067/test_i067.c b/api-tests/ff/ipc/test_i067/test_i067.c index 6e6f27f8..f1f22289 100644 --- a/api-tests/ff/ipc/test_i067/test_i067.c +++ b/api-tests/ff/ipc/test_i067/test_i067.c @@ -19,13 +19,13 @@ #include "val_interfaces.h" #include "val_target.h" #else -#include "val/common/val_client_defs.h" -#include "val/spe/val_partition_common.h" +#include "val_client_defs.h" +#include "val_service_defs.h" #endif #include "test_i067.h" -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP void *malloc(size_t size); void free(void *ptr); #endif @@ -39,7 +39,7 @@ client_test_t test_i067_client_tests_list[] = { int32_t client_test_dynamic_mem_alloc_fn(security_t caller) { /* Check heap memory support available to secure partition */ -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP uint8_t *buffer; val->print(PRINT_TEST, "[Check 1] Test dynamic memory allocation\n", 0); diff --git a/api-tests/ff/ipc/test_i067/test_supp_i067.c b/api-tests/ff/ipc/test_i067/test_supp_i067.c index b6d0779b..aa5a8bf3 100644 --- a/api-tests/ff/ipc/test_i067/test_supp_i067.c +++ b/api-tests/ff/ipc/test_i067/test_supp_i067.c @@ -25,7 +25,7 @@ extern psa_api_t *psa; #define SERVER_HEAP_SIZE 0x100 /* The size is same as heap_size field in manifest */ -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); @@ -42,7 +42,7 @@ server_test_t test_i067_server_tests_list[] = { int32_t server_test_dynamic_mem_alloc_fn(void) { /* Perform checks only if heap memory support available to secure partition */ -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP uint8_t *buffer, *buffer1; uint8_t cmpbuff[SERVER_HEAP_SIZE] = {0}; diff --git a/api-tests/ff/ipc/test_i068/source.mk b/api-tests/ff/ipc/test_i068/source.mk deleted file mode 100644 index e85e11eb..00000000 --- a/api-tests/ff/ipc/test_i068/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i068.c test_i068.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i068.c test_supp_i068.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i068/test.cmake b/api-tests/ff/ipc/test_i068/test.cmake new file mode 100644 index 00000000..cefebf11 --- /dev/null +++ b/api-tests/ff/ipc/test_i068/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i068.c + test_i068.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i068.c + test_supp_i068.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i068/test_i068.c b/api-tests/ff/ipc/test_i068/test_i068.c index 0ab92dc0..18b3c87d 100644 --- a/api-tests/ff/ipc/test_i068/test_i068.c +++ b/api-tests/ff/ipc/test_i068/test_i068.c @@ -19,8 +19,8 @@ #include "val_interfaces.h" #include "val_target.h" #else -#include "val/common/val_client_defs.h" -#include "val/spe/val_partition_common.h" +#include "val_client_defs.h" +#include "val_service_defs.h" #endif #include "test_i068.h" diff --git a/api-tests/ff/ipc/test_i069/source.mk b/api-tests/ff/ipc/test_i069/source.mk deleted file mode 100644 index 9bedeb2e..00000000 --- a/api-tests/ff/ipc/test_i069/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i069.c test_i069.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i069.c test_supp_i069.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i069/test.cmake b/api-tests/ff/ipc/test_i069/test.cmake new file mode 100644 index 00000000..99eb8216 --- /dev/null +++ b/api-tests/ff/ipc/test_i069/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i069.c + test_i069.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i069.c + test_supp_i069.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i069/test_i069.c b/api-tests/ff/ipc/test_i069/test_i069.c index 53afce3a..1955b9d7 100644 --- a/api-tests/ff/ipc/test_i069/test_i069.c +++ b/api-tests/ff/ipc/test_i069/test_i069.c @@ -19,8 +19,8 @@ #include "val_interfaces.h" #include "val_target.h" #else -#include "val/common/val_client_defs.h" -#include "val/spe/val_partition_common.h" +#include "val_client_defs.h" +#include "val_service_defs.h" #endif #include "test_i069.h" diff --git a/api-tests/ff/ipc/test_i070/source.mk b/api-tests/ff/ipc/test_i070/source.mk deleted file mode 100644 index 9197155e..00000000 --- a/api-tests/ff/ipc/test_i070/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i070.c test_i070.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i070.c test_supp_i070.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file diff --git a/api-tests/ff/ipc/test_i070/test.cmake b/api-tests/ff/ipc/test_i070/test.cmake new file mode 100644 index 00000000..82d9a914 --- /dev/null +++ b/api-tests/ff/ipc/test_i070/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i070.c + test_i070.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i070.c + test_supp_i070.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i070/test_i070.c b/api-tests/ff/ipc/test_i070/test_i070.c index 45c5dc97..c9d5ac15 100644 --- a/api-tests/ff/ipc/test_i070/test_i070.c +++ b/api-tests/ff/ipc/test_i070/test_i070.c @@ -19,8 +19,8 @@ #include "val_interfaces.h" #include "val_target.h" #else -#include "val/common/val_client_defs.h" -#include "val/spe/val_partition_common.h" +#include "val_client_defs.h" +#include "val_service_defs.h" #endif #include "test_i070.h" diff --git a/api-tests/ff/ipc/test_i071/source.mk b/api-tests/ff/ipc/test_i071/source.mk deleted file mode 100644 index 2eac129e..00000000 --- a/api-tests/ff/ipc/test_i071/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i071.c test_i071.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i071.c test_supp_i071.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i071/test.cmake b/api-tests/ff/ipc/test_i071/test.cmake new file mode 100644 index 00000000..a39ec155 --- /dev/null +++ b/api-tests/ff/ipc/test_i071/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i071.c + test_i071.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i071.c + test_supp_i071.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i071/test_i071.c b/api-tests/ff/ipc/test_i071/test_i071.c index 1c56a022..3e7774d0 100644 --- a/api-tests/ff/ipc/test_i071/test_i071.c +++ b/api-tests/ff/ipc/test_i071/test_i071.c @@ -19,8 +19,8 @@ #include "val_interfaces.h" #include "val_target.h" #else -#include "val/common/val_client_defs.h" -#include "val/spe/val_partition_common.h" +#include "val_client_defs.h" +#include "val_service_defs.h" #endif #include "test_i071.h" diff --git a/api-tests/ff/ipc/test_i072/source.mk b/api-tests/ff/ipc/test_i072/source.mk deleted file mode 100644 index cdccca53..00000000 --- a/api-tests/ff/ipc/test_i072/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i072.c test_i072.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i072.c test_supp_i072.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i072/test.cmake b/api-tests/ff/ipc/test_i072/test.cmake new file mode 100644 index 00000000..c5fb69ef --- /dev/null +++ b/api-tests/ff/ipc/test_i072/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i072.c + test_i072.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i072.c + test_supp_i072.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i073/source.mk b/api-tests/ff/ipc/test_i073/source.mk deleted file mode 100644 index d52216eb..00000000 --- a/api-tests/ff/ipc/test_i073/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i073.c test_i073.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i073.c test_supp_i073.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i073/test.cmake b/api-tests/ff/ipc/test_i073/test.cmake new file mode 100644 index 00000000..8f3321c0 --- /dev/null +++ b/api-tests/ff/ipc/test_i073/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i073.c + test_i073.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i073.c + test_supp_i073.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i074/source.mk b/api-tests/ff/ipc/test_i074/source.mk deleted file mode 100644 index df3f9bdc..00000000 --- a/api-tests/ff/ipc/test_i074/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i074.c test_i074.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i074.c test_supp_i074.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i074/test.cmake b/api-tests/ff/ipc/test_i074/test.cmake new file mode 100644 index 00000000..ce162f89 --- /dev/null +++ b/api-tests/ff/ipc/test_i074/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i074.c + test_i074.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i074.c + test_supp_i074.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i074/test_i074.c b/api-tests/ff/ipc/test_i074/test_i074.c index 8c58ca99..bc891524 100644 --- a/api-tests/ff/ipc/test_i074/test_i074.c +++ b/api-tests/ff/ipc/test_i074/test_i074.c @@ -36,7 +36,7 @@ client_test_t test_i074_client_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i074/test_supp_i074.c b/api-tests/ff/ipc/test_i074/test_supp_i074.c index cbc790e7..ff79d348 100644 --- a/api-tests/ff/ipc/test_i074/test_supp_i074.c +++ b/api-tests/ff/ipc/test_i074/test_supp_i074.c @@ -26,7 +26,7 @@ extern psa_api_t *psa; int32_t server_test_nspe_read_app_rot_heap(void); int32_t server_test_nspe_write_app_rot_heap(void); -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP void *malloc(size_t size); void free(void *ptr); #endif @@ -41,7 +41,7 @@ server_test_t test_i074_server_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t send_secure_partition_address(uint8_t *heap) { int32_t status = VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i075/source.mk b/api-tests/ff/ipc/test_i075/source.mk deleted file mode 100644 index 55b3a769..00000000 --- a/api-tests/ff/ipc/test_i075/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i075.c test_i075.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i075.c test_supp_i075.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i075/test.cmake b/api-tests/ff/ipc/test_i075/test.cmake new file mode 100644 index 00000000..a7583cf9 --- /dev/null +++ b/api-tests/ff/ipc/test_i075/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i075.c + test_i075.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i075.c + test_supp_i075.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i076/source.mk b/api-tests/ff/ipc/test_i076/source.mk deleted file mode 100644 index 31064b80..00000000 --- a/api-tests/ff/ipc/test_i076/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i076.c test_i076.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i076.c test_supp_i076.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i076/test.cmake b/api-tests/ff/ipc/test_i076/test.cmake new file mode 100644 index 00000000..6e1dd1bd --- /dev/null +++ b/api-tests/ff/ipc/test_i076/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i076.c + test_i076.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i076.c + test_supp_i076.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i077/source.mk b/api-tests/ff/ipc/test_i077/source.mk deleted file mode 100644 index b5026c34..00000000 --- a/api-tests/ff/ipc/test_i077/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i077.c test_i077.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i077.c test_supp_i077.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i077/test.cmake b/api-tests/ff/ipc/test_i077/test.cmake new file mode 100644 index 00000000..0a060bfc --- /dev/null +++ b/api-tests/ff/ipc/test_i077/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i077.c + test_i077.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i077.c + test_supp_i077.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i078/source.mk b/api-tests/ff/ipc/test_i078/source.mk deleted file mode 100644 index 7f8dbe77..00000000 --- a/api-tests/ff/ipc/test_i078/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i078.c test_i078.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i078.c test_supp_i078.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i078/test.cmake b/api-tests/ff/ipc/test_i078/test.cmake new file mode 100644 index 00000000..c7273d9e --- /dev/null +++ b/api-tests/ff/ipc/test_i078/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i078.c + test_i078.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i078.c + test_supp_i078.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i078/test_i078.c b/api-tests/ff/ipc/test_i078/test_i078.c index 338b781a..d46365cc 100644 --- a/api-tests/ff/ipc/test_i078/test_i078.c +++ b/api-tests/ff/ipc/test_i078/test_i078.c @@ -36,7 +36,7 @@ client_test_t test_i078_client_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) diff --git a/api-tests/ff/ipc/test_i079/source.mk b/api-tests/ff/ipc/test_i079/source.mk deleted file mode 100644 index e1357c4a..00000000 --- a/api-tests/ff/ipc/test_i079/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i079.c test_i079.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i079.c test_supp_i079.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i079/test.cmake b/api-tests/ff/ipc/test_i079/test.cmake new file mode 100644 index 00000000..2cab6b3c --- /dev/null +++ b/api-tests/ff/ipc/test_i079/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i079.c + test_i079.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i079.c + test_supp_i079.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i080/source.mk b/api-tests/ff/ipc/test_i080/source.mk deleted file mode 100644 index 8f88250a..00000000 --- a/api-tests/ff/ipc/test_i080/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i080.c test_i080.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i080.c test_supp_i080.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i080/test.cmake b/api-tests/ff/ipc/test_i080/test.cmake new file mode 100644 index 00000000..6495d40d --- /dev/null +++ b/api-tests/ff/ipc/test_i080/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i080.c + test_i080.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i080.c + test_supp_i080.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i081/source.mk b/api-tests/ff/ipc/test_i081/source.mk deleted file mode 100644 index 3344b9e9..00000000 --- a/api-tests/ff/ipc/test_i081/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i081.c test_i081.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i081.c test_supp_i081.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i081/test.cmake b/api-tests/ff/ipc/test_i081/test.cmake new file mode 100644 index 00000000..da099b7e --- /dev/null +++ b/api-tests/ff/ipc/test_i081/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i081.c + test_i081.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i081.c + test_supp_i081.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i082/source.mk b/api-tests/ff/ipc/test_i082/source.mk deleted file mode 100644 index 7b568ce2..00000000 --- a/api-tests/ff/ipc/test_i082/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i082.c test_i082.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i082.c test_supp_i082.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i082/test.cmake b/api-tests/ff/ipc/test_i082/test.cmake new file mode 100644 index 00000000..e0c7581e --- /dev/null +++ b/api-tests/ff/ipc/test_i082/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i082.c + test_i082.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i082.c + test_supp_i082.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i082/test_i082.c b/api-tests/ff/ipc/test_i082/test_i082.c index 6ddd6a72..05e3f84a 100644 --- a/api-tests/ff/ipc/test_i082/test_i082.c +++ b/api-tests/ff/ipc/test_i082/test_i082.c @@ -36,7 +36,7 @@ client_test_t test_i082_client_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) diff --git a/api-tests/ff/ipc/test_i083/source.mk b/api-tests/ff/ipc/test_i083/source.mk deleted file mode 100644 index a13ab841..00000000 --- a/api-tests/ff/ipc/test_i083/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i083.c test_i083.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i083.c test_supp_i083.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i083/test.cmake b/api-tests/ff/ipc/test_i083/test.cmake new file mode 100644 index 00000000..74e5fbe9 --- /dev/null +++ b/api-tests/ff/ipc/test_i083/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i083.c + test_i083.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i083.c + test_supp_i083.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i084/source.mk b/api-tests/ff/ipc/test_i084/source.mk deleted file mode 100644 index 428c0654..00000000 --- a/api-tests/ff/ipc/test_i084/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i084.c test_i084.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i084.c test_supp_i084.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i084/test.cmake b/api-tests/ff/ipc/test_i084/test.cmake new file mode 100644 index 00000000..f6e9040b --- /dev/null +++ b/api-tests/ff/ipc/test_i084/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i084.c + test_i084.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i084.c + test_supp_i084.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i085/source.mk b/api-tests/ff/ipc/test_i085/source.mk deleted file mode 100644 index 2a8e13b9..00000000 --- a/api-tests/ff/ipc/test_i085/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i085.c test_i085.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i085.c test_supp_i085.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i085/test.cmake b/api-tests/ff/ipc/test_i085/test.cmake new file mode 100644 index 00000000..cb4948ff --- /dev/null +++ b/api-tests/ff/ipc/test_i085/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i085.c + test_i085.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i085.c + test_supp_i085.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i086/source.mk b/api-tests/ff/ipc/test_i086/source.mk deleted file mode 100644 index d07ace17..00000000 --- a/api-tests/ff/ipc/test_i086/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i086.c test_i086.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i086.c test_supp_i086.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i086/test.cmake b/api-tests/ff/ipc/test_i086/test.cmake new file mode 100644 index 00000000..d8d5f407 --- /dev/null +++ b/api-tests/ff/ipc/test_i086/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i086.c + test_i086.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i086.c + test_supp_i086.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i086/test_i086.c b/api-tests/ff/ipc/test_i086/test_i086.c index 7f56cbe8..370e9358 100644 --- a/api-tests/ff/ipc/test_i086/test_i086.c +++ b/api-tests/ff/ipc/test_i086/test_i086.c @@ -36,7 +36,7 @@ client_test_t test_i086_client_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i086/test_supp_i086.c b/api-tests/ff/ipc/test_i086/test_supp_i086.c index 52fef112..946273e1 100644 --- a/api-tests/ff/ipc/test_i086/test_supp_i086.c +++ b/api-tests/ff/ipc/test_i086/test_supp_i086.c @@ -26,7 +26,7 @@ extern psa_api_t *psa; int32_t server_test_sp_read_other_sp_heap(void); int32_t server_test_sp_write_other_sp_heap(void); -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP void *malloc(size_t size); void free(void *ptr); #endif @@ -41,7 +41,7 @@ server_test_t test_i086_server_tests_list[] = { NULL, }; -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP static int32_t send_secure_partition_address(uint8_t *heap) { int32_t status = VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i087/source.mk b/api-tests/ff/ipc/test_i087/source.mk deleted file mode 100644 index d0cfd53e..00000000 --- a/api-tests/ff/ipc/test_i087/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_i087.c test_i087.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_i087.c test_supp_i087.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_i087/test.cmake b/api-tests/ff/ipc/test_i087/test.cmake new file mode 100644 index 00000000..4746ba62 --- /dev/null +++ b/api-tests/ff/ipc/test_i087/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i087.c + test_i087.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i087.c + test_supp_i087.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_l088/source.mk b/api-tests/ff/ipc/test_l088/source.mk deleted file mode 100644 index 69cfbcfb..00000000 --- a/api-tests/ff/ipc/test_l088/source.mk +++ /dev/null @@ -1,25 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -CC_SOURCE = test_entry_l088.c test_l088.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = - -CC_SOURCE_SPE = test_l088.c test_supp_l088.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = diff --git a/api-tests/ff/ipc/test_l088/test.cmake b/api-tests/ff/ipc/test_l088/test.cmake new file mode 100644 index 00000000..16026f9a --- /dev/null +++ b/api-tests/ff/ipc/test_l088/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_l088.c + test_l088.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_l088.c + test_supp_l088.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/partition/common/driver_partition.c b/api-tests/ff/partition/common/driver_partition.c index 53a6004b..1dff45b7 100644 --- a/api-tests/ff/partition/common/driver_partition.c +++ b/api-tests/ff/partition/common/driver_partition.c @@ -15,7 +15,7 @@ * limitations under the License. **/ -#include "val/spe/val_driver_service_apis.h" +#include "val_driver_service_apis.h" #define DATA_VALUE 0x1111 #define BUFFER_SIZE 4 @@ -574,7 +574,7 @@ void driver_test_isolation_psa_rot_stack_wr(psa_msg_t *msg) void driver_test_isolation_psa_rot_heap_rd(psa_msg_t *msg) { -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP uint8_t *buffer; buffer = (uint8_t *)malloc(sizeof(uint8_t) * BUFFER_SIZE); @@ -589,7 +589,7 @@ void driver_test_isolation_psa_rot_heap_rd(psa_msg_t *msg) void driver_test_isolation_psa_rot_heap_wr(psa_msg_t *msg) { -#if (SP_HEAP_MEM_SUPP == 1) +#ifdef SP_HEAP_MEM_SUPP uint8_t *buffer; buffer = (uint8_t *)malloc(sizeof(uint8_t) * BUFFER_SIZE); diff --git a/api-tests/platform/drivers/uart/cmsdk/pal_uart.c b/api-tests/platform/drivers/uart/cmsdk/pal_uart.c index e55a4115..39643712 100644 --- a/api-tests/platform/drivers/uart/cmsdk/pal_uart.c +++ b/api-tests/platform/drivers/uart/cmsdk/pal_uart.c @@ -68,7 +68,7 @@ static void pal_uart_cmsdk_putc(uint8_t c) void pal_cmsdk_print(char *str, int32_t data) { int8_t j, buffer[16]; - int8_t i = 0, is_neg = 0; + int8_t i = 0, is_neg = 0, k = sizeof(data); for (; *str != '\0'; ++str) { @@ -96,7 +96,7 @@ void pal_cmsdk_print(char *str, int32_t data) } else if (*str == 'x' || *str == 'X') { - while (data != 0) + while (k--) { j = data & 0xf; data >>= 4; diff --git a/api-tests/platform/drivers/uart/pl011/pal_uart.c b/api-tests/platform/drivers/uart/pl011/pal_uart.c index 9a1095b5..20ac237a 100644 --- a/api-tests/platform/drivers/uart/pl011/pal_uart.c +++ b/api-tests/platform/drivers/uart/pl011/pal_uart.c @@ -69,7 +69,7 @@ void pal_uart_putc(uint8_t c) void pal_uart_pl011_print(char *str, int32_t data) { uint8_t j, buffer[16]; - int8_t i = 0, is_neg = 0; + int8_t i = 0, is_neg = 0, k = sizeof(data); for (; *str != '\0'; ++str) { @@ -97,7 +97,7 @@ void pal_uart_pl011_print(char *str, int32_t data) } else if (*str == 'x' || *str == 'X') { - while (data != 0) + while (k--) { j = data & 0xf; data >>= 4; diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/Makefile b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/Makefile deleted file mode 100644 index f757e4b9..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=0 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=1 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=1 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=0 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/cmsdk \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/cmsdk: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h index 3ebe1e10..0a63b026 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h @@ -24,10 +24,8 @@ #include #include -#ifndef TARGET_CFG_BUILD #include "pal_config.h" #include "pal_crypto_config.h" -#endif /* typedef's */ typedef uint8_t bool_t; @@ -87,7 +85,7 @@ typedef enum { * Redefining some of the client.h elements for compilation to go through * when PSA IPC APIs are not implemented. */ -#if (PSA_IPC_IMPLEMENTED == 0) +#ifndef IPC #ifndef PSA_VERSION_NONE #define PSA_VERSION_NONE (0) @@ -113,6 +111,6 @@ typedef struct psa_outvec { size_t len; } psa_outvec; -#endif /* PSA_IPC_IMPLEMENTED */ +#endif /* IPC */ #endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index e3f70ad7..289dc5d8 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -18,66 +18,32 @@ #ifndef _PAL_CONFIG_H_ #define _PAL_CONFIG_H_ -/* - * List of macros used by test suite - */ -#if !defined(PSA_IPC_IMPLEMENTED) -#define PSA_IPC_IMPLEMENTED 0 -#endif - -#if !defined(PSA_CRYPTO_IMPLEMENTED) -#define PSA_CRYPTO_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) -#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) -#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) -#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 -#endif +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) -#if (PSA_IPC_IMPLEMENTED == 0) && \ - (PSA_CRYPTO_IMPLEMENTED == 0) && \ - (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) -#error "You must define at least one of these macros to run test suite" -#endif +/* Print verbosity = TEST */ +#define VERBOSE 3 -#if !defined(VERBOSE) -#define VERBOSE 3 /* Print verbosity = TEST */ -#endif - -#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) -#define VAL_NSPE_BUILD 1 -#endif +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD -#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) -#define NONSECURE_TEST_BUILD 1 -#endif +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD -#if !defined(TEST_COMBINE_ARCHIVE) -#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ -#endif +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE -#if !defined(WATCHDOG_AVAILABLE) -#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ -#endif +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE -#if !defined(SP_HEAP_MEM_SUPP) -#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ -#endif +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ /* * Include of PSA defined Header files */ - -#if PSA_IPC_IMPLEMENTED +#ifdef IPC /* psa/client.h: Contains the PSA Client API elements */ #include "psa/client.h" @@ -96,22 +62,22 @@ #include "psa_manifest/pid.h" #endif -#if PSA_CRYPTO_IMPLEMENTED +#ifdef CRYPTO /* psa/crypto.h: Contains the PSA Crypto API elements */ #include "psa/crypto.h" #endif -#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +#ifdef INTERNAL_TRUSTED_STORAGE /* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ #include "psa/internal_trusted_storage.h" #endif -#if PSA_PROTECTED_STORAGE_IMPLEMENTED +#ifdef PROTECTED_STORAGE /* psa/protected_storage.h: Contains the PSA PS API elements */ #include "psa/protected_storage.h" #endif -#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +#ifdef INITIAL_ATTESTATION /* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ #include "psa/initial_attestation.h" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake new file mode 100644 index 00000000..5c5c942e --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/Makefile b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/Makefile deleted file mode 100644 index 473879d5..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=0 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=1 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=1 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=1 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/cmsdk \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/cmsdk: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_common.h index 3ebe1e10..0a63b026 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_common.h @@ -24,10 +24,8 @@ #include #include -#ifndef TARGET_CFG_BUILD #include "pal_config.h" #include "pal_crypto_config.h" -#endif /* typedef's */ typedef uint8_t bool_t; @@ -87,7 +85,7 @@ typedef enum { * Redefining some of the client.h elements for compilation to go through * when PSA IPC APIs are not implemented. */ -#if (PSA_IPC_IMPLEMENTED == 0) +#ifndef IPC #ifndef PSA_VERSION_NONE #define PSA_VERSION_NONE (0) @@ -113,6 +111,6 @@ typedef struct psa_outvec { size_t len; } psa_outvec; -#endif /* PSA_IPC_IMPLEMENTED */ +#endif /* IPC */ #endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h index e3f70ad7..289dc5d8 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h @@ -18,66 +18,32 @@ #ifndef _PAL_CONFIG_H_ #define _PAL_CONFIG_H_ -/* - * List of macros used by test suite - */ -#if !defined(PSA_IPC_IMPLEMENTED) -#define PSA_IPC_IMPLEMENTED 0 -#endif - -#if !defined(PSA_CRYPTO_IMPLEMENTED) -#define PSA_CRYPTO_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) -#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) -#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) -#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 -#endif +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) -#if (PSA_IPC_IMPLEMENTED == 0) && \ - (PSA_CRYPTO_IMPLEMENTED == 0) && \ - (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) -#error "You must define at least one of these macros to run test suite" -#endif +/* Print verbosity = TEST */ +#define VERBOSE 3 -#if !defined(VERBOSE) -#define VERBOSE 3 /* Print verbosity = TEST */ -#endif - -#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) -#define VAL_NSPE_BUILD 1 -#endif +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD -#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) -#define NONSECURE_TEST_BUILD 1 -#endif +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD -#if !defined(TEST_COMBINE_ARCHIVE) -#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ -#endif +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE -#if !defined(WATCHDOG_AVAILABLE) -#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ -#endif +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE -#if !defined(SP_HEAP_MEM_SUPP) -#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ -#endif +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ /* * Include of PSA defined Header files */ - -#if PSA_IPC_IMPLEMENTED +#ifdef IPC /* psa/client.h: Contains the PSA Client API elements */ #include "psa/client.h" @@ -96,22 +62,22 @@ #include "psa_manifest/pid.h" #endif -#if PSA_CRYPTO_IMPLEMENTED +#ifdef CRYPTO /* psa/crypto.h: Contains the PSA Crypto API elements */ #include "psa/crypto.h" #endif -#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +#ifdef INTERNAL_TRUSTED_STORAGE /* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ #include "psa/internal_trusted_storage.h" #endif -#if PSA_PROTECTED_STORAGE_IMPLEMENTED +#ifdef PROTECTED_STORAGE /* psa/protected_storage.h: Contains the PSA PS API elements */ #include "psa/protected_storage.h" #endif -#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +#ifdef INITIAL_ATTESTATION /* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ #include "psa/initial_attestation.h" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake new file mode 100644 index 00000000..5c5c942e --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json new file mode 100644 index 00000000..e3cec929 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json @@ -0,0 +1,75 @@ +{ + "psa_framework_version": 1.0, + "name": "DRIVER_PARTITION", + "type": "PSA-ROT", + "priority": "NORMAL", + "description": "Implements device services such print, flash read/write,. etc.", + "entry_point": "driver_main", + "stack_size": "0x400", + "services": [{ + "name": "DRIVER_UART_SID", + "sid": "0x0000FC01", + "signal": "DRIVER_UART_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_WATCHDOG_SID", + "sid": "0x0000FC02", + "signal": "DRIVER_WATCHDOG_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_NVMEM_SID", + "sid": "0x0000FC03", + "signal": "DRIVER_NVMEM_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "DRIVER_TEST_SID", + "sid": "0x0000FC04", + "signal": "DRIVER_TEST_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + } + ], + "mmio_regions" : [ + { + "name": "UART_REGION", + "base": "0x40004000", + "size": "0x1000", + "permission": "READ-WRITE" + }, + { + "name": "WATCHDOG_REGION", + "base": "0x40008000", + "size": "0x1000", + "permission": "READ-WRITE" + }, + { + "name": "NVMEM_REGION", + "base": "0x2002F000", + "size": "0x400", + "permission": "READ-WRITE" + }, + { + "name": "DRIVER_PARTITION_MMIO", + "base": "0x200AF040", + "size": "0x20", + "permission": "READ-WRITE" + } + ], + "irqs": [ + { + "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", + "signal": "DRIVER_UART_INTR_SIG", + "line_num": 37 + } + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json new file mode 100644 index 00000000..b93377bd --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json @@ -0,0 +1,37 @@ +{ + "psa_framework_version": 1.0, + "name": "CLIENT_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Client partition executing client test func from SPE", + "entry_point": "client_main", + "stack_size": "0x400", + "services": [{ + "name": "CLIENT_TEST_DISPATCHER_SID", + "sid": "0x0000FA01", + "signal": "CLIENT_TEST_DISPATCHER_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART_SID", + "DRIVER_NVMEM_SID", + "DRIVER_TEST_SID", + "SERVER_TEST_DISPATCHER_SID", + "SERVER_UNSPECIFED_MINOR_V_SID", + "SERVER_STRICT_MINOR_VERSION_SID", + "SERVER_RELAX_MINOR_VERSION_SID", + "SERVER_SECURE_CONNECT_ONLY_SID", + "SERVER_CONNECTION_DROP_SID" + ], + "mmio_regions" : [ + { + "name": "CLIENT_PARTITION_MMIO", + "base": "0x200AF000", + "size": "0x20", + "permission": "READ-WRITE" + } + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json new file mode 100644 index 00000000..146b8fbc --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json @@ -0,0 +1,69 @@ +{ + "psa_framework_version": 1.0, + "name": "SERVER_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Server partition executing server test func", + "entry_point": "server_main", + "stack_size": "0x400", + "heap_size": "0x100", + "services": [{ + "name": "SERVER_TEST_DISPATCHER_SID", + "sid": "0x0000FB01", + "signal": "SERVER_TEST_DISPATCHER_SIG", + "non_secure_clients": true, + "minor_version": 1, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_SECURE_CONNECT_ONLY_SID", + "sid": "0x0000FB02", + "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", + "non_secure_clients": false, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_STRICT_MINOR_VERSION_SID", + "sid": "0x0000FB03", + "signal": "SERVER_STRICT_MINOR_VERSION_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "STRICT" + }, + { + "name": "SERVER_UNSPECIFED_MINOR_V_SID", + "sid": "0x0000FB04", + "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", + "non_secure_clients": true + }, + { + "name": "SERVER_RELAX_MINOR_VERSION_SID", + "sid": "0x0000FB05", + "signal": "SERVER_RELAX_MINOR_VERSION_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_UNEXTERN_SID", + "sid": "0x0000FB06", + "signal": "SERVER_UNEXTERN_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + }, + { + "name": "SERVER_CONNECTION_DROP_SID", + "sid": "0x0000FB07", + "signal": "SERVER_CONNECTION_DROP_SIG", + "non_secure_clients": true, + "minor_version": 2, + "minor_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART_SID", + "DRIVER_NVMEM_SID" + ] +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..578b4cef --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,93 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - minor_version : minor_version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c new file mode 100644 index 00000000..20ddd118 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c @@ -0,0 +1,97 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return (psa_framework_version()); +} + +/** + * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return (psa_version(sid)); +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - minor_version : minor_version of RoT service + * @return - psa_handle_t : return connection handle + * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +{ + return (psa_connect(sid, minor_version)); +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + * Note - Return -1 if PSA IPC is not implemented. + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (psa_call(handle, in_vec, in_len, out_vec, out_len)); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param - handle Handle for the connection. + * @return - void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + psa_close(handle); +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..3f5741e0 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h new file mode 100644 index 00000000..0a63b026 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h @@ -0,0 +1,116 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#include "pal_config.h" +#include "pal_crypto_config.h" + +/* typedef's */ +typedef uint8_t bool_t; +typedef uint32_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum +{ + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#ifndef IPC + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* IPC */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h new file mode 100644 index 00000000..289dc5d8 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -0,0 +1,85 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) + +/* Print verbosity = TEST */ +#define VERBOSE 3 + +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD + +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD + +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE + +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE + +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ + +/* + * Include of PSA defined Header files + */ +#ifdef IPC +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#ifdef CRYPTO +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#ifdef INTERNAL_TRUSTED_STORAGE +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#ifdef PROTECTED_STORAGE +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#ifdef INITIAL_ATTESTATION +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c new file mode 100644 index 00000000..f8f773fb --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c @@ -0,0 +1,305 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_INIT; + + psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, + {&uart_base_addr, sizeof(uart_base_addr)}, + {NULL, 0}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); + if (print_handle < 0) + { + return(PAL_STATUS_ERROR); + } + + status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + return(PAL_STATUS_ERROR); + } + + pal_ipc_close(print_handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + int string_len = 0; + char *p = str; + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + pal_status_t status = PAL_STATUS_SUCCESS; + uart_fn_type_t uart_fn = UART_PRINT; + + while (*p != '\0') + { + string_len++; + p++; + } + + psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, + {str, string_len+1}, + {&data, sizeof(data)}}; + print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); + + if (print_handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + status = PAL_STATUS_ERROR; + } + } + pal_ipc_close(print_handle); + return status; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_INIT_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = time_us; + wd_param.wd_timer_tick_us = timer_tick_us; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_ENABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_DISABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_READ; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; + psa_outvec outvec[1] = {{buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + psa_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_WRITE; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); + if (handle < 0) + { + return PAL_STATUS_ERROR; + } + else + { + status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + pal_ipc_close(handle); + return PAL_STATUS_ERROR; + } + } + pal_ipc_close(handle); + return PAL_STATUS_SUCCESS; +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..2af6fcc7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + pal_uart_cmsdk_init(uart_base_addr); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + pal_cmsdk_print(str, data); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_read(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_write(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..ab11fd16 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,323 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_DES +//#define ARCH_TEST_DES_1KEY +//#define ARCH_TEST_DES_2KEY +//#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +//#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_MD2 +//#define ARCH_TEST_MD4 +//#define ARCH_TEST_MD5 +//#define ARCH_TEST_RIPEMD160 +#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +//#define ARCH_TEST_SHA512_224 +//#define ARCH_TEST_SHA512_256 +//#define ARCH_TEST_SHA3_224 +//#define ARCH_TEST_SHA3_256 +//#define ARCH_TEST_SHA3_384 +//#define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_GMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..f18a7852 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/tools/makefiles/linker/test.sct b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c similarity index 59% rename from api-tests/tools/makefiles/linker/test.sct rename to api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c index 4de849d9..2a28f397 100644 --- a/api-tests/tools/makefiles/linker/test.sct +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_empty_intf.c @@ -1,4 +1,5 @@ -/* Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,20 +15,16 @@ * limitations under the License. **/ -#define TEST_CODE_START 0x0 -#define TEST_INFO_SIZE 0x100 -#define TEST_TEXT_SIZE 0x1A00 -#define TEST_DATA_SIZE 0x1800 +#include +#include "pal_common.h" -LR_CODE TEST_CODE_START +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) { - - ER_CODE TEST_CODE_START (TEST_INFO_SIZE+TEST_TEXT_SIZE+TEST_DATA_SIZE) - { - test_entry_*_nspe.o(.acs_test_info +FIRST) - * (+CODE) - * (+RO) - * (+ZI +RW) - } - + return PAL_STATUS_ERROR; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..3df6aa8d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,340 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + size_t size, *length, salt_length, label_length, ciphertext_size; + uint8_t *buffer, *ciphertext; + const uint8_t *salt, *label, *nonce, *additional_data; + uint8_t *plaintext; + uint32_t status; + const void *extra; + size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; + psa_key_handle_t handle, *key_handle, target_handle; + psa_key_type_t key_type, *key_type_out; + psa_key_policy_t *policy; + psa_key_usage_t usage, *usage_out; + psa_key_lifetime_t *lifetime_out; + psa_algorithm_t alg, *alg_out; + psa_hash_operation_t *hash_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_crypto_generator_t *generator; + + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + status = psa_import_key(handle, key_type, buffer, size); + return status; + case PAL_CRYPTO_EXPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t*)); + size = va_arg(valist, int); + length = (size_t *)va_arg(valist, size_t*); + status = psa_export_key(handle, buffer, size, length); + return status; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t*)); + size = va_arg(valist, int); + length = (size_t *)va_arg(valist, size_t*); + status = psa_export_public_key(handle, buffer, size, length); + return status; + case PAL_CRYPTO_KEY_POLICY_INIT: + policy = va_arg(valist, psa_key_policy_t*); + memset(policy, 0, sizeof(psa_key_policy_t)); + return 0; + case PAL_CRYPTO_KEY_POLICY_SET_USAGE: + policy = va_arg(valist, psa_key_policy_t*); + usage = va_arg(valist, psa_key_usage_t); + alg = va_arg(valist, psa_algorithm_t); + psa_key_policy_set_usage(policy, usage, alg); + return 0; + case PAL_CRYPTO_SET_KEY_POLICY: + handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_set_key_policy(handle, policy); + case PAL_CRYPTO_DESTROY_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + status = psa_destroy_key(handle); + return status; + case PAL_CRYPTO_GET_KEY_INFORMATION: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type_out = va_arg(valist, psa_key_type_t*); + length = (size_t *)va_arg(valist, size_t*); + status = psa_get_key_information(handle, key_type_out, length); + return status; + case PAL_CRYPTO_GET_KEY_POLICY: + handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_get_key_policy(handle, policy); + case PAL_CRYPTO_KEY_POLICY_GET_USAGE: + policy = va_arg(valist, psa_key_policy_t*); + usage_out = va_arg(valist, psa_key_usage_t*); + *usage_out = psa_key_policy_get_usage(policy); + return 0; + case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: + policy = va_arg(valist, psa_key_policy_t*); + alg_out = va_arg(valist, psa_algorithm_t*); + *alg_out = psa_key_policy_get_algorithm(policy); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + handle = (psa_key_handle_t)va_arg(valist, int); + lifetime_out = va_arg(valist, psa_key_lifetime_t*); + return psa_get_key_lifetime(handle, lifetime_out); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); + case PAL_CRYPTO_GENERATE_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + size = va_arg(valist, size_t); + extra = va_arg(valist, const void*); + extra_size = va_arg(valist, size_t); + return psa_generate_key(handle, key_type, size, extra, extra_size); + case PAL_CRYPTO_GENERATOR_READ: + generator = va_arg(valist, psa_crypto_generator_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, int); + return psa_generator_read(generator, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION: + generator = va_arg(valist, psa_crypto_generator_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + label = va_arg(valist, const uint8_t *); + label_length = va_arg(valist, size_t); + capacity = va_arg(valist, size_t); + return psa_key_derivation(generator, handle, alg, salt, salt_length, label, + label_length, capacity); + case PAL_CRYPTO_GET_GENERATOR_CAPACITY: + generator = va_arg(valist, psa_crypto_generator_t*); + gen_cap = va_arg(valist, size_t*); + return psa_get_generator_capacity(generator, gen_cap); + case PAL_CRYPTO_GENERATOR_IMPORT_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + key_type = va_arg(valist, psa_key_type_t); + size = va_arg(valist, size_t); + generator = va_arg(valist, psa_crypto_generator_t*); + return psa_generator_import_key(handle, key_type, size, generator); + case PAL_CRYPTO_GENERATOR_ABORT: + generator = va_arg(valist, psa_crypto_generator_t*); + return psa_generator_abort(generator); + case PAL_CRYPTO_AEAD_ENCRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_ASYMMTERIC_SIGN: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); + case PAL_CRYPTO_KEY_AGREEMENT: + generator = va_arg(valist, psa_crypto_generator_t*); + handle = (psa_key_handle_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_agreement(generator, handle, buffer, size, alg); + case PAL_CRYPTO_ALLOCATE_KEY: + key_handle = (psa_key_handle_t *)va_arg(valist, int*); + return psa_allocate_key(key_handle); + case PAL_CRYPTO_COPY_KEY: + handle = (psa_key_handle_t)va_arg(valist, int); + target_handle = (psa_key_handle_t)va_arg(valist, int); + policy = va_arg(valist, psa_key_policy_t*); + return psa_copy_key(handle, target_handle, policy); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..d1dabfa4 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,76 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_H_ +#define _PAL_CRYPTO_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_GET_KEY_INFO = 0x7, + PAL_CRYPTO_KEY_POLICY_INIT = 0x8, + PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, + PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, + PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, + PAL_CRYPTO_SET_KEY_POLICY = 0xC, + PAL_CRYPTO_GET_KEY_POLICY = 0xD, + PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, + PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, + PAL_CRYPTO_HASH_SETUP = 0x11, + PAL_CRYPTO_HASH_UPDATE = 0x12, + PAL_CRYPTO_HASH_VERIFY = 0x13, + PAL_CRYPTO_HASH_FINISH = 0x14, + PAL_CRYPTO_HASH_ABORT = 0x15, + PAL_CRYPTO_GENERATE_KEY = 0x16, + PAL_CRYPTO_GENERATOR_READ = 0x17, + PAL_CRYPTO_KEY_DERIVATION = 0x18, + PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, + PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, + PAL_CRYPTO_GENERATOR_ABORT = 0x1B, + PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, + PAL_CRYPTO_AEAD_DECRYPT = 0x1D, + PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, + PAL_CRYPTO_MAC_UPDATE = 0x1F, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, + PAL_CRYPTO_MAC_ABORT = 0x23, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, + PAL_CRYPTO_CIPHER_SET_IV = 0x2C, + PAL_CRYPTO_CIPHER_UPDATE = 0x2D, + PAL_CRYPTO_CIPHER_FINISH = 0x2E, + PAL_CRYPTO_CIPHER_ABORT = 0x2F, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, + PAL_CRYPTO_KEY_AGREEMENT = 0x32, + PAL_CRYPTO_ALLOCATE_KEY = 0x33, + PAL_CRYPTO_COPY_KEY = 0x34, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c new file mode 100644 index 00000000..ae2bdba4 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -0,0 +1,346 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +static uint32_t public_key_registered = 0; + +static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, + size_t amount) +{ + return UsefulBuf_Head(buf, amount); +} + +static uint32_t check_hash_sizes(void) +{ + if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) + { + return PAL_ATTEST_HASH_FAIL; + } + + return PAL_ATTEST_SUCCESS; +} + +static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) +{ + psa_ecc_curve_t psa_curve; + + /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ + switch (cose_curve) + { + case P_256: + psa_curve = PSA_ECC_CURVE_SECP256R1; + break; + default: + psa_curve = USHRT_MAX; + } + + return psa_curve; +} + +static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) +{ + psa_algorithm_t status; + + switch (cose_hash_alg_id) + { + case COSE_ALG_SHA256_PROPRIETARY: + status = PSA_ALG_SHA_256; + break; + default: + status = PSA_ALG_MD4; + break; + } + + return status; +} + +static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) +{ + switch (cose_sig_alg_id) + { + case COSE_ALGORITHM_ES256: + return COSE_ALG_SHA256_PROPRIETARY; + default: + return INT32_MAX; + } +} + +int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +{ + int32_t cose_ret = PAL_ATTEST_SUCCESS; + psa_status_t psa_ret; + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + cose_ret = check_hash_sizes(); + if (cose_ret) + { + goto error; + } + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + cose_ret = PAL_ATTEST_HASH_FAIL; + goto error; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + + if (psa_ret == PAL_ATTEST_SUCCESS) + { + psa_hash_ctx->status = PAL_ATTEST_SUCCESS; + cose_ret = PAL_ATTEST_SUCCESS; + } + else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) + { + cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + +error: + return cose_ret; +} + +void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf_c data_to_hash) +{ + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + return; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + + if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) + { + if (data_to_hash.ptr != NULL) + { + psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, + data_to_hash.ptr, + data_to_hash.len); + } + else + { + /* Intentionally do nothing, just computing the size of the token */ + } + } +} + +int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result) +{ + uint32_t cose_ret = PAL_ATTEST_SUCCESS; + psa_status_t psa_ret; + struct pal_cose_psa_crypto_hash *psa_hash_ctx; + + if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) + { + cose_ret = PAL_ATTEST_HASH_FAIL; + goto error; + } + + psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + + if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) + { + psa_ret = psa_hash_finish(&psa_hash_ctx->operation, + buffer_to_hold_result.ptr, + buffer_to_hold_result.len, + &(hash_result->len)); + + if (psa_ret == PAL_ATTEST_SUCCESS) + { + hash_result->ptr = buffer_to_hold_result.ptr; + cose_ret = 0; + } + else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) + { + cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + } + else + { + cose_ret = PAL_ATTEST_HASH_FAIL; + } + +error: + return cose_ret; +} + +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash) +{ + uint32_t status = PAL_ATTEST_SUCCESS; + struct pal_cose_crypto_hash hash_ctx; + + status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (status) + return status; + + pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + + return status; +} + +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload) +{ + uint32_t status; + QCBOREncodeContext cbor_encode_ctx; + struct q_useful_buf_c tbs_first_part; + QCBORError qcbor_result; + struct pal_cose_crypto_hash hash_ctx = {{0}}; + int32_t hash_alg_id; + UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + + /* This builds the CBOR-format to-be-signed bytes */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); + QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ + QCBOREncode_AddSZString(&cbor_encode_ctx, + COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, + protected_headers); + /* sign_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + /* external_aad */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + /* fake payload */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_CloseArray(&cbor_encode_ctx); + + /* Get the result and convert it to struct q_useful_buf_c representation */ + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); + if (qcbor_result) + { + /* Mainly means that the protected_headers were too big + (which should never happen) */ + status = PAL_ATTEST_ERR_SIGN_STRUCT; + goto Done; + } + + /* Start the hashing */ + hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); + + /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() + * will handle it properly + */ + status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + if (status) + goto Done; + + /* Hash the first part of the TBS. Take all but the last two + * bytes. The last two bytes are the fake payload from above. It + * is replaced by the real payload which is hashed next. The fake + * payload is needed so the array count is right. This is one of + * the main things that make it possible to implement with one + * buffer for the whole cose sign1. + */ + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, + tbs_first_part.len - 2)); + + /* Hash the payload */ + pal_cose_crypto_hash_update(&hash_ctx, payload); + + /* Finish the hash and set up to return it */ + status = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); + +Done: + return status; +} + +uint32_t pal_import_attest_key(int32_t alg) +{ + psa_key_type_t attest_key_type; + size_t public_key_size; + psa_status_t status = PSA_SUCCESS; + psa_key_policy_t policy; + psa_ecc_curve_t psa_curve; + psa_key_handle_t public_key_handle; + + /* Mapping of COSE curve type to PSA curve types */ + psa_curve = attest_map_elliptic_curve_type(P_256); + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); + + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return status; + + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return status; + + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + + /* Register public key to crypto service */ + public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + + status = psa_import_key(public_key_handle, + attest_key_type, + (const uint8_t *)&attest_public_key, + public_key_size + 1); + + return status; +} + + +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, + struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature) +{ + uint32_t status = PAL_ATTEST_SUCCESS; + + if (!public_key_registered) + { + status = pal_import_attest_key(cose_algorithm_id); + if (status != PAL_ATTEST_SUCCESS) + return status; + + public_key_registered = 1; + } + +/* + * Enable the verify function when Trusted Firmare - M Supports + + * Verify the signature a hash or short message using a public key. + status = psa_asymmetric_verify(public_key_handle, + cose_algorithm_id, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); +*/ + return status; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h new file mode 100644 index 00000000..2d63ad13 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h @@ -0,0 +1,102 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_attestation_eat.h" + +#define ATTEST_PUBLIC_KEY_SLOT 4 + +typedef struct{ + uint8_t *pubx_key; + uint32_t pubx_key_size; + uint8_t *puby_key; + uint32_t puby_key_size; +} ecc_key_t; + +struct ecc_public_key_t { + const uint8_t a; + uint8_t public_key[]; /* X-coordinate || Y-coordinate */ +}; + +static const struct ecc_public_key_t attest_public_key = { + /* Constant byte */ + 0x04, + /* X-coordinate */ + {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, + /* Y-coordinate */ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, +}; + +struct pal_cose_crypto_hash { + /* Can't put the actual size here without creating dependecy on + * actual hash implementation, so this is a fairly large and + * accommodating size. + */ + uint8_t bytes[128]; +}; + +struct pal_cose_psa_crypto_hash { + psa_status_t status; + psa_hash_operation_t operation; +}; + +static const uint8_t initial_attestation_public_x_key[] = +{ + 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F +}; + +static const uint8_t initial_attestation_public_y_key[] = +{ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 +}; + +/* Initialize the structure with given public key */ +static const ecc_key_t attest_key = { + (uint8_t *)initial_attestation_public_x_key, + sizeof(initial_attestation_public_x_key), + (uint8_t *)initial_attestation_public_y_key, + sizeof(initial_attestation_public_y_key) +}; + +int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf_c data_to_hash); +int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result); +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash); +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload); +uint32_t pal_import_attest_key(int32_t alg); +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature); + + diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c new file mode 100644 index 00000000..178fdc9c --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c @@ -0,0 +1,491 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +uint32_t mandatory_claims = 0; +uint32_t mandaroty_sw_components = 0; +bool_t sw_component_present = 0; + +static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, + struct q_useful_buf buffer_for_cose_key, + struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) +{ + uint32_t return_value; + QCBORError qcbor_result; + QCBOREncodeContext cbor_encode_ctx; + int32_t cose_curve_id = P_256; + struct q_useful_buf_c encoded_key_id; + + /* Get the public key x and y */ + /* Encode it into a COSE_Key structure */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); + QCBOREncode_OpenMap(&cbor_encode_ctx); + QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, + COSE_KEY_COMMON_KTY, + COSE_KEY_TYPE_EC2); + QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_CRV, + cose_curve_id); + QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_X_COORDINATE, + x_cord); + QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, + COSE_KEY_PARAM_Y_COORDINATE, + y_cord); + QCBOREncode_CloseMap(&cbor_encode_ctx); + + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); + if (qcbor_result != QCBOR_SUCCESS) + { + /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ + return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; + goto Done; + } + + /* Finish up and return */ + *cose_key = encoded_key_id; + return_value = PAL_ATTEST_SUCCESS; + +Done: + return return_value; +} + + +static int get_items_in_map(QCBORDecodeContext *decode_context, + struct items_to_get_t *item_list) +{ + int item_index; + QCBORItem item; + struct items_to_get_t *item_ptr = item_list; + + /* initialize the data type of all items in the list */ + while (item_ptr->label != 0) + { + item_ptr->item.uDataType = QCBOR_TYPE_NONE; + item_ptr++; + } + + QCBORDecode_GetNext(decode_context, &item); + if (item.uDataType != QCBOR_TYPE_MAP) + { + return PAL_ATTEST_ERROR; + } + + for (item_index = item.val.uCount; item_index != 0; item_index--) + { + if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + if (item.uLabelType != QCBOR_TYPE_INT64) + { + continue; + } + + item_ptr = item_list; + while (item_ptr->label != 0) + { + if (item.label.int64 == item_ptr->label) + { + item_ptr->item = item; + } + item_ptr++; + } + } + + return PAL_ATTEST_SUCCESS; +} + +static int get_item_in_map(QCBORDecodeContext *decode_context, + int32_t label, + QCBORItem *item) +{ + struct items_to_get_t item_list[2]; + + item_list[0].label = label; + item_list[1].label = 0; + + if (get_items_in_map(decode_context, item_list)) + { + return PAL_ATTEST_ERROR; + } + + if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + *item = item_list[0].item; + + return PAL_ATTEST_SUCCESS; +} + +static int parse_unprotected_headers(QCBORDecodeContext *decode_context, + struct q_useful_buf_c *child, + bool *loop_back) +{ + struct items_to_get_t item_list[3]; + + item_list[0].label = COSE_HEADER_PARAM_KID; + item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; + item_list[2].label = 0; + *loop_back = false; + + if (get_items_in_map(decode_context, item_list)) + { + return PAL_ATTEST_ERROR; + } + + if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) + { + *loop_back = true; + } + + if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) + { + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + *child = item_list[0].item.val.string; + + return PAL_ATTEST_SUCCESS; +} + +static int parse_protected_headers(struct q_useful_buf_c protected_headers, + int32_t *alg_id) +{ + QCBORDecodeContext decode_context; + QCBORItem item; + + QCBORDecode_Init(&decode_context, protected_headers, 0); + + if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) + { + return PAL_ATTEST_ERROR; + } + + if (QCBORDecode_Finish(&decode_context)) + { + return PAL_ATTEST_ERROR; + } + + if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) + { + return PAL_ATTEST_ERROR; + } + + *alg_id = (int32_t)item.val.int64; + + return PAL_ATTEST_SUCCESS; +} + +/** + @brief - This API will verify the claims + @param - decode_context : The buffer containing the challenge + item : context for decoding the data items + completed_challenge : Buffer containing the challenge + @return - error status +**/ +static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, + struct q_useful_buf_c completed_challenge) +{ + int i, count = 0; + int status = PAL_ATTEST_SUCCESS; + + /* Parse each claim and validate their data type */ + while (status == PAL_ATTEST_SUCCESS) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + break; + + mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); + if (item.uLabelType == QCBOR_TYPE_INT64) + { + if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) + { + if (item.uDataType == QCBOR_TYPE_BYTE_STRING) + { + /* Given challenge vs challenge in token */ + if (UsefulBuf_Compare(item.val.string, completed_challenge)) + return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; + } + else + return PAL_ATTEST_TOKEN_NOT_SUPPORTED; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || + item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || + item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || + item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) + { + if (item.uDataType != QCBOR_TYPE_ARRAY) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + sw_component_present = 1; + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + continue; + + count = item.val.uCount; + for (i = 0; i <= count; i++) + { + mandaroty_sw_components |= 1 << item.label.int64; + + if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + if (i < count) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + } + + } + } + else + { + /* ToDo: Add other claim types */ + } + } + + if (status == QCBOR_ERR_HIT_END) + return PAL_ATTEST_SUCCESS; + else + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; +} + +/** + @brief - This API will verify the attestation token + @param - challenge : The buffer containing the challenge + challenge_size : Size of the challenge buffer + token : The buffer containing the attestation token + token_size : Size of the token buffer + @return - error status +**/ +int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, + uint8_t *token, uint32_t token_size) +{ + int32_t status = PAL_ATTEST_SUCCESS; + bool short_circuit; + int32_t cose_algorithm_id; + QCBORItem item; + QCBORDecodeContext decode_context; + struct q_useful_buf_c completed_challenge; + struct q_useful_buf_c completed_token; + struct q_useful_buf_c payload; + struct q_useful_buf_c signature; + struct q_useful_buf_c protected_headers; + struct q_useful_buf_c kid; + struct q_useful_buf_c x_cord; + struct q_useful_buf_c y_cord; + struct q_useful_buf_c cose_key_to_hash; + struct q_useful_buf_c key_hash; + struct q_useful_buf_c token_hash; + USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); + + kid.ptr = buffer_for_encoded_key.ptr; + + memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); + memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); + + /* Update size */ + buf_to_hold_x_coord.len = attest_key.pubx_key_size; + buf_to_hold_y_coord.len = attest_key.puby_key_size; + + x_cord.ptr = buf_to_hold_x_coord.ptr; + x_cord.len = buf_to_hold_x_coord.len; + y_cord.ptr = buf_to_hold_y_coord.ptr; + y_cord.len = buf_to_hold_y_coord.len; + + /* Construct the token buffer for validation */ + completed_token.ptr = token; + completed_token.len = token_size; + + /* Construct the challenge buffer for validation */ + completed_challenge.ptr = challenge; + completed_challenge.len = challenge_size; + +/* + ------------------------- + | CBOR Array Type | + ------------------------- + | Protected Headers | + ------------------------- + | Unprotected Headers | + ------------------------- + | Payload | + ------------------------- + | Signature | + ------------------------- +*/ + + /* Initialize the decorder */ + QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); + + /* Get the Header */ + QCBORDecode_GetNext(&decode_context, &item); + + /* Check the CBOR Array type. Check if the count is 4. + * Only COSE_SIGN1 is supported now. + */ + if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || + !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Get the next headers */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + protected_headers = item.val.string; + + /* Parse the protected headers and check the data type and value*/ + status = parse_protected_headers(protected_headers, &cose_algorithm_id); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Parse the unprotected headers and check the data type and value */ + short_circuit = false; + status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Encode the given public key */ + status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Create hash of the given public key */ + status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); + if (status != PSA_SUCCESS) + return status; + + /* Compare the hash of the public key in token and hash of the given public key */ + if (kid.len != key_hash.len) + { + return PAL_ATTEST_HASH_LENGTH_MISMATCH; + } + + if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) + { + return PAL_ATTEST_HASH_MISMATCH; + } + + /* Get the payload */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + payload = item.val.string; + + /* Get the digital signature */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + signature = item.val.string; + + /* Compute the hash from the token */ + status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, + protected_headers, payload); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Initialize the Decoder and validate the payload format */ + QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); + status = QCBORDecode_GetNext(&decode_context, &item); + if (status != PAL_ATTEST_SUCCESS) + return status; + + if (item.uDataType != QCBOR_TYPE_MAP) + return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Parse the payload and check the data type of each claim */ + status = parse_claims(&decode_context, item, completed_challenge); + if (status != PAL_ATTEST_SUCCESS) + return status; + + if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) + { + if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) + return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) + { + return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + + return PAL_ATTEST_SUCCESS; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h new file mode 100644 index 00000000..8a0c5455 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -0,0 +1,170 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "qcbor.h" +#include "pal_common.h" +#include "psa/crypto.h" + +#define PAL_ATTEST_MIN_ERROR 30 + +/* NIST P-256 also known as secp256r1 */ +#define P_256 1 + +#define COSE_HEADER_PARAM_ALG 1 +#define COSE_HEADER_PARAM_KID 4 + +#define COSE_KEY_COMMON_KTY 1 +#define COSE_KEY_TYPE_EC2 2 +#define COSE_KEY_PARAM_CRV -1 +#define COSE_KEY_PARAM_X_COORDINATE -2 +#define COSE_KEY_PARAM_Y_COORDINATE -3 +#define COSE_ALGORITHM_ES256 -7 +#define COSE_ALG_SHA256_PROPRIETARY -72000 + +/** + * The size of X and Y coordinate in 2 parameter style EC public + * key. Format is as defined in [COSE (RFC 8152)] + * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve + * Cryptography](http://www.secg.org/sec1-v2.pdf). + * + * This size is well-known and documented in public standards. + */ +#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 +#define T_COSE_CRYPTO_SHA256_SIZE 32 + +#define MAX_ENCODED_COSE_KEY_SIZE \ + 1 + /* 1 byte to encode map */ \ + 2 + /* 2 bytes to encode key type */ \ + 2 + /* 2 bytes to encode curve */ \ + 2 * /* the X and Y coordinates at 32 bytes each */ \ + (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + +#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" + +/* Private value. Intentionally not documented for Doxygen. + * This is the size allocated for the encoded protected headers. It + * needs to be big enough for make_protected_header() to succeed. It + * currently sized for one header with an algorithm ID up to 32 bits + * long -- one byte for the wrapping map, one byte for the label, 5 + * bytes for the ID. If this is made accidentially too small, QCBOR will + * only return an error, and not overrun any buffers. + * + * 9 extra bytes are added, rounding it up to 16 total, in case some + * other protected header is to be added. + */ +#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) + +/** + * This is the size of the first part of the CBOR encoded TBS + * bytes. It is around 20 bytes. See create_tbs_hash(). + */ +#define T_COSE_SIZE_OF_TBS \ + 1 + /* For opening the array */ \ + sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ + 2 + /* Overhead for encoding string */ \ + T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ + 3 * ( /* 3 NULL bstrs for fields not used */ \ + 1 /* size of a NULL bstr */ \ + ) + +/* + CBOR Label for proprietary header indicating short-circuit + signing was used. Just a random number in the proprietary + label space */ +#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) + +#define EAT_CBOR_ARM_RANGE_BASE (-75000) +#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) +#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) +#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) +#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) +#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) +#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) +#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) +#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) +#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) +#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) +#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) + +#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 + +#define EAT_CBOR_SW_COMPONENT_TYPE (1u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) +#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) +#define EAT_CBOR_SW_COMPONENT_VERSION (4u) +#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) + +#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) + +#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) + +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) + +#define NULL_USEFUL_BUF_C NULLUsefulBufC + +enum attestation_error_code { + PAL_ATTEST_SUCCESS = 0, + PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, + PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + PAL_ATTEST_TOKEN_NOT_SUPPORTED, + PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + PAL_ATTEST_HASH_LENGTH_MISMATCH, + PAL_ATTEST_HASH_MISMATCH, + PAL_ATTEST_HASH_FAIL, + PAL_ATTEST_HASH_UNSUPPORTED, + PAL_ATTEST_HASH_BUFFER_SIZE, + PAL_ATTEST_ERR_PROTECTED_HEADERS, + PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERROR, +}; + +struct items_to_get_t { + int64_t label; + QCBORItem item; +}; + +int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, + uint8_t *token, uint32_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c new file mode 100644 index 00000000..faf3f493 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c new file mode 100644 index 00000000..2d99f74d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_attestation_intf.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + uint8_t *challenge, *token; + uint32_t challenge_size, *token_size, verify_token_size; + + switch (type) + { + case PAL_INITIAL_ATTEST_GET_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, uint32_t); + token = va_arg(valist, uint8_t*); + token_size = va_arg(valist, uint32_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: + challenge_size = va_arg(valist, uint32_t); + token_size = va_arg(valist, uint32_t*); + return psa_initial_attest_get_token_size(challenge_size, token_size); + case PAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, uint32_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, uint32_t); + return pal_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h new file mode 100644 index 00000000..12f6ee94 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INITIAL_ATTESTATION_H_ +#define _PAL_INITIAL_ATTESTATION_H_ + +#include "pal_attestation_crypto.h" + +enum attestation_function_code { + PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, + PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, + PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, +}; + +int32_t pal_attestation_function(int type, va_list valist); +#endif /* _PAL_INITIAL_ATTESTATION_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..133cfa9d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..4f04ab01 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,60 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_its_uid_t uid; + uint32_t data_length, offset; + const void *p_write_data; + void *p_read_data; + psa_its_create_flags_t its_create_flags; + struct psa_its_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_its_uid_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_its_create_flags_t); + return psa_its_set(uid, data_length, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_its_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + return psa_its_get(uid, offset, data_length, p_read_data); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_its_uid_t); + its_p_info = va_arg(valist, struct psa_its_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_its_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..6db6aac6 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..ee9b13da --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..a4241533 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,75 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_ps_uid_t uid; + uint32_t data_length, size, offset; + const void *p_write_data; + void *p_read_data; + psa_ps_create_flags_t ps_create_flags; + struct psa_ps_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_ps_uid_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_ps_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + return psa_ps_get(uid, offset, data_length, p_read_data); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_ps_uid_t); + ps_p_info = va_arg(valist, struct psa_ps_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_ps_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_ps_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_ps_uid_t); + offset = va_arg(valist, uint32_t); + data_length = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_length, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..a338cdf7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c new file mode 100644 index 00000000..fd307839 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c @@ -0,0 +1,132 @@ + /** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#include "pal_driver_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - void +**/ +void pal_uart_init(uint32_t uart_base_addr) +{ + pal_uart_cmsdk_init(uart_base_addr); +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier +**/ + +void pal_print(char *str, int32_t data) +{ + pal_cmsdk_print(str,data); + +} + + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_write(base, offset, buffer, size); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_read(base, offset, buffer, size); +} + + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); + +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Checks whether hardware watchdog timer is enabled + @param - base_addr : Base address of the watchdog module + @return - Enabled : 1, Disabled : 0 +**/ +int pal_wd_timer_is_enabled(addr_t base_addr) +{ + return (pal_wd_cmsdk_is_enabled(base_addr)); +} + +/** + @brief - Trigger interrupt for irq signal assigned to driver partition + before return to caller. + @param - void + @return - void +**/ +void pal_generate_interrupt(void) +{ + pal_uart_cmsdk_generate_irq(); +} + +/** + @brief - Disable interrupt that was generated using pal_generate_interrupt API. + @param - void + @return - void +**/ +void pal_disable_interrupt(void) +{ + pal_uart_cmsdk_disable_irq(); +} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h new file mode 100644 index 00000000..cef34ca8 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h @@ -0,0 +1,35 @@ + /** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#ifndef _PAL_DRIVER_INTF_H_ +#define _PAL_DRIVER_INTF_H_ + +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +void pal_uart_init(uint32_t uart_base_addr); +void pal_print(char *str, int32_t data); +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); +int pal_wd_timer_enable(addr_t base_addr); +int pal_wd_timer_disable(addr_t base_addr); +int pal_wd_timer_is_enabled(addr_t base_addr); +void pal_generate_interrupt(void); +void pal_disable_interrupt(void); +#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg new file mode 100644 index 00000000..a8f3700e --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg @@ -0,0 +1,57 @@ +///** @file +// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +uart.num=1; +uart.0.base = 0x41303000; // UART0_NS +uart.0.size = 0xFFF; +uart.0.intr_id = 0xFF; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +watchdog.num = 1; +watchdog.0.base = 0x40081000; +watchdog.0.size = 0xFFF; +watchdog.0.intr_id = 0xFF; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) +watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 + +// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH +nvmem.num =1; +nvmem.0.start = 0x20018000; +nvmem.0.end = 0x200183FF; +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x28110000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file. +dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + +// Level of Isolation +dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake new file mode 100644 index 00000000..5c5c942e --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/Makefile b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/Makefile deleted file mode 100644 index aa7e10b7..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=0 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=1 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=1 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=1 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/pl011 \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/pl011: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_common.h index 3ebe1e10..0a63b026 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_common.h @@ -24,10 +24,8 @@ #include #include -#ifndef TARGET_CFG_BUILD #include "pal_config.h" #include "pal_crypto_config.h" -#endif /* typedef's */ typedef uint8_t bool_t; @@ -87,7 +85,7 @@ typedef enum { * Redefining some of the client.h elements for compilation to go through * when PSA IPC APIs are not implemented. */ -#if (PSA_IPC_IMPLEMENTED == 0) +#ifndef IPC #ifndef PSA_VERSION_NONE #define PSA_VERSION_NONE (0) @@ -113,6 +111,6 @@ typedef struct psa_outvec { size_t len; } psa_outvec; -#endif /* PSA_IPC_IMPLEMENTED */ +#endif /* IPC */ #endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h index e3f70ad7..289dc5d8 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h @@ -18,66 +18,32 @@ #ifndef _PAL_CONFIG_H_ #define _PAL_CONFIG_H_ -/* - * List of macros used by test suite - */ -#if !defined(PSA_IPC_IMPLEMENTED) -#define PSA_IPC_IMPLEMENTED 0 -#endif - -#if !defined(PSA_CRYPTO_IMPLEMENTED) -#define PSA_CRYPTO_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) -#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) -#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) -#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 -#endif +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) -#if (PSA_IPC_IMPLEMENTED == 0) && \ - (PSA_CRYPTO_IMPLEMENTED == 0) && \ - (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) -#error "You must define at least one of these macros to run test suite" -#endif +/* Print verbosity = TEST */ +#define VERBOSE 3 -#if !defined(VERBOSE) -#define VERBOSE 3 /* Print verbosity = TEST */ -#endif - -#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) -#define VAL_NSPE_BUILD 1 -#endif +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD -#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) -#define NONSECURE_TEST_BUILD 1 -#endif +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD -#if !defined(TEST_COMBINE_ARCHIVE) -#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ -#endif +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE -#if !defined(WATCHDOG_AVAILABLE) -#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ -#endif +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE -#if !defined(SP_HEAP_MEM_SUPP) -#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ -#endif +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ /* * Include of PSA defined Header files */ - -#if PSA_IPC_IMPLEMENTED +#ifdef IPC /* psa/client.h: Contains the PSA Client API elements */ #include "psa/client.h" @@ -96,22 +62,22 @@ #include "psa_manifest/pid.h" #endif -#if PSA_CRYPTO_IMPLEMENTED +#ifdef CRYPTO /* psa/crypto.h: Contains the PSA Crypto API elements */ #include "psa/crypto.h" #endif -#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +#ifdef INTERNAL_TRUSTED_STORAGE /* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ #include "psa/internal_trusted_storage.h" #endif -#if PSA_PROTECTED_STORAGE_IMPLEMENTED +#ifdef PROTECTED_STORAGE /* psa/protected_storage.h: Contains the PSA PS API elements */ #include "psa/protected_storage.h" #endif -#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +#ifdef INITIAL_ATTESTATION /* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ #include "psa/initial_attestation.h" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake new file mode 100644 index 00000000..7c6628a8 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011 + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/Makefile b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/Makefile deleted file mode 100644 index aa7e10b7..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=0 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=1 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=1 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=1 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/pl011 \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/pl011: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_common.h index 3ebe1e10..0a63b026 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_common.h @@ -24,10 +24,8 @@ #include #include -#ifndef TARGET_CFG_BUILD #include "pal_config.h" #include "pal_crypto_config.h" -#endif /* typedef's */ typedef uint8_t bool_t; @@ -87,7 +85,7 @@ typedef enum { * Redefining some of the client.h elements for compilation to go through * when PSA IPC APIs are not implemented. */ -#if (PSA_IPC_IMPLEMENTED == 0) +#ifndef IPC #ifndef PSA_VERSION_NONE #define PSA_VERSION_NONE (0) @@ -113,6 +111,6 @@ typedef struct psa_outvec { size_t len; } psa_outvec; -#endif /* PSA_IPC_IMPLEMENTED */ +#endif /* IPC */ #endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h index e3f70ad7..289dc5d8 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h @@ -18,66 +18,32 @@ #ifndef _PAL_CONFIG_H_ #define _PAL_CONFIG_H_ -/* - * List of macros used by test suite - */ -#if !defined(PSA_IPC_IMPLEMENTED) -#define PSA_IPC_IMPLEMENTED 0 -#endif - -#if !defined(PSA_CRYPTO_IMPLEMENTED) -#define PSA_CRYPTO_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) -#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) -#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) -#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 -#endif +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) -#if (PSA_IPC_IMPLEMENTED == 0) && \ - (PSA_CRYPTO_IMPLEMENTED == 0) && \ - (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) -#error "You must define at least one of these macros to run test suite" -#endif +/* Print verbosity = TEST */ +#define VERBOSE 3 -#if !defined(VERBOSE) -#define VERBOSE 3 /* Print verbosity = TEST */ -#endif - -#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) -#define VAL_NSPE_BUILD 1 -#endif +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD -#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) -#define NONSECURE_TEST_BUILD 1 -#endif +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD -#if !defined(TEST_COMBINE_ARCHIVE) -#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ -#endif +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE -#if !defined(WATCHDOG_AVAILABLE) -#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ -#endif +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE -#if !defined(SP_HEAP_MEM_SUPP) -#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ -#endif +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ /* * Include of PSA defined Header files */ - -#if PSA_IPC_IMPLEMENTED +#ifdef IPC /* psa/client.h: Contains the PSA Client API elements */ #include "psa/client.h" @@ -96,22 +62,22 @@ #include "psa_manifest/pid.h" #endif -#if PSA_CRYPTO_IMPLEMENTED +#ifdef CRYPTO /* psa/crypto.h: Contains the PSA Crypto API elements */ #include "psa/crypto.h" #endif -#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +#ifdef INTERNAL_TRUSTED_STORAGE /* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ #include "psa/internal_trusted_storage.h" #endif -#if PSA_PROTECTED_STORAGE_IMPLEMENTED +#ifdef PROTECTED_STORAGE /* psa/protected_storage.h: Contains the PSA PS API elements */ #include "psa/protected_storage.h" #endif -#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +#ifdef INITIAL_ATTESTATION /* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ #include "psa/initial_attestation.h" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake new file mode 100644 index 00000000..7c6628a8 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011 + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/Makefile b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/Makefile deleted file mode 100644 index 894cec4d..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=1 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=0 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=0 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/cmsdk \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/cmsdk: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h index 3ebe1e10..0a63b026 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h @@ -24,10 +24,8 @@ #include #include -#ifndef TARGET_CFG_BUILD #include "pal_config.h" #include "pal_crypto_config.h" -#endif /* typedef's */ typedef uint8_t bool_t; @@ -87,7 +85,7 @@ typedef enum { * Redefining some of the client.h elements for compilation to go through * when PSA IPC APIs are not implemented. */ -#if (PSA_IPC_IMPLEMENTED == 0) +#ifndef IPC #ifndef PSA_VERSION_NONE #define PSA_VERSION_NONE (0) @@ -113,6 +111,6 @@ typedef struct psa_outvec { size_t len; } psa_outvec; -#endif /* PSA_IPC_IMPLEMENTED */ +#endif /* IPC */ #endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index e3f70ad7..289dc5d8 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -18,66 +18,32 @@ #ifndef _PAL_CONFIG_H_ #define _PAL_CONFIG_H_ -/* - * List of macros used by test suite - */ -#if !defined(PSA_IPC_IMPLEMENTED) -#define PSA_IPC_IMPLEMENTED 0 -#endif - -#if !defined(PSA_CRYPTO_IMPLEMENTED) -#define PSA_CRYPTO_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED) -#define PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_PROTECTED_STORAGE_IMPLEMENTED) -#define PSA_PROTECTED_STORAGE_IMPLEMENTED 0 -#endif - -#if !defined(PSA_INITIAL_ATTESTATION_IMPLEMENTED) -#define PSA_INITIAL_ATTESTATION_IMPLEMENTED 0 -#endif +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) -#if (PSA_IPC_IMPLEMENTED == 0) && \ - (PSA_CRYPTO_IMPLEMENTED == 0) && \ - (PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_PROTECTED_STORAGE_IMPLEMENTED == 0) && \ - (PSA_INITIAL_ATTESTATION_IMPLEMENTED == 0) -#error "You must define at least one of these macros to run test suite" -#endif +/* Print verbosity = TEST */ +#define VERBOSE 3 -#if !defined(VERBOSE) -#define VERBOSE 3 /* Print verbosity = TEST */ -#endif - -#if (!defined(VAL_NSPE_BUILD) && !defined(SPE_BUILD)) -#define VAL_NSPE_BUILD 1 -#endif +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD -#if (!defined(NONSECURE_TEST_BUILD) && !defined(SPE_BUILD)) -#define NONSECURE_TEST_BUILD 1 -#endif +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD -#if !defined(TEST_COMBINE_ARCHIVE) -#define TEST_COMBINE_ARCHIVE 0 /* Combine test archive or binary? */ -#endif +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE -#if !defined(WATCHDOG_AVAILABLE) -#define WATCHDOG_AVAILABLE 0 /* If zero, skip watchdog programming */ -#endif +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE -#if !defined(SP_HEAP_MEM_SUPP) -#define SP_HEAP_MEM_SUPP 0 /* Are Dynamic funcs available to secure partition? */ -#endif +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ /* * Include of PSA defined Header files */ - -#if PSA_IPC_IMPLEMENTED +#ifdef IPC /* psa/client.h: Contains the PSA Client API elements */ #include "psa/client.h" @@ -96,22 +62,22 @@ #include "psa_manifest/pid.h" #endif -#if PSA_CRYPTO_IMPLEMENTED +#ifdef CRYPTO /* psa/crypto.h: Contains the PSA Crypto API elements */ #include "psa/crypto.h" #endif -#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED +#ifdef INTERNAL_TRUSTED_STORAGE /* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ #include "psa/internal_trusted_storage.h" #endif -#if PSA_PROTECTED_STORAGE_IMPLEMENTED +#ifdef PROTECTED_STORAGE /* psa/protected_storage.h: Contains the PSA PS API elements */ #include "psa/protected_storage.h" #endif -#if PSA_INITIAL_ATTESTATION_IMPLEMENTED +#ifdef INITIAL_ATTESTATION /* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ #include "psa/initial_attestation.h" #endif diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake new file mode 100644 index 00000000..5c5c942e --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake @@ -0,0 +1,106 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/ff/ipc/test_i047/source.mk b/api-tests/tools/cmake/common/CMakeSettings.cmake similarity index 74% rename from api-tests/ff/ipc/test_i047/source.mk rename to api-tests/tools/cmake/common/CMakeSettings.cmake index 5bb5a69d..eb812a9f 100644 --- a/api-tests/ff/ipc/test_i047/source.mk +++ b/api-tests/tools/cmake/common/CMakeSettings.cmake @@ -1,3 +1,4 @@ +#/** @file # * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * @@ -14,12 +15,10 @@ # * limitations under the License. #**/ -CC_SOURCE = test_entry_i047.c test_i047.c -CC_OPTIONS = -AS_SOURCE = -AS_OPTIONS = +#Stop built in CMakeDetermine.cmake scripts to run. +set (CMAKE_C_COMPILER_ID_RUN 1) +#Stop cmake run compiler tests. +set (CMAKE_C_COMPILER_FORCED true) -CC_SOURCE_SPE = test_i047.c test_supp_i047.c -CC_OPTIONS_SPE = -AS_SOURCE_SPE = -AS_OPTIONS_SPE = \ No newline at end of file +set(CMAKE_STATIC_LIBRARY_PREFIX "") +set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") diff --git a/api-tests/tools/cmake/common/Utils.cmake b/api-tests/tools/cmake/common/Utils.cmake new file mode 100644 index 00000000..67517638 --- /dev/null +++ b/api-tests/tools/cmake/common/Utils.cmake @@ -0,0 +1,37 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Function to CMake arguments +function(_check_arguments) + foreach(_ARG IN LISTS ARGV) + if(NOT DEFINED ${_ARG}) + message(FATAL_ERROR "[PSA] : ${_ARG} is not passed! Please specify -D${_ARG}=<...> to CMake.") + endif() + endforeach() +endfunction(_check_arguments) + +# Function to get all the folders inside given parent directory +function(_get_sub_dir_list result parent_dir) + file(GLOB parent_dir_items RELATIVE ${parent_dir} ${parent_dir}/*) + set(dir_list "") + foreach(item ${parent_dir_items}) + if(IS_DIRECTORY ${parent_dir}/${item}) + list(APPEND dir_list ${item}) + endif() + endforeach() + set(${result} ${dir_list} PARENT_SCOPE) +endfunction(_get_sub_dir_list) diff --git a/api-tests/tools/cmake/compiler/ARMCLANG.cmake b/api-tests/tools/cmake/compiler/ARMCLANG.cmake new file mode 100644 index 00000000..d96dc9d4 --- /dev/null +++ b/api-tests/tools/cmake/compiler/ARMCLANG.cmake @@ -0,0 +1,63 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +set(CMAKE_SYSTEM_NAME Generic) +set(CMKE_SYSTEM_PROCESSOR ARM) + +set(_C_TOOLCHAIN_NAME armclang) + +if(WIN32) + if (NOT DEFINED ARMCLANG_PATH) + set(ARMCLANG_PATH "C:" CACHE PATH "Install directory for ARMCLANG Compiler") + endif() +else(WIN32) + if (NOT DEFINED ARMCLANG_PATH) + set(ARMCLANG_PATH "/" CACHE PATH "Install directory for ARMCLANG Compiler") + endif() +endif(WIN32) + +find_program( + _C_TOOLCHAIN_PATH + ${_C_TOOLCHAIN_NAME} + PATHS env PATH + HINTS ${ARMCLANG_PATH} + HINTS bin +) + +if(_C_TOOLCHAIN_PATH STREQUAL "_C_TOOLCHAIN_PATH-NOTFOUND") + message(FATAL_ERROR "[PSA] : Couldn't find ${_C_TOOLCHAIN_NAME}." + " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set ARMCLANG_PATH set properly.") +endif() + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +foreach(_LNG IN ITEMS "C" "ASM") + set(CMAKE_${_LNG}_COMPILER ${_C_TOOLCHAIN_PATH}) + message(STATUS "[PSA] : ${_LNG} compiler used '${CMAKE_${_LNG}_COMPILER}'") +endforeach() + +if(${CPU_ARCH} STREQUAL armv7m) + set(TARGET_SWITCH "-march=armv7-m") +elseif(${CPU_ARCH} STREQUAL armv8m_ml) + set(TARGET_SWITCH "-march=armv8-m.main -mcmse") +elseif(${CPU_ARCH} STREQUAL armv8m_bl) + set(TARGET_SWITCH "-march=armv8-m.base -mcmse") +endif() + +set(CMAKE_C_FLAGS "--target=arm-arm-none-eabi ${TARGET_SWITCH} -Wall -Werror -fshort-enums -fshort-wchar -funsigned-char -fdata-sections -ffunction-sections -mno-unaligned-access -mfpu=none") +set(CMAKE_ASM_FLAGS "${TARGET_SWITCH} -mthumb") +set(CMAKE_EXE_LINKER_FLAGS "--strict --map --symbols --xref --info=summarysizes,sizes,totals,unused,veneers --diag_warning=L6204") diff --git a/api-tests/tools/cmake/compiler/GNUARM.cmake b/api-tests/tools/cmake/compiler/GNUARM.cmake new file mode 100644 index 00000000..cede575d --- /dev/null +++ b/api-tests/tools/cmake/compiler/GNUARM.cmake @@ -0,0 +1,63 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +set(CMAKE_SYSTEM_NAME Generic) +set(CMKE_SYSTEM_PROCESSOR ARM) + +set(_C_TOOLCHAIN_NAME arm-none-eabi-gcc) + +if(WIN32) + if (NOT DEFINED GNUARM_PATH) + set(GNUARM_PATH "C:" CACHE PATH "Install directory for GNUARM Compiler") + endif() +else(WIN32) + if (NOT DEFINED GNUARM_PATH) + set(GNUARM_PATH "/" CACHE PATH "Install directory for GNUARM Compiler") + endif() +endif(WIN32) + +find_program( + _C_TOOLCHAIN_PATH + ${_C_TOOLCHAIN_NAME} + PATHS env PATH + HINTS ${GNUARM_PATH} + HINTS bin +) + +if(_C_TOOLCHAIN_PATH STREQUAL "_C_TOOLCHAIN_PATH-NOTFOUND") + message(FATAL_ERROR "[PSA] : Couldn't find ${_C_TOOLCHAIN_NAME}." + " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set GNUARM_PATH set properly.") +endif() + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +foreach(_LNG IN ITEMS "C" "ASM") + set(CMAKE_${_LNG}_COMPILER ${_C_TOOLCHAIN_PATH}) + message(STATUS "[PSA] : ${_LNG} compiler used '${CMAKE_${_LNG}_COMPILER}'") +endforeach() + +if(${CPU_ARCH} STREQUAL armv7m) + set(TARGET_SWITCH "-march=armv7-m") +elseif(${CPU_ARCH} STREQUAL armv8m_ml) + set(TARGET_SWITCH "-march=armv8-m.main -mcmse") +elseif(${CPU_ARCH} STREQUAL armv8m_bl) + set(TARGET_SWITCH "-march=armv8-m.base -mcmse") +endif() + +set(CMAKE_C_FLAGS "${TARGET_SWITCH} -Wall -Werror -fdata-sections -ffunction-sections -mno-unaligned-access") +set(CMAKE_ASM_FLAGS "${TARGET_SWITCH} -mthumb") +set(CMAKE_EXE_LINKER_FLAGS "-Xlinker --fatal-warnings -Xlinker --gc-sections -z max-page-size=0x400 -lgcc -lc -lnosys") diff --git a/api-tests/tools/cmake/compiler/HOST_GCC.cmake b/api-tests/tools/cmake/compiler/HOST_GCC.cmake new file mode 100644 index 00000000..e7be183f --- /dev/null +++ b/api-tests/tools/cmake/compiler/HOST_GCC.cmake @@ -0,0 +1,51 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +set(CMAKE_SYSTEM_NAME Generic) +set(CMKE_SYSTEM_PROCESSOR x86_64) + +set(_C_TOOLCHAIN_NAME gcc) + +if(WIN32) + if (NOT DEFINED HOST_GCC_PATH) + set(HOST_GCC_PATH "C:" CACHE PATH "Install directory for Host GCC Compiler") + endif() +else(WIN32) + if (NOT DEFINED HOST_GCC_PATH) + set(HOST_GCC_PATH "/" CACHE PATH "Install directory for Host GCC Compiler") + endif() +endif(WIN32) + +find_program( + _C_TOOLCHAIN_PATH + ${_C_TOOLCHAIN_NAME} + PATHS env PATH + HINTS ${HOST_GCC_PATH} + HINTS bin +) + +if(_C_TOOLCHAIN_PATH STREQUAL "_C_TOOLCHAIN_PATH-NOTFOUND") + message(FATAL_ERROR "[PSA] : Couldn't find ${_C_TOOLCHAIN_NAME}." + " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set GNUARM_PATH set properly.") +endif() + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +foreach(_LNG IN ITEMS "C" "ASM") + set(CMAKE_${_LNG}_COMPILER ${_C_TOOLCHAIN_PATH}) + message(STATUS "[PSA] : ${_LNG} compiler used '${CMAKE_${_LNG}_COMPILER}'") +endforeach() diff --git a/api-tests/tools/makefiles/Makefile b/api-tests/tools/makefiles/Makefile deleted file mode 100644 index 1aa790b1..00000000 --- a/api-tests/tools/makefiles/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -ifeq (${SUITE}, ipc) -SUITE_DIR = ff/$(SUITE) -else -SUITE_DIR = dev_apis/$(SUITE) -endif - -export SUITE_IN= $(SOURCE)/$(SUITE_DIR) -export SUITE_OUT= $(BUILD)/$(SUITE_DIR) - -include $(SOURCE)/tools/makefiles/toolchain.mk - - -all: clean target_cfg gen_linker process_testsuite.db build - -#Generate target files from User provided data base -target_cfg: - @echo "" - @echo "Processing target configuration..." - mkdir -p $(BUILD)/platform/${TARGET}/ - @if [ ! -f "$(SOURCE)/platform/targets/$(TARGET)/target.cfg" ]; then { echo "Error: Target Not Found!!!"; exit 1; } fi - python $(SOURCE)/tools/scripts/targetConfigGen.py ${TARGET} $(SOURCE)/val/common/val_target.h \ - $(SOURCE)/platform/targets/${TARGET}/target.cfg $(BUILD)/platform/${TARGET}/targetConfigGen.c \ - $(BUILD)/platform/${TARGET}/target_database.h target_database "" - gcc -D__addr_t_defined -DTARGET_CFG_BUILD $(BUILD)/platform/${TARGET}/targetConfigGen.c -o $(BUILD)/platform/${TARGET}/targetConfigGen \ - -I$(SOURCE)/val/nspe -I$(SOURCE)/val/common -I$(SOURCE)/platform/targets/${TARGET}/nspe/common - ./$(BUILD)/platform/${TARGET}/targetConfigGen - -#Read target.cfg and update the addresses in linker script -gen_linker: - @echo "" - @echo "Updating linker files..." - mkdir -p $(SUITE_OUT)/ $(BUILD)/val/ $(BUILD)/partition/ ; - perl $(SOURCE)/tools/scripts/process_test_linker_file.pl $(SOURCE) $(SUITE_OUT) ${TARGET} $(TOOLCHAIN) - -process_testsuite.db: - @echo "" - @echo "Creating testlist..." -ifeq (${INCLUDE_PANIC_TESTS}, 1) - $(eval TEST_LIST := $(shell grep -o "^test....." $(SUITE_IN)/testsuite.db > $(SUITE_OUT)/.testlist.txt ; dos2unix $(SUITE_OUT)/.testlist.txt ; cat $(SUITE_OUT)/.testlist.txt)) -else - $(eval TEST_LIST := $(shell grep -v "^test....., panic_test" $(SUITE_IN)/testsuite.db | grep "^test" > $(SUITE_OUT)/.testlist.txt ; dos2unix $(SUITE_OUT)/.testlist.txt ; cat $(SUITE_OUT)/.testlist.txt)) -endif - perl $(SOURCE)/tools/scripts/gen_tests_list.pl $(BUILD) $(SUITE_OUT)/.testlist.txt $(SUITE) - - -#Build framework archives and test_combine.elf -build: build_pal val_nspe.a test_combine.elf partition_build output_list - -build_pal: - @echo "" - @echo "----------pal build start-------------" - make -f $(SOURCE)/platform/targets/$(TARGET)/Makefile - @echo "----------pal build complete-------------" - -val_nspe.a: - @echo "" - @echo "----------val build start-------------" - make -f $(SOURCE)/tools/makefiles/valbuild.mk - @echo "----------val build complete-------------" - -test_combine.elf: test.elf - @echo "" -ifeq (${TEST_COMBINE_ARCHIVE}, 1) - @echo "----------Combine NS test objects into archive start-------------" - $(AR) $(AR_OPTIONS) $(SUITE_OUT)/test_combine.a $(SUITE_OUT)/test*/test_*_nspe.o - @echo "----------Combine NS test objects into archive complete-------------" -else - @echo "----------Combine NS test elfs into binary start-------------" - perl $(SOURCE)/tools/scripts/test_elf_combine.pl $(SUITE_OUT)/.testlist.txt - hexdump -v -e ' 1/4 "%08X" "\n"' $(SUITE_OUT)/test_elf_combine.bin > $(SUITE_OUT)/test_elf_combine.hex - @echo "----------Combine NS test elfs into binary complete-------------" -endif - -test.elf: - @echo "" - @echo "----------test build start-------------" - @$(foreach TEST,$(TEST_LIST), make -f $(SOURCE)/tools/makefiles/testbuild.mk TEST=$(TEST) ;) - @echo "----------test build complete-------------" - -partition_build: -ifeq (${PSA_IPC_IMPLEMENTED}, 1) - @echo "" - @echo "----------test partition build start-------------" - make -f $(SOURCE)/tools/makefiles/spbuild.mk - @echo "----------test partition build complete-------------" -endif - -output_list: - @echo "" - @echo "Below are the list of output binaries/libraries. Integrate these" - @echo "to your software stack to execute test suite." - @echo "" - @echo "a) NSPE files:" - @echo " $(BUILD)/val/val_nspe.a" - @echo " $(BUILD)/platform/pal_nspe.a" -ifeq (${TEST_COMBINE_ARCHIVE}, 1) - @echo " $(SUITE_OUT)/test_combine.a" -else - @echo " $(SUITE_OUT)/test_elf_combine.bin" -endif - @echo "" -ifeq (${PSA_IPC_IMPLEMENTED}, 1) - @echo "b) SPE files" - @echo " $(BUILD)/partition/driver_partition.a" -endif -ifeq (${SUITE}, ipc) - @echo " $(BUILD)/partition/client_partition.a" - @echo " $(BUILD)/partition/server_partition.a" -endif - @echo "" - -clean: - @echo "" - @echo "Cleaning the build directory..." - rm -rf $(BUILD)/* diff --git a/api-tests/tools/makefiles/linker/test.linker b/api-tests/tools/makefiles/linker/test.linker deleted file mode 100644 index 69fc4d15..00000000 --- a/api-tests/tools/makefiles/linker/test.linker +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -ENTRY(TEST_START) - -TEST_START = 0x2004F000; - -MEMORY -{ - TEST_INFO (R) : ORIGIN = TEST_START, LENGTH = 0x100 - TEST_TEXT (RX) : ORIGIN = TEST_START +0x100, LENGTH = 0x1A00 - TEST_DATA (RW) : ORIGIN = TEST_START +0x1B00, LENGTH = 0x1800 -} - -SECTIONS -{ - .acs_test_info : - { - KEEP(*(.acs_test_info)) - } > TEST_INFO - - .text : - { - *(.text) - *(.text*) - *(.rodata) - *(.rodata*) - } > TEST_TEXT - - .data : - { - *(.data) - *(.data*) - } > TEST_DATA - - .bss : - { - *(.bss) - *(.bss.*) - *(COMMON) - } > TEST_DATA -} diff --git a/api-tests/tools/makefiles/spbuild.mk b/api-tests/tools/makefiles/spbuild.mk deleted file mode 100644 index 1479e744..00000000 --- a/api-tests/tools/makefiles/spbuild.mk +++ /dev/null @@ -1,74 +0,0 @@ -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -INCLUDE= -I$(SOURCE)/val/common/ \ - -I$(SOURCE)/val/nspe/ \ - -I$(SOURCE)/val/spe/ \ - -I$(SOURCE)/ \ - -I$(SOURCE)/ff/partition/common/ \ - -I$(SOURCE)/ff/partition/ipc/ \ - -I$(BUILD)/partition/ \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe - -VPATH=$(SOURCE)/val/common/:\ - $(SOURCE)/val/nspe/:\ - $(SOURCE)/val/spe/:\ - $(SOURCE)/ff/partition/common/: \ - $(SOURCE)/ff/partition/ipc/ - - -CC_SOURCE += driver_partition.c val_driver_service_apis.c - -ifeq (${SUITE}, ipc) -CC_SOURCE += client_partition.c server_partition.c -all: mkdir compile_c compile_asm driver_partition.a client_partition.a server_partition.a -else -all: mkdir compile_c compile_asm driver_partition.a -endif - - -mkdir: - @mkdir -p $(BUILD)/partition/ - -compile_c: $(CC_SOURCE:%.c=$(BUILD)/partition/%.o) -compile_asm: $(AS_SOURCE:%.s=$(BUILD)/partition/%.o) - -$(BUILD)/partition/%.o : %.c - $(CC) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/partition/%.o : %.s - $(AS) -o $@ $< - -client_partition.a: -ifeq ($(wildcard $(SUITE_OUT)/test_i*/.*),) - $(AR) $(AR_OPTIONS) $(BUILD)/partition/client_partition.a $(BUILD)/partition/client_partition.o $(SUITE_OUT)/test*/test_l*_spe.o -else ifeq ($(wildcard $(SUITE_OUT)/test_l*/.*),) - $(AR) $(AR_OPTIONS) $(BUILD)/partition/client_partition.a $(BUILD)/partition/client_partition.o $(SUITE_OUT)/test*/test_i*_spe.o -else - $(AR) $(AR_OPTIONS) $(BUILD)/partition/client_partition.a $(BUILD)/partition/client_partition.o $(SUITE_OUT)/test*/test_i*_spe.o $(SUITE_OUT)/test*/test_l*_spe.o -endif - -server_partition.a: - $(AR) $(AR_OPTIONS) $(BUILD)/partition/server_partition.a $(BUILD)/partition/server_partition.o $(SUITE_OUT)/test*/test_supp_*_spe.o - -driver_partition.a: - $(AR) $(AR_OPTIONS) $(BUILD)/partition/driver_partition.a $(BUILD)/platform/spe/*_driver_sp.o $(BUILD)/partition/driver_partition.o $(BUILD)/partition/val_driver_service_apis.o diff --git a/api-tests/tools/makefiles/testbuild.mk b/api-tests/tools/makefiles/testbuild.mk deleted file mode 100644 index 373111d1..00000000 --- a/api-tests/tools/makefiles/testbuild.mk +++ /dev/null @@ -1,78 +0,0 @@ -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk -include $(SUITE_IN)/$(TEST)/source.mk - -INCLUDE= -I$(SOURCE)/val/common/ \ - -I$(SOURCE)/val/nspe/ \ - -I$(SOURCE)/val/spe/ \ - -I$(SOURCE)/ \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/ \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SUITE_IN)/$(TEST)/\ - -I$(SUITE_IN)/include/ \ - -I$(BUILD)/val/ - -ifeq (${SUITE}, protected_storage) -INCLUDE += -I$(SUITE_IN)/../internal_trusted_storage/$(TEST) -endif - -VPATH=$(SOURCE)/val/common/:\ - $(SOURCE)/val/nspe/:\ - $(SOURCE)/val/spe/:\ - $(SUITE_IN)/$(TEST)/:\ - $(SUITE_IN)/include/: - -ifeq (${SUITE}, protected_storage) -VPATH += $(SUITE_IN)/../internal_trusted_storage/$(TEST)/ -endif - - -all: mkdir compile_c_nspe compile_asm_nspe test.elf compile_c_spe compile_asm_spe - -mkdir: - mkdir -p $(SUITE_OUT)/$(TEST)/ - -compile_c_nspe: $(CC_SOURCE:%.c=$(SUITE_OUT)/$(TEST)/%_nspe.o) -compile_asm_nspe: $(AS_SOURCE:%.s=$(SUITE_OUT)/$(TEST)/%_nspe.o) - -$(SUITE_OUT)/$(TEST)/%_nspe.o : %.c - $(CC) -D NONSECURE_TEST_BUILD -DVAL_NSPE_BUILD -o $@ -c $< - -$(SUITE_OUT)/$(TEST)/%_nspe.o : %.s - $(AS) -o $@ $< - -# Generated %_spe.o(s) are used in spbuild.mk to create final client_partition.a and server_partition.a -compile_c_spe: $(CC_SOURCE_SPE:%.c=$(SUITE_OUT)/$(TEST)/%_spe.o) -compile_asm_spe: $(AS_SOURCE_SPE:%.s=$(SUITE_OUT)/$(TEST)/%_spe.o) - -$(SUITE_OUT)/$(TEST)/%_spe.o : %.c - $(CC) -DSPE_BUILD -o $@ -c $< - -$(SUITE_OUT)/$(TEST)/%_spe.o : %.s - $(AS) -o $@ $< - -test.elf: -ifeq (${TOOLCHAIN}, GNUARM) - $(LD) -Xlinker -Map=$(SUITE_OUT)/$(TEST)/test.map -o $(SUITE_OUT)/$(TEST)/test.elf -T$(SUITE_OUT)/.test.linker $(SUITE_OUT)/$(TEST)/*_nspe.o -else - $(LD) --scatter=$(SUITE_OUT)/.test.sct --list=$(SUITE_OUT)/$(TEST)/test.map -o $(SUITE_OUT)/$(TEST)/test.elf $(SUITE_OUT)/$(TEST)/*_nspe.o -endif - $(DS) $(SUITE_OUT)/$(TEST)/test.elf > $(SUITE_OUT)/$(TEST)/test.disass - diff --git a/api-tests/tools/makefiles/toolchain.mk b/api-tests/tools/makefiles/toolchain.mk deleted file mode 100644 index 699e6bbb..00000000 --- a/api-tests/tools/makefiles/toolchain.mk +++ /dev/null @@ -1,119 +0,0 @@ -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -TOOLCHAIN=GNUARM -PREFIX= - -#### GNUARM OPTIONS - START #### -ifneq (,$(findstring $(TOOLCHAIN),GNUARM-GCC)) - ifeq (${TOOLCHAIN}, GNUARM) - PREFIX=arm-none-eabi- - endif - - ifeq (${CPU_ARCH}, armv7m) - TARGET_SWITCH= -march=armv7-m - else - ifeq (${CPU_ARCH}, armv8m_ml) - TARGET_SWITCH= -march=armv8-m.main -mcmse - else - TARGET_SWITCH= -march=armv8-m.base -mcmse - endif - endif - -COMPILER= $(PREFIX)gcc -ASSEMBLER= $(PREFIX)as -AR= $(PREFIX)ar -LINKER= $(PREFIX)gcc -OBJDUMP=$(PREFIX)objdump - -COMPILER_OPTIONS= $(TARGET_SWITCH) -Wall -Werror -fdata-sections -ffunction-sections -mno-unaligned-access - -ASSEMBLER_OPTIONS= $(TARGET_SWITCH) -mthumb -AR_OPTIONS= -rcs -LINKER_OPTIONS= $(TARGET_SWITCH) -mthumb -Wall -Werror -O0 -fdata-sections \ - -ffunction-sections -Xlinker --fatal-warnings -Xlinker --gc-sections \ - -z max-page-size=0x400 -lgcc -lc -lnosys -OBJDUMP_OPTIONS= -d -endif #GNUARM-GCC -#### GNUARM OPTIONS - END #### - -#### ARMCLANG OPTIONS - START #### -ifeq (${TOOLCHAIN}, ARMCLANG) - -COMPILER= armclang -ASSEMBLER= armclang -AR= armar -LINKER= armlink -OBJDUMP=fromelf - - ifeq (${CPU_ARCH}, armv7m) - TARGET_SWITCH= -march=armv7-m - TARGET_SWITCH_LD= --cpu=7-M - else - ifeq (${CPU_ARCH}, armv8m_ml) - TARGET_SWITCH= -march=armv8-m.main -mcmse - TARGET_SWITCH_LD= --cpu=8-M.Main - else - TARGET_SWITCH= -march=armv8-m.base -mcmse - TARGET_SWITCH_LD= --cpu=8-M.Base - endif - endif - -COMPILER_OPTIONS= --target=arm-arm-none-eabi $(TARGET_SWITCH) -Wall -Werror -fshort-enums -fshort-wchar -funsigned-char -fdata-sections -ffunction-sections -mno-unaligned-access -mfpu=none -AR_OPTIONS= --create -cr -LINKER_OPTIONS= --strict --map --symbols --xref --info=summarysizes,sizes,totals,unused,veneers --diag_warning=L6204 -OBJDUMP_OPTIONS= -c -d --datasymbols -endif -#### ARMCLANG OPTIONS - END #### - -COMPILER_OPTIONS += -DVERBOSE=$(VERBOSE) - -ifeq (${TEST_COMBINE_ARCHIVE}, 1) -COMPILER_OPTIONS += -DTEST_COMBINE_ARCHIVE=1 -endif - -ifeq (${WATCHDOG_AVAILABLE}, 1) -COMPILER_OPTIONS += -DWATCHDOG_AVAILABLE=1 -endif - -ifeq (${SP_HEAP_MEM_SUPP}, 1) -COMPILER_OPTIONS += -DSP_HEAP_MEM_SUPP=1 -endif - -ifeq (${PSA_IPC_IMPLEMENTED}, 1) -COMPILER_OPTIONS += -DPSA_IPC_IMPLEMENTED=1 -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED}, 1) -COMPILER_OPTIONS += -DPSA_CRYPTO_IMPLEMENTED=1 -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED}, 1) -COMPILER_OPTIONS += -DPSA_PROTECTED_STORAGE_IMPLEMENTED=1 -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED}, 1) -COMPILER_OPTIONS += -DPSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED=1 -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED}, 1) -COMPILER_OPTIONS += -DPSA_INITIAL_ATTESTATION_IMPLEMENTED=1 -endif - -CC= $(COMPILER) $(COMPILER_OPTIONS) $(CC_OPTIONS) $(USER_INCLUDE) $(INCLUDE) -AS= $(ASSEMBLER) $(ASSEMBLER_OPTIONS) $(AS_OPTIONS) -LD= $(LINKER) $(LINKER_OPTIONS) -DS= $(OBJDUMP) $(OBJDUMP_OPTIONS) diff --git a/api-tests/tools/makefiles/valbuild.mk b/api-tests/tools/makefiles/valbuild.mk deleted file mode 100644 index ef0ad4cb..00000000 --- a/api-tests/tools/makefiles/valbuild.mk +++ /dev/null @@ -1,52 +0,0 @@ -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -INCLUDE= -I$(SOURCE)/val/common/ \ - -I$(SOURCE)/val/nspe/ \ - -I$(SOURCE)/val/spe/ \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/ \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(BUILD)/val/ - -VPATH=$(SOURCE)/val/common/:\ - $(SOURCE)/val/nspe/:\ - $(SOURCE)/val/spe/ - -SRC_COMMON= -SRC_NS= val_entry.c val_dispatcher.c val_framework.c val_crypto.c val_interfaces.c val_peripherals.c val_target.c val_protected_storage.c val_internal_trusted_storage.c val_attestation.c - -all: build - -build: mkdir build_common build_ns val_nspe.a - -mkdir: - @mkdir -p $(BUILD)/val/ - -build_common: $(SRC_COMMON:%.c=$(BUILD)/val/%.o) -build_ns: $(SRC_NS:%.c=$(BUILD)/val/%.o) - -$(BUILD)/val/%.o : %.c - $(CC) $(INCLUDE) -DVAL_NSPE_BUILD -o $@ -c $< - -val_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/val/val_nspe.a $(BUILD)/val/*.o - -clean: - @rm -rf $(BUILD)/val/*.o $(BUILD)/val/*.a diff --git a/api-tests/tools/scripts/gen_tests_list.pl b/api-tests/tools/scripts/gen_tests_list.pl deleted file mode 100644 index f98bb562..00000000 --- a/api-tests/tools/scripts/gen_tests_list.pl +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env perl -#/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - - -$build=$ARGV[0]; -$tests_list=$ARGV[1]; -$suite=$ARGV[2]; - -&gen_test_entry_info(); -&gen_secure_tests_list() if ($suite eq "ipc"); - -sub gen_test_entry_info -{ - my $test_num = 0; - my $uniq_test_string = ''; - my $max_test_per_suite = 200; - my $suite_base = 0; - my $test_entry_list = "$build/val/test_entry_list.inc"; - my $test_entry_fn_declare_list = "$build/val/test_entry_fn_declare_list.inc"; - - if ($suite eq "crypto") - { - $suite_base = 1; - } - elsif ($suite eq "protected_storage") - { - $suite_base = 2; - } - elsif ($suite eq "internal_trusted_storage") - { - $suite_base = 3; - } - elsif ($suite eq "initial_attestation") - { - $suite_base = 4; - } - - open(IN, $tests_list) or die "Unable to open $tests_list $!"; - open(OUT1, '>', $test_entry_fn_declare_list) or die "Unable to open: $!"; - open(OUT2, '>', $test_entry_list) or die "Unable to open: $!"; - - while() { - if($_ !~ /^\//) {# exclude commented lines if any - chomp($_); - if($_ =~ /^test_(.+)/) { - $uniq_test_string = $1; - $uniq_test_string =~ s/s/p/ if ($suite eq "protected_storage"); - print OUT1 "void test_entry_$uniq_test_string(val_api_t *val_api, psa_api_t *psa_api);\n"; - if($_ =~ /^test_\w0*(\d+)/) { - $test_num = $1 + ($max_test_per_suite * $suite_base); - print OUT2 "\t{$test_num, &test_entry_$uniq_test_string},\n"; - } - } - } - } - close IN; - close OUT1; - close OUT2; - print "Non-secure test entry symbol list: - $test_entry_list, - $test_entry_fn_declare_list\n"; -} - -sub gen_secure_tests_list -{ - my $test_num = 0; - my $test_num_prev = 0; - my $client_tests_list_declare = "$build/partition/client_tests_list_declare.inc"; - my $client_tests_list = "$build/partition/client_tests_list.inc"; - my $server_tests_list_declare = "$build/partition/server_tests_list_declare.inc"; - my $server_tests_list = "$build/partition/server_tests_list.inc"; - - open(IN, $tests_list) or die "Unable to open $tests_list $!"; - open(OUT1, '>', $client_tests_list_declare) or die "Unable to open: $!"; - open(OUT2, '>', $client_tests_list) or die "Unable to open: $!"; - open(OUT3, '>', $server_tests_list_declare) or die "Unable to open: $!"; - open(OUT4, '>', $server_tests_list) or die "Unable to open: $!"; - - while() { - if($_ !~ /^\//) {# exclude commented lines if any - chomp($_); - if($_ =~ /^test_\w(\d+)/) { - $test_num = $1; - print OUT1 " extern client_test_t $_\_client_tests_list[];\n"; - print OUT3 " extern server_test_t $_\_server_tests_list[];\n"; - - if ($test_num - $test_num_prev > 1) - { - for ($i = $test_num_prev; $i < ($test_num - 1); $i++) - { - print OUT2 "\tNULL,\n"; - print OUT4 "\tNULL,\n"; - } - } - print OUT2 "\t$_\_client_tests_list,\n"; - print OUT4 "\t$_\_server_tests_list,\n"; - } - } - $test_num_prev = $test_num; - } - close IN; - close OUT1; - close OUT2; - close OUT3; - close OUT4; - - print "Secure test entry symbol list: - $client_tests_list_declare, - $client_tests_list, - $server_tests_list_declare, - $server_tests_list \n\n"; -} diff --git a/api-tests/tools/scripts/gen_tests_list.py b/api-tests/tools/scripts/gen_tests_list.py new file mode 100644 index 00000000..7d33bb5a --- /dev/null +++ b/api-tests/tools/scripts/gen_tests_list.py @@ -0,0 +1,126 @@ +#!/usr/bin/python +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +import sys + +if (len(sys.argv) != 11): + print("\nScript requires following inputs") + print("\narg1 : ") + print("\narg2 : ") + print("\narg3 : ") + print("\narg4 : ") + print("\narg5 : ") + print("\narg6 : ") + print("\narg7 : ") + print("\narg8 : ") + print("\narg9 : ") + print("\narg10 : ") + sys.exit(1) + +suite = sys.argv[1] +testsuite_db_file = sys.argv[2] +panic_tests_included = int(sys.argv[3]) +testlist_file = sys.argv[4] +test_entry_list = sys.argv[5] +test_entry_fn_declare_list = sys.argv[6] +client_tests_list_declare = sys.argv[7] +client_tests_list = sys.argv[8] +server_tests_list_declare = sys.argv[9] +server_tests_list = sys.argv[10] + +# Dictionary to hold the mapping between suite and the base number +suite_with_base_dict = {"ipc":0, "crypto":1, "protected_storage":2, "internal_trusted_storage":3, "initial_attestation":4} + +def gen_test_list(): + """ + Read the input testsuite.db file and generates the output file with list of tests + """ + with open(testlist_file, mode='w') as o_f: + with open(testsuite_db_file, mode='r') as i_f: + for line in i_f: + if ('test_' == line[0:5]): + if ((panic_tests_included == 1) and ("panic" not in line)): + o_f.write(line) + elif ((panic_tests_included == 1) and ("panic" in line)): + o_f.write(line[0:line.find(',')]+'\n') + elif ((panic_tests_included == 0) and ("panic" not in line)): + o_f.write(line) + +def gen_test_entry_info(): + """ + Generate Non-secure related inc files + """ + test_num = 0 + uniq_test_string = '' + max_test_per_suite = 200 + suite_base = 0 + + if (suite not in suite_with_base_dict.keys()): + print("\nProvide a valid SUITE identifier") + sys.exit() + + with open(test_entry_list, mode='w') as o_f1, \ + open(test_entry_fn_declare_list, mode='w') as o_f2,\ + open(testlist_file, mode='r') as i_f: + for line in i_f: + line = line.strip() + test_num = int(line[6:9]) + (max_test_per_suite * suite_with_base_dict[suite]) + if (suite == "protected_storage"): + uniq_test_string = 'p'+line[6:9] + else: + uniq_test_string = line[5:9] + o_f1.write("\t{%d, &test_entry_%s},\n" %(test_num, uniq_test_string)) + o_f2.write("void test_entry_%s(val_api_t *val_api, psa_api_t *psa_api);\n" %(uniq_test_string)) + print("Non-secure test entry symbol list:\n\t%s,\n\t%s" %(test_entry_list, test_entry_fn_declare_list)) + +def gen_secure_tests_list(): + """ + Generate partition related inc files + """ + test_num = 0 + test_num_prev = 0 + + with open(testlist_file, mode='r') as i_f, \ + open(client_tests_list_declare, mode='w') as o_f1, \ + open(client_tests_list, mode='w') as o_f2, \ + open(server_tests_list_declare, mode='w') as o_f3, \ + open(server_tests_list, mode='w') as o_f4: + for line in i_f: + line = line.strip() + o_f1.write("extern client_test_t %s_client_tests_list[];\n" %(line)) + o_f3.write("extern server_test_t %s_server_tests_list[];\n" %(line)) + + test_num = int(line[6:9]) + if ((test_num - test_num_prev) > 1): + for num in range(test_num_prev, test_num-1): + o_f2.write("\tNULL,\n") + o_f4.write("\tNULL,\n") + o_f2.write("\t%s_client_tests_list,\n" %(line[0:9])); + o_f4.write("\t%s_server_tests_list,\n" %(line[0:9])); + + test_num_prev = test_num + + print("Secure test entry symbol list:\n\t%s,\n\t%s,\n\t%s,\n\t%s" \ + %(client_tests_list_declare, client_tests_list, \ + server_tests_list_declare, server_tests_list)) + +# Call routines +gen_test_list() +gen_test_entry_info() +if (suite == "ipc"): + gen_secure_tests_list() diff --git a/api-tests/tools/scripts/process_test_linker_file.pl b/api-tests/tools/scripts/process_test_linker_file.pl deleted file mode 100755 index 4b0bb276..00000000 --- a/api-tests/tools/scripts/process_test_linker_file.pl +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env perl -#/** @file -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -#inputs -$source=$ARGV[0]; -$suite_out=$ARGV[1]; -$target=$ARGV[2]; -$toolchain=$ARGV[3]; - -$targetConfigPath = "$source/platform/targets/$target/target.cfg"; -$linker_in = ""; -$linker_out = ""; -$ns_test_start_addr = undef; - -if($toolchain eq "GNUARM") -{ - $linker_in = "$source/tools/makefiles/linker/test.linker"; - $linker_out = "$suite_out/.test.linker"; -} -else -{ - $linker_in = "$source/tools/makefiles/linker/test.sct"; - $linker_out = "$suite_out/.test.sct"; -} - -open(IN, $targetConfigPath) or die "Unable to open $targetConfigPath $!"; -while() { - if($_ !~ /^\//) {# exclude commented lines - if($_ =~ /\.ns_test_addr(\s*)\=(\s*)(.+)(\s*)\;/) { - $ns_test_start_addr = $3; - } - } -} -close IN; - -if(defined($ns_test_start_addr)) -{ - open(IN, $linker_in) or die "Unable to open $linker_in $!"; - open(OUT, '>', $linker_out) or die "Unable to open: $!"; - while() { - if($_ =~ /^TEST_START/){ - print OUT "TEST_START = $ns_test_start_addr;\n"; - }elsif($_ =~ /#define *TEST_CODE_START/){ - print OUT "#define TEST_CODE_START $ns_test_start_addr\n"; - }else{ - print OUT "$_"; - } - } - close IN; - close OUT; - print "linker file - $linker_out\n" -} -else -{ - die ("Error: ns_test_addr is not found in target.cfg file\n"); -} - -if($toolchain eq "ARMCLANG") -{ - system("cpp -x assembler-with-cpp -w -E -o $linker_out.tmp $linker_out ") && die ("Failed to process $linker_out\n"); - system("cp $linker_out.tmp $linker_out"); -} diff --git a/api-tests/tools/scripts/setup.sh b/api-tests/tools/scripts/setup.sh deleted file mode 100755 index 7d6b36cf..00000000 --- a/api-tests/tools/scripts/setup.sh +++ /dev/null @@ -1,497 +0,0 @@ -#!/usr/bin/env bash -#/** @file -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -echo "" - -declare -a INCLUDE_PATHS -export SUITE=" " -export TEST_COMBINE_ARCHIVE=0 -export INCLUDE_PANIC_TESTS=0 -export WATCHDOG_AVAILABLE=0 -export SP_HEAP_MEM_SUPP=0 -export CLIENT_FILE_FOUND=0 -export SERVICE_FILE_FOUND=0 -export MANIFEST_OUT_FILE_FOUND=0 -export CRYPTO_FILE_FOUND=0 -export PROTECTED_STORAGE_FILE_FOUND=0 -export INTERNAL_TRUSTED_STORAGE_FILE_FOUND=0 -export INITIAL_ATTESTATION_FILE_FOUND=0 -export LIFECYCLE_FILE_FOUND=0 - -IPC_HEADER_FILE_REQ="If PSA IPC implemented in your platform, include path must point to path -where \"psa/client.h\", \"psa/service.h\", \"psa/lifecycle.h\" and test partition manifest output files -(\"psa_manifest/sid.h\", \"psa_manifest/pid.h\" and \"psa_manifest/.h\") are located. -" -CRYPTO_HEADER_FILE_REQ="If PSA CRYPTO APIs are implemented into your platform then you must provide -\"psa/crypto.h\" file to setup.sh script using --include option to compile tests and framework. -" -PS_HEADER_FILE_REQ="If PSA PROTECTED STORAGE APIs are implemented into your platform then you must provide -\"psa/protected_storage.h\" file to setup.sh script using --include option to compile tests and framework. -" -ITS_HEADER_FILE_REQ="If PSA INTERNAL_TRUSTED_STORAGE APIs are implemented into your platform then you must provide -\"psa/internal_trusted_storage.h\" file to setup.sh script using --include option to compile tests and framework. -" -ATTESTATION_HEADER_FILE_REQ="If PSA INITIAL_ATTESTATION APIs are implemented into your platform then you must provide -\"psa/initial_attestation.h\" and \"psa/crypto.h\" file to setup.sh script using --include option to compile tests and framework. -" - -HELP=" - -Usage: setup.sh [--source SOURCE_DIR] [--build BUILD_DIR] [--target TARGET] [--suite SUITE] - [--toolchain TOOLCHAIN] [--cpu_arch CPU_ARCH] [--verbose PRINT_LEVEL] - [--include INCLUDE_PATH] [--help|-h] -Toplevel script to build tests and framework sources for given test suite. - -Arguments Info: - --source : SOURCE_DIR pointing to architecture test suite directory structure. - Default is current directory - --build : To select the build (output) directory. Default: BUILD/ inside current directory - --target : Provide target string as argument. - target.cfg file corresponding to input string must be avaiable at - platform/targets// - --suite : Compile tests for given suite. Support values are: - ipc, crypto, internal_trusted_storage, protected_storage, - and initial_attestation. - --toolchain : Build using the given TOOLCHAIN. - Supported values are GNUARM (GNU Arm Embedded) and ARMCLANG (ARM Compiler 6.x). - --cpu_arch : Provide cpu arch string as argument. - Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. - --verbose : Print verbosity level - Supported print levels are: - 1 - INFO & above. - 2 - DEBUG & above. - 3 - TEST & above.(Default) - 4 - WARN & ERROR. - 5 - ERROR. - --archive_tests : Create combine test archive(.a) file by combining available test objects files. - Absence of this option would create combine test binary(.bin) by combining available test elfs - --include_panic_tests : Consider panic tests (mentioned in testsuite.db of respective suite) along with functional tests - for building the final executables. Absence of this option would consider only non-panic (ie, functional) tests - --include : Additional directory to be included into compiler search path. Provide --include - where path pointing to location of PSA defined header files. - You can specify multiple source locations using --include option. - Ex: --include --include - --help|-h : Print this help message - -Notes: -1. $IPC_HEADER_FILE_REQ -2. $CRYPTO_HEADER_FILE_REQ -3. $PS_HEADER_FILE_REQ -4. $ITS_HEADER_FILE_REQ -5. $ATTESTATION_HEADER_FILE_REQ - -" - -if [ "$#" == "0" ]; then - echo "Error: no argument to setup.sh" - echo "$HELP" - exit 1 -fi - -while [ $# -gt 0 ]; do - case $1 in - --source ) shift - export SOURCE=$1 - ;; - --build ) shift - export BUILD="$1/BUILD" - ;; - --target ) shift - export TARGET=$1 - ;; - --suite ) shift - export SUITE=$1 - ;; - --toolchain ) shift - export TOOLCHAIN=$1 - ;; - --cpu_arch ) shift - export CPU_ARCH=$1 - ;; - --verbose ) shift - export VERBOSE=$1 - ;; - --archive_tests ) - export TEST_COMBINE_ARCHIVE=1 - ;; - --include_panic_tests ) - export INCLUDE_PANIC_TESTS=1 - ;; - --include ) shift - export INCLUDE="$INCLUDE -I $1/" - INCLUDE_PATHS=("${INCLUDE_PATHS[@]}" $1) - ;; - --help | -h ) - echo "$HELP" - exit 1 - ;; - * ) - echo "Error: Invaid argument $1" - echo "$HELP" - exit 1 - esac - shift -done - -echo "----------Process input arguments- start-------------" -if [ -z "$SOURCE" ] -then - export SOURCE=./ - echo "--source option is not provided, hence setting \$SOURCE to present dir" -else - echo "setting \$SOURCE to $SOURCE" -fi - -if [ ! -d "$SOURCE/dev_apis" ] || [ ! -d "$SOURCE/ff" ] -then - echo "Error: Could not find architecture test suite directories in current path $SOURCE" - exit 1 -fi - -if [ -z "$BUILD" ] -then - export BUILD="./BUILD" - echo "--build option is not provided, hence setting \$BUILD to ./BUILD" -else - echo "setting \$BUILD to $BUILD" -fi - -if [ -z "$TARGET" ] -then - echo "Provide target string as argument using --target " - exit 1 -else - echo "Using \$TARGET=$TARGET" -fi - -if [ "$SUITE" != "ipc" ] && [ "$SUITE" != "crypto" ] && [ "$SUITE" != "protected_storage" ] && - [ "$SUITE" != "internal_trusted_storage" ] && [ "$SUITE" != "initial_attestation" ] -then - echo "Error: Unsupported value for --suite=$SUITE. - Refer help message to see supported suites" - exit 1 -fi - -PLATFORM_MAKEFILE=$SOURCE/platform/targets/$TARGET/Makefile -PSA_IPC_IMPLEMENTED=`grep -c "^ *PSA_IPC_IMPLEMENTED\s*:=\s*1" $PLATFORM_MAKEFILE` -PSA_CRYPTO_IMPLEMENTED=`grep -c "^ *PSA_CRYPTO_IMPLEMENTED\s*:=\s*1" $PLATFORM_MAKEFILE` -PSA_PROTECTED_STORAGE_IMPLEMENTED=`grep -c "^ *PSA_PROTECTED_STORAGE_IMPLEMENTED\s*:=\s*1" $PLATFORM_MAKEFILE` -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED=`grep -c "^ *PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED\s*:=\s*1" $PLATFORM_MAKEFILE` -PSA_INITIAL_ATTESTATION_IMPLEMENTED=`grep -c "^ *PSA_INITIAL_ATTESTATION_IMPLEMENTED\s*:=\s*1" $PLATFORM_MAKEFILE` -WATCHDOG_AVAILABLE=`grep -c "^ *watchdog.num\s*=\s*1\s*;" $SOURCE/platform/targets/$TARGET/target.cfg` -SP_HEAP_MEM_SUPP=`grep -c "^ *dut.0.sp_heap_mem_supp\s*=\s*AVAILABLE\s*;" $SOURCE/platform/targets/$TARGET/target.cfg` - -# Check PSA_IPC_IMPLEMENTED validity -if [ $SUITE == "ipc" ] && [ $PSA_IPC_IMPLEMENTED == "0" ] -then - echo "Error: PSA_IPC_IMPLEMENTED must be set to 1 for ipc suite - in $PLATFORM_MAKEFILE" - exit 1 -fi - -# Check PSA_CRYPTO_IMPLEMENTED validity -if [ $SUITE == "crypto" ] && [ $PSA_CRYPTO_IMPLEMENTED == "0" ] -then - echo "Error: PSA_CRYPTO_IMPLEMENTED must be set to 1 for crypto suite - in $PLATFORM_MAKEFILE" - exit 1 -fi - -# Check PSA_PROTECTED_STORAGE_IMPLEMENTED validity -if [ $SUITE == "protected_storage" ] && [ $PSA_PROTECTED_STORAGE_IMPLEMENTED == "0" ] -then - echo "Error: PSA_PROTECTED_STORAGE_IMPLEMENTED must be set to 1 for protected_storage suite - in $PLATFORM_MAKEFILE" - exit 1 -fi - -# Check PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED validity -if [ $SUITE == "internal_trusted_storage" ] && [ $PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == "0" ] -then - echo "Error: PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be set to 1 for internal_trusted_storage suite - in $PLATFORM_MAKEFILE" - exit 1 -fi - -# Check PSA_INITIAL_ATTESTATION_IMPLEMENTED validity -if [ $SUITE == "initial_attestation" ] && [ $PSA_INITIAL_ATTESTATION_IMPLEMENTED == "0" ] -then - echo "Error: PSA_INITIAL_ATTESTATION_IMPLEMENTED must be set to 1 for initial_attestation suite - in $PLATFORM_MAKEFILE" - exit 1 -fi - -if [ $PSA_IPC_IMPLEMENTED == "1" ] -then - # Check --include validity for ipc suite - if [ -z "$INCLUDE" ] - then - echo "Error: --include option is not provided. $IPC_HEADER_FILE_REQ" - exit 1 - else - for path in "${INCLUDE_PATHS[@]}" - do - if [ -f "$path/psa/client.h" ] - then - export CLIENT_FILE_FOUND=1 - fi - if [ -f "$path/psa/service.h" ] - then - export SERVICE_FILE_FOUND=1 - fi - if [ -f "$path/psa_manifest/sid.h" ] && [ -f "$path/psa_manifest/pid.h" ] - then - export MANIFEST_OUT_FILE_FOUND=1 - fi - if [ -f "$path/psa/lifecycle.h" ] - then - export LIFECYCLE_FILE_FOUND=1 - fi - done - if [ $CLIENT_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/client.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$IPC_HEADER_FILE_REQ" - exit 1 - fi - if [ $SERVICE_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/service.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$IPC_HEADER_FILE_REQ" - exit 1 - fi - if [ $MANIFEST_OUT_FILE_FOUND == "0" ] - then - echo "Couldn't find psa_manifest/sid.h or psa_manifest/pid.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$IPC_HEADER_FILE_REQ" - exit 1 - fi - if [ $LIFECYCLE_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/lifecycle.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$IPC_HEADER_FILE_REQ" - exit 1 - fi - fi -fi - -if [ $PSA_CRYPTO_IMPLEMENTED == "1" ] -then - # Check --include validity for crypto suite - if [ -z "$INCLUDE" ] - then - echo "Error: --include option is not provided." - echo "$CRYPTO_HEADER_FILE_REQ" - exit 1 - else - for path in "${INCLUDE_PATHS[@]}" - do - if [ -f "$path/psa/crypto.h" ] - then - export CRYPTO_FILE_FOUND=1 - fi - done - if [ $CRYPTO_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/crypto.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$CRYPTO_HEADER_FILE_REQ" - exit 1 - fi - fi -fi - -if [ $PSA_PROTECTED_STORAGE_IMPLEMENTED == "1" ] -then - # Check --include validity for protected storage suite - if [ -z "$INCLUDE" ] - then - echo "Error: --include option is not provided." - echo "$PS_HEADER_FILE_REQ" - exit 1 - else - for path in "${INCLUDE_PATHS[@]}" - do - if [ -f "$path/psa/protected_storage.h" ] - then - export PROTECTED_STORAGE_FILE_FOUND=1 - fi - done - if [ $PROTECTED_STORAGE_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/protected_storage.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$PS_HEADER_FILE_REQ" - exit 1 - fi - fi -fi - -if [ $PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED == "1" ] -then - # Check --include validity for internal trusted storage suite - if [ -z "$INCLUDE" ] - then - echo "Error: --include option is not provided." - echo "$ITS_HEADER_FILE_REQ" - exit 1 - else - for path in "${INCLUDE_PATHS[@]}" - do - if [ -f "$path/psa/internal_trusted_storage.h" ] - then - export INTERNAL_TRUSTED_STORAGE_FILE_FOUND=1 - fi - done - if [ $INTERNAL_TRUSTED_STORAGE_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/internal_trusted_storage.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$ITS_HEADER_FILE_REQ" - exit 1 - fi - fi -fi - -if [ $PSA_INITIAL_ATTESTATION_IMPLEMENTED == "1" ] -then - # Check --include validity for initial_attestation suite - if [ -z "$INCLUDE" ] - then - echo "Error: --include option is not provided." - echo "$ATTESTATION_HEADER_FILE_REQ" - exit 1 - else - for path in "${INCLUDE_PATHS[@]}" - do - if [ -f "$path/psa/initial_attestation.h" ] - then - export INITIAL_ATTESTATION_FILE_FOUND=1 - fi - if [ -f "$path/psa/crypto.h" ] - then - export CRYPTO_FILE_FOUND=1 - fi - done - - if [ $INITIAL_ATTESTATION_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/initial_attestation.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$ATTESTATION_HEADER_FILE_REQ" - exit 1 - elif [ $INITIAL_ATTESTATION_FILE_FOUND == "1" ] - then - if [ $CRYPTO_FILE_FOUND == "0" ] - then - echo "Couldn't find psa/crypto.h file in paths: ${INCLUDE_PATHS[@]}" - echo "$CRYPTO_HEADER_FILE_REQ" - exit 1 - fi - if [ ! -d "$SOURCE/platform/targets/$TARGET/nspe/initial_attestation/ext" ] - then - git clone https://github.com/laurencelundblade/QCBOR.git $SOURCE/platform/targets/$TARGET/nspe/initial_attestation/ext - cd $SOURCE/platform/targets/$TARGET/nspe/initial_attestation/ext; git checkout da53227db1488dde0952bdff66c3d904dce270b3 ; cd - - else - echo "QCBOR library already cloned" - fi - fi - fi -fi - -if [ -z "$TOOLCHAIN" ] -then - export TOOLCHAIN=GNUARM - echo "--toolchain option is not provided, hence using default value \$TOOLCHAIN=$TOOLCHAIN" -else - echo "Using \$TOOLCHAIN=$TOOLCHAIN" -fi - -if [ $TOOLCHAIN != "GNUARM" ] && [ $TOOLCHAIN != "ARMCLANG" ] -then - echo "Error: Unsupported value for --toolchain=$TOOLCHAIN. - Supported toolchain are GNUARM and ARMCLANG" - exit 1 -fi - -if [ -z "$CPU_ARCH" ] -then - echo "Error: Provide cpu arch string as argument using --cpu_arch " - echo "Supported CPU arch are armv8m_ml, armv8m_bl, armv7m" - exit 1 -else - echo "Using \$CPU_ARCH=$CPU_ARCH" -fi - -if [ $CPU_ARCH != "armv8m_ml" ] && [ $CPU_ARCH != "armv8m_bl" ] && [ $CPU_ARCH != "armv7m" ] -then - echo "Error: Unsupported value for --cpu_arch=$CPU_ARCH. - Supported CPU arch are armv8m_ml, armv8m_bl, armv7m" - exit 1 -fi - -if [ ! -z "$VERBOSE" ] -then - if [ $VERBOSE != "1" ] && [ $VERBOSE != "2" ] && - [ $VERBOSE != "3" ] && [ $VERBOSE != "4" ] && - [ $VERBOSE != "5" ] - then - echo "Error: Unsupported value for --verbose=$VERBOSE." - echo "Supported print levels are:" - echo "1 - INFO & above." - echo "2 - DEBUG & above." - echo "3 - TEST & above." - echo "4 - WARN & ERROR." - echo "5 - ERROR." - exit 1 - fi -else - export VERBOSE=3 -fi - -if [ $INCLUDE_PANIC_TESTS == "1" ] && [ $WATCHDOG_AVAILABLE == "0" ] -then - echo " -Warning: You have set watchdog.num to 0 in $SOURCE/platform/targets/$TARGET/target.cfg -Note - To test PSA APIs panic conditions, test harness may require to access watchdog timer -to recover from panic and to be able to continue with next test. -Ignore this warning if system under test has capability to reset the system -when it encounters panic condition. -" -fi - -echo "----------Process input arguments- complete-------------" -echo "" - -MAKE_OPTIONS=" SOURCE=$SOURCE " -MAKE_OPTIONS+=" BUILD=$BUILD " -MAKE_OPTIONS+=" TARGET=$TARGET " -MAKE_OPTIONS+=" SUITE=$SUITE " -MAKE_OPTIONS+=" TOOLCHAIN=$TOOLCHAIN " -MAKE_OPTIONS+=" CPU_ARCH=$CPU_ARCH " -MAKE_OPTIONS+=" VERBOSE=$VERBOSE " -MAKE_OPTIONS+=" TEST_COMBINE_ARCHIVE=$TEST_COMBINE_ARCHIVE " -MAKE_OPTIONS+=" INCLUDE_PANIC_TESTS=$INCLUDE_PANIC_TESTS " -MAKE_OPTIONS+=" WATCHDOG_AVAILABLE=$WATCHDOG_AVAILABLE " -MAKE_OPTIONS+=" SP_HEAP_MEM_SUPP=$SP_HEAP_MEM_SUPP " -MAKE_OPTIONS+=" PSA_IPC_IMPLEMENTED=$PSA_IPC_IMPLEMENTED " -MAKE_OPTIONS+=" PSA_CRYPTO_IMPLEMENTED=$PSA_CRYPTO_IMPLEMENTED " -MAKE_OPTIONS+=" PSA_PROTECTED_STORAGE_IMPLEMENTED=$PSA_PROTECTED_STORAGE_IMPLEMENTED " -MAKE_OPTIONS+=" PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED=$PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED " -MAKE_OPTIONS+=" PSA_INITIAL_ATTESTATION_IMPLEMENTED=$PSA_INITIAL_ATTESTATION_IMPLEMENTED " -MAKE_OPTIONS+=" USER_INCLUDE=\"$INCLUDE\" " - -#Build VAL/PAL static library and Tests ELFs -echo "make -f $SOURCE/tools/makefiles/Makefile $MAKE_OPTIONS USER_INCLUDE=\"$INCLUDE\" all " -make -f $SOURCE/tools/makefiles/Makefile $MAKE_OPTIONS USER_INCLUDE="$INCLUDE" all diff --git a/api-tests/tools/scripts/target_cfg/CMakeLists.txt b/api-tests/tools/scripts/target_cfg/CMakeLists.txt new file mode 100644 index 00000000..546c0689 --- /dev/null +++ b/api-tests/tools/scripts/target_cfg/CMakeLists.txt @@ -0,0 +1,76 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Set the minimum required version of CMake for the project +cmake_minimum_required(VERSION 3.10) + +# cmake_policy +cmake_policy(SET CMP0057 NEW) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../tools/cmake) +include("common/CMakeSettings") +include("common/Utils") + +# Let the CMake look for C compiler +project(TargetConfigGen LANGUAGES C) + +# Check whether required arguments are passed to CMake +_check_arguments("OUT_DIR" + "TARGET" + "GENERATOR_FILE" + "INCLUDE_DIR" + "TARGET_CONFIGURATION_FILE" + "TGT_CONFIG_SOURCE_C" + "OUTPUT_HEADER" + "DATABASE_TABLE_NAME" + "DATABASE_TABLE_SECTION_NAME" + "TARGET_HEADER_GEN_INCLUDE_PATHS" +) + +# add_custom_command to generate intermediate source file +add_custom_command( + OUTPUT + ${TGT_CONFIG_SOURCE_C} + COMMENT "[PSA] : Creating generator source ${TGT_CONFIG_SOURCE_C}" + COMMAND ${PYTHON_EXECUTABLE} ${GENERATOR_FILE} ${TARGET} ${INCLUDE_DIR}/val_target.h ${TARGET_CONFIGURATION_FILE} ${TGT_CONFIG_SOURCE_C} ${OUTPUT_HEADER} ${DATABASE_TABLE_NAME} ${DATABASE_TABLE_SECTION_NAME} +) + +# Adding command to execute the generator +add_custom_command( + OUTPUT + ${OUTPUT_HEADER} + COMMENT "[PSA] : Creating output header ${OUTPUT_HEADER}" + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} +) + +# Adding executable +add_executable(${PROJECT_NAME} ${TGT_CONFIG_SOURCE_C}) +foreach(include_path ${TARGET_HEADER_GEN_INCLUDE_PATHS}) + target_include_directories(${PROJECT_NAME} PRIVATE ${include_path}) +endforeach() +set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "-m32 -w") +set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-m32") + +# Adding target to tell we want OUTPUT_HEADER +add_custom_target( + run_generator_output ALL + SOURCES ${OUTPUT_HEADER} +) + +# install target to put the OUTPUT_HEADER to it's final location +get_filename_component(INSTALL_DST "${OUT_DIR}" ABSOLUTE) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER} DESTINATION ${INSTALL_DST}) diff --git a/api-tests/tools/scripts/targetConfigGen.py b/api-tests/tools/scripts/target_cfg/targetConfigGen.py similarity index 99% rename from api-tests/tools/scripts/targetConfigGen.py rename to api-tests/tools/scripts/target_cfg/targetConfigGen.py index 6442f74d..fd1f7e4e 100644 --- a/api-tests/tools/scripts/targetConfigGen.py +++ b/api-tests/tools/scripts/target_cfg/targetConfigGen.py @@ -41,6 +41,9 @@ unique_major_groups = [] unique_minor_components = [] +if section_name == "NOSECTION": + section_name = "" + def get_minor_major_map(): """ This method populates the dictionary which maps between every available minor component to their major group """ try: diff --git a/api-tests/tools/scripts/test_elf_combine.pl b/api-tests/tools/scripts/test_elf_combine.pl deleted file mode 100755 index fb50e321..00000000 --- a/api-tests/tools/scripts/test_elf_combine.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env perl -#/** @file -# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -use File::Find; -use File::Basename; - -#Inputs -$test_list_file = $ARGV[0]; - -@suite_out = split("/.testlist.txt", $test_list_file); - -# Final output elf file -$output_elf = "$suite_out[0]/test_elf_combine.bin"; - - -my @all_elf_paths; -@test_list = `cat $test_list_file`; - - -open(OUT, '>:raw', $output_elf) or die "Unable to open: $!"; - -# Collecting all elf file paths - -foreach $test (@test_list) -{ - chomp($test); - push @all_elf_paths, "$suite_out[0]/$test/test.elf"; - if (!(-e "$suite_out[0]/$test/test.elf")) - { - print "ELF not found - $suite_out[0]/$test/test.elf\n"; - exit 1; - } -} - -foreach $elf (@all_elf_paths) { - - # Find elf sizes - $elf_size = -s $elf; - - # Get readelf program header info from either elf and process it - $out = `readelf -l $elf`; - if($out =~ /LOAD(\s+)(0[xX][0-9a-fA-F]+)/) - { - $program_header = hex($2); - } - - # Determining test_id from elf at location pointed by program header - open(TEST_NS_ID, '<:raw', $elf) or die "Unable to open: $!"; - seek(TEST_NS_ID, $program_header, 0); - read TEST_NS_ID, $test_id_raw, 4; - - $test_id = unpack('L<', $test_id_raw); - close TEST_NS_ID; - - printf("test_id:\t%4d, ", $test_id); - print "ELF:$elf,\tSIZE:$elf_size\n"; - - # 'L' unsigned-32 ; '<' Little endian - print OUT pack('L<', 0xFACEFACE); - print OUT pack('L<', $test_id); - print OUT pack('L<', $elf_size); - - # Temporarily closing final ELF to concatenate ELFs - close OUT; - system("cat $elf >> $output_elf"); - # Open final ELF again - open(OUT, '>>:raw', $output_elf) or die "Unable to open: $!"; -} -print OUT pack('L<', 0xC3C3C3C3); -close OUT; diff --git a/api-tests/val/nspe/val_attestation.c b/api-tests/val/nspe/val_attestation.c index cd8069ad..82d7191b 100644 --- a/api-tests/val/nspe/val_attestation.c +++ b/api-tests/val/nspe/val_attestation.c @@ -30,6 +30,7 @@ int32_t val_attestation_function(int type, ...) { +#ifdef INITIAL_ATTESTATION va_list valist; val_status_t status; @@ -37,4 +38,7 @@ int32_t val_attestation_function(int type, ...) status = pal_attestation_function(type, valist); va_end(valist); return status; +#else + return VAL_STATUS_ERROR; +#endif } diff --git a/api-tests/val/nspe/val_crypto.c b/api-tests/val/nspe/val_crypto.c index da1aced4..8af2eb5e 100644 --- a/api-tests/val/nspe/val_crypto.c +++ b/api-tests/val/nspe/val_crypto.c @@ -29,6 +29,7 @@ **/ int32_t val_crypto_function(int type, ...) { +#ifdef CRYPTO va_list valist; int32_t status; @@ -36,4 +37,7 @@ int32_t val_crypto_function(int type, ...) status = pal_crypto_function(type, valist); va_end(valist); return status; +#else + return VAL_STATUS_ERROR; +#endif } diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c index 86755187..eff584f3 100644 --- a/api-tests/val/nspe/val_dispatcher.c +++ b/api-tests/val/nspe/val_dispatcher.c @@ -29,6 +29,7 @@ addr_t g_test_info_addr; uint32_t combine_test_binary_in_ram; addr_t combine_test_binary_addr; +#if !defined(TEST_COMBINE_ARCHIVE) static const unsigned char elf_magic_header[ELF_IDENT] = { /* 0x7f, 'E', 'L', 'F' */ 0x7f, 0x45, 0x4c, 0x46, @@ -116,6 +117,7 @@ int val_copy_elf(uint32_t saddr, uint32_t *info_addr) *info_addr = test_elfh.e_entry; return 0; } +#endif /** @brief - This function reads the test ELFs from RAM or secondary storage and loads into @@ -126,7 +128,7 @@ int val_copy_elf(uint32_t saddr, uint32_t *info_addr) **/ val_status_t val_test_load(test_id_t *test_id, test_id_t test_id_prev) { -#if (TEST_COMBINE_ARCHIVE == 0) +#if !defined(TEST_COMBINE_ARCHIVE) test_header_t test_header; addr_t flash_addr = combine_test_binary_addr; @@ -260,7 +262,7 @@ val_status_t val_test_load(test_id_t *test_id, test_id_t test_id_prev) **/ val_status_t val_get_test_entry_addr(addr_t *paddr) { -#if (TEST_COMBINE_ARCHIVE == 0) +#if !defined(TEST_COMBINE_ARCHIVE) *paddr = (addr_t)(((val_test_info_t *)g_test_info_addr)->entry_addr); #else *paddr = g_test_info_addr; diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c index 4f6163c1..dad52d61 100644 --- a/api-tests/val/nspe/val_framework.c +++ b/api-tests/val/nspe/val_framework.c @@ -486,7 +486,7 @@ void val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield) return; } -#if (WATCHDOG_AVAILABLE == 1) +#ifdef WATCHDOG_AVAILABLE /* Initialise watchdog */ status = val_wd_timer_init(GET_WD_TIMOUT_TYPE(test_bitfield)); if (VAL_ERROR(status)) @@ -518,7 +518,7 @@ void val_test_exit(void) { val_status_t status = VAL_STATUS_SUCCESS; -#if (WATCHDOG_AVAILABLE == 1) +#ifdef WATCHDOG_AVAILABLE status = val_wd_timer_disable(); if (VAL_ERROR(status)) { diff --git a/api-tests/val/nspe/val_internal_trusted_storage.c b/api-tests/val/nspe/val_internal_trusted_storage.c index e79e9c06..5c910fd9 100644 --- a/api-tests/val/nspe/val_internal_trusted_storage.c +++ b/api-tests/val/nspe/val_internal_trusted_storage.c @@ -29,6 +29,7 @@ **/ uint32_t val_its_function(int type, ...) { +#ifdef INTERNAL_TRUSTED_STORAGE va_list valist; uint32_t status; @@ -36,4 +37,7 @@ uint32_t val_its_function(int type, ...) status = pal_its_function(type, valist); va_end(valist); return status; +#else + return VAL_STATUS_ERROR; +#endif } diff --git a/api-tests/val/nspe/val_peripherals.c b/api-tests/val/nspe/val_peripherals.c index dccc4e40..e7674f55 100644 --- a/api-tests/val/nspe/val_peripherals.c +++ b/api-tests/val/nspe/val_peripherals.c @@ -170,6 +170,7 @@ val_status_t val_wd_reprogram_timer(wd_timeout_type_t timeout_type) { val_status_t status = VAL_STATUS_SUCCESS; +#ifdef WATCHDOG_AVAILABLE /* Disable watchdog Timer */ val_wd_timer_disable(); @@ -186,6 +187,7 @@ val_status_t val_wd_reprogram_timer(wd_timeout_type_t timeout_type) { return status; } +#endif return status; } diff --git a/api-tests/val/nspe/val_protected_storage.c b/api-tests/val/nspe/val_protected_storage.c index 06c1f502..f3869de8 100644 --- a/api-tests/val/nspe/val_protected_storage.c +++ b/api-tests/val/nspe/val_protected_storage.c @@ -29,6 +29,7 @@ **/ uint32_t val_ps_function(int type, ...) { +#ifdef PROTECTED_STORAGE va_list valist; uint32_t status; @@ -36,4 +37,7 @@ uint32_t val_ps_function(int type, ...) status = pal_ps_function(type, valist); va_end(valist); return status; +#else + return VAL_STATUS_ERROR; +#endif } diff --git a/api-tests/val/val_nspe.cmake b/api-tests/val/val_nspe.cmake new file mode 100644 index 00000000..91113b0a --- /dev/null +++ b/api-tests/val/val_nspe.cmake @@ -0,0 +1,58 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Listing all the sources from val +list(APPEND VAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/val/nspe/val_entry.c + ${PSA_ROOT_DIR}/val/nspe/val_dispatcher.c + ${PSA_ROOT_DIR}/val/nspe/val_framework.c + ${PSA_ROOT_DIR}/val/nspe/val_crypto.c + ${PSA_ROOT_DIR}/val/nspe/val_interfaces.c + ${PSA_ROOT_DIR}/val/nspe/val_peripherals.c + ${PSA_ROOT_DIR}/val/common/val_target.c + ${PSA_ROOT_DIR}/val/nspe/val_protected_storage.c + ${PSA_ROOT_DIR}/val/nspe/val_internal_trusted_storage.c + ${PSA_ROOT_DIR}/val/nspe/val_attestation.c +) + +# Create VAL NSPE library +add_library(${PSA_TARGET_VAL_NSPE_LIB} STATIC ${VAL_SRC_C_NSPE}) + + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +target_include_directories(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/val/spe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto +) + +if(${WATCHDOG_AVAILABLE} EQUAL 1) + target_compile_definitions(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE WATCHDOG_AVAILABLE) +endif() +if(${TEST_COMBINE_ARCHIVE} EQUAL 1) + target_compile_definitions(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE TEST_COMBINE_ARCHIVE) +endif() +target_compile_definitions(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE VAL_NSPE_BUILD) +target_compile_definitions(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE TEST_COMBINE_ARCHIVE) diff --git a/api-tests/val/val_spe.cmake b/api-tests/val/val_spe.cmake new file mode 100644 index 00000000..c921d8a1 --- /dev/null +++ b/api-tests/val/val_spe.cmake @@ -0,0 +1,93 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Listing all the sources from val +list(APPEND VAL_SRC_C_SPE + ${PSA_ROOT_DIR}/val/spe/val_driver_service_apis.c +) + +# Listing common sources from partition +list(APPEND PARTITION_COMMON_SRC_C_SPE + ${PSA_ROOT_DIR}/ff/partition/common/driver_partition.c +) + +# Listing sources from partition for client +list(APPEND PARTITION_IPC_CLIENT_SRC_C_SPE + ${PSA_ROOT_DIR}/ff/partition/ipc/client_partition.c +) +# Listing sources from partition for server +list(APPEND PARTITION_IPC_SERVER_SRC_C_SPE + ${PSA_ROOT_DIR}/ff/partition/ipc/server_partition.c +) + +foreach(src_file ${SUITE_CC_SOURCE_SPE}) + get_filename_component(FILE_NAME ${src_file} NAME) + string(SUBSTRING ${FILE_NAME} 0 9 TEST_STR) + if(${TEST_STR} STREQUAL "test_supp") + list(APPEND SUITE_SERVER_CC_SRC_SPE ${src_file}) + else() + list(APPEND SUITE_CLIENT_CC_SRC_SPE ${src_file}) + endif() +endforeach() + +# Create Driver partition library +add_library(${PSA_TARGET_DRIVER_PARTITION_LIB} STATIC ${VAL_SRC_C_SPE} ${PARTITION_COMMON_SRC_C_SPE} ${PAL_SRC_C_DRIVER_SP}) + +# Create Client partition library +add_library(${PSA_TARGET_CLIENT_PARTITION_LIB} STATIC ${PARTITION_IPC_CLIENT_SRC_C_SPE} ${SUITE_CLIENT_CC_SRC_SPE}) + +# Create Server partition library +add_library(${PSA_TARGET_SERVER_PARTITION_LIB} STATIC ${PARTITION_IPC_SERVER_SRC_C_SPE} ${SUITE_SERVER_CC_SRC_SPE}) + +target_include_directories(${PSA_TARGET_DRIVER_PARTITION_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/spe + ${PSA_ROOT_DIR}/ff/partition/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto +) + +# Include paths from platform for driver partition build +foreach(inc_path ${PAL_DRIVER_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_DRIVER_PARTITION_LIB} PRIVATE ${inc_path}) +endforeach() + +target_include_directories(${PSA_TARGET_CLIENT_PARTITION_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/nspe + ${PSA_ROOT_DIR}/val/spe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/ff/partition/ipc +) +target_include_directories(${PSA_TARGET_SERVER_PARTITION_LIB} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${PSA_ROOT_DIR}/val/common + ${PSA_ROOT_DIR}/val/spe + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/ff/partition/ipc +) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_DRIVER_PARTITION_LIB} PRIVATE ${psa_inc_path}) + target_include_directories(${PSA_TARGET_CLIENT_PARTITION_LIB} PRIVATE ${psa_inc_path}) + target_include_directories(${PSA_TARGET_SERVER_PARTITION_LIB} PRIVATE ${psa_inc_path}) +endforeach() From 2c9a295fded1f5c3bc654b138d3ce09d4463165e Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Mon, 15 Jul 2019 22:14:55 +0530 Subject: [PATCH 06/54] Removed stale Makefile. --- .../targets/tgt_dev_apis_tfm_an524/Makefile | 160 ------------------ 1 file changed, 160 deletions(-) delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile deleted file mode 100644 index 473879d5..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -include $(SOURCE)/tools/makefiles/toolchain.mk - -# Make variables to select correct instances of PAL files - -## PSA_IPC_IMPLEMENTED must be true for IPC SUITE -PSA_IPC_IMPLEMENTED:=0 - -## PSA_CRYPTO_IMPLEMENTED must be true for CRYPTO SUITE -PSA_CRYPTO_IMPLEMENTED:=1 - -## PSA_PROTECTED_STORAGE_IMPLEMENTED must be true for PROTECTED_STORAGE SUITE -PSA_PROTECTED_STORAGE_IMPLEMENTED:=1 - -## PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED must be true for INTERNAL_TRUSTED_STORAGE SUITE -PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED:=0 - -## PSA_INITIAL_ATTESTATION_IMPLEMENTED must be true for INITIAL_ATTESTATION SUITE -PSA_INITIAL_ATTESTATION_IMPLEMENTED:=1 - -# Make variables holding NSPE/SPE source files - -## PAL C source files part of NSPE library -SRC_C_NSPE= - -## PAL ASM source files part of NSPE library -SRC_ASM_NSPE= - -## PAL C source files part of SPE library - driver partition -SRC_C_DRIVER_SP= - -## PAL ASM source files part of SPE library - driver partition -SRC_ASM_DRIVER_SP= - -ifeq (${PSA_IPC_IMPLEMENTED},1) -# When PSA_IPC_IMPLEMENTED=1, driver functionalities are implemented as RoT-services -# and secure and non-secure clients will call to these RoT-services to get appropriate driver services. -SRC_C_NSPE += pal_client_api_intf.c -SRC_C_NSPE += pal_driver_ipc_intf.c - -# Driver files will be compiled as part of driver partition -SRC_C_DRIVER_SP += pal_driver_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -else - -# When PSA_IPC_IMPLEMENTED=0, driver files will be compiled as part of NSPE -SRC_C_NSPE += pal_client_api_empty_intf.c -SRC_C_NSPE += pal_driver_ns_intf.c pal_nvmem.c pal_uart.c pal_wd_cmsdk.c -endif - -ifeq (${PSA_CRYPTO_IMPLEMENTED},1) -SRC_C_NSPE += pal_crypto_intf.c -else -SRC_C_NSPE += pal_crypto_empty_intf.c -endif - -ifeq (${PSA_PROTECTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_protected_storage_intf.c -else -SRC_C_NSPE += pal_protected_storage_empty_intf.c -endif - -ifeq (${PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED},1) -SRC_C_NSPE += pal_internal_trusted_storage_intf.c -else -SRC_C_NSPE += pal_internal_trusted_storage_empty_intf.c -endif - -ifeq (${PSA_INITIAL_ATTESTATION_IMPLEMENTED},1) -SRC_C_NSPE += pal_attestation_intf.c -SRC_C_NSPE += pal_attestation_eat.c -SRC_C_NSPE += pal_attestation_crypto.c -else -SRC_C_NSPE += pal_attestation_empty_intf.c -endif - -INCLUDE= -I$(SOURCE)/platform/targets/$(TARGET)/nspe \ - -I$(SOURCE)/platform/targets/$(TARGET)/spe \ - -I$(BUILD)/platform/$(TARGET)/ \ - -I$(SOURCE)/platform/drivers/uart/cmsdk \ - -I$(SOURCE)/platform/drivers/nvmem/ \ - -I$(SOURCE)/platform/drivers/watchdog/cmsdk \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/common \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/crypto \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/inc \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage \ - -I$(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage \ - -VPATH=$(SOURCE)/platform/targets/$(TARGET)/: \ - $(SOURCE)/platform/targets/$(TARGET)/spe: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe: \ - $(SOURCE)/platform/drivers/uart/cmsdk: \ - $(SOURCE)/platform/drivers/nvmem: \ - $(SOURCE)/platform/drivers/watchdog/cmsdk: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/common: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/crypto: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/initial_attestation/ext/src: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/internal_trusted_storage: \ - $(SOURCE)/platform/targets/$(TARGET)/nspe/protected_storage: \ - -all: build - -ifeq (${PSA_IPC_IMPLEMENTED},1) -build: mkdir build_nspe_pal build_spe_pal -else -build: mkdir build_nspe_pal -endif - -mkdir: - @mkdir -p $(BUILD)/platform/nspe/ - @mkdir -p $(BUILD)/platform/spe/ - -# BUILD NSPE PAL -build_nspe_pal: build_c_nspe build_asm_nspe pal_nspe.a - -build_c_nspe: $(SRC_C_NSPE:%.c=$(BUILD)/platform/nspe/%.o) -build_asm_nspe: $(SRC_ASM_NSPE:%.s=$(BUILD)/platform/nspe/%.o) - -$(BUILD)/platform/nspe/%.o : %.c - $(CC) $(PAL_CDEFS) $(INCLUDE) -o $@ -c $< - -$(BUILD)/platform/nspe/%.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -pal_nspe.a: - $(AR) $(AR_OPTIONS) $(BUILD)/platform/pal_nspe.a $(BUILD)/platform/nspe/*.o - -# BUILD SPE PAL -build_spe_pal: build_driver_sp - -build_driver_sp: build_c_driver_sp build_asm_driver_sp - -build_c_driver_sp: $(SRC_C_DRIVER_SP:%.c=$(BUILD)/platform/spe/%_driver_sp.o) -build_asm_driver_sp: $(SRC_ASM_DRIVER_SP:%.s=$(BUILD)/platform/spe/%_driver_sp.o) - -# Generated %_driver_sp.o(s) are used in spbuild.mk to create final driver_partition.a -$(BUILD)/platform/spe/%_driver_sp.o : %.c - $(CC) $(INCLUDE) -DSPE_BUILD -o $@ -c $< - -$(BUILD)/platform/spe/%_driver_sp.o : %.s - $(AS) $(INCLUDE) -o $@ $< - -clean: - @rm -rf $(BUILD)/platform/nspe/* $(BUILD)/platform/spe/*.a From 3c51c1964f3f6655ac13b14d7cb9207262601765 Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Wed, 17 Jul 2019 16:52:40 +0530 Subject: [PATCH 07/54] Removing dead code in val_target.c Signed-off-by: Gowtham Siddarth --- api-tests/val/common/val_target.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/api-tests/val/common/val_target.c b/api-tests/val/common/val_target.c index 3564c7d9..f6561f82 100644 --- a/api-tests/val/common/val_target.c +++ b/api-tests/val/common/val_target.c @@ -44,10 +44,6 @@ STATIC_DECLARE val_status_t val_target_cfg_get_next(void **blob) if (*blob == NULL) { *blob = (void *) &target_database; - if (blob == NULL) - { - return VAL_STATUS_NOT_FOUND; - } hdr = *blob; /* Sanity check signature and version here */ From 37ebf43192da7746ab1364cfd97af20e6efd3a10 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Tue, 30 Jul 2019 15:18:09 +0530 Subject: [PATCH 08/54] PSA Storage changes in align with 1.0.0 spec version. Signed-off-by: Vinay Kumar Kotegowder --- .../test_s001/test_its_data.h | 35 +++--- .../test_s001/test_ps_data.h | 35 +++--- .../test_s001/test_s001.c | 34 ++--- .../test_s001/test_s001.h | 8 +- .../test_s002/test_its_data.h | 44 ++++--- .../test_s002/test_ps_data.h | 44 ++++--- .../test_s002/test_s002.c | 88 +++++++------ .../test_s002/test_s002.h | 8 +- .../test_s003/test_its_data.h | 9 +- .../test_s003/test_ps_data.h | 8 +- .../test_s003/test_s003.c | 13 +- .../test_s003/test_s003.h | 8 +- .../test_s004/test_its_data.h | 15 ++- .../test_s004/test_ps_data.h | 15 ++- .../test_s004/test_s004.c | 33 ++--- .../test_s004/test_s004.h | 8 +- .../test_s005/test_its_data.h | 14 +-- .../test_s005/test_ps_data.h | 14 +-- .../test_s005/test_s005.c | 23 ++-- .../test_s005/test_s005.h | 8 +- .../test_s006/test_its_data.h | 17 ++- .../test_s006/test_ps_data.h | 17 ++- .../test_s006/test_s006.c | 12 +- .../test_s006/test_s006.h | 8 +- .../test_s007/test_its_data.h | 21 ++-- .../test_s007/test_ps_data.h | 21 ++-- .../test_s007/test_s007.c | 42 ++++--- .../test_s007/test_s007.h | 8 +- .../test_s008/test_its_data.h | 19 ++- .../test_s008/test_ps_data.h | 19 ++- .../test_s008/test_s008.c | 47 ++++--- .../test_s008/test_s008.h | 8 +- .../test_s009/test_its_data.h | 25 ++-- .../test_s009/test_ps_data.h | 25 ++-- .../test_s009/test_s009.c | 33 ++--- .../test_s009/test_s009.h | 8 +- .../test_s010/test_its_data.h | 11 +- .../test_s010/test_ps_data.h | 11 +- .../test_s010/test_s010.c | 17 ++- .../test_s010/test_s010.h | 8 +- .../protected_storage/test_p011/test_p011.c | 27 ++-- .../protected_storage/test_p011/test_p011.h | 6 +- .../test_p011/test_ps_data.h | 26 ++-- .../protected_storage/test_p012/test_p012.c | 41 +++--- .../protected_storage/test_p012/test_p012.h | 6 +- .../test_p012/test_ps_data.h | 33 +++-- .../protected_storage/test_p013/test_p013.c | 40 +++--- .../protected_storage/test_p013/test_p013.h | 6 +- .../test_p013/test_ps_data.h | 32 ++--- .../protected_storage/test_p014/test_p014.c | 16 +-- .../protected_storage/test_p014/test_p014.h | 6 +- .../test_p014/test_ps_data.h | 16 +-- .../protected_storage/test_p015/test_p015.c | 4 +- .../protected_storage/test_p015/test_p015.h | 6 +- .../test_p015/test_ps_data.h | 7 +- .../protected_storage/test_p016/test.cmake | 24 ++++ .../test_p016/test_entry_p016.c | 53 ++++++++ .../protected_storage/test_p016/test_p016.c | 118 ++++++++++++++++++ .../protected_storage/test_p016/test_p016.h | 30 +++++ .../test_p016/test_ps_data.h | 76 +++++++++++ .../protected_storage/test_p017/test.cmake | 24 ++++ .../test_p017/test_entry_p017.c | 53 ++++++++ .../protected_storage/test_p017/test_p017.c | 96 ++++++++++++++ .../protected_storage/test_p017/test_p017.h | 30 +++++ .../test_p017/test_ps_data.h | 58 +++++++++ .../dev_apis/protected_storage/testsuite.db | 2 + api-tests/docs/psa_its_testlist.md | 28 ++--- api-tests/docs/psa_ps_testlist.md | 50 ++++---- api-tests/docs/sw_requirements.md | 23 +--- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- .../pal_internal_trusted_storage_intf.c | 34 ++--- .../pal_protected_storage_intf.c | 44 +++---- 81 files changed, 1427 insertions(+), 819 deletions(-) create mode 100644 api-tests/dev_apis/protected_storage/test_p016/test.cmake create mode 100644 api-tests/dev_apis/protected_storage/test_p016/test_entry_p016.c create mode 100644 api-tests/dev_apis/protected_storage/test_p016/test_p016.c create mode 100644 api-tests/dev_apis/protected_storage/test_p016/test_p016.h create mode 100644 api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h create mode 100644 api-tests/dev_apis/protected_storage/test_p017/test.cmake create mode 100644 api-tests/dev_apis/protected_storage/test_p017/test_entry_p017.c create mode 100644 api-tests/dev_apis/protected_storage/test_p017/test_p017.c create mode 100644 api-tests/dev_apis/protected_storage/test_p017/test_p017.h create mode 100644 api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h index af95d04b..4372bb18 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h @@ -20,62 +20,61 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; -static struct psa_its_info_t info; +static struct psa_storage_info_t info; static const test_data s001_data[] = { { 0, 0 /* Unused Index0 */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_UID_NOT_FOUND /* Call the get API when no UID is set */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call the get API when no UID is set */ }, { - VAL_ITS_GET_INFO, PSA_ITS_ERROR_UID_NOT_FOUND /* Call the get_info API when no UID is set */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call the get_info API when no UID is set */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_UID_NOT_FOUND /* Call the remove API when no UID is set */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call the remove API when no UID is set */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity with UID1 */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with UID1 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity with UID2 */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with UID2 */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove UID1 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID1 */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_UID_NOT_FOUND /* Call get API for UID1 */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID1 */ }, { - VAL_ITS_GET_INFO, PSA_ITS_ERROR_UID_NOT_FOUND /* Call get_info API for UID1 */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info API for UID1 */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_UID_NOT_FOUND /* Call remove API for UID1 */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID1 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity again with UID1 */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity again with UID1 */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_UID_NOT_FOUND /* Call get API for UID not same as UID1 or UID2 */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID not same as UID1 or UID2 */ }, { - VAL_ITS_GET_INFO, PSA_ITS_ERROR_UID_NOT_FOUND /* Call get_info for UID not same as UID1 or UID2 */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info for UID not same as UID1 or UID2 */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_UID_NOT_FOUND /* Call remove API for UID not same as UID1 or UID2 */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID not same as UID1 or UID2 */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove UID1 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID1 */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove UID2 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID2 */ }, }; #endif /* _TEST_S001_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h index 20130585..283ff861 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h @@ -20,62 +20,61 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; -static struct psa_ps_info_t info; +static struct psa_storage_info_t info; static const test_data s001_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_GET, PSA_PS_ERROR_UID_NOT_FOUND /* Call the get API when no UID is set */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call the get API when no UID is set */ }, { - VAL_PS_GET_INFO, PSA_PS_ERROR_UID_NOT_FOUND /* Call the get_info API when no UID is set */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call the get_info API when no UID is set */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_UID_NOT_FOUND /* Call the remove API when no UID is set */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call the remove API when no UID is set */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity with UID1 */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with UID1 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity with UID2 */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with UID2 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove UID1 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID1 */ }, { - VAL_PS_GET, PSA_PS_ERROR_UID_NOT_FOUND /* Call get API for UID1 */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID1 */ }, { - VAL_PS_GET_INFO, PSA_PS_ERROR_UID_NOT_FOUND /* Call get_info API for UID1 */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info API for UID1 */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_UID_NOT_FOUND /* Call remove API for UID1 */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID1 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity again with UID1 */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity again with UID1 */ }, { - VAL_PS_GET, PSA_PS_ERROR_UID_NOT_FOUND /* Call get API for UID not same as UID1 or UID2 */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID not same as UID1 or UID2 */ }, { - VAL_PS_GET_INFO, PSA_PS_ERROR_UID_NOT_FOUND /* Call get_info for UID not same as UID1 or UID2 */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info for UID not same as UID1 or UID2 */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_UID_NOT_FOUND /* Call remove API for UID not same as UID1 or UID2 */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID not same as UID1 or UID2 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove UID1 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID1 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove UID2 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID2 */ }, }; #endif /* _TEST_S001_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c index 3eabe5b5..ed948b78 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c @@ -36,13 +36,13 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; -static int32_t sst_calls_without_set_call(psa_sst_uid_t p_uid) +static int32_t sst_calls_without_set_call(psa_storage_uid_t p_uid) { - uint32_t status; + uint32_t status, p_data_length = 0; /* get() without using set() before */ val->print(PRINT_TEST, "[Check 1] Call get API for UID %d which is not set\n", p_uid); - status = SST_FUNCTION(s001_data[1].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(s001_data[1].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status,s001_data[1].status,TEST_CHECKPOINT_NUM(1)); /* get_info() without using set() before */ @@ -58,16 +58,18 @@ static int32_t sst_calls_without_set_call(psa_sst_uid_t p_uid) return VAL_STATUS_SUCCESS; } -static int32_t sst_set_and_remove(psa_sst_uid_t p_uid) +static int32_t sst_set_and_remove(psa_storage_uid_t p_uid) { uint32_t status; /* set() a UID1 */ - status = SST_FUNCTION(s001_data[4].api, p_uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(s001_data[4].api, p_uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s001_data[4].status, TEST_CHECKPOINT_NUM(4)); /* Also set() with a different UID */ - status = SST_FUNCTION(s001_data[5].api, p_uid + 1, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(s001_data[5].api, p_uid + 1, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s001_data[5].status, TEST_CHECKPOINT_NUM(5)); /* remove() UID1 */ @@ -77,13 +79,13 @@ static int32_t sst_set_and_remove(psa_sst_uid_t p_uid) return VAL_STATUS_SUCCESS; } -static int32_t sst_calls_after_uid_remove(psa_sst_uid_t p_uid) +static int32_t sst_calls_after_uid_remove(psa_storage_uid_t p_uid) { - uint32_t status; + uint32_t status, p_data_length = 0; /* get() for UID which is removed */ val->print(PRINT_TEST, "[Check 4] Call get API for UID %d which is removed\n", p_uid); - status = SST_FUNCTION(s001_data[7].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(s001_data[7].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s001_data[7].status, TEST_CHECKPOINT_NUM(7)); /* get_info() for UID which is removed */ @@ -99,18 +101,20 @@ static int32_t sst_calls_after_uid_remove(psa_sst_uid_t p_uid) return VAL_STATUS_SUCCESS; } -static int32_t sst_calls_with_different_uid(psa_sst_uid_t p_uid) +static int32_t sst_calls_with_different_uid(psa_storage_uid_t p_uid) { - uint32_t status; + uint32_t status, p_data_length = 0; /* set() a UID */ val->print(PRINT_TEST, "Set storage for UID %d\n", p_uid); - status = SST_FUNCTION(s001_data[10].api, p_uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(s001_data[10].api, p_uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s001_data[10].status, TEST_CHECKPOINT_NUM(10)); /* get() for different UID then set UID */ val->print(PRINT_TEST, "[Check 7] Call get API for different UID %d\n", p_uid); - status = SST_FUNCTION(s001_data[11].api, p_uid-1, 0, TEST_BUFF_SIZE - 1, read_buff); + status = SST_FUNCTION(s001_data[11].api, p_uid-1, 0, TEST_BUFF_SIZE - 1, read_buff, + &p_data_length); TEST_ASSERT_EQUAL(status, s001_data[11].status, TEST_CHECKPOINT_NUM(11)); /* get_info() for different UID then set UID */ @@ -130,7 +134,7 @@ static int32_t sst_calls_with_different_uid(psa_sst_uid_t p_uid) return VAL_STATUS_SUCCESS; } -static int32_t sst_remove_stray_uid(psa_sst_uid_t p_uid) +static int32_t sst_remove_stray_uid(psa_storage_uid_t p_uid) { uint32_t status; @@ -144,7 +148,7 @@ static int32_t sst_remove_stray_uid(psa_sst_uid_t p_uid) int32_t psa_sst_uid_not_found(security_t caller) { int32_t test_status; - psa_sst_uid_t uid = UID_BASE_VALUE + 6; + psa_storage_uid_t uid = UID_BASE_VALUE + 6; test_status = sst_calls_without_set_call(uid); if (test_status != VAL_STATUS_SUCCESS) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h index af42fef8..608f92f5 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s001) +#define test_entry CONCAT(test_entry_, s001) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p001) +#define test_entry CONCAT(test_entry_, p001) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h index 303b25fd..e3ac2cc3 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h @@ -20,25 +20,23 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define PSA_SST_FLAG_WRITE_ONCE PSA_ITS_FLAG_WRITE_ONCE -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; -static struct psa_its_info_t orig_info; -static struct psa_its_info_t new_info; +static struct psa_storage_info_t orig_info; +static struct psa_storage_info_t new_info; static const test_data s002_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage with create flag value 0 */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage with create flag value 0 */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Call the get_info API to validate the attributes */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the attributes */ }, { 0, 0 /* Index not used as check for get info size */ @@ -47,16 +45,16 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Change the flag to WRITE_ONCE using set API */ + VAL_ITS_SET, PSA_SUCCESS /* Change the flag to WRITE_ONCE using set API */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -65,28 +63,28 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_WRITE_ONCE /* Storage should not be removed after WRITE_ONCE flag */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed after WRITE_ONCE flag */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a storage with different UID and flag value WRITE_ONCE */ + VAL_ITS_SET, PSA_SUCCESS /* Create a storage with different UID and flag value WRITE_ONCE */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -95,13 +93,13 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_ITS_SET, PSA_ITS_ERROR_WRITE_ONCE /* Try to set different size for same UID and flag value */ + VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Try to set different size for same UID and flag value */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -110,19 +108,19 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_SET, PSA_ITS_ERROR_WRITE_ONCE /* Setting flag to zero for UID should fail */ + VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Setting flag to zero for UID should fail */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ }, { 0, 0 /* Index not used as check for get info size */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h index 19e88b72..4e7b1f70 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h @@ -20,25 +20,23 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define PSA_SST_FLAG_WRITE_ONCE PSA_PS_FLAG_WRITE_ONCE -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; -static struct psa_ps_info_t orig_info; -static struct psa_ps_info_t new_info; +static struct psa_storage_info_t orig_info; +static struct psa_storage_info_t new_info; static const test_data s002_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage with create flag value 0 */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage with create flag value 0 */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Call the get_info API to validate the attributes */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the attributes */ }, { 0, 0 /* Index not used as check for get info size */ @@ -47,16 +45,16 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Change the flag to WRITE_ONCE using set API */ + VAL_PS_SET, PSA_SUCCESS /* Change the flag to WRITE_ONCE using set API */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -65,28 +63,28 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_WRITE_ONCE /* Storage should not be removed after WRITE_ONCE flag */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed after WRITE_ONCE flag */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create storage with different UID and flag value WRITE_ONCE */ + VAL_PS_SET, PSA_SUCCESS /* Create storage with different UID and flag value WRITE_ONCE */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -95,13 +93,13 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_PS_SET, PSA_PS_ERROR_WRITE_ONCE /* Try to set different size for same UID and flag value */ + VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Try to set different size for same UID and flag value */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ }, { 0, 0 /* Index not used as check for get info size */ @@ -110,19 +108,19 @@ static const test_data s002_data[] = { 0, 0 /* Index not used as check for get info flag */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_SET, PSA_PS_ERROR_WRITE_ONCE /* Setting flag to zero for UID should fail */ + VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Setting flag to zero for UID should fail */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_WRITE_ONCE /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ }, { 0, 0 /* Index not used as check for get info size */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c index 4fea4d61..ae731ae7 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c @@ -37,48 +37,51 @@ client_test_t test_s002_sst_list[] = { int32_t psa_sst_update_write_once_flag_after_create(security_t caller) { - uint32_t status; - psa_sst_uid_t uid = UID_WRITE_ONCE_1; + uint32_t status, p_data_length = 0; + psa_storage_uid_t uid = UID_WRITE_ONCE_1; uint8_t write_buff[TEST_BUFF_SIZE/2] = {0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA, 0xBE}; uint8_t read_buff[TEST_BUFF_SIZE/2] = {0}; uint8_t write_buff_new[TEST_BUFF_SIZE/4] = {0xFF, 0xFF, 0xFF, 0xFF}; /* set() data without a WRITE_ONCE flag */ - status = SST_FUNCTION(s002_data[1].api, uid, TEST_BUFF_SIZE/2, write_buff, 0); + status = SST_FUNCTION(s002_data[1].api, uid, TEST_BUFF_SIZE/2, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s002_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Check that get_info() returns correct attributes; also store for reference for later */ status = SST_FUNCTION(s002_data[2].api, uid, &orig_info); TEST_ASSERT_EQUAL(status, s002_data[2].status, TEST_CHECKPOINT_NUM(2)); TEST_ASSERT_EQUAL(orig_info.size, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(3)); - TEST_ASSERT_EQUAL(orig_info.flags, 0, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(orig_info.flags, PSA_STORAGE_FLAG_NONE, TEST_CHECKPOINT_NUM(4)); /* Check for data consistency using get() */ - status = SST_FUNCTION(s002_data[5].api, uid, 0, TEST_BUFF_SIZE/2, read_buff); + status = SST_FUNCTION(s002_data[5].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s002_data[5].status, TEST_CHECKPOINT_NUM(5)); - TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(7)); /* set() with WRITE_ONCE_FLAG */ val->print(PRINT_TEST, "[Check 1] Update the flag of UID %d with WRITE_ONCE flag\n", uid); status = SST_FUNCTION(s002_data[7].api, uid, TEST_BUFF_SIZE/4, write_buff_new, - PSA_SST_FLAG_WRITE_ONCE); - TEST_ASSERT_EQUAL(status, s002_data[7].status, TEST_CHECKPOINT_NUM(7)); + PSA_STORAGE_FLAG_WRITE_ONCE); + TEST_ASSERT_EQUAL(status, s002_data[7].status, TEST_CHECKPOINT_NUM(8)); /* Check that info is updated, after new set */ status = SST_FUNCTION(s002_data[8].api, uid, &new_info); - TEST_ASSERT_EQUAL(status, s002_data[8].status, TEST_CHECKPOINT_NUM(8)); - TEST_ASSERT_EQUAL(new_info.size, new_info.size, TEST_CHECKPOINT_NUM(9)); - TEST_ASSERT_EQUAL(new_info.flags, new_info.flags, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, s002_data[8].status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(new_info.size, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(new_info.flags, PSA_STORAGE_FLAG_WRITE_ONCE, TEST_CHECKPOINT_NUM(11)); /* Check that data contents are preserved which were written with WRITE_ONCE_FLAG originally */ - status = SST_FUNCTION(s002_data[11].api, uid, 0, TEST_BUFF_SIZE/4, read_buff); - TEST_ASSERT_EQUAL(status, s002_data[11].status, TEST_CHECKPOINT_NUM(11)); - TEST_ASSERT_MEMCMP(write_buff_new, read_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(12)); + status = SST_FUNCTION(s002_data[11].api, uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s002_data[11].status, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_MEMCMP(write_buff_new, read_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(14)); /* remove() the UID */ val->print(PRINT_TEST, "[Check 2] Try to remove the UID %d having WRITE_ONCE flag\n", uid); status = SST_FUNCTION(s002_data[13].api, uid); - TEST_ASSERT_EQUAL(status, s002_data[13].status, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, s002_data[13].status, TEST_CHECKPOINT_NUM(15)); return VAL_STATUS_SUCCESS; } @@ -86,8 +89,8 @@ int32_t psa_sst_update_write_once_flag_after_create(security_t caller) int32_t psa_sst_create_with_write_once_flag(security_t caller) { - uint32_t status; - psa_sst_uid_t uid = UID_WRITE_ONCE_2; + uint32_t status, p_data_length = 0; + psa_storage_uid_t uid = UID_WRITE_ONCE_2; uint8_t write_buff[TEST_BUFF_SIZE] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; uint8_t read_buff[TEST_BUFF_SIZE] = {0}; @@ -98,64 +101,67 @@ int32_t psa_sst_create_with_write_once_flag(security_t caller) /* Set data for a UID using WRITE_ONCE flag */ val->print(PRINT_TEST, "[Check 3] Create a new UID %d with WRITE_ONCE flag\n", uid); status = SST_FUNCTION(s002_data[14].api, uid, TEST_BUFF_SIZE, write_buff, - PSA_SST_FLAG_WRITE_ONCE); - TEST_ASSERT_EQUAL(status, s002_data[14].status, TEST_CHECKPOINT_NUM(14)); + PSA_STORAGE_FLAG_WRITE_ONCE); + TEST_ASSERT_EQUAL(status, s002_data[14].status, TEST_CHECKPOINT_NUM(16)); /* Check that remove() fails with PSA_SST_ERROR_WRITE_ONCE */ val->print(PRINT_TEST, "[Check 4] Try to remove the UID %d having WRITE_ONCE flag\n", uid); status = SST_FUNCTION(s002_data[15].api, uid); - TEST_ASSERT_EQUAL(status, s002_data[15].status, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, s002_data[15].status, TEST_CHECKPOINT_NUM(17)); /* Check data consistency using get()*/ - status = SST_FUNCTION(s002_data[16].api, uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, s002_data[16].status, TEST_CHECKPOINT_NUM(16)); - TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(17)); + status = SST_FUNCTION(s002_data[16].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s002_data[16].status, TEST_CHECKPOINT_NUM(18)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(19)); + TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(20)); /* Check that info values is as expected */ status = SST_FUNCTION(s002_data[18].api, uid, &orig_info); - TEST_ASSERT_EQUAL(status, s002_data[18].status, TEST_CHECKPOINT_NUM(18)); - TEST_ASSERT_EQUAL(orig_info.size, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(19)); - TEST_ASSERT_EQUAL(orig_info.flags, PSA_SST_FLAG_WRITE_ONCE, TEST_CHECKPOINT_NUM(20)); + TEST_ASSERT_EQUAL(status, s002_data[18].status, TEST_CHECKPOINT_NUM(21)); + TEST_ASSERT_EQUAL(orig_info.size, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(22)); + TEST_ASSERT_EQUAL(orig_info.flags, PSA_STORAGE_FLAG_WRITE_ONCE, TEST_CHECKPOINT_NUM(23)); /* Try to overwrite using set() with same UID as used before with WRITE_ONCE_FLAG */ val->print(PRINT_TEST, "[Check 5] Try to change the length of write_once UID %d\n", uid); status = SST_FUNCTION(s002_data[21].api, uid, (TEST_BUFF_SIZE + 1), write_buff_new, - PSA_SST_FLAG_WRITE_ONCE); - TEST_ASSERT_EQUAL(status, s002_data[21].status, TEST_CHECKPOINT_NUM(21)); + PSA_STORAGE_FLAG_WRITE_ONCE); + TEST_ASSERT_EQUAL(status, s002_data[21].status, TEST_CHECKPOINT_NUM(24)); /* Check that remove() still fails with PSA_SST_ERROR_WRITE_ONCE */ val->print(PRINT_TEST, "[Check 6] Check UID removal still fails\n", 0); status = SST_FUNCTION(s002_data[22].api, uid); - TEST_ASSERT_EQUAL(status, s002_data[22].status, TEST_CHECKPOINT_NUM(22)); + TEST_ASSERT_EQUAL(status, s002_data[22].status, TEST_CHECKPOINT_NUM(25)); /* Check that info is preserved */ status = SST_FUNCTION(s002_data[23].api, uid, &new_info); - TEST_ASSERT_EQUAL(status, s002_data[23].status, TEST_CHECKPOINT_NUM(23)); - TEST_ASSERT_EQUAL(new_info.size, orig_info.size, TEST_CHECKPOINT_NUM(24)); - TEST_ASSERT_EQUAL(new_info.flags, orig_info.flags, TEST_CHECKPOINT_NUM(25)); + TEST_ASSERT_EQUAL(status, s002_data[23].status, TEST_CHECKPOINT_NUM(26)); + TEST_ASSERT_EQUAL(new_info.size, orig_info.size, TEST_CHECKPOINT_NUM(27)); + TEST_ASSERT_EQUAL(new_info.flags, orig_info.flags, TEST_CHECKPOINT_NUM(28)); /* Check that data contents are preserved which were written with WRITE_ONCE_FLAG originally */ - status = SST_FUNCTION(s002_data[26].api, uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, s002_data[26].status, TEST_CHECKPOINT_NUM(26)); - TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(27)); + status = SST_FUNCTION(s002_data[26].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s002_data[26].status, TEST_CHECKPOINT_NUM(29)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(30)); + TEST_ASSERT_MEMCMP(write_buff, read_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(31)); /* Try to overwrite using set() with same UID as used before without WRITE_ONCE_FLAG */ val->print(PRINT_TEST, "[Check 7] Try to change the WRITE_ONCE flag to None for UID %d\n", uid); new_info.size = 0; new_info.flags = 0; - status = SST_FUNCTION(s002_data[28].api, uid, (TEST_BUFF_SIZE - 1), write_buff_new, 0); - TEST_ASSERT_EQUAL(status, s002_data[28].status, TEST_CHECKPOINT_NUM(28)); + status = SST_FUNCTION(s002_data[28].api, uid, (TEST_BUFF_SIZE - 1), write_buff_new, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, s002_data[28].status, TEST_CHECKPOINT_NUM(32)); /* Check that remove() still fails with PSA_SST_ERROR_WRITE_ONCE */ val->print(PRINT_TEST, "[Check 8] Check UID removal still fails\n", 0); status = SST_FUNCTION(s002_data[29].api, uid); - TEST_ASSERT_EQUAL(status, s002_data[29].status, TEST_CHECKPOINT_NUM(29)); + TEST_ASSERT_EQUAL(status, s002_data[29].status, TEST_CHECKPOINT_NUM(33)); /* Check that info is preserved */ status = SST_FUNCTION(s002_data[30].api, uid, &new_info); - TEST_ASSERT_EQUAL(status, s002_data[30].status, TEST_CHECKPOINT_NUM(30)); - TEST_ASSERT_EQUAL(new_info.size, orig_info.size, TEST_CHECKPOINT_NUM(31)); - TEST_ASSERT_EQUAL(new_info.flags, orig_info.flags, TEST_CHECKPOINT_NUM(32)); + TEST_ASSERT_EQUAL(status, s002_data[30].status, TEST_CHECKPOINT_NUM(34)); + TEST_ASSERT_EQUAL(new_info.size, orig_info.size, TEST_CHECKPOINT_NUM(35)); + TEST_ASSERT_EQUAL(new_info.flags, orig_info.flags, TEST_CHECKPOINT_NUM(36)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h index 91c7aef2..b5711414 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s002) +#define test_entry CONCAT(test_entry_, s002) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p002) +#define test_entry CONCAT(test_entry_, p002) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h index 511e418b..4bb3e650 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h @@ -20,12 +20,11 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define PSA_SST_SUCCESS PSA_ITS_SUCCESS -#define psa_sst_uid_t psa_its_uid_t +#define PSA_SST_SUCCESS PSA_SUCCESS typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; static const test_data s003_data[] = { @@ -33,10 +32,10 @@ static const test_data s003_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_ERROR_INSUFFICIENT_SPACE /* Call set API till insufficent space */ + VAL_ITS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Call set API till insufficent space */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the UID created */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the UID created */ }, }; #endif /* _TEST_S003_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h index db48c35b..d3d8806e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h @@ -20,12 +20,10 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define PSA_SST_SUCCESS PSA_PS_SUCCESS -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data s003_data[] = { @@ -33,10 +31,10 @@ static const test_data s003_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_ERROR_INSUFFICIENT_SPACE /* Call set API till insufficent space */ + VAL_PS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Call set API till insufficent space */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID created */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID created */ }, }; #endif /* _TEST_S003_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c index fcd9a081..1f7578e8 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c @@ -41,8 +41,8 @@ static char test_desc[2][80] = { int32_t psa_sst_insufficient_space(security_t caller) { - uint32_t status = PSA_SST_SUCCESS; - psa_sst_uid_t uid; + uint32_t status = PSA_SUCCESS; + psa_storage_uid_t uid; uint32_t count = 0, results[NUM_ITERATIONS] = {0}; int i = 0; @@ -51,12 +51,13 @@ int32_t psa_sst_insufficient_space(security_t caller) { val->print(PRINT_TEST, "[Check %d] ", i + 1); val->print(PRINT_TEST, &test_desc[i][0], 0); - for (uid = TEST_BASE_UID_VALUE; status == PSA_SST_SUCCESS; uid++) + for (uid = TEST_BASE_UID_VALUE; status == PSA_SUCCESS; uid++) { val->print(PRINT_INFO, "Setting 0x%x bytes for ", TEST_BUFF_SIZE); val->print(PRINT_INFO, "UID %d\n", uid); - status = SST_FUNCTION(s003_data[1].api, uid, TEST_BUFF_SIZE, write_buff, 0); - if (status != PSA_SST_SUCCESS) + status = SST_FUNCTION(s003_data[1].api, uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); + if (status != PSA_SUCCESS) { val->print(PRINT_INFO, "UID %d set failed due to insufficient space\n", uid); break; @@ -74,7 +75,7 @@ int32_t psa_sst_insufficient_space(security_t caller) { val->print(PRINT_INFO, "Removing UID %d\n", uid); status = SST_FUNCTION(s003_data[2].api, uid); - if (status != PSA_SST_SUCCESS) + if (status != PSA_SUCCESS) break; } if (count) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h index ab2d6aa6..dc01392b 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s003) +#define test_entry CONCAT(test_entry_, s003) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p003) +#define test_entry CONCAT(test_entry_, p003) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h index b41dc1be..e12f221c 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h @@ -20,11 +20,10 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; static const test_data s004_data[] = { @@ -32,25 +31,25 @@ static const test_data s004_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API after set API failure */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after set API failure */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* For same UID set the length as half of previous */ + VAL_ITS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_INCORRECT_SIZE /* Call get with incorrect length */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get with incorrect length */ }, { 0, 0 /* No data should be returned */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with correct length */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with correct length */ }, { 0, 0 /* No data should be returned */ @@ -59,7 +58,7 @@ static const test_data s004_data[] = { 0, 0 /* Check that we should not be able to access the old data */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the valid storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ }, }; #endif /* _TEST_S004_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h index baaf194f..7773c674 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h @@ -20,11 +20,10 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data s004_data[] = { @@ -32,25 +31,25 @@ static const test_data s004_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API after set API failure */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after set API failure */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* For same UID set the length as half of previous */ + VAL_PS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ }, { - VAL_PS_GET, PSA_PS_ERROR_INCORRECT_SIZE /* Call get with incorrect length */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get with incorrect length */ }, { 0, 0 /* No data should be returned */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with correct length */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with correct length */ }, { 0, 0 /* No data should be returned */ @@ -59,7 +58,7 @@ static const test_data s004_data[] = { 0, 0 /* Check that we should not be able to access the old data */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the valid storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ }, }; #endif /* _TEST_S004_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c index 9db24a79..60e6b9c6 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c @@ -32,53 +32,58 @@ client_test_t test_s004_sst_list[] = { NULL, }; -static psa_sst_uid_t uid = UID_BASE_VALUE + 5; +static psa_storage_uid_t uid = UID_BASE_VALUE + 5; static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x30, 0x50, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; int32_t psa_sst_get_data_check(security_t caller) { - uint32_t status,j; + uint32_t status, j, p_data_length = 0; /* Set data for UID */ - status = SST_FUNCTION(s004_data[1].api, uid, TEST_BUFF_SIZE, write_buff,0); + status = SST_FUNCTION(s004_data[1].api, uid, TEST_BUFF_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s004_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Call get function and check the data consistency */ - status = SST_FUNCTION(s004_data[2].api, uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(s004_data[2].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s004_data[2].status, TEST_CHECKPOINT_NUM(2)); TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(4)); /* Call the set again for same uid and set the length as half */ - status = SST_FUNCTION(s004_data[4].api, uid, TEST_BUFF_SIZE/2, write_buff, 0); - TEST_ASSERT_EQUAL(status, s004_data[4].status, TEST_CHECKPOINT_NUM(4)); + status = SST_FUNCTION(s004_data[4].api, uid, TEST_BUFF_SIZE/2, write_buff, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, s004_data[4].status, TEST_CHECKPOINT_NUM(5)); /* Call get function with incorrect buffer length */ val->print(PRINT_TEST, "[Check 1] Call get API with incorrect length\n", 0); memset(read_buff, 0, TEST_BUFF_SIZE); - status = SST_FUNCTION(s004_data[5].api, uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, s004_data[5].status, TEST_CHECKPOINT_NUM(5)); + status = SST_FUNCTION(s004_data[5].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s004_data[5].status, TEST_CHECKPOINT_NUM(6)); for (j = 0; j < TEST_BUFF_SIZE; j++) { - TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(7)); } + /* Expect p_data_length = 0, when psa get function is not unsuccessful as in previous case */ + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(8)); /* Call get function with CORRECT buffer length */ - status = SST_FUNCTION(s004_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff); - TEST_ASSERT_EQUAL(status, s004_data[7].status, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(8)); + status = SST_FUNCTION(s004_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s004_data[7].status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(11)); /* Check we should not be able to access old set data */ val->print(PRINT_TEST, "[Check 2] Old buffer invalid after length change\n", 0); for (j = TEST_BUFF_SIZE/2; j < TEST_BUFF_SIZE; j++) { - TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(12)); } /* Remove the UID */ status = SST_FUNCTION(s004_data[10].api, uid); - TEST_ASSERT_EQUAL(status, s004_data[10].status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, s004_data[10].status, TEST_CHECKPOINT_NUM(13)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h index f556f85b..b518ec27 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s004) +#define test_entry CONCAT(test_entry_, s004) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p004) +#define test_entry CONCAT(test_entry_, p004) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h index 653f7cc0..ed61509f 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h @@ -20,30 +20,28 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t -#define psa_sst_create_flags_t psa_its_create_flags_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; -static struct psa_its_info_t info; +static struct psa_storage_info_t info; static const test_data s005_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Validate the data using get API */ + VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Validate the data attributes get_info API */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Validate the data attributes get_info API */ }, { 0, 0 /* Index not used */ @@ -52,7 +50,7 @@ static const test_data s005_data[] = { 0, 0 /* Index not used */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the valid storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ }, }; #endif /* _TEST_S005_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h index a961269a..52e35d08 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h @@ -20,30 +20,28 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t -#define psa_sst_create_flags_t psa_ps_create_flags_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; -static struct psa_ps_info_t info; +static struct psa_storage_info_t info; static const test_data s005_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data using get API */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Validate the data attributes get_info API */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the data attributes get_info API */ }, { 0, 0 /* Index not used */ @@ -52,7 +50,7 @@ static const test_data s005_data[] = { 0, 0 /* Index not used */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the valid storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ }, }; #endif /* _TEST_S005_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c index ac7f40bf..ae9ea742 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c @@ -37,41 +37,42 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, 0x0D, 0x0A, 0x1B, 0x0C, 0x5D, 0x0E,\ 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD, 0xCA, 0x0B, 0x3C, 0x0D, 0x2E}; -static int32_t psa_sst_apis_check(psa_sst_uid_t uid, uint32_t data_len, - uint8_t *data_buff, psa_sst_create_flags_t create_flag) +static int32_t psa_sst_apis_check(psa_storage_uid_t uid, uint32_t data_len, + uint8_t *data_buff, psa_storage_create_flags_t create_flag) { - uint32_t status; + uint32_t status, p_data_length = 0; /* Set the UID with the data_len and data_buff */ status = SST_FUNCTION(s005_data[1].api, uid, data_len, data_buff, create_flag); TEST_ASSERT_EQUAL(status, s005_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Call the get function to get the data buffer and match the buffer */ - status = SST_FUNCTION(s005_data[2].api, uid, 0, data_len, read_buff); + status = SST_FUNCTION(s005_data[2].api, uid, 0, data_len, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s005_data[2].status, TEST_CHECKPOINT_NUM(2)); TEST_ASSERT_MEMCMP(read_buff, data_buff, data_len, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(p_data_length, data_len, TEST_CHECKPOINT_NUM(4)); /* Call the get_info function and match the attributes */ status = SST_FUNCTION(s005_data[4].api, uid, &info); - TEST_ASSERT_EQUAL(status, s005_data[4].status, TEST_CHECKPOINT_NUM(4)); - TEST_ASSERT_EQUAL(info.size, data_len, TEST_CHECKPOINT_NUM(5)); - TEST_ASSERT_EQUAL(info.flags, create_flag, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, s005_data[4].status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(info.size, data_len, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(info.flags, create_flag, TEST_CHECKPOINT_NUM(7)); /* Remove the UID */ status = SST_FUNCTION(s005_data[7].api, uid); - TEST_ASSERT_EQUAL(status, s005_data[7].status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, s005_data[7].status, TEST_CHECKPOINT_NUM(8)); return VAL_STATUS_SUCCESS; } int32_t psa_sst_apis_check_success_case(security_t caller) { - psa_sst_uid_t uid = UID_BASE_VALUE + 4; + psa_storage_uid_t uid = UID_BASE_VALUE + 4; uint32_t data_len = 0, status = VAL_STATUS_SUCCESS; /* Calling set function with data_len 1 and valid data pointer */ val->print(PRINT_TEST, "[Check 1] Set UID with data length zero and call storage APIs\n", 0); - if (psa_sst_apis_check(uid, data_len, write_buff, 0)) + if (psa_sst_apis_check(uid, data_len, write_buff, PSA_STORAGE_FLAG_NONE)) { val->print(PRINT_ERROR, "Data Len = %d\n", data_len); return VAL_STATUS_ERROR; @@ -79,7 +80,7 @@ int32_t psa_sst_apis_check_success_case(security_t caller) data_len = TEST_BUFF_SIZE/2; val->print(PRINT_TEST, "[Check 2] Resetting the length check\n", 0); - if (psa_sst_apis_check(uid, data_len, write_buff, 0)) + if (psa_sst_apis_check(uid, data_len, write_buff, PSA_STORAGE_FLAG_NONE)) { val->print(PRINT_ERROR, "Data Len = %d\n", data_len); return VAL_STATUS_ERROR; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h index 84cbf43a..9b472bff 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s005) +#define test_entry CONCAT(test_entry_, s005) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p005) +#define test_entry CONCAT(test_entry_, p005) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h index 4426f2c0..e52525f6 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h @@ -20,34 +20,31 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define PSA_SST_FLAG_WRITE_ONCE PSA_ITS_FLAG_WRITE_ONCE -#define psa_sst_uid_t psa_its_uid_t -#define psa_sst_create_flags_t psa_its_create_flags_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; -static struct psa_its_info_t info; +static struct psa_storage_info_t info; static const test_data s006_data[] = { { - 0, PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED /* This is dummy for index0 */ + 0, PSA_ERROR_NOT_SUPPORTED /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity with different flag values */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with different flag values */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Validate the flag value get_info API */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Validate the flag value get_info API */ }, { 0, 0 /* Index not used */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, { - VAL_ITS_REMOVE, PSA_ITS_ERROR_UID_NOT_FOUND /* Storage entity remove fails */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Storage entity remove fails */ }, }; #endif /* _TEST_S006_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h index 86e1e301..f40f34ba 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h @@ -20,34 +20,31 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define PSA_SST_FLAG_WRITE_ONCE PSA_PS_FLAG_WRITE_ONCE -#define psa_sst_uid_t psa_ps_uid_t -#define psa_sst_create_flags_t psa_ps_create_flags_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; -static struct psa_ps_info_t info; +static struct psa_storage_info_t info; static const test_data s006_data[] = { { - 0, PSA_PS_ERROR_FLAGS_NOT_SUPPORTED /* This is dummy for index0 */ + 0, PSA_ERROR_NOT_SUPPORTED /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity with different flag values */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with different flag values */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Validate the flag value get_info API */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the flag value get_info API */ }, { 0, 0 /* Index not used */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, { - VAL_PS_REMOVE, PSA_PS_ERROR_UID_NOT_FOUND /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Remove the storage entity */ } }; #endif /* _TEST_S006_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c index d1d81bc7..03850f7e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c @@ -36,8 +36,8 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, 0x0D, 0x0A, 0x1B, 0x0C, 0x5D, 0x0E,\ 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD, 0xCA, 0x0B, 0x3C, 0x0D, 0x2E}; -static int32_t psa_sst_remove_api(psa_sst_uid_t uid, uint32_t data_len, - uint8_t *data_buff, psa_sst_create_flags_t create_flag) +static int32_t psa_sst_remove_api(psa_storage_uid_t uid, uint32_t data_len, + uint8_t *data_buff, psa_storage_create_flags_t create_flag) { uint32_t status; @@ -55,9 +55,9 @@ static int32_t psa_sst_remove_api(psa_sst_uid_t uid, uint32_t data_len, int32_t psa_sst_flags_not_supported(security_t caller) { - psa_sst_create_flags_t flag = 0x80000000; + psa_storage_create_flags_t flag = 0x80000000; uint32_t status = VAL_STATUS_SUCCESS; - psa_sst_uid_t uid = UID_BASE_VALUE + 5; + psa_storage_uid_t uid = UID_BASE_VALUE + 5; int32_t test_status; /* Calling set function with different create flag value */ @@ -67,12 +67,12 @@ int32_t psa_sst_flags_not_supported(security_t caller) { /* Create storage with flag value */ status = SST_FUNCTION(s006_data[1].api, uid, TEST_BUFF_SIZE, write_buff, - (flag & (~PSA_SST_FLAG_WRITE_ONCE))); + (flag & (~PSA_STORAGE_FLAG_WRITE_ONCE))); if (status == s006_data[1].status) { test_status = psa_sst_remove_api(uid, TEST_BUFF_SIZE, write_buff, - (flag & (~PSA_SST_FLAG_WRITE_ONCE))); + (flag & (~PSA_STORAGE_FLAG_WRITE_ONCE))); if (test_status != VAL_STATUS_SUCCESS) return test_status; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h index 43adf748..8f55affa 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s006) +#define test_entry CONCAT(test_entry_, s006) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p006) +#define test_entry CONCAT(test_entry_, p006) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h index 550dffb0..82f4cd00 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h @@ -20,11 +20,10 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; static const test_data s007_data[] = { @@ -32,34 +31,34 @@ static const test_data s007_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Increase the length of storage */ + VAL_ITS_SET, PSA_SUCCESS /* Increase the length of storage */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Try to access valid length less than set length */ + VAL_ITS_GET, PSA_SUCCESS /* Try to access valid length less than set length */ }, { 0, 0 /* This is dummy for index5 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Decrease the length of storage */ + VAL_ITS_SET, PSA_SUCCESS /* Decrease the length of storage */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_INCORRECT_SIZE /* Try to access old length */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_INCORRECT_SIZE /* Try to access old length */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Try to access data with correct length */ + VAL_ITS_GET, PSA_SUCCESS /* Try to access data with correct length */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S007_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h index fa032c18..2b996659 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h @@ -20,11 +20,10 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data s007_data[] = { @@ -32,34 +31,34 @@ static const test_data s007_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Increase the length of storage */ + VAL_PS_SET, PSA_SUCCESS /* Increase the length of storage */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Try to access valid length less than set length */ + VAL_PS_GET, PSA_SUCCESS /* Try to access valid length less than set length */ }, { 0, 0 /* This is dummy for index5 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Decrease the length of storage */ + VAL_PS_SET, PSA_SUCCESS /* Decrease the length of storage */ }, { - VAL_PS_GET, PSA_PS_ERROR_INCORRECT_SIZE /* Try to access old length */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ }, { - VAL_PS_GET, PSA_PS_ERROR_INCORRECT_SIZE /* Try to access old length */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Try to access data with correct length */ + VAL_PS_GET, PSA_SUCCESS /* Try to access data with correct length */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S007_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c index 3e1a880d..6bcc2a31 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c @@ -39,51 +39,59 @@ static uint8_t read_buff[TEST_BUFF_SIZE]; int32_t psa_sst_get_incorrect_size(security_t caller) { - psa_sst_uid_t uid = UID_BASE_VALUE + 5; - uint32_t status = VAL_STATUS_SUCCESS; + psa_storage_uid_t uid = UID_BASE_VALUE + 5; + uint32_t status = VAL_STATUS_SUCCESS, p_data_length = 0; /* Set the UID with the data_len and data_buff */ val->print(PRINT_TEST, "Create a valid Storage\n", 0); - status = SST_FUNCTION(s007_data[1].api, uid, TEST_BUFF_SIZE/2, write_buff, 0); + status = SST_FUNCTION(s007_data[1].api, uid, TEST_BUFF_SIZE/2, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s007_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Call set for same UID and increase the length */ val->print(PRINT_TEST, "Increase the length of storage\n", 0); - status = SST_FUNCTION(s007_data[2].api, uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(s007_data[2].api, uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s007_data[2].status, TEST_CHECKPOINT_NUM(2)); /* Access data using get API and old length */ val->print(PRINT_TEST, "[Check 1] Call get API with old length\n", 0); - status = SST_FUNCTION(s007_data[3].api, uid, 0, TEST_BUFF_SIZE/2, read_buff); + status = SST_FUNCTION(s007_data[3].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s007_data[3].status, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(4)); /* Access data using get API and valid length */ - status = SST_FUNCTION(s007_data[4].api, uid, 0, TEST_BUFF_SIZE/4, read_buff); - TEST_ASSERT_EQUAL(status, s007_data[4].status, TEST_CHECKPOINT_NUM(4)); - TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(5)); + status = SST_FUNCTION(s007_data[4].api, uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s007_data[4].status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(7)); /* Decrease the length again */ val->print(PRINT_TEST, "Decrease the length of storage\n", 0); - status = SST_FUNCTION(s007_data[6].api, uid, TEST_BUFF_SIZE/4, write_buff, 0); - TEST_ASSERT_EQUAL(status, s007_data[6].status, TEST_CHECKPOINT_NUM(6)); + status = SST_FUNCTION(s007_data[6].api, uid, TEST_BUFF_SIZE/4, write_buff, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, s007_data[6].status, TEST_CHECKPOINT_NUM(8)); /* Access data using get API and old length */ - status = SST_FUNCTION(s007_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff); - TEST_ASSERT_EQUAL(status, s007_data[7].status, TEST_CHECKPOINT_NUM(7)); + status = SST_FUNCTION(s007_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s007_data[7].status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(10)); /* Access data using get API and old length */ val->print(PRINT_TEST, "[Check 2] Call get API with old length\n", 0); - status = SST_FUNCTION(s007_data[8].api, uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, s007_data[8].status, TEST_CHECKPOINT_NUM(8)); + status = SST_FUNCTION(s007_data[8].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s007_data[8].status, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(12)); /* Access data using correct length */ val->print(PRINT_TEST, "[Check 3] Call get API with valid length\n", 0); - status = SST_FUNCTION(s007_data[9].api, uid, 0, TEST_BUFF_SIZE/4, read_buff); - TEST_ASSERT_EQUAL(status, s007_data[9].status, TEST_CHECKPOINT_NUM(9)); + status = SST_FUNCTION(s007_data[9].api, uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s007_data[9].status, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(14)); /* Remove the UID */ status = SST_FUNCTION(s007_data[10].api, uid); - TEST_ASSERT_EQUAL(status, s007_data[10].status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, s007_data[10].status, TEST_CHECKPOINT_NUM(15)); return status; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h index 5a71e4be..3ecc4292 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s007) +#define test_entry CONCAT(test_entry_, s007) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p007) +#define test_entry CONCAT(test_entry_, p007) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h index 89093d49..cff9e245 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h @@ -20,11 +20,10 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; static const test_data s008_data[] = { @@ -32,43 +31,43 @@ static const test_data s008_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create a valid storage entity with zero flag value */ + VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with zero flag value */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with offset + data_len = total_size */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset + data_len = total_size */ }, { 0, 0 /* This is dummy for index3 */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with offset + data_len < total_size */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset + data_len < total_size */ }, { 0, 0 /* This is dummy for index5 */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with offset = total data_size + 1 */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset = total data_size + 1 */ }, { 0, 0 /* This is dummy for index7 */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_INCORRECT_SIZE /* get API with offset + data_len > total data_size */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* get API with offset + data_len > total data_size */ }, { 0, 0 /* This is dummy for index9 */ }, { - VAL_ITS_GET, PSA_ITS_ERROR_INCORRECT_SIZE /* Call get API with invalid data len and offset zero */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with invalid data len and offset zero */ }, { 0, 0 /* This is dummy for index11 */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with offset = MAX_UINT32 */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset = MAX_UINT32 */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S008_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h index 2b15d358..d66e2a2c 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h @@ -20,11 +20,10 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data s008_data[] = { @@ -32,43 +31,43 @@ static const test_data s008_data[] = { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create a valid storage entity with zero flag value */ + VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with zero flag value */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with offset + data_len = total_size */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len = total_size */ }, { 0, 0 /* This is dummy for index3 */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with offset + data_len < total_size */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len < total_size */ }, { 0, 0 /* This is dummy for index5 */ }, { - VAL_PS_GET, PSA_PS_SUCCESS/* Call get API with offset = total data_size + 1 */ + VAL_PS_GET, PSA_SUCCESS/* Call get API with offset = total data_size + 1 */ }, { 0, 0 /* This is dummy for index7 */ }, { - VAL_PS_GET, PSA_PS_ERROR_INCORRECT_SIZE /* Call get API with offset + data_len > total data_size */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset + data_len > total data_size */ }, { 0, 0 /* This is dummy for index9 */ }, { - VAL_PS_GET, PSA_PS_ERROR_INCORRECT_SIZE /* Call get API with invalid data len and offset zero */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with invalid data len and offset zero */ }, { 0, 0 /* This is dummy for index11 */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with offset = MAX_UINT32 */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with offset = MAX_UINT32 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S008_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c index 8374f36e..df447052 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c @@ -34,48 +34,52 @@ client_test_t test_s008_sst_list[] = { NULL, }; -static psa_sst_uid_t uid = UID_BASE_VALUE + 5; +static psa_storage_uid_t uid = UID_BASE_VALUE + 5; static uint8_t read_buff[TEST_BUFF_SIZE]; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; int32_t psa_sst_invalid_offset_failure(security_t caller) { - uint32_t status, j; + uint32_t status, j, p_data_length = 0; - /* Case where offset = data_size +1 , data_len 0. Also check nothing is returned in read buff*/ + /* Case where offset = data_size +1 , data_len 0. Also check nothing is returned in read buff */ val->print(PRINT_TEST, "[Check 2] Try to access data with varying invalid offset\n", 0); memset(read_buff, 0, TEST_BUFF_SIZE); - status = SST_FUNCTION(s008_data[6].api, uid, TEST_BUFF_SIZE+1, 0, read_buff); - TEST_ASSERT_NOT_EQUAL(status, s008_data[6].status, TEST_CHECKPOINT_NUM(6)); + status = SST_FUNCTION(s008_data[6].api, uid, TEST_BUFF_SIZE+1, 0, read_buff, &p_data_length); + TEST_ASSERT_NOT_EQUAL(status, s008_data[6].status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(9)); for (j = 0; j < TEST_BUFF_SIZE; j++) { - TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(10)); } /* Case where offset = data_size , data_len= 1 Also check nothing is returned in read buff*/ - status = SST_FUNCTION(s008_data[8].api, uid, TEST_BUFF_SIZE, 1, read_buff); - TEST_ASSERT_EQUAL(status, s008_data[8].status, TEST_CHECKPOINT_NUM(8)); + status = SST_FUNCTION(s008_data[8].api, uid, TEST_BUFF_SIZE, 1, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s008_data[8].status, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(12)); for (j = 0; j < TEST_BUFF_SIZE; j++) { - TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(13)); } /* Case where offset = 0 , data_len > data_size Also check nothing is returned in read buff*/ - status = SST_FUNCTION(s008_data[10].api, uid, 0, TEST_BUFF_SIZE+1, read_buff); - TEST_ASSERT_EQUAL(status, s008_data[10].status, TEST_CHECKPOINT_NUM(10)); + status = SST_FUNCTION(s008_data[10].api, uid, 0, TEST_BUFF_SIZE+1, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s008_data[10].status, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(15)); for (j = 0; j < TEST_BUFF_SIZE; j++) { - TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(16)); } /* Try to access data with offset as MAX_UINT32 and length less than buffer size */ - status = SST_FUNCTION(s008_data[12].api, uid, TEST_MAX_UINT32, TEST_BUFF_SIZE/2, read_buff); - TEST_ASSERT_NOT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(12)); + status = SST_FUNCTION(s008_data[12].api, uid, TEST_MAX_UINT32, TEST_BUFF_SIZE/2, read_buff, + &p_data_length); + TEST_ASSERT_NOT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(17)); /* Remove the UID */ status = SST_FUNCTION(s008_data[13].api, uid); - TEST_ASSERT_EQUAL(status, s008_data[13].status, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, s008_data[13].status, TEST_CHECKPOINT_NUM(18)); return VAL_STATUS_SUCCESS; } @@ -83,9 +87,10 @@ int32_t psa_sst_invalid_offset_failure(security_t caller) int32_t psa_sst_valid_offset_success(security_t caller) { uint32_t status, data_len, offset = TEST_BUFF_SIZE; + uint32_t p_data_length = 0; /* Set data for UID */ - status = SST_FUNCTION(s008_data[1].api, uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(s008_data[1].api, uid, TEST_BUFF_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s008_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Case where offset + datalen = data_size */ @@ -94,9 +99,10 @@ int32_t psa_sst_valid_offset_success(security_t caller) { data_len = TEST_BUFF_SIZE - offset; memset(read_buff, 0, TEST_BUFF_SIZE); - status = SST_FUNCTION(s008_data[2].api, uid, offset, data_len, read_buff); + status = SST_FUNCTION(s008_data[2].api, uid, offset, data_len, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s008_data[2].status, TEST_CHECKPOINT_NUM(2)); TEST_ASSERT_MEMCMP(read_buff, write_buff + offset, data_len, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(p_data_length, data_len, TEST_CHECKPOINT_NUM(4)); offset >>= 1; } @@ -105,9 +111,10 @@ int32_t psa_sst_valid_offset_success(security_t caller) /* Case where offset + datalen < data_size */ while (offset > 0) { - status = SST_FUNCTION(s008_data[4].api, uid, offset, data_len, read_buff); - TEST_ASSERT_EQUAL(status, s008_data[4].status, TEST_CHECKPOINT_NUM(4)); - TEST_ASSERT_MEMCMP(read_buff, write_buff + offset, data_len, TEST_CHECKPOINT_NUM(5)); + status = SST_FUNCTION(s008_data[4].api, uid, offset, data_len, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, s008_data[4].status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_MEMCMP(read_buff, write_buff + offset, data_len, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(p_data_length, data_len, TEST_CHECKPOINT_NUM(7)); offset >>= 1; data_len <<= 1; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h index de4cd0d2..e9dee2c2 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s008) +#define test_entry CONCAT(test_entry_, s008) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p008) +#define test_entry CONCAT(test_entry_, p008) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h index 80e7fb1a..8bd31aa0 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h @@ -20,50 +20,49 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; -static struct psa_its_info_t info; +static struct psa_storage_info_t info; static const test_data s009_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Call set API with NULL write buffer and 0 length */ + VAL_ITS_SET, PSA_SUCCESS /* Call set API with NULL write buffer and 0 length */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Verify UID is created */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Verify UID is created */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with NULL write buffer and 0 length */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with NULL write buffer and 0 length */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, { - VAL_ITS_GET_INFO, PSA_ITS_ERROR_UID_NOT_FOUND /* Verify UID is removed */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Verify UID is removed */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Create storage of zero size and valid write buffer */ + VAL_ITS_SET, PSA_SUCCESS /* Create storage of zero size and valid write buffer */ }, { - VAL_ITS_GET_INFO, PSA_ITS_SUCCESS /* Call get_info API to check data size */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Call get_info API to check data size */ }, { 0, 0 /* This is dummy for index8 */ }, { - VAL_ITS_GET, PSA_ITS_SUCCESS /* Call get API with 0 length and NULL read buffer */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with 0 length and NULL read buffer */ }, { - VAL_ITS_SET, PSA_ITS_SUCCESS /* Increase the asset size */ + VAL_ITS_SET, PSA_SUCCESS /* Increase the asset size */ }, { - VAL_ITS_REMOVE, PSA_ITS_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S009_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h index 129bca08..45680dcc 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h @@ -20,50 +20,49 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; -static struct psa_ps_info_t info; +static struct psa_storage_info_t info; static const test_data s009_data[] = { { 0, 0 /* This is dummy for index0 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Call set API with NULL write buffer and 0 length */ + VAL_PS_SET, PSA_SUCCESS /* Call set API with NULL write buffer and 0 length */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Verify UID is created */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Verify UID is created */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with NULL write buffer and 0 length */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with NULL write buffer and 0 length */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, { - VAL_PS_GET_INFO, PSA_PS_ERROR_UID_NOT_FOUND /* Verify UID is removed */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Verify UID is removed */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create storage of zero size and valid write buffer */ + VAL_PS_SET, PSA_SUCCESS /* Create storage of zero size and valid write buffer */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Call get_info API to check data size */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Call get_info API to check data size */ }, { 0, 0 /* This is dummy for index8 */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Call get API with 0 length and NULL read buffer */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with 0 length and NULL read buffer */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Increase the asset size */ + VAL_PS_SET, PSA_SUCCESS /* Increase the asset size */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ }, }; #endif /* _TEST_S009_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c index 4567c666..8b089d55 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c @@ -32,17 +32,17 @@ client_test_t test_s009_sst_list[] = { NULL, }; -static psa_sst_uid_t uid = UID_BASE_VALUE + 5; +static psa_storage_uid_t uid = UID_BASE_VALUE + 5; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; int32_t psa_sst_zero_length_check(security_t caller) { - uint32_t status; + uint32_t status, p_data_length = 0; /* Set data for UID with length 0 and NULL pointer */ val->print(PRINT_TEST, "[Check 1] Call set API with NULL pointer and data length 0\n", 0); - status = SST_FUNCTION(s009_data[1].api, uid, 0, NULL, 0); + status = SST_FUNCTION(s009_data[1].api, uid, 0, NULL, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s009_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Call the get_info function to verify UID created */ @@ -51,42 +51,45 @@ int32_t psa_sst_zero_length_check(security_t caller) /* Call get API with NULL read buffer */ val->print(PRINT_TEST, "[Check 2] Call get API with NULL read buffer and data length 0\n", 0); - status = SST_FUNCTION(s009_data[3].api, uid, 0, 0, NULL); + status = SST_FUNCTION(s009_data[3].api, uid, 0, 0, NULL, &p_data_length); TEST_ASSERT_EQUAL(status, s009_data[3].status, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(4)); /* Remove the UID */ val->print(PRINT_TEST, "[Check 3] Remove the UID\n", 0); status = SST_FUNCTION(s009_data[4].api, uid); - TEST_ASSERT_EQUAL(status, s009_data[4].status, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(status, s009_data[4].status, TEST_CHECKPOINT_NUM(5)); /* Call the get_info function to verify UID is removed */ val->print(PRINT_TEST, "[Check 4] Call get_info API to verify UID removed\n", 0); status = SST_FUNCTION(s009_data[5].api, uid, &info); - TEST_ASSERT_EQUAL(status, s009_data[5].status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(status, s009_data[5].status, TEST_CHECKPOINT_NUM(6)); /* Create UID with length 0 and valid write buffer */ val->print(PRINT_TEST, "[Check 5] Create UID with zero data_len and valid write buffer\n", 0); - status = SST_FUNCTION(s009_data[6].api, uid, 0, write_buff, 0); - TEST_ASSERT_EQUAL(status, s009_data[6].status, TEST_CHECKPOINT_NUM(6)); + status = SST_FUNCTION(s009_data[6].api, uid, 0, write_buff, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, s009_data[6].status, TEST_CHECKPOINT_NUM(7)); /* Call the get_info function and match the attributes */ status = SST_FUNCTION(s009_data[7].api, uid, &info); - TEST_ASSERT_EQUAL(status, s009_data[7].status, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(info.size, 0, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, s009_data[7].status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(info.size, 0, TEST_CHECKPOINT_NUM(9)); /* Call get API with NULL read buffer and valid UID */ val->print(PRINT_TEST, "[Check 8] Call get API with NULL read buffer and data length 0\n", 0); - status = SST_FUNCTION(s009_data[9].api, uid, 0, 0, NULL); - TEST_ASSERT_EQUAL(status, s009_data[9].status, TEST_CHECKPOINT_NUM(9)); + status = SST_FUNCTION(s009_data[9].api, uid, 0, 0, NULL, &p_data_length); + TEST_ASSERT_EQUAL(status, s009_data[9].status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(11)); /* Change the length to test_buff_size */ val->print(PRINT_TEST, "[Check 9] Increase the length\n", 0); - status = SST_FUNCTION(s009_data[10].api, uid, TEST_BUFF_SIZE, write_buff, 0); - TEST_ASSERT_EQUAL(status, s009_data[10].status, TEST_CHECKPOINT_NUM(10)); + status = SST_FUNCTION(s009_data[10].api, uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, s009_data[10].status, TEST_CHECKPOINT_NUM(12)); /* Remove the UID */ status = SST_FUNCTION(s009_data[11].api, uid); - TEST_ASSERT_EQUAL(status, s009_data[11].status, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, s009_data[11].status, TEST_CHECKPOINT_NUM(13)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h index 11b32d17..82f4ded9 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s009) +#define test_entry CONCAT(test_entry_, s009) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p009) +#define test_entry CONCAT(test_entry_, p009) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h index 1a811b11..fde1c760 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h @@ -20,16 +20,21 @@ #include "val_internal_trusted_storage.h" #define SST_FUNCTION val->its_function -#define psa_sst_uid_t psa_its_uid_t typedef struct { enum its_function_code api; - psa_its_status_t status; + psa_status_t status; } test_data; static const test_data s010_data[] = { { - VAL_ITS_SET, PSA_ITS_ERROR_INVALID_ARGUMENTS /* Create with UID value zero should fail */ + VAL_ITS_SET, PSA_ERROR_INVALID_ARGUMENT /* Create with UID value zero should fail */ +}, +{ + VAL_ITS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Call to get_info API for UID 0 should fail */ +}, +{ + VAL_ITS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call to remove API UID value zero should fail */ }, }; #endif /* _TEST_S010_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h index fb06deb9..5d8f2d01 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h @@ -20,16 +20,21 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define psa_sst_uid_t psa_ps_uid_t typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data s010_data[] = { { - VAL_PS_SET, PSA_PS_ERROR_INVALID_ARGUMENT /* Create with UID value zero should fail */ + VAL_PS_SET, PSA_ERROR_INVALID_ARGUMENT /* Create with UID value zero should fail */ +}, +{ + VAL_PS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Call to get_info API for UID 0 should fail */ +}, +{ + VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call to remove API UID value zero should fail */ }, }; #endif /* _TEST_S010_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c index 8e556ce1..7c0ca607 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c @@ -37,13 +37,24 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = {0xFF}; int32_t psa_sst_uid_value_zero_check(security_t caller) { int32_t status; - psa_sst_uid_t uid = 0; + psa_storage_uid_t uid = 0; + struct psa_storage_info_t info; /* Set with UID value zero should fail */ - val->print(PRINT_TEST, "[Check 1] Creating storage with UID 0 should fail\n", 0 ); - status = SST_FUNCTION(s010_data[0].api, uid, TEST_BUFF_SIZE, write_buff, 0); + val->print(PRINT_TEST, "[Check 1] Creating storage with UID 0 should fail\n", 0); + status = SST_FUNCTION(s010_data[0].api, uid, TEST_BUFF_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s010_data[0].status, TEST_CHECKPOINT_NUM(1)); + /* Call to get_info call with UID zero should fail */ + val->print(PRINT_TEST, "[Check 2] Get_info for UID 0 should fail\n", 0); + status = SST_FUNCTION(s010_data[1].api, uid, &info); + TEST_ASSERT_EQUAL(status, s010_data[1].status, TEST_CHECKPOINT_NUM(2)); + + /* UID removal should fail */ + val->print(PRINT_TEST, "[Check 3] Removing storage with UID 0 should fail\n", 0); + status = SST_FUNCTION(s010_data[2].api, uid); + TEST_ASSERT_EQUAL(status, s010_data[2].status, TEST_CHECKPOINT_NUM(3)); + return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h index 96ac55d4..5bda12e6 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h @@ -19,13 +19,13 @@ #ifdef ITS_TEST #define VAL_STORAGE_BASE VAL_INTERNAL_TRUSTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, s010) +#define test_entry CONCAT(test_entry_, s010) #elif PS_TEST #define VAL_STORAGE_BASE VAL_PROTECTED_STORAGE_BASE -#define test_entry CONCAT(test_entry_, p010) +#define test_entry CONCAT(test_entry_, p010) #endif -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_p011.c b/api-tests/dev_apis/protected_storage/test_p011/test_p011.c index f7090150..fb1b8444 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_p011.c +++ b/api-tests/dev_apis/protected_storage/test_p011/test_p011.c @@ -34,9 +34,9 @@ static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; static int32_t psa_sst_uid_not_found() { - uint32_t status,j; - psa_ps_uid_t p_uid = UID_BASE_VALUE + 5; - struct psa_ps_info_t orig_info; + uint32_t status, j, p_data_length = 0; + psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; + struct psa_storage_info_t orig_info; /* Call the set_extended API with UID which is not created */ val->print(PRINT_TEST, "[Check 1] Call set_extended API for UID %d which is not set\n", p_uid); @@ -44,54 +44,56 @@ static int32_t psa_sst_uid_not_found() TEST_ASSERT_EQUAL(status, p011_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Create a valid storage with set API */ - status = SST_FUNCTION(p011_data[2].api, p_uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(p011_data[2].api, p_uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p011_data[2].status, TEST_CHECKPOINT_NUM(2)); /* Try to change data length for same UID using create API */ val->print(PRINT_TEST, "[Check 2] Call create API with length different than original\n", 0); - status = SST_FUNCTION(p011_data[3].api, p_uid, TEST_BUFF_SIZE/2, 0); + status = SST_FUNCTION(p011_data[3].api, p_uid, TEST_BUFF_SIZE/2, PSA_STORAGE_FLAG_WRITE_ONCE); TEST_ASSERT_EQUAL(status, p011_data[3].status, TEST_CHECKPOINT_NUM(3)); /* Try to change flag value associated with the UID */ val->print(PRINT_TEST, "[Check 3] Call create API with flag value different than original\n", 0); - status = SST_FUNCTION(p011_data[4].api, p_uid, TEST_BUFF_SIZE, PSA_PS_FLAG_WRITE_ONCE); + status = SST_FUNCTION(p011_data[4].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_WRITE_ONCE); TEST_ASSERT_EQUAL(status, p011_data[4].status, TEST_CHECKPOINT_NUM(4)); /* Check the flag value should be same as original*/ status = SST_FUNCTION(p011_data[5].api, p_uid, &orig_info); TEST_ASSERT_EQUAL(status, p011_data[5].status, TEST_CHECKPOINT_NUM(5)); TEST_ASSERT_EQUAL(orig_info.size, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(6)); - TEST_ASSERT_EQUAL(orig_info.flags, 0, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(orig_info.flags, PSA_STORAGE_FLAG_NONE, TEST_CHECKPOINT_NUM(7)); /* Remove the UID */ status = SST_FUNCTION(p011_data[8].api, p_uid); TEST_ASSERT_EQUAL(status, p011_data[8].status, TEST_CHECKPOINT_NUM(8)); /* Create a valid storage */ - status = SST_FUNCTION(p011_data[9].api, p_uid, TEST_BUFF_SIZE/2, 0); + status = SST_FUNCTION(p011_data[9].api, p_uid, TEST_BUFF_SIZE/2, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p011_data[9].status, TEST_CHECKPOINT_NUM(9)); /* Try to change length using create API */ val->print(PRINT_TEST, "[Check 4] Call create API with parameters different than original\n", 0); - status = SST_FUNCTION(p011_data[10].api, p_uid, TEST_BUFF_SIZE, 0); + status = SST_FUNCTION(p011_data[10].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p011_data[10].status, TEST_CHECKPOINT_NUM(10)); /* Check the storage should be empty */ - status = SST_FUNCTION(p011_data[11].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(p011_data[11].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, p011_data[11].status, TEST_CHECKPOINT_NUM(11)); for (j = 0; j < TEST_BUFF_SIZE; j++) { TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(12)); } + TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(13)); /* Remove the UID */ status = SST_FUNCTION(p011_data[13].api, p_uid); - TEST_ASSERT_EQUAL(status, p011_data[13].api, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, p011_data[13].status, TEST_CHECKPOINT_NUM(14)); /* Call the set_extended API with UID which is removed */ val->print(PRINT_TEST, "[Check 5] Call set_extended API for UID %d which is removed\n", p_uid); status = SST_FUNCTION(p011_data[14].api, p_uid, 0, TEST_BUFF_SIZE, write_buff); - TEST_ASSERT_EQUAL(status, p011_data[14].status, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(status, p011_data[14].status, TEST_CHECKPOINT_NUM(15)); return VAL_STATUS_SUCCESS; } @@ -119,4 +121,3 @@ int32_t psa_sst_optional_api_uid_not_found(security_t caller) return VAL_STATUS_SUCCESS; } - diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_p011.h b/api-tests/dev_apis/protected_storage/test_p011/test_p011.h index b87c36f3..2eec8001 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_p011.h +++ b/api-tests/dev_apis/protected_storage/test_p011/test_p011.h @@ -17,9 +17,9 @@ #ifndef _TEST_P011_CLIENT_TESTS_H_ #define _TEST_P011_CLIENT_TESTS_H_ -#define test_entry CONCAT(test_entry_, p011) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, p011) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h index faa35cb2..b93309da 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h @@ -23,27 +23,27 @@ typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data p011_data[] = { { - VAL_PS_GET_SUPPORT, PSA_PS_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_UID_NOT_FOUND /* Call set_extended call for non-existing UID */ + VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Call set_extended call for non-existing UID */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create valid storage using set API */ + VAL_PS_SET, PSA_SUCCESS /* Create valid storage using set API */ }, { - VAL_PS_CREATE, PSA_PS_ERROR_INVALID_ARGUMENT /* Create API for present UID with different length */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Create API for present UID with different length */ }, { - VAL_PS_CREATE, PSA_PS_ERROR_INVALID_ARGUMENT /* Call create API for to set WRITE_ONCE flag */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Call create API for to set WRITE_ONCE flag */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Validate existing UID attributes maintained */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Validate existing UID attributes maintained */ }, { 0, 0 /* This is dummy for index6 */ @@ -52,25 +52,25 @@ static const test_data p011_data[] = { 0, 0 /* This is dummy for index7 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ }, { - VAL_PS_CREATE, PSA_PS_SUCCESS /* Create valid storage using create API */ + VAL_PS_CREATE, PSA_SUCCESS /* Create valid storage using create API */ }, { - VAL_PS_CREATE, PSA_PS_ERROR_INVALID_ARGUMENT /* Again call create API with different length */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Again call create API with different length */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the storage is empty */ + VAL_PS_GET, PSA_SUCCESS /* Validate the storage is empty */ }, { 0, 0 /* This is dummy for index12 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_UID_NOT_FOUND /* Set_extended call for removed UID */ + VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Set_extended call for removed UID */ } }; #endif /* _TEST_P011_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_p012.c b/api-tests/dev_apis/protected_storage/test_p012/test_p012.c index 999fff28..195f6b21 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_p012.c +++ b/api-tests/dev_apis/protected_storage/test_p012/test_p012.c @@ -28,7 +28,7 @@ client_test_t test_p012_sst_list[] = { NULL, }; -static psa_ps_uid_t p_uid = UID_BASE_VALUE + 6; +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 6; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; @@ -37,10 +37,10 @@ static uint8_t write_buff_2[TEST_BUFF_SIZE] = {0xFF, 0xC1, 0xA2, 0xE3, 0x04, 0x0 int32_t psa_sst_offset_invalid() { - uint32_t status; + uint32_t status, p_data_length = 0; /* Create valid storage using create API */ - status = SST_FUNCTION(p012_data[1].api, p_uid, TEST_BUFF_SIZE, 0); + status = SST_FUNCTION(p012_data[1].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p012_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Set some data in the storage created */ @@ -74,13 +74,15 @@ int32_t psa_sst_offset_invalid() /* Set data using set API */ val->print(PRINT_TEST, "[Check 6] Overwrite the whole data with set API\n", 0); - status = SST_FUNCTION(p012_data[8].api, p_uid, TEST_BUFF_SIZE, write_buff, 0); + status = SST_FUNCTION(p012_data[8].api, p_uid, TEST_BUFF_SIZE, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p012_data[8].status, TEST_CHECKPOINT_NUM(8)); /* Call the get function to check data is correctly overwritten */ - status = SST_FUNCTION(p012_data[9].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(p012_data[9].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, p012_data[9].status, TEST_CHECKPOINT_NUM(9)); TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(11)); return VAL_STATUS_SUCCESS; } @@ -89,23 +91,24 @@ static int32_t psa_sst_bad_pointer() { uint32_t status; - /* Call set extended with NULL write_buff */ - val->print(PRINT_TEST, "[Check 7] Call set_extended with NULL write buffer\n", 0); - status = SST_FUNCTION(p012_data[11].api, p_uid, 0, TEST_BUFF_SIZE, NULL); - TEST_ASSERT_EQUAL(status, p012_data[11].status, TEST_CHECKPOINT_NUM(11)); + /* Call create API with UID value 0 */ + val->print(PRINT_TEST, "[Check 7] Call create API with UID 0\n", 0); + status = SST_FUNCTION(p012_data[11].api, 0, 0, TEST_BUFF_SIZE, write_buff); + TEST_ASSERT_EQUAL(status, p012_data[11].status, TEST_CHECKPOINT_NUM(12)); - /* Call set extended to overwrite data with new values */ - status = SST_FUNCTION(p012_data[12].api, p_uid, 0, TEST_BUFF_SIZE, write_buff_2); - TEST_ASSERT_EQUAL(status, p012_data[12].status, TEST_CHECKPOINT_NUM(12)); + /* Call set extended API with UID value 0 */ + val->print(PRINT_TEST, "[Check 8] Call set_extended API with UID 0\n", 0); + status = SST_FUNCTION(p012_data[12].api, 0, 0, TEST_BUFF_SIZE, write_buff_2); + TEST_ASSERT_EQUAL(status, p012_data[12].status, TEST_CHECKPOINT_NUM(13)); - /* Call the get function to get the data buffer and match the buffer */ - status = SST_FUNCTION(p012_data[13].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, p012_data[13].status, TEST_CHECKPOINT_NUM(13)); - TEST_ASSERT_MEMCMP(read_buff, write_buff_2, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(14)); + /* Call remove API with UID value 0 */ + val->print(PRINT_TEST, "[Check 9] Call remove API with UID 0\n", 0); + status = SST_FUNCTION(p012_data[13].api, 0); + TEST_ASSERT_EQUAL(status, p012_data[13].status, TEST_CHECKPOINT_NUM(14)); - /* Remove the storage */ - status = SST_FUNCTION(p012_data[15].api, p_uid); - TEST_ASSERT_EQUAL(status, p012_data[15].status, TEST_CHECKPOINT_NUM(15)); + /* Remove the UID */ + status = SST_FUNCTION(p012_data[14].api, p_uid); + TEST_ASSERT_EQUAL(status, p012_data[14].status, TEST_CHECKPOINT_NUM(15)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_p012.h b/api-tests/dev_apis/protected_storage/test_p012/test_p012.h index 835fe218..548202db 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_p012.h +++ b/api-tests/dev_apis/protected_storage/test_p012/test_p012.h @@ -17,9 +17,9 @@ #ifndef _TEST_P012_CLIENT_TESTS_H_ #define _TEST_P012_CLIENT_TESTS_H_ -#define test_entry CONCAT(test_entry_, p012) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, p012) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h index 0ca495bd..c73dbacd 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h @@ -23,57 +23,54 @@ typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data p012_data[] = { { - VAL_PS_GET_SUPPORT, PSA_PS_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ }, { - VAL_PS_CREATE, PSA_PS_SUCCESS /* Create valid storage */ + VAL_PS_CREATE, PSA_SUCCESS /* Create valid storage */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Set data using set_extended API */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Set data using set_extended API */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_OFFSET_INVALID /* Set_extended with invalid offset + length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid offset + length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_OFFSET_INVALID /* Set_extended call with invalid offset */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended call with invalid offset */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Set_extended call with valid offset and zero length */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Set_extended call with valid offset and zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_OFFSET_INVALID /* Set_extended with invalid offset + length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid offset + length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_OFFSET_INVALID /* Set_extended with invalid length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid length */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Write data using set API */ + VAL_PS_SET, PSA_SUCCESS /* Write data using set API */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Check data validity using get API */ + VAL_PS_GET, PSA_SUCCESS /* Check data validity using get API */ }, { 0, 0 /* This is dummy for index10 */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_INVALID_ARGUMENT /* Set_extended call with NULL write buffer */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Create call with UID 0 */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Overwrite data using set_extended */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Call set_extended with UID 0 */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Check data validity using get API */ + VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call remove with UID 0 */ }, { - 0, 0 /* This is dummy for index14 */ -}, -{ - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove with UID */ }, }; #endif /* _TEST_P012_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c index 6eb47464..628ed724 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c +++ b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c @@ -28,7 +28,7 @@ client_test_t test_p013_sst_list[] = { NULL, }; -static psa_ps_uid_t p_uid = UID_BASE_VALUE + 4; +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 4; static uint8_t write_buff[TEST_BUFF_SIZE/2] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; static uint8_t write_buff_2[TEST_BUFF_SIZE/2] = {0xFF, 0x11, 0xA2, 0xE3, 0x04, 0xA5, 0xD6, 0x97}; static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; @@ -37,12 +37,12 @@ static uint8_t write_buff_3[TEST_BUFF_SIZE] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x0 static int32_t psa_sst_set_extended_create_success() { - uint32_t status; - struct psa_ps_info_t info; + uint32_t status, p_data_length = 0; + struct psa_storage_info_t info; /* Create storage of zero length using create API */ val->print(PRINT_TEST, "[Check 1] Create storage using create API for 0 length\n", 0); - status = SST_FUNCTION(p013_data[1].api, p_uid, 0, 0); + status = SST_FUNCTION(p013_data[1].api, p_uid, 0, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p013_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Set some data in the storage created */ @@ -62,7 +62,7 @@ static int32_t psa_sst_set_extended_create_success() TEST_ASSERT_EQUAL(status, p013_data[6].status, TEST_CHECKPOINT_NUM(6)); /* Create a valid storage */ - status = SST_FUNCTION(p013_data[7].api, p_uid, TEST_BUFF_SIZE, 0); + status = SST_FUNCTION(p013_data[7].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p013_data[7].status, TEST_CHECKPOINT_NUM(7)); /* Try to set data in first half of buffer */ @@ -76,43 +76,47 @@ static int32_t psa_sst_set_extended_create_success() /* Call the get function to match the data */ val->print(PRINT_TEST, "[Check 4] Valid data written by multiple set_extended\n", 0); - status = SST_FUNCTION(p013_data[10].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); + status = SST_FUNCTION(p013_data[10].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, p013_data[10].status, TEST_CHECKPOINT_NUM(10)); TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(11)); TEST_ASSERT_MEMCMP(read_buff + TEST_BUFF_SIZE/2, write_buff_2, TEST_BUFF_SIZE/2,\ TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(13)); /* Overwrite data using set API */ val->print(PRINT_TEST, "[Check 5] Overwrite whole data using SET API\n", 0); - status = SST_FUNCTION(p013_data[13].api, p_uid, TEST_BUFF_SIZE, write_buff_3, 0); - TEST_ASSERT_EQUAL(status, p013_data[13].status, TEST_CHECKPOINT_NUM(13)); + status = SST_FUNCTION(p013_data[13].api, p_uid, TEST_BUFF_SIZE, write_buff_3, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p013_data[13].status, TEST_CHECKPOINT_NUM(14)); /* Call the get function to match the data */ val->print(PRINT_TEST, "[Check 6] Validate the data using get API\n", 0); - status = SST_FUNCTION(p013_data[14].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, p013_data[14].status, TEST_CHECKPOINT_NUM(14)); - TEST_ASSERT_MEMCMP(read_buff, write_buff_3, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(15)); + status = SST_FUNCTION(p013_data[14].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, p013_data[14].status, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_MEMCMP(read_buff, write_buff_3, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(16)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(17)); /* Call create API for existing UID with same parameters */ val->print(PRINT_TEST, "[Check 7] Call create API for existing UID with same parameters\n", 0); - status = SST_FUNCTION(p013_data[16].api, p_uid, TEST_BUFF_SIZE, 0); - TEST_ASSERT_EQUAL(status, p013_data[16].status, TEST_CHECKPOINT_NUM(16)); + status = SST_FUNCTION(p013_data[16].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p013_data[16].status, TEST_CHECKPOINT_NUM(18)); /* Call the get function to match the data */ val->print(PRINT_TEST, "[Check 8] Validity of data after create API call\n", 0); - status = SST_FUNCTION(p013_data[17].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, p013_data[17].status, TEST_CHECKPOINT_NUM(17)); - TEST_ASSERT_MEMCMP(read_buff, write_buff_3, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(18)); + status = SST_FUNCTION(p013_data[17].api, p_uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); + TEST_ASSERT_EQUAL(status, p013_data[17].status, TEST_CHECKPOINT_NUM(19)); + TEST_ASSERT_MEMCMP(read_buff, write_buff_3, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(20)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(21)); /* Remove the storage */ val->print(PRINT_TEST, "[Check 9] Remove the UID\n", 0); status = SST_FUNCTION(p013_data[19].api, p_uid); - TEST_ASSERT_EQUAL(status, p013_data[19].status, TEST_CHECKPOINT_NUM(19)); + TEST_ASSERT_EQUAL(status, p013_data[19].status, TEST_CHECKPOINT_NUM(22)); /* Validate there should not be duplicate UID present */ val->print(PRINT_TEST, "[Check 10] No duplicate entry of UID present\n", 0); status = SST_FUNCTION(p013_data[20].api, p_uid, 0, TEST_BUFF_SIZE, read_buff); - TEST_ASSERT_EQUAL(status, p013_data[20].status, TEST_CHECKPOINT_NUM(20)); + TEST_ASSERT_EQUAL(status, p013_data[20].status, TEST_CHECKPOINT_NUM(23)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_p013.h b/api-tests/dev_apis/protected_storage/test_p013/test_p013.h index 20d7f92f..839f2c24 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_p013.h +++ b/api-tests/dev_apis/protected_storage/test_p013/test_p013.h @@ -17,9 +17,9 @@ #ifndef _TEST_P013_CLIENT_TESTS_H_ #define _TEST_P013_CLIENT_TESTS_H_ -#define test_entry CONCAT(test_entry_, p013) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, p013) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h index 917ac086..68954e00 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h @@ -23,21 +23,21 @@ typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data p013_data[] = { { - VAL_PS_GET_SUPPORT, PSA_PS_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ }, { - VAL_PS_CREATE, PSA_PS_SUCCESS /* Create storage of zero length */ + VAL_PS_CREATE, PSA_SUCCESS /* Create storage of zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Call set_extened with zero length */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended with zero length */ }, { - VAL_PS_GET_INFO, PSA_PS_SUCCESS /* Validate the storage attributes */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the storage attributes */ }, { 0, 0 /* This is dummy for index4 */ @@ -46,19 +46,19 @@ static const test_data p013_data[] = { 0, 0 /* This is dummy for index5 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ }, { - VAL_PS_CREATE, PSA_PS_SUCCESS /* Create storage of non-zero length */ + VAL_PS_CREATE, PSA_SUCCESS /* Create storage of non-zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Call set_extened to write data in first half of buffer */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended to write data in first half of buffer */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_SUCCESS /* Call set_extened to write data in second half of buffer */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended to write data in second half of buffer */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data stored */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data stored */ }, { 0, 0 /* This is dummy for index11 */ @@ -67,28 +67,28 @@ static const test_data p013_data[] = { 0, 0 /* This is dummy for index12 */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Overwrite data with set API */ + VAL_PS_SET, PSA_SUCCESS /* Overwrite data with set API */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data written */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data written */ }, { 0, 0 /* This is dummy for index15 */ }, { - VAL_PS_CREATE, PSA_PS_SUCCESS /* Call Create API for existing UID with same parameters */ + VAL_PS_CREATE, PSA_SUCCESS /* Call Create API for existing UID with same parameters */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data */ }, { 0, 0 /* This is dummy for index18 */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ }, { - VAL_PS_GET, PSA_PS_ERROR_UID_NOT_FOUND /* Check no duplicate entry of UID present */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Check no duplicate entry of UID present */ } }; #endif /* _TEST_P013_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_p014.c b/api-tests/dev_apis/protected_storage/test_p014/test_p014.c index a6e74f1d..970e0389 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_p014.c +++ b/api-tests/dev_apis/protected_storage/test_p014/test_p014.c @@ -28,18 +28,18 @@ client_test_t test_p014_sst_list[] = { NULL, }; -static psa_ps_uid_t p_uid = UID_BASE_VALUE + 5; +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; static uint8_t write_buff[TEST_BUFF_SIZE/4] = { 0x03, 0x04, 0x05, 0x07}; static uint8_t read_buff[TEST_BUFF_SIZE/4] = {0}; static int32_t psa_sst_optional_api_not_supported() { - uint32_t status; - struct psa_ps_info_t info; + uint32_t status, p_data_length = 0; + struct psa_storage_info_t info; /* Try to create storage using create API */ val->print(PRINT_TEST, "[Check 1] Call to create API should fail as API not supported\n", 0); - status = SST_FUNCTION(p014_data[1].api, p_uid, TEST_BUFF_SIZE, 0); + status = SST_FUNCTION(p014_data[1].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p014_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Verify that UID doesn't exist */ @@ -48,7 +48,8 @@ static int32_t psa_sst_optional_api_not_supported() /* Create a valid storage using set API */ val->print(PRINT_TEST, "[Check 2] Create valid storage with set API\n", 0); - status = SST_FUNCTION(p014_data[3].api, p_uid, TEST_BUFF_SIZE/4, write_buff, 0); + status = SST_FUNCTION(p014_data[3].api, p_uid, TEST_BUFF_SIZE/4, write_buff, + PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, p014_data[3].status, TEST_CHECKPOINT_NUM(3)); /* Partial data write with set_extended API should fail */ @@ -58,13 +59,14 @@ static int32_t psa_sst_optional_api_not_supported() /* Call the get function to match the data */ val->print(PRINT_TEST, "[Check 4] Verify data is unchanged\n", 0); - status = SST_FUNCTION(p014_data[5].api, p_uid, 0, TEST_BUFF_SIZE/4, read_buff); + status = SST_FUNCTION(p014_data[5].api, p_uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, p014_data[5].status, TEST_CHECKPOINT_NUM(5)); TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(7)); /* Remove the storage */ status = SST_FUNCTION(p014_data[7].api, p_uid); - TEST_ASSERT_EQUAL(status, p014_data[7].status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, p014_data[7].status, TEST_CHECKPOINT_NUM(8)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_p014.h b/api-tests/dev_apis/protected_storage/test_p014/test_p014.h index 1f4faa37..d97d8ad6 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_p014.h +++ b/api-tests/dev_apis/protected_storage/test_p014/test_p014.h @@ -17,9 +17,9 @@ #ifndef _TEST_P014_CLIENT_TESTS_H_ #define _TEST_P014_CLIENT_TESTS_H_ -#define test_entry CONCAT(test_entry_, p014) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, p014) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h index f939f4c6..421e0cdc 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h @@ -23,33 +23,33 @@ typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data p014_data[] = { { - VAL_PS_GET_SUPPORT, PSA_PS_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ }, { - VAL_PS_CREATE, PSA_PS_ERROR_NOT_SUPPORTED /* Create API call should fail */ + VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Create API call should fail */ }, { - VAL_PS_GET_INFO, PSA_PS_ERROR_UID_NOT_FOUND /* UID should not exist */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* UID should not exist */ }, { - VAL_PS_SET, PSA_PS_SUCCESS /* Create storage of non-zero length */ + VAL_PS_SET, PSA_SUCCESS /* Create storage of non-zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_PS_ERROR_NOT_SUPPORTED /* Set_extened API call should fail */ + VAL_PS_SET_EXTENDED, PSA_ERROR_NOT_SUPPORTED /* Set_extended API call should fail */ }, { - VAL_PS_GET, PSA_PS_SUCCESS /* Validate the data should not changed */ + VAL_PS_GET, PSA_SUCCESS /* Validate the data should not changed */ }, { 0, 0 /* Unused Index */ }, { - VAL_PS_REMOVE, PSA_PS_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ }, }; #endif /* _TEST_P014_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_p015.c b/api-tests/dev_apis/protected_storage/test_p015/test_p015.c index d9974e4c..4c14fbcb 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_p015.c +++ b/api-tests/dev_apis/protected_storage/test_p015/test_p015.c @@ -28,7 +28,7 @@ client_test_t test_p015_sst_list[] = { NULL, }; -static psa_ps_uid_t p_uid = UID_BASE_VALUE + 5; +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; int32_t psa_sst_create_api_write_once_flag_check(security_t caller) { @@ -41,7 +41,7 @@ int32_t psa_sst_create_api_write_once_flag_check(security_t caller) { /* Call create API with write_once flag */ val->print(PRINT_TEST, "[Check 1] Call create API with write_once flag\n", 0); - status = SST_FUNCTION(p015_data[1].api, p_uid, TEST_BUFF_SIZE, PSA_SST_FLAG_WRITE_ONCE); + status = SST_FUNCTION(p015_data[1].api, p_uid, TEST_BUFF_SIZE, PSA_STORAGE_FLAG_WRITE_ONCE); TEST_ASSERT_EQUAL(status, p015_data[1].status, TEST_CHECKPOINT_NUM(1)); } else diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_p015.h b/api-tests/dev_apis/protected_storage/test_p015/test_p015.h index 4fddadad..16c59b35 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_p015.h +++ b/api-tests/dev_apis/protected_storage/test_p015/test_p015.h @@ -17,9 +17,9 @@ #ifndef _TEST_P015_CLIENT_TESTS_H_ #define _TEST_P015_CLIENT_TESTS_H_ -#define test_entry CONCAT(test_entry_, p015) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, p015) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h index f5062ae8..3a044880 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h @@ -20,19 +20,18 @@ #include "val_protected_storage.h" #define SST_FUNCTION val->ps_function -#define PSA_SST_FLAG_WRITE_ONCE PSA_PS_FLAG_WRITE_ONCE typedef struct { enum ps_function_code api; - psa_ps_status_t status; + psa_status_t status; } test_data; static const test_data p015_data[] = { { - VAL_PS_GET_SUPPORT, PSA_PS_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ }, { - VAL_PS_CREATE, PSA_PS_ERROR_FLAGS_NOT_SUPPORTED /* Call create API with write_once flag */ + VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Call create API with write_once flag */ }, }; #endif /* _TEST_P015_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p016/test.cmake b/api-tests/dev_apis/protected_storage/test_p016/test.cmake new file mode 100644 index 00000000..b2c7a026 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p016/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p016.c + test_p016.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_entry_p016.c b/api-tests/dev_apis/protected_storage/test_p016/test_entry_p016.c new file mode 100644 index 00000000..8bf29b00 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p016/test_entry_p016.c @@ -0,0 +1,53 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_p016.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_PROTECTED_STORAGE_BASE, 16) +#define TEST_DESC "Storage assest capacity modification check\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_protected_storage_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_p016_sst_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->test_exit(); +} diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_p016.c b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c new file mode 100644 index 00000000..eeaf6511 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c @@ -0,0 +1,118 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_p016.h" +#include "test_ps_data.h" + +#define TEST_BUFF_SIZE_1 10 +#define TEST_BUFF_SIZE_2 14 +#define TEST_BUFF_SIZE_3 8 + +client_test_t test_p016_sst_list[] = { + NULL, + psa_sst_optional_api_sst_capacity_check, + NULL, +}; + +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; +static uint8_t write_buff[TEST_BUFF_SIZE_2] = {0x03, 0x04, 0x05, 0x07, 0xFF, 0x00, 0x32, 0x67, + 0x99, 0x78, 0x43, 0x20, 0xFF, 0x91}; + +static int32_t psa_sst_optional_api_sst_capacity(void) +{ + uint32_t status; + struct psa_storage_info_t info; + + /* Try to create storage using create API */ + status = SST_FUNCTION(p016_data[1].api, p_uid, TEST_BUFF_SIZE_1, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p016_data[1].status, TEST_CHECKPOINT_NUM(1)); + + /* Call to create API for existing UID should fail */ + val->print(PRINT_TEST, "[Check 1] Create API call for existing UID\n", 0); + status = SST_FUNCTION(p016_data[2].api, p_uid, TEST_BUFF_SIZE_2, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p016_data[2].status, TEST_CHECKPOINT_NUM(2)); + + /* Check the attributes of storage are unchanged */ + status = SST_FUNCTION(p016_data[3].api, p_uid, &info); + TEST_ASSERT_EQUAL(status, p016_data[3].status, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(info.capacity, TEST_BUFF_SIZE_1, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(info.size, 0, TEST_CHECKPOINT_NUM(5)); + + /* Override storage using set API */ + val->print(PRINT_TEST, "[Check 2] Call to set API call for existing UID\n", 0); + status = SST_FUNCTION(p016_data[6].api, p_uid, TEST_BUFF_SIZE_3, write_buff, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p016_data[6].status, TEST_CHECKPOINT_NUM(6)); + + /* Check the attributes of storage are changed */ + status = SST_FUNCTION(p016_data[7].api, p_uid, &info); + TEST_ASSERT_EQUAL(status, p016_data[7].status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(info.capacity, TEST_BUFF_SIZE_3, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(info.size, TEST_BUFF_SIZE_3, TEST_CHECKPOINT_NUM(9)); + + /* Accessing old capacity with set_extended API should fail */ + val->print(PRINT_TEST, "[Check 3] Access old capacity using set_extended API\n", 0); + status = SST_FUNCTION(p016_data[10].api, p_uid, 0, TEST_BUFF_SIZE_1, write_buff); + TEST_ASSERT_EQUAL(status, p016_data[10].status, TEST_CHECKPOINT_NUM(10)); + + /* Remove the storage */ + status = SST_FUNCTION(p016_data[11].api, p_uid); + TEST_ASSERT_EQUAL(status, p016_data[11].status, TEST_CHECKPOINT_NUM(11)); + + /* Create new storage assest using set API */ + val->print(PRINT_TEST, "[Check 4] Creation of new storage assest\n", 0); + status = SST_FUNCTION(p016_data[12].api, p_uid, TEST_BUFF_SIZE_2, write_buff, + PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p016_data[12].status, TEST_CHECKPOINT_NUM(12)); + + /* Call to create API for existing UID should fail */ + val->print(PRINT_TEST, "[Check 5] Create API call for existing UID\n", 0); + status = SST_FUNCTION(p016_data[13].api, p_uid, TEST_BUFF_SIZE_2, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p016_data[13].status, TEST_CHECKPOINT_NUM(13)); + + /* Remove the storage */ + status = SST_FUNCTION(p016_data[14].api, p_uid); + TEST_ASSERT_EQUAL(status, p016_data[14].status, TEST_CHECKPOINT_NUM(14)); + + return VAL_STATUS_SUCCESS; +} + +int32_t psa_sst_optional_api_sst_capacity_check(security_t caller) +{ + uint32_t status; + int32_t test_status; + + /* Call the get_support API and check if create and set_extended API are supported */ + status = SST_FUNCTION(p016_data[0].api); + + if (status != p016_data[0].status) + { + val->print(PRINT_INFO, "Test Case skipped as Optional PS APIs not are supported.\n", 0); + return RESULT_SKIP(VAL_STATUS_UNSUPPORTED); + } else { + val->print(PRINT_TEST, "Optional PS APIs are supported.\n", 0); + test_status = psa_sst_optional_api_sst_capacity(); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_p016.h b/api-tests/dev_apis/protected_storage/test_p016/test_p016.h new file mode 100644 index 00000000..06626d0d --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p016/test_p016.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_P016_CLIENT_TESTS_H_ +#define _TEST_P016_CLIENT_TESTS_H_ + +#define test_entry CONCAT(test_entry_, p016) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_p016_sst_list[]; + +int32_t psa_sst_optional_api_sst_capacity_check(security_t caller); + +#endif /* _TEST_P016_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h new file mode 100644 index 00000000..45bc101a --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h @@ -0,0 +1,76 @@ +/** @file + * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_P016_PS_DATA_TESTS_H_ +#define _TEST_P016_PS_DATA_TESTS_H_ + +#include "val_protected_storage.h" + +#define SST_FUNCTION val->ps_function + +typedef struct { + enum ps_function_code api; + psa_status_t status; +} test_data; + +static const test_data p016_data[] = { +{ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ +}, +{ + VAL_PS_CREATE, PSA_SUCCESS /* Storage creation */ +}, +{ + VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Calling create API for existing UID should fail */ +}, +{ + VAL_PS_GET_INFO, PSA_SUCCESS /* Check the storage attributes are unchanged */ +}, +{ + 0, 0 /* Unused Index4 */ +}, +{ + 0, 0 /* Unused Index5 */ +}, +{ + VAL_PS_SET, PSA_SUCCESS /* Set API can change capacity of storage */ +}, +{ + VAL_PS_GET_INFO, PSA_SUCCESS /* Check the storage attributes are changed */ +}, +{ + 0, 0 /* Unused Index8 */ +}, +{ + 0, 0 /* Unused Index9 */ +}, +{ + VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Set_extended on old capacity should not work */ +}, +{ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ +}, +{ + VAL_PS_SET, PSA_SUCCESS /* Storage creation */ +}, +{ + VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Calling create API for existing UID should fail */ +}, +{ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ +}, +}; +#endif /* _TEST_P016_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p017/test.cmake b/api-tests/dev_apis/protected_storage/test_p017/test.cmake new file mode 100644 index 00000000..cb1bda96 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p017/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_p017.c + test_p017.c +) +list(APPEND CC_OPTIONS -DPS_TEST) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_entry_p017.c b/api-tests/dev_apis/protected_storage/test_p017/test_entry_p017.c new file mode 100644 index 00000000..134fd49b --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p017/test_entry_p017.c @@ -0,0 +1,53 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_p017.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_PROTECTED_STORAGE_BASE, 17) +#define TEST_DESC "Storage assest capacity modification check\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_protected_storage_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_p017_sst_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->test_exit(); +} diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_p017.c b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c new file mode 100644 index 00000000..5327f58e --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c @@ -0,0 +1,96 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_p017.h" +#include "test_ps_data.h" + +#define TEST_BUFF_SIZE_1 14 +#define TEST_BUFF_SIZE_2 10 + +client_test_t test_p017_sst_list[] = { + NULL, + psa_sst_optional_api_partial_write_check, + NULL, +}; + +static psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; +static uint8_t write_buff[TEST_BUFF_SIZE_1] = {0x03, 0x04, 0x05, 0x07, 0xFF, 0x00, 0x32, 0x67, + 0x99, 0x78, 0x43, 0x20, 0xFF, 0x91}; + +static int32_t psa_sst_optional_api_partial_write(void) +{ + uint32_t status; + struct psa_storage_info_t info; + + /* Try to create storage using create API */ + status = SST_FUNCTION(p017_data[1].api, p_uid, TEST_BUFF_SIZE_1, PSA_STORAGE_FLAG_NONE); + TEST_ASSERT_EQUAL(status, p017_data[1].status, TEST_CHECKPOINT_NUM(1)); + + /* Call set extended API to set data in first half */ + val->print(PRINT_TEST, "[Check 1] Set data in first half of storage\n", 0); + status = SST_FUNCTION(p017_data[2].api, p_uid, 0, TEST_BUFF_SIZE_1/2, write_buff); + TEST_ASSERT_EQUAL(status, p017_data[2].status, TEST_CHECKPOINT_NUM(2)); + + /* Call set extended API to set data with gaps */ + val->print(PRINT_TEST, "[Check 2] Set data having gap with existing data \n", 0); + status = SST_FUNCTION(p017_data[3].api, p_uid, (TEST_BUFF_SIZE_1/2) + 2, 2, write_buff); + TEST_ASSERT_EQUAL(status, p017_data[3].status, TEST_CHECKPOINT_NUM(3)); + + /* Call set extended API to overwrite and extend the existing data */ + val->print(PRINT_TEST, "[Check 3] Overwrite and extend existing data\n", 0); + status = SST_FUNCTION(p017_data[4].api, p_uid, 0, TEST_BUFF_SIZE_2, write_buff); + TEST_ASSERT_EQUAL(status, p017_data[4].status, TEST_CHECKPOINT_NUM(4)); + + /* Check the attributes of existing storage */ + val->print(PRINT_TEST, "[Check 4] Check the storage attributes\n", 0); + status = SST_FUNCTION(p017_data[5].api, p_uid, &info); + TEST_ASSERT_EQUAL(status, p017_data[5].status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(info.size, TEST_BUFF_SIZE_2, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(info.capacity, TEST_BUFF_SIZE_1, TEST_CHECKPOINT_NUM(7)); + + /* Remove the storage */ + status = SST_FUNCTION(p017_data[8].api, p_uid); + TEST_ASSERT_EQUAL(status, p017_data[8].status, TEST_CHECKPOINT_NUM(8)); + + return VAL_STATUS_SUCCESS; +} + +int32_t psa_sst_optional_api_partial_write_check(security_t caller) +{ + uint32_t status; + int32_t test_status; + + /* Call the get_support API and check if create and set_extended API are supported */ + status = SST_FUNCTION(p017_data[0].api); + + if (status != p017_data[0].status) + { + val->print(PRINT_INFO, "Test Case skipped as Optional PS APIs not are supported.\n", 0); + return RESULT_SKIP(VAL_STATUS_UNSUPPORTED); + } else { + val->print(PRINT_TEST, "Optional PS APIs are supported.\n", 0); + test_status = psa_sst_optional_api_partial_write(); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_p017.h b/api-tests/dev_apis/protected_storage/test_p017/test_p017.h new file mode 100644 index 00000000..caa5cb08 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p017/test_p017.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_P017_CLIENT_TESTS_H_ +#define _TEST_P017_CLIENT_TESTS_H_ + +#define test_entry CONCAT(test_entry_, p017) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_p017_sst_list[]; + +int32_t psa_sst_optional_api_partial_write_check(security_t caller); + +#endif /* _TEST_P017_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h new file mode 100644 index 00000000..ae35fd75 --- /dev/null +++ b/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h @@ -0,0 +1,58 @@ +/** @file + * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_P017_PS_DATA_TESTS_H_ +#define _TEST_P017_PS_DATA_TESTS_H_ + +#include "val_protected_storage.h" + +#define SST_FUNCTION val->ps_function + +typedef struct { + enum ps_function_code api; + psa_status_t status; +} test_data; + +static const test_data p017_data[] = { +{ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ +}, +{ + VAL_PS_CREATE, PSA_SUCCESS /* Storage creation */ +}, +{ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Write data in created storage */ +}, +{ + VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Try to set data in noncontinous manner */ +}, +{ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Overwrite the existing data */ +}, +{ + VAL_PS_GET_INFO, PSA_SUCCESS /* Check for valid storage attributes */ +}, +{ + 0, 0 /* Unused index */ +}, +{ + 0, 0 /* Unused index */ +}, +{ + VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ +}, +}; +#endif /* _TEST_P017_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/testsuite.db b/api-tests/dev_apis/protected_storage/testsuite.db index bfe67344..2e95c622 100644 --- a/api-tests/dev_apis/protected_storage/testsuite.db +++ b/api-tests/dev_apis/protected_storage/testsuite.db @@ -35,5 +35,7 @@ test_p012 test_p013 test_p014 test_p015 +test_p016 +test_p017 (END) diff --git a/api-tests/docs/psa_its_testlist.md b/api-tests/docs/psa_its_testlist.md index f169577a..34432494 100644 --- a/api-tests/docs/psa_its_testlist.md +++ b/api-tests/docs/psa_its_testlist.md @@ -6,21 +6,21 @@ Following are the requirements of the Storage Test Suite.
1. Unless described in this document, any behaviour that is defined as IMPLEMENTATION_DEFINED in PSA Storage API document is not verified in this document.
2. Storage Test Cases use UID value starting from 1 onwards. These UID needs to be free for successfull test execution.
-3. UID values 1 and 2 are reserved as WRITE_ONCE UID.These UID can't be free from testcase. Make sure these are free.
+3. UID values 1 and 2 are reserved as WRITE_ONCE UID. These UID can't be free from testcase. Make sure these are free.
-| Test | Test Scenario | API Verified | Return Value | Test Algorithm | UID Usage | -|-----------|--------------------------------------|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------| -| test_s001 | Get,get_info and remove API's call for
non-existent and removed assest | psa_its_get
psa_its_get_info
psa_its_remove
| PSA_ITS_ERROR_UID_NOT_FOUND | 1. Call get API with UID for which no UID/Data pair is created
2. Call get_info API for which no UID/Data pair is created
3. Call remove API for which no UID/Data pair is created
4. Set valid UID/Data pair with uid1
5. Set one more set of UID/Data pair, with different uid, than previous
6. Remove the uid of step 4.
7. Call get API for removed UID/data pair
8. Call get_info API for removed UID/Data pair
9. Call remove API for removed UID/Data pair
10. Set valid UID/Data pair
11. Call get API for different uid , then created
12. Call get_info API for different uid, then created
13. Call remove API for different uid, then created
14. Remove the created UID/Data pair.
15. Remove the stray uid.
| UID value used are 5,6,7 | -| test_s002 | Overwriting data for asset created with
WRITE_ONCE flag | psa_its_set
psa_its_remove
| PSA_ITS_ERROR_WRITE_ONCE | 1. Set valid UID/data value pair , with create flag value none.
2. Call get and get_info API to validate the data, attributes associated with data
3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
4. Call get and get_info API to validate the data, attributes associated with data
is not changed after second set operation
5. try to remove the UID/data pair.
6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
7. Try to remove the created UID.
8. Call get and get_info API to validate the data, attributes associated with data
9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
different data length
10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
11. Call get and get_info API to validate the data, attributes associated with data
| UID value used are 1 and 2 | -| test_s003 | Exhaust storage space | psa_its_set
|PSA_ITS_ERROR_INSUFFICIENT_SPACE | 1. Create UID/data pairs, with data_len 256 bytes. Do this with incrementing
uid values till we have INSUFFICENT_SPACE.
2. Remove all the UID/data pairs created.
3. Repeat the steps once more, to check all previous uid are removed successfully
| UID value starts from 5 and keep on incrementing till all space is exhausted | -| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_ITS_SUCCESS | 1. Set a valid uid/data pair
2. Validate the data using get api
3. Change the data length to half of previous.
4. Call GET api with original data length , error should be returned and also
the return buffer should be empty
5. Call GET api with correct data_len and validate the data received.
6. Check old data cannot be accessed.
7. Call REMOVE api to delete the UID/data pair
| UID value used is 5 | -| test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_ITS_SUCCESS |1. Set valid UID/data pair with varying uid and data_len
2. Call GET api and validate the set data
3. Call GET info api and validate the data attributes
4. Call REMOVE api to delete the UID/data pair
| UID value used are 4 | -| test_s006 | Storage asset creation with unsupported
create_flag value | psa_its_set
| PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value
2. Call GET_INFO api and validate the flag value
3. Remove the uid/data pair
| UID value used is 5 | -| test_s007 | Get API call with length different than asset
data length | psa_its_set
| PSA_ITS_ERROR_INCORRECT_SIZE | 1. Create valid uid/data pair.
2. Increase the length of storage.
3. Try to access the old length using get api.
4. Try to access with valid length less than stored size.
5. Decrease the length of storage.
6. Try to access the old length.
7. Remove the uid
| UID value used is 5 | -| test_s008 | Get API call with invalid offset | psa_its_get
|PSA_ITS_ERROR_OFFSET_INVALID | 1. Set valid UID/data pair
2. Call GET api with valid offset and offset + data_len equal to stored data size.
3. Call GET api with valid offset and offset + data_len less than stored data size.
4. Call get api with invalid offset.
5. Call get api with zero offset , but data len greater than data size.
6. Remove the uid.
| UID value used is 5 | -| test_s009 | API call with NULL pointer and zero length | psa_its_get
psa_its_set
psa_its_get_info
| PSA_ITS_SUCCESS | 1. Call the SET API with NULL pointer and data_len zero
2. Validate using get_info api storage should be present.
3. Call get API with NULL pointer.
4. Remove the UID.
5. Call get_info API to validate storage is removed.
6. Set storage entity with valid write_buffer , but length zero.
7. Call get_info API to validate storage attributes.
8. Call get_info api with NULL pointer and valid uid.
9. Remove the uid
| UID value used is 5
| -| test_s010 | Storage assest creation with UID value 0
| psa_its_set
| PSA_ITS_ERROR_INVALID_ARGUMENTS | 1. Call the SET API with UID value 0.
2. Check that storage creation fails.
| UID value used is 0
-| NA | Storage Failure
| NA
| PSA_ITS_ERROR_STORAGE_FAILURE
| 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| +| Test | Test Scenario | API Verified | Return Value | Test Algorithm | UID Usage | +|-----------|---------------------------------------|----------------|-------------------------|---------------------|------------------------| +| test_s001 | Get,get_info and remove API's call for
non-existent and removed assest | psa_its_get
psa_its_get_info
psa_its_remove
| PSA_ERROR_DOES_NOT_EXIST | 1. Call get API with UID for which no UID/Data pair is created
2. Call get_info API for which no UID/Data pair is created
3. Call remove API for which no UID/Data pair is created
4. Set valid UID/Data pair with uid1
5. Set one more set of UID/Data pair, with different uid, than previous
6. Remove the uid of step 4.
7. Call get API for removed UID/data pair
8. Call get_info API for removed UID/Data pair
9. Call remove API for removed UID/Data pair
10. Set valid UID/Data pair
11. Call get API for different uid , then created
12. Call get_info API for different uid, then created
13. Call remove API for different uid, then created
14. Remove the created UID/Data pair.
15. Remove the stray uid.
| UID value used are 5,6,7 | +| test_s002 | Overwriting data for asset created with
WRITE_ONCE flag | psa_its_set
psa_its_remove
| PSA_ERROR_NOT_PERMITTED | 1. Set valid UID/data value pair , with create flag value none.
2. Call get and get_info API to validate the data, attributes associated with data
3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
4. Call get and get_info API to validate the data, attributes associated with data
is not changed after second set operation
5. try to remove the UID/data pair.
6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
7. Try to remove the created UID.
8. Call get and get_info API to validate the data, attributes associated with data
9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
different data length
10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
11. Call get and get_info API to validate the data, attributes associated with data
| UID value used are 1 and 2 | +| test_s003 | Exhaust storage space | psa_its_set
| PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
uid values till we have INSUFFICENT_SPACE.
2. Remove all the UID/data pairs created.
3. Repeat the steps once more, to check all previous uid are removed successfully
| UID value starts from 5 and keep on incrementing till all space is exhausted | +| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_SUCCESS | 1. Set a valid uid/data pair
2. Validate the data using get api
3. Change the data length to half of previous.
4. Call GET api with original data length , error should be returned and also
the return buffer should be empty
5. Call GET api with correct data_len and validate the data received.
6. Check old data cannot be accessed.
7. Call REMOVE api to delete the UID/data pair
| UID value used is 5 | +| test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
2. Call GET api and validate the set data
3. Call GET info api and validate the data attributes
4. Call REMOVE api to delete the UID/data pair
| UID value used are 4 | +| test_s006 | Storage asset creation with unsupported
create_flag value | psa_its_set
| PSA_ERROR_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value
2. Call GET_INFO api and validate the flag value
3. Remove the uid/data pair
| UID value used is 5 | +| test_s007 | Get API call with length different than asset
data length | psa_its_set
| PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
2. Increase the length of storage.
3. Try to access the old length using get api.
4. Try to access with valid length less than stored size.
5. Decrease the length of storage.
6. Try to access the old length.
7. Remove the uid
| UID value used is 5 | +| test_s008 | Get API call with invalid offset | psa_its_get
| PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
2. Call GET api with valid offset and offset + data_len equal to stored data size.
3. Call GET api with valid offset and offset + data_len less than stored data size.
4. Call get api with invalid offset.
5. Call get api with zero offset , but data len greater than data size.
6. Remove the uid.
| UID value used is 5 | +| test_s009 | API call with NULL pointer and zero length | psa_its_get
psa_its_set
psa_its_get_info
| PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
2. Validate using get_info api storage should be present.
3. Call get API with NULL pointer.
4. Remove the UID.
5. Call get_info API to validate storage is removed.
6. Set storage entity with valid write_buffer , but length zero.
7. Call get_info API to validate storage attributes.
8. Call get_info api with NULL pointer and valid uid.
9. Remove the uid
| UID value used is 5
| +| test_s010 | Storage assest creation with UID value 0 | psa_its_set
| PSA_ERROR_INVALID_ARGUMENT | 1. Call the SET API with UID value 0.
2. Check that storage creation fails.
| UID value used is 0
+| NA | Storage Failure | NA | PSA_ERROR_STORAGE_FAILURE | 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/docs/psa_ps_testlist.md b/api-tests/docs/psa_ps_testlist.md index 2675c7fc..f93cfbdd 100644 --- a/api-tests/docs/psa_ps_testlist.md +++ b/api-tests/docs/psa_ps_testlist.md @@ -4,32 +4,32 @@ Following are the requirements of the Storage Test Suite.
-1. Unless described in this document, any behaviour that is defined as IMPLEMENTATION_DEFINED in PSA Storage API document is not verified in this document.
+1. Unless described in this document, any behaviour that is defined as IMPLEMENTATION_DEFINED in PSA Storage API document is not verified in this document.
2. Storage Test Cases use UID value starting from 1 onwards. These UID needs to be free for successfull test execution.
-3. UID values 1 and 2 are reserved as WRITE_ONCE UID.These UID can't be free from testcase. Make sure these are free.
- - -| Test | Test Scenario | API Verified | Return Value | Test Algorithm | UID Usage | -|-----------|--------------------------------------|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------| -| test_s001 | Get,get_info and remove API's call for
non-existent and removed assest | psa_ps_get
psa_ps_get_info
psa_ps_remove
|PSA_PS_ERROR_UID_NOT_FOUND | 1. Call get API with UID for which no UID/Data pair is created.
2. Call get_info API for which no UID/Data pair is created.
3. Call remove API for which no UID/Data pair is created.
4. Set valid UID/Data pair with uid1.
5. Set one more set of UID/Data pair, with different uid, than previous.
6. Remove the uid of step 4.
7. Call get API for removed UID/data pair.
8. Call get_info API for removed UID/Data pair.
9. Call remove API for removed UID/Data pair.
10. Set valid UID/Data pair.
11. Call get API for different uid , then created.
12. Call get_info API for different uid, then created.
13. Call remove API for different uid, then created.
14. Remove the created UID/Data pair.
15. Remove the stray uid.
| UID value used are 5, 6, 7 | -| test_s002 | Overwriting data for asset created with
WRITE_ONCE flag | psa_ps_set
psa_ps_remove
| PSA_PS_ERROR_WRITE_ONCE | 1. Set valid UID/data value pair , with create flag value none.
2. Call get and get_info API to validate the data, attributes associated with data.
3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG.
4. Call get and get_info API to validate the data, attributes associated with data is not changed after second set operation
5. Try to remove the UID/data pair.
6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG.
7. Try to remove the created UID.
8. Call get and get_info API to validate the data, attributes associated with data.
9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but different data length.
10. Try to remove the UID, PSA_PS_ERROR_WRITE_ONCE error should be returned.
11. Call get and get_info API to validate the data, attributes associated with data.
| UID value used are 1 and 2 | -| test_s003 | Exhaust storage space | psa_ps_set
| PSA_PS_ERROR_INSUFFICIENT_SPACE | 1. Create UID/data pairs, with data_len 256 bytes. Do this with incrementing uid values till we have INSUFFICENT_SPACE.
2. Remove all the UID/data pairs created.
3. Repeat the steps once more, to check all previous uid are removed successfully.
| UID value starts from 5 and keep on incrementing till all space is exhausted | -| test_s004 | Overwriting data for asset created without
WRITE_ONCE flag | psa_ps_set
psa_ps_get
psa_ps_get_info
psa_ps_remove
| PSA_PS_SUCCESS | 1. Set a valid uid/data pair.
2. Validate the data using get api.
3. Change the data length to half of previous.
4. Call GET api with original data length , error should be returned and also the return buffer should be empty.
5. Call GET api with correct data_len and validate the data received.
6. Check old data cannot be accessed.
7. Call REMOVE api to delete the UID/data pair.
| UID value used is 5 | -| test_s005 | Get, get_info and remove API call for valid assest | psa_ps_set
psa_ps_get
psa_ps_get_info
psa_ps_remove
| PSA_PS_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len.
2. Call GET api and validate the set data.
3. Call GET info api and validate the data attributes.
4. Call REMOVE api to delete the UID/data pair.
| UID value used are 4 | -| test_s006 | Storage asset creation with unsupported | psa_ps_set
| PSA_PS_ERROR_FLAGS_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value.
2. Call GET_INFO api and validae the flag value.
3. Remove the uid/data pair.
| UID value used is 5 | -| test_s007 | Get API call with invalid length | psa_ps_get
| PSA_PS_ERROR_INCORRECT_SIZE | 1. Create valid uid/data pair.
2. Increase the length of storage.
3. Try to access the old length using get api.
4. Try to access with valid length less than stored size.
5. Decrease the length of storage.
6. Try to access the old length.
7. Remove the uid.
| UID value used is 5 | -| test_s008 | Get API call with invalid offset | psa_ps_get
| PSA_PS_ERROR_INCORRECT_SIZE | 1. Set valid UID/data pair.
2. Call GET api with valid offset and offset + data_len equal to stored data size.
3. Call GET api with valid offset and offset + data_len less than stored data size.
4. Call get api with invalid offset.
5. Call get api with zero offset , but data len greater than data size.
6. Remove the uid.
| UID value used is 5 | -| test_s009 | API call with NULL pointer and zero length | psa_ps_get
psa_ps_set
psa_ps_get_info
| PSA_PS_SUCCESS | 1. Call the SET API with NULL pointer and data_len zero
2. Validate using get_info api storage should be present.
3. Call get API with NULL pointer.
4. Remove the UID.
5. Call get_info API to validate storage is removed.
6. Set storage entity with valid write_buffer , but length zero.
7. Call get_info API to validate storage attributes.
8. Call get_info api with NULL pointer and valid uid.
9. Remove the uid.
| UID value used is 5
| -| test_s010 | Storage assest creation with UID value 0
| psa_ps_set
| PSA_PS_ERROR_INVALID_ARGUMENTS
| 1. Call the SET API with UID value 0.
2. Check that storage creation fails.
| UID value used is 0
| -| test_p011 | Set_extended API's call for
non-existent and removed assest | psa_ps_set_extended
| PSA_PS_ERROR_UID_NOT_FOUND
| 1. Call the SET Extended API when no uid present.
2. Create a valid storage using set.
3. Call create api with different length for existing uid.
4. Call create api to set WRITE_ONCE flag.
5. Validate data attributes are maintained.
6. Remove the uid.
7. Create valid storage using create api.
8. Try to change length using create api.
9. Validate storage is empty.
10. Again call create api with original parameters.
11. Remove the uid.
12. Check no duplicate entry present.
| UID value used is 5
| -| test_p012 | Set_extended API's call
with invalid offset | psa_ps_set_extended
| PSA_PS_ERROR_OFFSET_INVALID
| 1. Create a valid storage using set.
2. Set data on first half of buffer.
3. Try to set data at incorrect offset +length.
4. Try to set data at incorrect offset.
5. Try to set at correct offset but zero length buffer.
6. Try to set data at incorrect length and valid offset.
7. Overwrite the storage using set api.
8. Validate data is correctly written.
9. Call set_extended with NULL write buffer.
10. Overwrite storage using set_extended api.
11. Remove the uid.
| UID value used is 6
-| test_p013 | Create and set_extended API call for valid assest | psa_ps_set_extended
psa_ps_create | PSA_PS_SUCCESS | 1. Create Storage of zero length using create.
2. Try to set some data in the storage created.
3. Validate the storage attributes.
4. Remove the storage.
5. Create a valid storage with non-zero length.
6. Set data in the buffer.
7. Validate the data attributes.
8. Overwrite data using set api.
9. Validate the data.
10. Call create api for existing uid with same parameters.
11. Remove the uid.
12. Check with set_extended no duplicate uid exists.
| UID value used is 4 -| test_p014 | Create and set_extended API call
when API's not supported | psa_ps_create
psa_ps_set_extended
| PSA_PS_ERROR_NOT_SUPPORTED | Below Steps will be run only if optional API are not supported.
1. Create API call should fail.
2. Check the UID should not exist.
3. Create storage using set API.
4. Try to partially write using set_extended API.
5. Validate data is not modified.
6. Remove the uid.
| UID value used is 5 -| test_p015 | Create API call with
WRITE_ONCE flag | psa_ps_create
|PSA_PS_ERROR_FLAGS_NOT_SUPPORTED | Below Step will be run only if optional API are supported.
1. Create API call with WRITE_ONCE flag should fail.
| UID value used is 5 -| NA | Storage Failure
| NA
| PSA_PS_ERROR_STORAGE_FAILURE
| 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| -| NA | Operation Failure
| NA
| PSA_PS_ERROR_OPERATION_FAILED
| 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| -| NA | Authentication Failure
| NA
| PSA_PS_ERROR_AUTH_FAILED
| 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| -| NA | Data Corruption
| NA
| PSA_PS_ERROR_DATA_CORRUPT
| 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| +3. UID values 1 and 2 are reserved as WRITE_ONCE UID. These UID can't be free from testcase. Make sure these are free.
+ +| Test | Test Scenario | API Verified | Return Value | Test Algorithm | UID Usage | +|-----------|---------------------------------------|----------------|-------------------------|---------------------|------------------------| +| test_s001 | Get,get_info and remove API's call for
non-existent and removed assest | psa_its_get
psa_its_get_info
psa_its_remove
| PSA_ERROR_DOES_NOT_EXIST | 1. Call get API with UID for which no UID/Data pair is created
2. Call get_info API for which no UID/Data pair is created
3. Call remove API for which no UID/Data pair is created
4. Set valid UID/Data pair with uid1
5. Set one more set of UID/Data pair, with different uid, than previous
6. Remove the uid of step 4.
7. Call get API for removed UID/data pair
8. Call get_info API for removed UID/Data pair
9. Call remove API for removed UID/Data pair
10. Set valid UID/Data pair
11. Call get API for different uid , then created
12. Call get_info API for different uid, then created
13. Call remove API for different uid, then created
14. Remove the created UID/Data pair.
15. Remove the stray uid.
| UID value used are 5,6,7 | +| test_s002 | Overwriting data for asset created with
WRITE_ONCE flag | psa_its_set
psa_its_remove
| PSA_ERROR_NOT_PERMITTED | 1. Set valid UID/data value pair , with create flag value none.
2. Call get and get_info API to validate the data, attributes associated with data
3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
4. Call get and get_info API to validate the data, attributes associated with data
is not changed after second set operation
5. try to remove the UID/data pair.
6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
7. Try to remove the created UID.
8. Call get and get_info API to validate the data, attributes associated with data
9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
different data length
10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
11. Call get and get_info API to validate the data, attributes associated with data
| UID value used are 1 and 2 | +| test_s003 | Exhaust storage space | psa_its_set
| PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
uid values till we have INSUFFICENT_SPACE.
2. Remove all the UID/data pairs created.
3. Repeat the steps once more, to check all previous uid are removed successfully
| UID value starts from 5 and keep on incrementing till all space is exhausted | +| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_SUCCESS | 1. Set a valid uid/data pair
2. Validate the data using get api
3. Change the data length to half of previous.
4. Call GET api with original data length , error should be returned and also
the return buffer should be empty
5. Call GET api with correct data_len and validate the data received.
6. Check old data cannot be accessed.
7. Call REMOVE api to delete the UID/data pair
| UID value used is 5 | +| test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
psa_its_get
psa_its_get_info
psa_its_remove
| PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
2. Call GET api and validate the set data
3. Call GET info api and validate the data attributes
4. Call REMOVE api to delete the UID/data pair
| UID value used are 4 | +| test_s006 | Storage asset creation with unsupported
create_flag value | psa_its_set
| PSA_ERROR_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value
2. Call GET_INFO api and validate the flag value
3. Remove the uid/data pair
| UID value used is 5 | +| test_s007 | Get API call with length different than asset
data length | psa_its_set
| PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
2. Increase the length of storage.
3. Try to access the old length using get api.
4. Try to access with valid length less than stored size.
5. Decrease the length of storage.
6. Try to access the old length.
7. Remove the uid
| UID value used is 5 | +| test_s008 | Get API call with invalid offset | psa_its_get
| PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
2. Call GET api with valid offset and offset + data_len equal to stored data size.
3. Call GET api with valid offset and offset + data_len less than stored data size.
4. Call get api with invalid offset.
5. Call get api with zero offset , but data len greater than data size.
6. Remove the uid.
| UID value used is 5 | +| test_s009 | API call with NULL pointer and zero length | psa_its_get
psa_its_set
psa_its_get_info
| PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
2. Validate using get_info api storage should be present.
3. Call get API with NULL pointer.
4. Remove the UID.
5. Call get_info API to validate storage is removed.
6. Set storage entity with valid write_buffer , but length zero.
7. Call get_info API to validate storage attributes.
8. Call get_info api with NULL pointer and valid uid.
9. Remove the uid
| UID value used is 5
| +| test_s010 | Storage assest creation with UID value 0 | psa_its_set
| PSA_ERROR_INVALID_ARGUMENT | 1. Call the SET API with UID value 0.
2. Check that storage creation fails.
| UID value used is 0
+| test_p011 | Set_extended API's call for
non-existent and removed assest | psa_ps_set_extended
| PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET Extended API when no uid present.
2. Create a valid storage using set.
3. Call create api with different length for existing uid.
4. Call create api to set WRITE_ONCE flag.
5. Validate data attributes are maintained.
6. Remove the uid.
7. Create valid storage using create api.
8. Try to change length using create api.
9. Validate storage is empty.
10. Again call create api with original parameters.
11. Remove the uid.
12. Check no duplicate entry present.
| UID value used is 5
| +| test_p012 | Set_extended API's call
with invalid offset | psa_ps_set_extended
| PSA_ERROR_INVALID_ARGUMENT | 1. Create a valid storage using set.
2. Set data on first half of buffer.
3. Try to set data at incorrect offset +length.
4. Try to set data at incorrect offset.
5. Try to set at correct offset but zero length buffer.
6. Try to set data at incorrect length and valid offset.
7. Overwrite the storage using set api.
8. Validate data is correctly written.
9. Call set_extended with NULL write buffer.
10. Overwrite storage using set_extended api.
11. Remove the uid.
| UID value used is 6
+| test_p013 | Create and set_extended API call for valid assest | psa_ps_set_extended
psa_ps_create | PSA_SUCCESS | 1. Create Storage of zero length using create.
2. Try to set some data in the storage created.
3. Validate the storage attributes.
4. Remove the storage.
5. Create a valid storage with non-zero length.
6. Set data in the buffer.
7. Validate the data attributes.
8. Overwrite data using set api.
9. Validate the data.
10. Call create api for existing uid with same parameters.
11. Remove the uid.
12. Check with set_extended no duplicate uid exists.
| UID value used is 4 +| test_p014 | Create and set_extended API call
when API's not supported | psa_ps_create
psa_ps_set_extended
| PSA_ERROR_NOT_SUPPORTED | Below Steps will be run only if optional API are not supported.
1. Create API call should fail.
2. Check the UID should not exist.
3. Create storage using set API.
4. Try to partially write using set_extended API.
5. Validate data is not modified.
6. Remove the uid.
| UID value used is 5 +| test_p015 | Create API call with
WRITE_ONCE flag | psa_ps_create
| PSA_ERROR_NOT_SUPPORTED | Below Step will be run only if optional API are supported.
1. Create API call with WRITE_ONCE flag should fail.
| UID value used is 5
+| test_p016 | Create API call for capacity check | psa_ps_create
psa_ps_set
psa_ps_get_info
psa_ps_set_extended
psa_ps_remove
| PSA_ERROR_ALREADY_EXISTS
PSA_ERROR_STORAGE_FAILURE | Below Steps will be run only if optional API are supported.
1. Create storage with valid UID and capacity using create
2. Check create for existing UID fails
3. Check the attributes of storage are unchanged
4. Override the storage using SET API
5. Check the attributes of storage are changed
6. Accessing old capacity with set_extended APU fails
7. Remove the storage
8. Create new storage with valid UID/data pair using set API
9. Check create API for existing UID fails
10. Remove the storage | UID value used is 5
+| test_p017 | Partial write check with set extended API | psa_ps_create
psa_ps_set_extended
psa_ps_get_info
psa_ps_remove
| PSA_ERROR_STORAGE_FAILURE | Below Steps will be run only if optional API are supported.
1. Create storage with valid UID and capacity using create
2. Set partial data using set extended API
3. Check set extended API fails for data with gaps
4. Set full length data using set extended API
5. Check the valid attributes of storage
6. Remove the storage
| UID value used is 5
+| NA | Fatal error
| NA | PSA_ERROR_STORAGE_FAILURE | 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| +| NA | Data Corruption
| NA | PSA_ERROR_DATA_CORRUPT | 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| +| NA | Invalid Signature
| NA | PSA_ERROR_INVALID_SIGNATURE | 1. The failure cause will depend on the underlying
platform and vary for each implementation.
It is skipped in current suite
| NA
| ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index 68fef756..0a221459 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -33,26 +33,11 @@ git clone https://github.com/ARM-software/psa-arch-tests.git ## Cloning the external repository To build Initial Attestation tests, the PSA APIs test suite clones the following -git repository. The cloning is automated as part of the test suite -build script **./setup.sh**: +git repository. The cloning is automated as part of the test suite cmake build: -~~~ -git clone https://github.com/laurencelundblade/QCBOR.git ./platform/targets//nspe/initial_attestation/ext -cd ./platform/targets//nspe/initial_attestation/ext; git checkout da53227db1488dde0952bdff66c3d904dce270b3 -~~~ - -## To build on Cygwin(32-bit) - -To build test suite on Cygwin ensure all the above prerequisite in place. - -**Note**: Downloading the test suite in Window platform can have extra -newline chars than Unix. Therefore, it is recommended to execute the -following command to change the newline char format before running -any test suite command.
- -~~~ -dos2unix ./tools/scripts/setup.sh -~~~ +**Repo**
+Name : https://github.com/laurencelundblade/QCBOR.git
+Commit id : da53227db1488dde0952bdff66c3d904dce270b3 ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c index 4f04ab01..abfdc5d6 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -26,33 +26,35 @@ **/ uint32_t pal_its_function(int type, va_list valist) { - psa_its_uid_t uid; - uint32_t data_length, offset; - const void *p_write_data; - void *p_read_data; - psa_its_create_flags_t its_create_flags; - struct psa_its_info_t *its_p_info; + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; switch (type) { case PAL_ITS_SET: - uid = va_arg(valist, psa_its_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_its_create_flags_t); - return psa_its_set(uid, data_length, p_write_data, its_create_flags); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); case PAL_ITS_GET: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_its_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_its_uid_t); - its_p_info = va_arg(valist, struct psa_its_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_its_get_info(uid, its_p_info); case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_its_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_its_remove(uid); default: return PAL_STATUS_UNSUPPORTED_FUNC; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c index a4241533..0dd07c57 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c @@ -26,45 +26,47 @@ **/ uint32_t pal_ps_function(int type, va_list valist) { - psa_ps_uid_t uid; - uint32_t data_length, size, offset; - const void *p_write_data; - void *p_read_data; - psa_ps_create_flags_t ps_create_flags; - struct psa_ps_info_t *ps_p_info; + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; switch (type) { case PAL_PS_SET: - uid = va_arg(valist, psa_ps_uid_t); - data_length = va_arg(valist, uint32_t); + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); - return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); case PAL_PS_GET: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_read_data = va_arg(valist, void*); - return psa_ps_get(uid, offset, data_length, p_read_data); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_ps_uid_t); - ps_p_info = va_arg(valist, struct psa_ps_info_t*); + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); return psa_ps_get_info(uid, ps_p_info); case PAL_PS_REMOVE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); return psa_ps_remove(uid); case PAL_PS_CREATE: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_ps_create_flags_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); return psa_ps_create(uid, size, ps_create_flags); case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_ps_uid_t); + uid = va_arg(valist, psa_storage_uid_t); offset = va_arg(valist, uint32_t); - data_length = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_length, p_write_data); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); case PAL_PS_GET_SUPPORT: return psa_ps_get_support(); default: From b892626a44b4681758b49f76a44a3f1a30f834ab Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Mon, 5 Aug 2019 12:59:35 +0530 Subject: [PATCH 09/54] PSA crypto and attestation specification alignment -Updating Crypto to PSA Crypto 1.0-Beta3 -Updating Attestation to PSA Attestation v1.0.0 Release Signed-off-by: Gowtham Siddarth --- .../dev_apis/crypto/test_c001/test_c001.h | 6 +- .../crypto/test_c001/test_entry_c001.c | 1 + .../dev_apis/crypto/test_c002/test_c002.c | 160 +- .../dev_apis/crypto/test_c002/test_c002.h | 7 +- .../dev_apis/crypto/test_c002/test_data.h | 45 +- .../crypto/test_c002/test_entry_c002.c | 1 + .../dev_apis/crypto/test_c003/test_c003.c | 147 +- .../dev_apis/crypto/test_c003/test_c003.h | 6 +- .../dev_apis/crypto/test_c003/test_data.h | 42 +- .../crypto/test_c003/test_entry_c003.c | 1 + .../dev_apis/crypto/test_c004/test_c004.c | 180 +-- .../dev_apis/crypto/test_c004/test_c004.h | 7 +- .../dev_apis/crypto/test_c004/test_data.h | 39 +- .../crypto/test_c004/test_entry_c004.c | 1 + .../dev_apis/crypto/test_c005/test_c005.c | 140 +- .../dev_apis/crypto/test_c005/test_c005.h | 7 +- .../dev_apis/crypto/test_c005/test_data.h | 72 +- .../crypto/test_c005/test_entry_c005.c | 1 + .../dev_apis/crypto/test_c006/test_c006.c | 153 +- .../dev_apis/crypto/test_c006/test_c006.h | 11 +- .../dev_apis/crypto/test_c006/test_data.h | 285 +--- .../crypto/test_c006/test_entry_c006.c | 5 +- .../dev_apis/crypto/test_c007/test_c007.c | 159 +- .../dev_apis/crypto/test_c007/test_c007.h | 12 +- .../dev_apis/crypto/test_c007/test_data.h | 302 +--- .../crypto/test_c007/test_entry_c007.c | 5 +- .../dev_apis/crypto/test_c008/test_c008.c | 148 +- .../dev_apis/crypto/test_c008/test_c008.h | 11 +- .../dev_apis/crypto/test_c008/test_data.h | 254 +-- .../crypto/test_c008/test_entry_c008.c | 3 +- .../dev_apis/crypto/test_c009/test_c009.c | 70 +- .../dev_apis/crypto/test_c009/test_c009.h | 11 +- .../dev_apis/crypto/test_c009/test_data.h | 75 +- .../crypto/test_c009/test_entry_c009.c | 3 +- .../dev_apis/crypto/test_c010/test_c010.c | 196 +-- .../dev_apis/crypto/test_c010/test_c010.h | 9 +- .../dev_apis/crypto/test_c010/test_data.h | 251 +-- .../crypto/test_c010/test_entry_c010.c | 3 +- .../dev_apis/crypto/test_c011/test_c011.c | 6 + .../dev_apis/crypto/test_c011/test_c011.h | 6 +- .../crypto/test_c011/test_entry_c011.c | 1 + .../dev_apis/crypto/test_c012/test_c012.c | 6 + .../dev_apis/crypto/test_c012/test_c012.h | 6 +- .../crypto/test_c012/test_entry_c012.c | 1 + .../dev_apis/crypto/test_c013/test_c013.c | 6 + .../dev_apis/crypto/test_c013/test_c013.h | 6 +- .../crypto/test_c013/test_entry_c013.c | 1 + .../dev_apis/crypto/test_c014/test_c014.c | 6 + .../dev_apis/crypto/test_c014/test_c014.h | 6 +- .../crypto/test_c014/test_entry_c014.c | 1 + .../dev_apis/crypto/test_c015/test_c015.c | 6 + .../dev_apis/crypto/test_c015/test_c015.h | 6 +- .../crypto/test_c015/test_entry_c015.c | 1 + .../dev_apis/crypto/test_c016/test_c016.c | 159 +- .../dev_apis/crypto/test_c016/test_c016.h | 7 +- .../dev_apis/crypto/test_c016/test_data.h | 78 +- .../crypto/test_c016/test_entry_c016.c | 3 +- .../dev_apis/crypto/test_c017/test_c017.c | 8 +- .../dev_apis/crypto/test_c017/test_c017.h | 6 +- .../crypto/test_c017/test_entry_c017.c | 5 +- .../dev_apis/crypto/test_c018/test_c018.c | 219 +-- .../dev_apis/crypto/test_c018/test_c018.h | 10 +- .../dev_apis/crypto/test_c018/test_data.h | 294 +++- .../crypto/test_c018/test_entry_c018.c | 7 +- .../dev_apis/crypto/test_c019/test_c019.c | 151 +- .../dev_apis/crypto/test_c019/test_c019.h | 10 +- .../dev_apis/crypto/test_c019/test_data.h | 200 ++- .../crypto/test_c019/test_entry_c019.c | 5 +- .../dev_apis/crypto/test_c020/test_c020.c | 331 +--- .../dev_apis/crypto/test_c020/test_c020.h | 9 +- .../dev_apis/crypto/test_c020/test_data.h | 126 +- .../crypto/test_c020/test_entry_c020.c | 3 +- .../dev_apis/crypto/test_c021/test_c021.c | 161 +- .../dev_apis/crypto/test_c021/test_c021.h | 8 +- .../dev_apis/crypto/test_c021/test_data.h | 173 ++- .../crypto/test_c021/test_entry_c021.c | 3 +- .../dev_apis/crypto/test_c022/test_c022.c | 174 +-- .../dev_apis/crypto/test_c022/test_c022.h | 9 +- .../dev_apis/crypto/test_c022/test_data.h | 124 +- .../crypto/test_c022/test_entry_c022.c | 3 +- .../dev_apis/crypto/test_c023/test_c023.c | 62 +- .../dev_apis/crypto/test_c023/test_c023.h | 8 +- .../dev_apis/crypto/test_c023/test_data.h | 32 +- .../crypto/test_c023/test_entry_c023.c | 3 +- .../dev_apis/crypto/test_c024/test_c024.c | 153 +- .../dev_apis/crypto/test_c024/test_c024.h | 7 +- .../dev_apis/crypto/test_c024/test_data.h | 18 - .../crypto/test_c024/test_entry_c024.c | 1 + .../dev_apis/crypto/test_c025/test_c025.c | 131 +- .../dev_apis/crypto/test_c025/test_c025.h | 6 +- .../dev_apis/crypto/test_c025/test_data.h | 22 +- .../crypto/test_c025/test_entry_c025.c | 1 + .../dev_apis/crypto/test_c026/test_c026.c | 82 +- .../dev_apis/crypto/test_c026/test_c026.h | 6 +- .../dev_apis/crypto/test_c026/test_data.h | 20 +- .../crypto/test_c026/test_entry_c026.c | 1 + .../dev_apis/crypto/test_c027/test_c027.c | 57 +- .../dev_apis/crypto/test_c027/test_c027.h | 6 +- .../crypto/test_c027/test_entry_c027.c | 1 + .../dev_apis/crypto/test_c028/test_c028.c | 61 +- .../dev_apis/crypto/test_c028/test_c028.h | 6 +- .../crypto/test_c028/test_entry_c028.c | 1 + .../dev_apis/crypto/test_c029/test_c029.c | 69 +- .../dev_apis/crypto/test_c029/test_c029.h | 6 +- .../dev_apis/crypto/test_c029/test_data.h | 2 - .../crypto/test_c029/test_entry_c029.c | 1 + .../dev_apis/crypto/test_c030/test_c030.c | 56 +- .../dev_apis/crypto/test_c030/test_c030.h | 6 +- .../crypto/test_c030/test_entry_c030.c | 1 + .../dev_apis/crypto/test_c031/test_c031.c | 89 +- .../dev_apis/crypto/test_c031/test_c031.h | 6 +- .../crypto/test_c031/test_entry_c031.c | 1 + .../dev_apis/crypto/test_c032/test_c032.c | 82 +- .../dev_apis/crypto/test_c032/test_c032.h | 6 +- .../dev_apis/crypto/test_c032/test_data.h | 35 +- .../crypto/test_c032/test_entry_c032.c | 1 + .../dev_apis/crypto/test_c033/test_c033.c | 79 +- .../dev_apis/crypto/test_c033/test_c033.h | 6 +- .../dev_apis/crypto/test_c033/test_data.h | 6 +- .../crypto/test_c033/test_entry_c033.c | 1 + .../dev_apis/crypto/test_c034/test_c034.c | 58 +- .../dev_apis/crypto/test_c034/test_c034.h | 6 +- .../crypto/test_c034/test_entry_c034.c | 1 + .../dev_apis/crypto/test_c035/test_c035.c | 48 +- .../dev_apis/crypto/test_c035/test_c035.h | 6 +- .../crypto/test_c035/test_entry_c035.c | 1 + .../dev_apis/crypto/test_c036/test_c036.c | 68 +- .../dev_apis/crypto/test_c036/test_c036.h | 6 +- .../crypto/test_c036/test_entry_c036.c | 1 + .../dev_apis/crypto/test_c037/test_c037.c | 65 +- .../dev_apis/crypto/test_c037/test_c037.h | 6 +- .../crypto/test_c037/test_entry_c037.c | 1 + .../dev_apis/crypto/test_c038/test_c038.c | 78 +- .../dev_apis/crypto/test_c038/test_c038.h | 6 +- .../crypto/test_c038/test_entry_c038.c | 1 + .../dev_apis/crypto/test_c039/test_c039.c | 103 +- .../dev_apis/crypto/test_c039/test_c039.h | 6 +- .../dev_apis/crypto/test_c039/test_data.h | 6 +- .../crypto/test_c039/test_entry_c039.c | 1 + .../dev_apis/crypto/test_c040/test_c040.c | 84 +- .../dev_apis/crypto/test_c040/test_c040.h | 6 +- .../dev_apis/crypto/test_c040/test_data.h | 16 +- .../crypto/test_c040/test_entry_c040.c | 1 + .../dev_apis/crypto/test_c041/test_c041.c | 75 +- .../dev_apis/crypto/test_c041/test_c041.h | 6 +- .../dev_apis/crypto/test_c041/test_data.h | 16 +- .../crypto/test_c041/test_entry_c041.c | 1 + .../dev_apis/crypto/test_c042/test_c042.c | 71 +- .../dev_apis/crypto/test_c042/test_c042.h | 6 +- .../dev_apis/crypto/test_c042/test_data.h | 18 +- .../crypto/test_c042/test_entry_c042.c | 1 + .../dev_apis/crypto/test_c043/test_c043.c | 126 +- .../dev_apis/crypto/test_c043/test_c043.h | 10 +- .../dev_apis/crypto/test_c043/test_data.h | 66 +- .../crypto/test_c043/test_entry_c043.c | 3 +- .../dev_apis/crypto/test_c044/test_c044.c | 281 ++-- .../dev_apis/crypto/test_c044/test_c044.h | 1 - .../dev_apis/crypto/test_c044/test_data.h | 134 +- .../crypto/test_c044/test_entry_c044.c | 1 + .../dev_apis/crypto/test_c045/test.cmake | 24 + .../dev_apis/crypto/test_c045/test_c045.c | 112 ++ .../dev_apis/crypto/test_c045/test_c045.h | 30 + .../dev_apis/crypto/test_c045/test_data.h | 115 ++ .../crypto/test_c045/test_entry_c045.c | 54 + .../dev_apis/crypto/test_c046/test.cmake | 24 + .../dev_apis/crypto/test_c046/test_c046.c | 108 ++ .../dev_apis/crypto/test_c046/test_c046.h | 30 + .../dev_apis/crypto/test_c046/test_data.h | 179 +++ .../crypto/test_c046/test_entry_c046.c | 54 + .../dev_apis/crypto/test_c047/test.cmake | 24 + .../dev_apis/crypto/test_c047/test_c047.c | 90 ++ .../dev_apis/crypto/test_c047/test_c047.h | 30 + .../dev_apis/crypto/test_c047/test_data.h | 197 +++ .../crypto/test_c047/test_entry_c047.c | 54 + .../dev_apis/crypto/test_c048/test.cmake | 24 + .../dev_apis/crypto/test_c048/test_c048.c | 100 ++ .../dev_apis/crypto/test_c048/test_c048.h | 30 + .../dev_apis/crypto/test_c048/test_data.h | 162 ++ .../crypto/test_c048/test_entry_c048.c | 54 + .../dev_apis/crypto/test_c049/test.cmake | 24 + .../dev_apis/crypto/test_c049/test_c049.c | 99 ++ .../dev_apis/crypto/test_c049/test_c049.h | 30 + .../dev_apis/crypto/test_c049/test_data.h | 160 ++ .../crypto/test_c049/test_entry_c049.c | 54 + .../dev_apis/crypto/test_c050/test.cmake | 24 + .../dev_apis/crypto/test_c050/test_c050.c | 241 +++ .../dev_apis/crypto/test_c050/test_c050.h | 30 + .../dev_apis/crypto/test_c050/test_data.h | 276 ++++ .../crypto/test_c050/test_entry_c050.c | 54 + .../dev_apis/crypto/test_c051/test.cmake | 24 + .../dev_apis/crypto/test_c051/test_c051.c | 177 +++ .../dev_apis/crypto/test_c051/test_c051.h | 30 + .../dev_apis/crypto/test_c051/test_data.h | 272 ++++ .../crypto/test_c051/test_entry_c051.c | 54 + .../dev_apis/crypto/test_c052/test.cmake | 24 + .../dev_apis/crypto/test_c052/test_c052.c | 90 ++ .../dev_apis/crypto/test_c052/test_c052.h | 31 + .../dev_apis/crypto/test_c052/test_data.h | 88 ++ .../crypto/test_c052/test_entry_c052.c | 54 + .../dev_apis/crypto/test_c053/test.cmake | 24 + .../dev_apis/crypto/test_c053/test_c053.c | 90 ++ .../dev_apis/crypto/test_c053/test_c053.h | 31 + .../dev_apis/crypto/test_c053/test_data.h | 88 ++ .../crypto/test_c053/test_entry_c053.c | 54 + .../dev_apis/crypto/test_c054/test.cmake | 24 + .../dev_apis/crypto/test_c054/test_c054.c | 127 ++ .../dev_apis/crypto/test_c054/test_c054.h | 31 + .../dev_apis/crypto/test_c054/test_data.h | 68 + .../crypto/test_c054/test_entry_c054.c | 54 + .../dev_apis/crypto/test_c055/test.cmake | 24 + .../dev_apis/crypto/test_c055/test_c055.c | 116 ++ .../dev_apis/crypto/test_c055/test_c055.h | 31 + .../dev_apis/crypto/test_c055/test_data.h | 86 ++ .../crypto/test_c055/test_entry_c055.c | 54 + .../dev_apis/crypto/test_c056/test.cmake | 24 + .../dev_apis/crypto/test_c056/test_c056.c | 121 ++ .../dev_apis/crypto/test_c056/test_c056.h | 31 + .../dev_apis/crypto/test_c056/test_data.h | 97 ++ .../crypto/test_c056/test_entry_c056.c | 54 + .../dev_apis/crypto/test_c057/test.cmake | 24 + .../dev_apis/crypto/test_c057/test_c057.c | 126 ++ .../dev_apis/crypto/test_c057/test_c057.h | 31 + .../dev_apis/crypto/test_c057/test_data.h | 104 ++ .../crypto/test_c057/test_entry_c057.c | 54 + .../dev_apis/crypto/test_c058/test.cmake | 24 + .../dev_apis/crypto/test_c058/test_c058.c | 140 ++ .../dev_apis/crypto/test_c058/test_c058.h | 31 + .../dev_apis/crypto/test_c058/test_data.h | 132 ++ .../crypto/test_c058/test_entry_c058.c | 54 + .../dev_apis/crypto/test_c059/test.cmake | 24 + .../dev_apis/crypto/test_c059/test_c059.c | 145 ++ .../dev_apis/crypto/test_c059/test_c059.h | 31 + .../dev_apis/crypto/test_c059/test_data.h | 124 ++ .../crypto/test_c059/test_entry_c059.c | 54 + .../dev_apis/crypto/test_c060/test.cmake | 24 + .../dev_apis/crypto/test_c060/test_c060.c | 111 ++ .../dev_apis/crypto/test_c060/test_c060.h | 32 + .../dev_apis/crypto/test_c060/test_data.h | 60 + .../crypto/test_c060/test_entry_c060.c | 54 + .../dev_apis/crypto/test_c061/test.cmake | 24 + .../dev_apis/crypto/test_c061/test_c061.c | 145 ++ .../dev_apis/crypto/test_c061/test_c061.h | 31 + .../dev_apis/crypto/test_c061/test_data.h | 124 ++ .../crypto/test_c061/test_entry_c061.c | 54 + api-tests/dev_apis/crypto/testsuite.db | 17 + .../initial_attestation/test_a001/test_a001.c | 14 +- .../initial_attestation/test_a001/test_a001.h | 6 +- .../initial_attestation/test_a001/test_data.h | 26 +- api-tests/docs/psa_attestation_testlist.md | 16 +- api-tests/docs/psa_crypto_testlist.md | 1364 +++++++++-------- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_config_check.h | 4 +- .../nspe/crypto/pal_crypto_intf.c | 458 ++++-- .../nspe/crypto/pal_crypto_intf.h | 125 +- .../pal_attestation_crypto.c | 325 ++-- .../pal_attestation_crypto.h | 15 +- .../initial_attestation/pal_attestation_eat.c | 22 +- .../initial_attestation/pal_attestation_eat.h | 9 +- .../pal_attestation_intf.c | 18 +- api-tests/val/common/val.h | 14 +- api-tests/val/nspe/val_crypto.h | 127 +- api-tests/val/nspe/val_framework.c | 15 +- 307 files changed, 13441 insertions(+), 8058 deletions(-) create mode 100644 api-tests/dev_apis/crypto/test_c045/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c045/test_c045.c create mode 100644 api-tests/dev_apis/crypto/test_c045/test_c045.h create mode 100644 api-tests/dev_apis/crypto/test_c045/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c045/test_entry_c045.c create mode 100644 api-tests/dev_apis/crypto/test_c046/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c046/test_c046.c create mode 100644 api-tests/dev_apis/crypto/test_c046/test_c046.h create mode 100644 api-tests/dev_apis/crypto/test_c046/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c046/test_entry_c046.c create mode 100644 api-tests/dev_apis/crypto/test_c047/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c047/test_c047.c create mode 100644 api-tests/dev_apis/crypto/test_c047/test_c047.h create mode 100644 api-tests/dev_apis/crypto/test_c047/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c047/test_entry_c047.c create mode 100644 api-tests/dev_apis/crypto/test_c048/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c048/test_c048.c create mode 100644 api-tests/dev_apis/crypto/test_c048/test_c048.h create mode 100644 api-tests/dev_apis/crypto/test_c048/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c048/test_entry_c048.c create mode 100644 api-tests/dev_apis/crypto/test_c049/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c049/test_c049.c create mode 100644 api-tests/dev_apis/crypto/test_c049/test_c049.h create mode 100644 api-tests/dev_apis/crypto/test_c049/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c049/test_entry_c049.c create mode 100644 api-tests/dev_apis/crypto/test_c050/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c050/test_c050.c create mode 100644 api-tests/dev_apis/crypto/test_c050/test_c050.h create mode 100644 api-tests/dev_apis/crypto/test_c050/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c050/test_entry_c050.c create mode 100644 api-tests/dev_apis/crypto/test_c051/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c051/test_c051.c create mode 100644 api-tests/dev_apis/crypto/test_c051/test_c051.h create mode 100644 api-tests/dev_apis/crypto/test_c051/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c051/test_entry_c051.c create mode 100644 api-tests/dev_apis/crypto/test_c052/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c052/test_c052.c create mode 100644 api-tests/dev_apis/crypto/test_c052/test_c052.h create mode 100644 api-tests/dev_apis/crypto/test_c052/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c052/test_entry_c052.c create mode 100644 api-tests/dev_apis/crypto/test_c053/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c053/test_c053.c create mode 100644 api-tests/dev_apis/crypto/test_c053/test_c053.h create mode 100644 api-tests/dev_apis/crypto/test_c053/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c053/test_entry_c053.c create mode 100644 api-tests/dev_apis/crypto/test_c054/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c054/test_c054.c create mode 100644 api-tests/dev_apis/crypto/test_c054/test_c054.h create mode 100644 api-tests/dev_apis/crypto/test_c054/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c054/test_entry_c054.c create mode 100644 api-tests/dev_apis/crypto/test_c055/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c055/test_c055.c create mode 100644 api-tests/dev_apis/crypto/test_c055/test_c055.h create mode 100644 api-tests/dev_apis/crypto/test_c055/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c055/test_entry_c055.c create mode 100644 api-tests/dev_apis/crypto/test_c056/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c056/test_c056.c create mode 100644 api-tests/dev_apis/crypto/test_c056/test_c056.h create mode 100644 api-tests/dev_apis/crypto/test_c056/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c056/test_entry_c056.c create mode 100644 api-tests/dev_apis/crypto/test_c057/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c057/test_c057.c create mode 100644 api-tests/dev_apis/crypto/test_c057/test_c057.h create mode 100644 api-tests/dev_apis/crypto/test_c057/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c057/test_entry_c057.c create mode 100644 api-tests/dev_apis/crypto/test_c058/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c058/test_c058.c create mode 100644 api-tests/dev_apis/crypto/test_c058/test_c058.h create mode 100644 api-tests/dev_apis/crypto/test_c058/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c058/test_entry_c058.c create mode 100644 api-tests/dev_apis/crypto/test_c059/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c059/test_c059.c create mode 100644 api-tests/dev_apis/crypto/test_c059/test_c059.h create mode 100644 api-tests/dev_apis/crypto/test_c059/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c059/test_entry_c059.c create mode 100644 api-tests/dev_apis/crypto/test_c060/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c060/test_c060.c create mode 100644 api-tests/dev_apis/crypto/test_c060/test_c060.h create mode 100644 api-tests/dev_apis/crypto/test_c060/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c060/test_entry_c060.c create mode 100644 api-tests/dev_apis/crypto/test_c061/test.cmake create mode 100644 api-tests/dev_apis/crypto/test_c061/test_c061.c create mode 100644 api-tests/dev_apis/crypto/test_c061/test_c061.h create mode 100644 api-tests/dev_apis/crypto/test_c061/test_data.h create mode 100644 api-tests/dev_apis/crypto/test_c061/test_entry_c061.c diff --git a/api-tests/dev_apis/crypto/test_c001/test_c001.h b/api-tests/dev_apis/crypto/test_c001/test_c001.h index 02a8c6b9..de257664 100644 --- a/api-tests/dev_apis/crypto/test_c001/test_c001.h +++ b/api-tests/dev_apis/crypto/test_c001/test_c001.h @@ -18,9 +18,9 @@ #define _TEST_C001_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c001) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c001) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #define GENERATE_SIZE 32 diff --git a/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c b/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c index e1ba064c..5ae3163e 100644 --- a/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c +++ b/api-tests/dev_apis/crypto/test_c001/test_entry_c001.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 1) #define TEST_DESC "Testing psa_crypto_init API: Basic\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.c b/api-tests/dev_apis/crypto/test_c002/test_c002.c index e5c15a5e..63944c99 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.c +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c @@ -24,7 +24,6 @@ client_test_t test_c002_crypto_list[] = { NULL, psa_import_key_test, - psa_import_key_negative_test, NULL, }; @@ -32,14 +31,20 @@ static int g_test_count = 1; int32_t psa_import_key_test(security_t caller) { - uint32_t length, i; - uint8_t data[BUFFER_SIZE]; - const uint8_t *key_data; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t status; + int32_t i, status; + uint8_t data[BUFFER_SIZE]; + size_t length; + const uint8_t *key_data; + psa_key_type_t get_key_type; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t get_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -55,14 +60,9 @@ int32_t psa_import_key_test(security_t caller) status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -83,7 +83,7 @@ int32_t psa_import_key_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -91,130 +91,66 @@ int32_t psa_import_key_test(security_t caller) else key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); + /* If failure is expected, continue with the next data set */ if (check1[i].expected_status != PSA_SUCCESS) continue; - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + /* Get the attributes of the imported key and check if it matches the given value */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle, + &get_attributes); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5)); - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8)); + if (check1[i].attr_bits != 0) + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6)); + else + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, + TEST_CHECKPOINT_NUM(7)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10)); + /* Check the attributes of the exported key */ + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(8)); if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(9)); } else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(10)); } else { return VAL_STATUS_INVALID; } - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); - } - - return VAL_STATUS_SUCCESS; -} + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); -int32_t psa_import_key_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_policy_t policy; - psa_key_handle_t invalid_key_handle; + val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_import_key with already occupied key slot\n", - g_test_count++); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&invalid_key_handle, 0xDEADDEAD, sizeof(invalid_key_handle)); - /* Set the usage policy on a key slot */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Import the key data into the occupied key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(5)); - - val->print(PRINT_TEST, "[Check %d] Test psa_import_key with zero as key handle\n", - g_test_count++); - /* Import the key data with zero as key handle */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, 0, check2[i].key_type, - check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); - - val->print(PRINT_TEST, "[Check %d] Test psa_import_key with destroyed handle\n", - g_test_count++); - /* Destroy the handle */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_ARGUMENT, TEST_CHECKPOINT_NUM(12)); - /* Import the key data with destroyed handle */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8)); - - val->print(PRINT_TEST, "[Check %d] Test psa_import_key with unallocated key handle\n", - g_test_count++); - /* Import the key data with unallocated key handle */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, invalid_key_handle, check2[i].key_type, - check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(check1[i].key_handle, 0, TEST_CHECKPOINT_NUM(13)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.h b/api-tests/dev_apis/crypto/test_c002/test_c002.h index 4081d294..d12fb7db 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.h +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.h @@ -18,14 +18,13 @@ #define _TEST_C002_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c002) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c002) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c002_crypto_list[]; int32_t psa_import_key_test(security_t caller); -int32_t psa_import_key_negative_test(security_t caller); #endif /* _TEST_C002_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c002/test_data.h b/api-tests/dev_apis/crypto/test_c002/test_data.h index 0b2faea1..38db0a5f 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_data.h +++ b/api-tests/dev_apis/crypto/test_c002/test_data.h @@ -23,6 +23,7 @@ typedef struct { psa_key_type_t key_type; uint8_t key_data[34]; uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; uint32_t expected_bit_length; @@ -167,7 +168,7 @@ static test_data check1[] = { {"Test psa_import_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -176,7 +177,7 @@ static test_data check1[] = { {"Test psa_import_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -186,23 +187,22 @@ static test_data check1[] = { {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS }, #endif -#endif #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW #ifdef ARCH_TEST_RSA_2048 {"Test psa_import_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, 270, PSA_SUCCESS }, -{"Test psa_import_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_import_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, - 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, 1193, PSA_SUCCESS }, #endif @@ -212,7 +212,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_DES_1KEY {"Test psa_import_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -221,7 +221,7 @@ static test_data check1[] = { {"Test psa_import_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS }, #endif @@ -231,7 +231,7 @@ static test_data check1[] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS }, #endif @@ -242,16 +242,16 @@ static test_data check1[] = { {"Test psa_import_key with EC Public key\n", 9, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, + 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, 256, 65, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_import_key with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, + 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, 224, 28, PSA_SUCCESS }, #endif @@ -263,14 +263,14 @@ static test_data check1[] = { {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_34B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + AES_34B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_34B_KEY_SIZE), AES_34B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_import_key with incorrect key data size\n", 12, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77}, -AES_18B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, +AES_18B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_18B_KEY_SIZE), AES_18B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -278,22 +278,9 @@ BYTES_TO_BITS(AES_18B_KEY_SIZE), AES_18B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT {"Test psa_import_key with incorrect key type\n", 13, PSA_KEY_TYPE_VENDOR_FLAG, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, -AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, +AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_NOT_SUPPORTED, }, #endif -}; - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_import_key negative cases\n", 1, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0x77}, -AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, -BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_ALREADY_EXISTS -}, -#endif #endif - }; diff --git a/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c b/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c index 6f31df0d..1ea3d4fb 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c +++ b/api-tests/dev_apis/crypto/test_c002/test_entry_c002.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 2) #define TEST_DESC "Testing crypto key management APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.c b/api-tests/dev_apis/crypto/test_c003/test_c003.c index 1968cb15..814513dd 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_c003.c +++ b/api-tests/dev_apis/crypto/test_c003/test_c003.c @@ -23,7 +23,6 @@ client_test_t test_c003_crypto_list[] = { NULL, psa_export_key_test, - psa_export_key_negative_test, NULL, }; @@ -32,13 +31,17 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_export_key_test(security_t caller) { - uint32_t length, i; - const uint8_t *key_data; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t status; + int32_t i, status; + size_t length; + const uint8_t *key_data; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,10 +53,7 @@ int32_t psa_export_key_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); + memset(data, 0, BUFFER_SIZE); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); @@ -61,7 +61,7 @@ int32_t psa_export_key_test(security_t caller) if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -82,7 +82,7 @@ int32_t psa_export_key_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -90,131 +90,48 @@ int32_t psa_export_key_test(security_t caller) else key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Make sure the metada matches with the given data */ - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, check1[i].buffer_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + /* If failure is expected, continue with the next data set */ if (check1[i].expected_status != PSA_SUCCESS) continue; - /* Check if the key length matches with the given length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10)); + /* Check the attributes of the exported key */ + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(5)); - /* Check if original key data matches with the exported data */ if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(6)); } else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(7)); } else { return VAL_STATUS_INVALID; } - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_export_key_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - uint32_t i, length; - int32_t status; - psa_key_policy_t policy; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with unallocated key handle\n", - g_test_count++); - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(5)); - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with zero as key handle\n", - g_test_count++); - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, 0, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); - - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with destroyed key handle\n", - g_test_count++); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); + /* Destroy the key handle and check if export key fails */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - /* Destroy the key handle */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10)); + status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, + check1[i].buffer_size, &length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.h b/api-tests/dev_apis/crypto/test_c003/test_c003.h index 4d8a4d6c..96ed12bd 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_c003.h +++ b/api-tests/dev_apis/crypto/test_c003/test_c003.h @@ -18,9 +18,9 @@ #define _TEST_C003_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c003) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c003) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c003/test_data.h b/api-tests/dev_apis/crypto/test_c003/test_data.h index dfe0a0b6..625cc17f 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_data.h +++ b/api-tests/dev_apis/crypto/test_c003/test_data.h @@ -23,6 +23,7 @@ typedef struct { psa_key_type_t key_type; uint8_t key_data[34]; uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; size_t buffer_size; @@ -166,7 +167,7 @@ static test_data check1[] = { {"Test psa_export_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -175,7 +176,7 @@ static test_data check1[] = { {"Test psa_export_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -185,7 +186,7 @@ static test_data check1[] = { {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -195,13 +196,13 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_2048 {"Test psa_export_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, + 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, 2048, 270, PSA_SUCCESS }, -{"Test psa_export_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_export_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, - 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, + 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, 2048, 1193, PSA_SUCCESS }, #endif @@ -211,7 +212,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_DES_1KEY {"Test psa_export_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -220,7 +221,7 @@ static test_data check1[] = { {"Test psa_export_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS }, #endif @@ -230,7 +231,7 @@ static test_data check1[] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS }, #endif @@ -241,16 +242,16 @@ static test_data check1[] = { {"Test psa_export_key with EC Public key\n", 9, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, + 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, 256, 65, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_export_key with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, + 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, 224, 28, PSA_SUCCESS }, #endif @@ -261,29 +262,16 @@ static test_data check1[] = { {"Test psa_export_key with key policy verify\n", 11, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x05}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_VERIFY, PSA_ALG_CTR, BUFFER_SIZE, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_VERIFY, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED }, {"Test psa_export_key with less buffer size\n", 12, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x05}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, 14, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, 14, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_BUFFER_TOO_SMALL }, #endif #endif }; - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_export_key negative case\n", 13, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0x05}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS -}, -#endif -#endif -}; diff --git a/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c b/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c index 8b501599..59efbf1e 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c +++ b/api-tests/dev_apis/crypto/test_c003/test_entry_c003.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 3) #define TEST_DESC "Testing crypto key management APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.c b/api-tests/dev_apis/crypto/test_c004/test_c004.c index d99c4837..2eed9a4b 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_c004.c +++ b/api-tests/dev_apis/crypto/test_c004/test_c004.c @@ -23,7 +23,6 @@ client_test_t test_c004_crypto_list[] = { NULL, test_psa_export_public_key, - test_psa_export_public_key_handle, NULL, }; @@ -32,13 +31,17 @@ static uint8_t data[BUFFER_SIZE]; int32_t test_psa_export_public_key(security_t caller) { - uint32_t length, i; - const uint8_t *key_data; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t status; + int32_t i, status; + size_t length; + const uint8_t *key_data; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,10 +53,7 @@ int32_t test_psa_export_public_key(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); + memset(data, 0, BUFFER_SIZE); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); @@ -61,7 +61,7 @@ int32_t test_psa_export_public_key(security_t caller) if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -82,7 +82,7 @@ int32_t test_psa_export_public_key(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -90,168 +90,54 @@ int32_t test_psa_export_public_key(security_t caller) else key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); - - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check1[i].key_handle, data, check1[i].buffer_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + /* If failure is expected, continue with the next data set */ if (check1[i].expected_status != PSA_SUCCESS) continue; - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(5)); /* Check if original key data matches with the exported data */ if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_MEMCMP(check1[i].key_data, data, length, TEST_CHECKPOINT_NUM(6)); } else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) key_data = expected_rsa_256_pubprv; - else if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + else if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = expected_ec_pubprv; - TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(7)); } else { return VAL_STATUS_INVALID; } - } - - return VAL_STATUS_SUCCESS; - -} - -int32_t test_psa_export_public_key_handle(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - uint32_t i, length; - int32_t status; - const uint8_t *key_data; - psa_key_policy_t policy; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with unallocated key handle\n", - g_test_count++); - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(5)); - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with zero as key handle\n", - g_test_count++); - status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, 0, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); - - val->print(PRINT_TEST, "[Check %d] Test psa_export_key with destroyed key handle\n", - g_test_count++); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - if (PSA_KEY_TYPE_IS_RSA(check2[i].key_type)) - { - if (check2[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) - { - if (check2[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keypair; - else if (check2[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keypair; - else - return VAL_STATUS_INVALID; - } - else - { - if (check2[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keydata; - else if (check2[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keydata; - else - return VAL_STATUS_INVALID; - } - } - else if (PSA_KEY_TYPE_IS_ECC(check2[i].key_type)) - { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check2[i].key_type)) - key_data = ec_keypair; - else - key_data = ec_keydata; - } - else - key_data = check2[i].key_data; - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, key_data, check2[i].key_length); + /* Destroy the key handle and check if export key fails */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - /* Destroy the key handle */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check2[i].key_handle, data, - check2[i].key_length, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10)); + status = val->crypto_function(VAL_CRYPTO_EXPORT_PUBLIC_KEY, check1[i].key_handle, data, + check1[i].buffer_size, &length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.h b/api-tests/dev_apis/crypto/test_c004/test_c004.h index c24ec82b..518013f2 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_c004.h +++ b/api-tests/dev_apis/crypto/test_c004/test_c004.h @@ -18,14 +18,13 @@ #define _TEST_C004_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c004) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c004) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c004_crypto_list[]; int32_t test_psa_export_public_key(security_t caller); -int32_t test_psa_export_public_key_handle(security_t caller); #endif /* _TEST_C004_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c004/test_data.h b/api-tests/dev_apis/crypto/test_c004/test_data.h index 66dae2a2..f389a0f4 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_data.h +++ b/api-tests/dev_apis/crypto/test_c004/test_data.h @@ -23,6 +23,7 @@ typedef struct { psa_key_type_t key_type; uint8_t key_data[34]; uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; size_t buffer_size; @@ -198,7 +199,7 @@ static test_data check1[] = { {"Test psa_export_public_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -207,7 +208,7 @@ static test_data check1[] = { {"Test psa_export_public_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -217,7 +218,7 @@ static test_data check1[] = { {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -227,13 +228,13 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_2048 {"Test psa_export_public_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, + 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, 2048, 270, PSA_SUCCESS }, -{"Test psa_export_public_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_export_public_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, - 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, + 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, 2048, 270, PSA_SUCCESS }, #endif @@ -243,7 +244,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_DES_1KEY {"Test psa_export_public_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -252,7 +253,7 @@ static test_data check1[] = { {"Test psa_export_public_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -262,7 +263,7 @@ static test_data check1[] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, + DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BUFFER_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif @@ -273,16 +274,16 @@ static test_data check1[] = { {"Test psa_export_public_key with EC Public key\n", 9, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, + 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, 256, 65, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_export_public_key with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, + 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, BUFFER_SIZE, 224, 57, PSA_SUCCESS }, #endif @@ -292,21 +293,9 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA {"Test psa_export_public_key with less buffer size\n", 12, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, -270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 200, +270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 200, 2048, 270, PSA_ERROR_BUFFER_TOO_SMALL }, #endif #endif }; - -static test_data check2[] = { -#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#ifdef ARCH_TEST_RSA -{"Test psa_export_public_key negative case\n", 13, PSA_KEY_TYPE_RSA_PUBLIC_KEY, - {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, BUFFER_SIZE, - 2048, 270, PSA_SUCCESS -}, -#endif -#endif -}; diff --git a/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c b/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c index 7b8fdc92..e552b553 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c +++ b/api-tests/dev_apis/crypto/test_c004/test_entry_c004.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 4) #define TEST_DESC "Testing crypto key management APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.c b/api-tests/dev_apis/crypto/test_c005/test_c005.c index 1af6b369..e14e1172 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_c005.c +++ b/api-tests/dev_apis/crypto/test_c005/test_c005.c @@ -23,7 +23,6 @@ client_test_t test_c005_crypto_list[] = { NULL, psa_destroy_key_test, - psa_destroy_invalid_key_test, NULL, }; @@ -31,13 +30,23 @@ static int g_test_count = 1; int32_t psa_destroy_key_test(security_t caller) { - uint32_t i; - const uint8_t *key_data; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t status; + int32_t i, status; + const uint8_t *key_data; + psa_key_type_t get_key_type; + psa_key_id_t get_key_id; + psa_key_lifetime_t get_key_lifetime; + psa_key_usage_t get_key_usage_flags; + psa_algorithm_t get_key_algorithm; + size_t get_key_bits; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t set_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -49,21 +58,13 @@ int32_t psa_destroy_key_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - key_type = 0; - bits = 0; - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -84,7 +85,7 @@ int32_t psa_destroy_key_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -92,90 +93,51 @@ int32_t psa_destroy_key_test(security_t caller) else key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &set_attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &set_attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &set_attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &set_attributes, check1[i].key_id); + val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &set_attributes, check1[i].key_lifetime); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &set_attributes, check1[i].key_alg); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &set_attributes, key_data, + check1[i].key_length, &check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); + /* Destroy the key handle */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + /* Getting the attributes of the destroyed key should return error */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle, + &attributes); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5)); - /* Get basic metadata about a key */ - TEST_ASSERT_EQUAL(val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits), - PSA_SUCCESS, - TEST_CHECKPOINT_NUM(6)); + /* Check if all the attributes are erased */ + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(6)); - /* Check that metadata matches with given data */ - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8)); + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(7)); - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(8)); - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10)); + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(9)); - /* Check that if the key metadata are destroyed */ - TEST_ASSERT_NOT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(11)); - TEST_ASSERT_NOT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(12)); - } + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(10)); - return VAL_STATUS_SUCCESS; -} + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, 0, TEST_CHECKPOINT_NUM(11)); -int32_t psa_destroy_invalid_key_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with unallocated key handle\n", - g_test_count++); - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + /* Destroying an empty key handle should return error */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(12)); - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with zero as key handle\n", - g_test_count++); - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, 0); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - val->print(PRINT_TEST, "[Check %d] Test psa_destroy_key with empty key handle\n", - g_test_count++); - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.h b/api-tests/dev_apis/crypto/test_c005/test_c005.h index d191aede..50cad3d3 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_c005.h +++ b/api-tests/dev_apis/crypto/test_c005/test_c005.h @@ -18,14 +18,13 @@ #define _TEST_C005_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c005) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c005) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c005_crypto_list[]; int32_t psa_destroy_key_test(security_t caller); -int32_t psa_destroy_invalid_key_test(security_t caller); #endif /* _TEST_C005_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c005/test_data.h b/api-tests/dev_apis/crypto/test_c005/test_data.h index bab27f24..3b70b18f 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_data.h +++ b/api-tests/dev_apis/crypto/test_c005/test_data.h @@ -23,10 +23,12 @@ typedef struct { psa_key_type_t key_type; uint8_t key_data[34]; uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; + psa_key_id_t key_id; + psa_key_lifetime_t key_lifetime; uint32_t expected_bit_length; - uint32_t expected_key_length; psa_status_t expected_status; } test_data; @@ -166,8 +168,9 @@ static test_data check1[] = { {"Test psa_destroy_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x12, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS }, #endif @@ -175,8 +178,9 @@ static test_data check1[] = { {"Test psa_destroy_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS + AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x34, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_SUCCESS }, #endif @@ -185,8 +189,9 @@ static test_data check1[] = { {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS + AES_32B_KEY_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x56, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_SUCCESS }, #endif #endif @@ -195,14 +200,16 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_2048 {"Test psa_destroy_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 270, PSA_SUCCESS + 270, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 0x78, PSA_KEY_LIFETIME_VOLATILE, + 2048, PSA_SUCCESS }, -{"Test psa_destroy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_destroy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, - 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 1193, PSA_SUCCESS + 1193, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 0x89, PSA_KEY_LIFETIME_VOLATILE, + 2048, PSA_SUCCESS }, #endif #endif @@ -211,8 +218,9 @@ static test_data check1[] = { #ifdef ARCH_TEST_DES_1KEY {"Test psa_destroy_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS + DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xAB, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_SUCCESS }, #endif @@ -220,8 +228,9 @@ static test_data check1[] = { {"Test psa_destroy_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS + DES3_2KEY_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xBC, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_SUCCESS }, #endif @@ -230,8 +239,9 @@ static test_data check1[] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS + DES3_3KEY_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xCD, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_SUCCESS }, #endif #endif @@ -241,8 +251,9 @@ static test_data check1[] = { {"Test psa_destroy_key with EC Public key\n", 9, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 256, 65, PSA_SUCCESS + 65, 256, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, + 0xEF, PSA_KEY_LIFETIME_VOLATILE, + 256, PSA_SUCCESS }, #endif #endif @@ -250,24 +261,11 @@ static test_data check1[] = { #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_destroy_key with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, - 224, 28, PSA_SUCCESS -}, -#endif -#endif -}; - - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_destroy_key negative case\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS + 28, 224, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, + 0x123, PSA_KEY_LIFETIME_VOLATILE, + 224, PSA_SUCCESS }, #endif #endif diff --git a/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c b/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c index 9559f136..0a8b46db 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c +++ b/api-tests/dev_apis/crypto/test_c005/test_entry_c005.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 5) #define TEST_DESC "Testing crypto key management APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.c b/api-tests/dev_apis/crypto/test_c006/test_c006.c index a18aaa79..61fecdcb 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_c006.c +++ b/api-tests/dev_apis/crypto/test_c006/test_c006.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,159 +19,62 @@ #include "val_target.h" #include "test_c006.h" #include "test_data.h" +#include "val_crypto.h" client_test_t test_c006_crypto_list[] = { NULL, - psa_get_key_information_test, - psa_get_key_information_invalid_test, + psa_hash_compute_test, NULL, }; static int g_test_count = 1; -int32_t psa_get_key_information_test(security_t caller) +int32_t psa_hash_compute_test(security_t caller) { - int32_t i, status; - const uint8_t *key_data; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + const char *expected_hash; + char hash[HASH_64B]; + size_t hash_length, hash_size = sizeof(hash); + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) - { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keypair; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keypair; - else - return VAL_STATUS_INVALID; - } - else - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keydata; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keydata; - else - return VAL_STATUS_INVALID; - } - } - else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) - { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) - key_data = ec_keypair; - else - key_data = ec_keydata; - } + if (check1[i].alg == PSA_ALG_SHA_384) + expected_hash = sha384_hash; + else if (check1[i].alg == PSA_ALG_SHA_512) + expected_hash = sha512_hash; else - key_data = check1[i].key_data; - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + expected_hash = check1[i].hash; - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + /* Calculate the hash (digest) of a message */ + status = val->crypto_function(VAL_CRYPTO_HASH_COMPUTE, check1[i].alg, &check1[i].input, + check1[i].input_length, hash, hash_size, &hash_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); if (check1[i].expected_status != PSA_SUCCESS) + { continue; + } - /* Check that it matches with given data */ - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(8)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_get_key_information_invalid_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with unallocated" - " key handle\n", g_test_count++); - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle, - &check2[i].key_type, &check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with zero as" - " key handle\n", g_test_count++); - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, 0, - &check2[i].key_type, &check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with empty key handle\n", - g_test_count++); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle, - &check2[i].key_type, &check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(6)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_information with destroyed" - " key handle\n", g_test_count++); - /* Destroy a key and restore the slot to its default state */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check2[i].key_handle, - &check2[i].key_type, &check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8)); - + TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(8)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.h b/api-tests/dev_apis/crypto/test_c006/test_c006.h index f8d834bf..c46a0b36 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_c006.h +++ b/api-tests/dev_apis/crypto/test_c006/test_c006.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,14 +18,13 @@ #define _TEST_C006_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c006) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c006) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c006_crypto_list[]; -int32_t psa_get_key_information_test(security_t caller); -int32_t psa_get_key_information_invalid_test(security_t caller); +int32_t psa_hash_compute_test(security_t caller); #endif /* _TEST_C006_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c006/test_data.h b/api-tests/dev_apis/crypto/test_c006/test_data.h index ccc52e2c..5aeee359 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_data.h +++ b/api-tests/dev_apis/crypto/test_c006/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,255 +18,108 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[34]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint32_t expected_bit_length; - uint32_t expected_key_length; + char test_desc[50]; + psa_algorithm_t alg; + char input; + size_t input_length; + char hash[32]; + size_t hash_length; psa_status_t expected_status; } test_data; -static const uint8_t rsa_384_keypair[1]; -static const uint8_t rsa_384_keydata[1]; +static const char sha384_hash[] = { +0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62, +0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef, +0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde, +0xde, 0x74, 0xda, 0x2a}; -static const uint8_t rsa_256_keypair[] = { - 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, - 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, - 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, - 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, - 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, - 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, - 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, - 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, - 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, - 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, - 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, - 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, - 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, - 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, - 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, - 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, - 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, - 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, - 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, - 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, - 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, - 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, - 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, - 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, - 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, - 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, - 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, - 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, - 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, - 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, - 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, - 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, - 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, - 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, - 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, - 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, - 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, - 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, - 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, - 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, - 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, - 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, - 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, - 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, - 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, - 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, - 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, - 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, - 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, - 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, - 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, - 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, - 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, - 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, - 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, - 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, - 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, - 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, - 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, - 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, - 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, - 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, - 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, - 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, - 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, - 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, - 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, - 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, - 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, - 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, - 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, - 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, - 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, - 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, - 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, - 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, - 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, - 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, - 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, - 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, - 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, - 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, - 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, - 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, - 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, - 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, - 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, - 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, - 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, - 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, - 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; - -static const uint8_t rsa_256_keydata[] = { - 0x30, 0x82, 0x01, 0x0A, - 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, - 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, - 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, - 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, - 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, - 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, - 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, - 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, - 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, - 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, - 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, - 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, - 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, - 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, - 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, - 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, - 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, - 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, - 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; - -static const uint8_t ec_keydata[] = { - 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, - 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, - 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, - 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, - 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; - -static const uint8_t ec_keypair[] = { - 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, - 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; +static const char sha512_hash[] = { +0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d, +0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe, +0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba, +0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3, +0x7c, 0x3f, 0x7b, 0xaf}; static test_data check1[] = { - -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_information 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD2 +{"Test psa_hash_compute with MD2 algorithm\n", + PSA_ALG_MD2, 0xbd, 1, + {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf}, + 16, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_AES_192 -{"Test psa_get_key_information 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, -{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, - 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD4 +{"Test psa_hash_compute with MD4 algorithm\n", + PSA_ALG_MD4, 0xbd, 1, + {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25}, + 16, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_AES_256 -{"Test psa_get_key_information 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD5 +{"Test psa_hash_compute with MD5 algorithm\n", + PSA_ALG_MD5, 0xbd, 1, + {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb}, + 16, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#ifdef ARCH_TEST_RSA_2048 -{"Test psa_get_key_information 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, - {0}, - 270, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 270, PSA_SUCCESS +#ifdef ARCH_TEST_RIPEMD160 +{"Test psa_hash_compute with RIPEMD160 algorithm\n", + PSA_ALG_RIPEMD160, 0xbd, 1, + {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd, + 0xee, 0x43, 0x5b, 0x37}, + 20, PSA_SUCCESS, }, +#endif -{"Test psa_get_key_information with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, - {0}, - 1193, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 1193, PSA_SUCCESS +#ifdef ARCH_TEST_SHA1 +{"Test psa_hash_compute with SHA1 algorithm\n", + PSA_ALG_SHA_1, 0xbd, 1, + {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6, + 0xfa, 0x26, 0xb2, 0x21}, + 20, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_DES_1KEY -{"Test psa_get_key_information with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, - {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA224 +{"Test psa_hash_compute with SHA224 algorithm\n", + PSA_ALG_SHA_224, 0xbd, 1, + {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d, + 0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57}, + 28, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_DES_2KEY -{"Test psa_get_key_information with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA256 +{"Test psa_hash_compute with SHA256 algorithm\n", + PSA_ALG_SHA_256, 0xbd, 1, + {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, + 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b}, + 32, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_DES_3KEY -{"Test psa_get_key_information with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, -{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA384 +{"Test psa_hash_compute with SHA384 algorithm\n", + PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_ECDSA -#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_get_key_information with EC Public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), - {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 256, 65, PSA_SUCCESS +#ifdef ARCH_TEST_SHA512 +{"Test psa_hash_compute with SHA512 algorithm\n", + PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS, }, -#endif -#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 -{"Test psa_get_key_information with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), - {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 224, 28, PSA_SUCCESS +#ifdef ARCH_TEST_SHA512 +{"Test psa_hash_compute with small buffer size\n", + PSA_ALG_SHA_512, 0xbd, 1, {0}, 60, PSA_ERROR_BUFFER_TOO_SMALL, }, #endif #endif -}; -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_information negative cases\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +{"Test psa_hash_compute with invalid algorithm\n", + PSA_HASH_ALG_INVALID, 0xbd, 1, {0}, 64, PSA_ERROR_NOT_SUPPORTED, }, -#endif -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c b/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c index 983ee819..d1536d28 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c +++ b/api-tests/dev_apis/crypto/test_c006/test_entry_c006.c @@ -19,8 +19,9 @@ #include "val_target.h" #include "test_c006.h" -#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 6) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 06) +#define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.c b/api-tests/dev_apis/crypto/test_c007/test_c007.c index 9b3371fc..1c86caa8 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_c007.c +++ b/api-tests/dev_apis/crypto/test_c007/test_c007.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,165 +23,48 @@ client_test_t test_c007_crypto_list[] = { NULL, - psa_set_key_policy_test, - psa_set_key_policy_negative_test, + psa_hash_compare_test, NULL, }; static int g_test_count = 1; -int32_t psa_set_key_policy_test(security_t caller) +int32_t psa_hash_compare_test(security_t caller) { - const uint8_t *key_data; - psa_key_policy_t policy, expected_policy; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + const char *hash; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) - { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keypair; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keypair; - else - return VAL_STATUS_INVALID; - } - else - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keydata; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keydata; - else - return VAL_STATUS_INVALID; - } - } - else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) - { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) - key_data = ec_keypair; - else - key_data = ec_keydata; - } + if (check1[i].alg == PSA_ALG_SHA_384) + hash = sha384_hash; + else if (check1[i].alg == PSA_ALG_SHA_512) + hash = sha512_hash; else - key_data = check1[i].key_data; - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); - - if (check1[i].expected_status != PSA_SUCCESS) - continue; - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get the usage policy for a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check1[i].key_handle, - &expected_policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Check if the usage is same as programmed */ - TEST_ASSERT_EQUAL(expected_policy.usage, check1[i].usage, TEST_CHECKPOINT_NUM(7)); - - /* Check if the algorithm is same as programmed */ - TEST_ASSERT_EQUAL(expected_policy.alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(8)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_set_key_policy_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_policy_t policy; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with unallocated key handle\n", - g_test_count++); - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Set the usage policy on a key slot */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with zero as key handle\n", - g_test_count++); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, 0, &policy); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the usage policy on a key slot */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_set_key_policy with already occupied handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + hash = check1[i].hash; - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(8)); + /* Calculate the hash (digest) of a message and compare it with a reference value */ + status = val->crypto_function(VAL_CRYPTO_HASH_COMPARE, check1[i].alg, &check1[i].input, + check1[i].input_length, hash, check1[i].hash_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.h b/api-tests/dev_apis/crypto/test_c007/test_c007.h index ee5635f0..55918d92 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_c007.h +++ b/api-tests/dev_apis/crypto/test_c007/test_c007.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,15 +18,13 @@ #define _TEST_C007_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c007) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c007) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c007_crypto_list[]; -int32_t psa_set_key_policy_test(security_t caller); -int32_t psa_set_key_policy_negative_test(security_t caller); +int32_t psa_hash_compare_test(security_t caller); #endif /* _TEST_C007_CLIENT_TESTS_H_ */ - diff --git a/api-tests/dev_apis/crypto/test_c007/test_data.h b/api-tests/dev_apis/crypto/test_c007/test_data.h index 75726963..5d6dc86a 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_data.h +++ b/api-tests/dev_apis/crypto/test_c007/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,268 +18,114 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[34]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint32_t expected_bit_length; - uint32_t expected_key_length; + char test_desc[50]; + psa_algorithm_t alg; + char input; + size_t input_length; + char hash[32]; + size_t hash_length; psa_status_t expected_status; } test_data; -static const uint8_t rsa_384_keypair[1]; -static const uint8_t rsa_384_keydata[1]; +static const char sha384_hash[] = { +0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62, +0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef, +0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde, +0xde, 0x74, 0xda, 0x2a}; -static const uint8_t rsa_256_keypair[] = { - 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, - 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, - 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, - 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, - 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, - 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, - 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, - 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, - 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, - 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, - 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, - 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, - 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, - 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, - 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, - 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, - 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, - 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, - 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, - 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, - 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, - 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, - 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, - 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, - 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, - 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, - 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, - 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, - 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, - 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, - 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, - 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, - 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, - 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, - 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, - 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, - 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, - 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, - 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, - 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, - 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, - 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, - 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, - 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, - 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, - 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, - 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, - 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, - 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, - 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, - 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, - 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, - 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, - 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, - 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, - 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, - 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, - 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, - 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, - 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, - 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, - 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, - 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, - 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, - 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, - 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, - 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, - 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, - 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, - 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, - 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, - 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, - 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, - 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, - 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, - 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, - 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, - 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, - 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, - 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, - 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, - 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, - 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, - 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, - 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, - 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, - 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, - 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, - 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, - 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, - 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; - -static const uint8_t rsa_256_keydata[] = { - 0x30, 0x82, 0x01, 0x0A, - 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, - 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, - 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, - 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, - 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, - 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, - 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, - 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, - 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, - 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, - 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, - 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, - 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, - 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, - 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, - 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, - 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, - 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, - 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; - -static const uint8_t ec_keydata[] = { - 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, - 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, - 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, - 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, - 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; - -static const uint8_t ec_keypair[] = { - 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, - 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; +static const char sha512_hash[] = { +0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d, +0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe, +0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba, +0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3, +0x7c, 0x3f, 0x7b, 0xaf}; static test_data check1[] = { - -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_set_key_policy 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD2 +{"Test psa_hash_compare with MD2 algorithm\n", + PSA_ALG_MD2, 0xbd, 1, + {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf}, + 16, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_AES_192 -{"Test psa_set_key_policy 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, -{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, - 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD4 +{"Test psa_hash_compare with MD4 algorithm\n", + PSA_ALG_MD4, 0xbd, 1, + {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25}, + 16, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_AES_256 -{"Test psa_set_key_policy 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_MD5 +{"Test psa_hash_compare with MD5 algorithm\n", + PSA_ALG_MD5, 0xbd, 1, + {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb}, + 16, PSA_SUCCESS, }, #endif -#endif - -#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#ifdef ARCH_TEST_RSA_2048 -{"Test psa_set_key_policy 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, - {0}, - 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 270, PSA_SUCCESS -}, -{"Test psa_set_key_policy with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, - {0}, - 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 1193, PSA_SUCCESS +#ifdef ARCH_TEST_RIPEMD160 +{"Test psa_hash_compare with RIPEMD160 algorithm\n", + PSA_ALG_RIPEMD160, 0xbd, 1, + {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd, + 0xee, 0x43, 0x5b, 0x37}, + 20, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_DES_1KEY -{"Test psa_set_key_policy with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, - {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA1 +{"Test psa_hash_compare with SHA1 algorithm\n", + PSA_ALG_SHA_1, 0xbd, 1, + {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6, + 0xfa, 0x26, 0xb2, 0x21}, + 20, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_DES_2KEY -{"Test psa_set_key_policy with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA224 +{"Test psa_hash_compare with SHA224 algorithm\n", + PSA_ALG_SHA_224, 0xbd, 1, + {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d, + 0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57}, + 28, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_DES_3KEY -{"Test psa_set_key_policy with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, -{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS +#ifdef ARCH_TEST_SHA256 +{"Test psa_hash_compare with SHA256 algorithm\n", + PSA_ALG_SHA_256, 0xbd, 1, + {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, + 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b}, + 32, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_ECDSA -#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_set_key_policy with EC Public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), - {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 256, 65, PSA_SUCCESS +#ifdef ARCH_TEST_SHA384 +{"Test psa_hash_compare with SHA384 algorithm\n", + PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS, }, #endif -#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 -{"Test psa_set_key_policy with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), - {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 224, 28, PSA_SUCCESS +#ifdef ARCH_TEST_SHA512 +{"Test psa_hash_compare with SHA512 algorithm\n", + PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS, }, #endif -#endif -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_set_key_policy with invalid usage\n", 13, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, -AES_16B_KEY_SIZE, PSA_KEY_USAGE_INVALID, PSA_ALG_CTR, -BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +#ifdef ARCH_TEST_SHA256 +{"Test psa_hash_compare with incorrect hash\n", + PSA_ALG_SHA_256, 0xbd, 1, + {0x68, 0x32, 0x57, 0x20, 0xab, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, + 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x78}, + 32, PSA_ERROR_INVALID_SIGNATURE, }, -#endif -#endif -}; - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_set_key_policy negative case\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, -AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, -BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_ALREADY_EXISTS +{"Test psa_hash_compare with incorrect hash length\n", + PSA_ALG_SHA_256, 0xbd, 1, + {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, + 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b}, + 31, PSA_ERROR_INVALID_SIGNATURE, }, #endif -#endif - }; diff --git a/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c b/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c index c1fbe538..2825b027 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c +++ b/api-tests/dev_apis/crypto/test_c007/test_entry_c007.c @@ -19,8 +19,9 @@ #include "val_target.h" #include "test_c007.h" -#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 7) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 07) +#define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.c b/api-tests/dev_apis/crypto/test_c008/test_c008.c index 363d5c76..afd77420 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_c008.c +++ b/api-tests/dev_apis/crypto/test_c008/test_c008.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,21 +23,23 @@ client_test_t test_c008_crypto_list[] = { NULL, - psa_get_key_policy_test, - psa_get_key_policy_negative_test, + psa_key_derivation_setup_test, NULL, }; static int g_test_count = 1; -int32_t psa_get_key_policy_test(security_t caller) +int32_t psa_key_derivation_setup_test(security_t caller) { - const uint8_t *key_data; - psa_key_policy_t policy, expected_policy; - psa_key_usage_t expected_usage; - psa_algorithm_t expected_alg; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -49,135 +51,19 @@ int32_t psa_get_key_policy_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&expected_usage, 0, sizeof(psa_key_usage_t)); - memset(&expected_alg, 0, sizeof(psa_algorithm_t)); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) - { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keypair; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keypair; - else - return VAL_STATUS_INVALID; - } - else - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keydata; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keydata; - else - return VAL_STATUS_INVALID; - } - } - else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) - { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) - key_data = ec_keypair; - else - key_data = ec_keydata; - } - else - key_data = check1[i].key_data; - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); + /* Set up a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, check1[i].alg); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get the usage policy for a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check1[i].key_handle, - &expected_policy); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); - - if (check1[i].expected_status != PSA_SUCCESS) - continue; - - TEST_ASSERT_EQUAL(expected_policy.usage, check1[i].usage, TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(expected_policy.alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(8)); - - /* Retrieve the usage field of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &policy, &expected_usage); - - /* Retrieve the algorithm field of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM, &policy, &expected_alg); - - TEST_ASSERT_EQUAL(expected_usage, check1[i].usage, TEST_CHECKPOINT_NUM(9)); - TEST_ASSERT_EQUAL(expected_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(10)); } return VAL_STATUS_SUCCESS; } - -int32_t psa_get_key_policy_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_policy_t policy; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); - val->print(PRINT_TEST, check2[i].test_desc, 0); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with unallocated key handle\n", - g_test_count++); - /* Get the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with zero as key handle\n", - g_test_count++); - /* Get the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, 0, &policy); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_policy with empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - } - - return VAL_STATUS_SUCCESS; -} diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.h b/api-tests/dev_apis/crypto/test_c008/test_c008.h index a67628db..7fd82709 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_c008.h +++ b/api-tests/dev_apis/crypto/test_c008/test_c008.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,14 +18,13 @@ #define _TEST_C008_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c008) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c008) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c008_crypto_list[]; -int32_t psa_get_key_policy_test(security_t caller); -int32_t psa_get_key_policy_negative_test(security_t caller); +int32_t psa_key_derivation_setup_test(security_t caller); #endif /* _TEST_C008_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c008/test_data.h b/api-tests/dev_apis/crypto/test_c008/test_data.h index 90a9d91b..a350c162 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_data.h +++ b/api-tests/dev_apis/crypto/test_c008/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,254 +19,28 @@ typedef struct { char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[34]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint32_t expected_bit_length; - uint32_t expected_key_length; + psa_algorithm_t alg; psa_status_t expected_status; } test_data; -static const uint8_t rsa_384_keypair[1]; -static const uint8_t rsa_384_keydata[1]; - -static const uint8_t rsa_256_keypair[] = { - 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, - 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, - 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, - 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, - 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, - 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, - 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, - 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, - 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, - 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, - 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, - 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, - 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, - 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, - 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, - 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, - 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, - 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, - 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, - 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, - 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, - 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, - 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, - 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, - 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, - 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, - 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, - 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, - 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, - 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, - 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, - 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, - 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, - 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, - 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, - 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, - 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, - 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, - 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, - 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, - 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, - 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, - 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, - 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, - 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, - 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, - 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, - 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, - 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, - 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, - 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, - 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, - 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, - 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, - 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, - 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, - 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, - 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, - 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, - 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, - 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, - 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, - 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, - 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, - 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, - 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, - 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, - 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, - 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, - 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, - 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, - 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, - 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, - 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, - 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, - 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, - 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, - 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, - 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, - 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, - 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, - 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, - 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, - 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, - 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, - 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, - 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, - 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, - 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, - 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, - 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; - -static const uint8_t rsa_256_keydata[] = { - 0x30, 0x82, 0x01, 0x0A, - 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, - 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, - 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, - 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, - 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, - 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, - 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, - 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, - 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, - 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, - 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, - 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, - 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, - 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, - 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, - 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, - 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, - 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, - 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; - -static const uint8_t ec_keydata[] = { - 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, - 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, - 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, - 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, - 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; - -static const uint8_t ec_keypair[] = { - 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, - 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; - static test_data check1[] = { - -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_policy 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +{"Test psa_key_derivation_setup - ECDH + HKDF-SHA-256\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_SUCCESS }, -#endif -#ifdef ARCH_TEST_AES_192 -{"Test psa_get_key_policy 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, -{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, - 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS +{"Test psa_key_derivation_setup - ECDH, unknown KDF\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(0)), + PSA_ERROR_NOT_SUPPORTED }, -#endif -#ifdef ARCH_TEST_AES_256 -{"Test psa_get_key_policy 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS +{"Test psa_key_derivation_setup - bad key derivation algorithm\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_HASH_ALG_INVALID), + PSA_ERROR_INVALID_ARGUMENT }, -#endif -#endif - -#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#ifdef ARCH_TEST_RSA_2048 -{"Test psa_get_key_policy 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, - {0}, - 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 270, PSA_SUCCESS -}, - -{"Test psa_get_key_policy with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, - {0}, - 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 1193, PSA_SUCCESS -}, -#endif -#endif - -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_DES_1KEY -{"Test psa_get_key_policy with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, - {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_DES_2KEY -{"Test psa_get_key_policy with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_DES_3KEY -{"Test psa_get_key_policy with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, -{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS -}, -#endif -#endif - -#ifdef ARCH_TEST_ECDSA -#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_get_key_policy with EC Public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), - {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 256, 65, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 -{"Test psa_get_key_policy with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), - {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, - 224, 28, PSA_SUCCESS -}, -#endif -#endif -}; -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_policy negative cases\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +{"Test psa_key_derivation_setup - Invalid Algorithm\n", + PSA_ALG_INVALID, + PSA_ERROR_INVALID_ARGUMENT, }, -#endif -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c b/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c index 59f3a24a..e31f9d8a 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c +++ b/api-tests/dev_apis/crypto/test_c008/test_entry_c008.c @@ -20,7 +20,8 @@ #include "test_c008.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 8) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.c b/api-tests/dev_apis/crypto/test_c009/test_c009.c index 9b252b88..5410ec41 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_c009.c +++ b/api-tests/dev_apis/crypto/test_c009/test_c009.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,21 +21,25 @@ #include "test_data.h" #include "val_crypto.h" -#define MAX_KEYS 100 - client_test_t test_c009_crypto_list[] = { NULL, - psa_allocate_key_test, - psa_allocate_key_negative_test, + psa_key_derivation_input_bytes_test, NULL, }; static int g_test_count = 1; -int32_t psa_allocate_key_test(security_t caller) +int32_t psa_key_derivation_input_bytes_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -51,45 +55,27 @@ int32_t psa_allocate_key_test(security_t caller) status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); - - /* Destroy a key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - } - - return VAL_STATUS_SUCCESS; -} + /* Set up a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); -int32_t psa_allocate_key_negative_test(security_t caller) -{ - int32_t i, j, status; - psa_key_handle_t key_handle[MAX_KEYS]; + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation, + check1[i].step, check1[i].data, check1[i].data_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - val->print(PRINT_TEST, "[Check %d] Testing the insufficient memory\n", g_test_count++); + if (check1[i].expected_status != PSA_SUCCESS) + continue; - for (i = 0; i < MAX_KEYS; i++) - { - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle[i]); - if (status != PSA_SUCCESS) - { - TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_MEMORY, TEST_CHECKPOINT_NUM(2)); - break; - } - } + /* Key derivation on an aborted operation should fail */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation, + check1[i].step, check1[i].data, check1[i].data_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6)); - for (j = 0; j < i; j++) - { - /* Destroy a key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle[j]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.h b/api-tests/dev_apis/crypto/test_c009/test_c009.h index f5e758ba..c96f1f60 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_c009.h +++ b/api-tests/dev_apis/crypto/test_c009/test_c009.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,14 +18,13 @@ #define _TEST_C009_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c009) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c009) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c009_crypto_list[]; -int32_t psa_allocate_key_test(security_t caller); -int32_t psa_allocate_key_negative_test(security_t caller); +int32_t psa_key_derivation_input_bytes_test(security_t caller); #endif /* _TEST_C009_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c009/test_data.h b/api-tests/dev_apis/crypto/test_c009/test_data.h index fd4be3c2..647537b6 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_data.h +++ b/api-tests/dev_apis/crypto/test_c009/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,55 +18,54 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_status_t expected_status; + char test_desc[75]; + psa_algorithm_t alg; + uint8_t data[32]; + size_t data_length; + psa_key_derivation_step_t step; + psa_status_t expected_status; } test_data; static test_data check1[] = { -#ifdef ARCH_TEST_AES_128 -{"Test psa_allocate_key 16 Byte AES\n", 1, PSA_SUCCESS +{"Test psa_key_derivation_input_bytes - Step as Info\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_INPUT_INFO, + PSA_SUCCESS, }, -#endif -#ifdef ARCH_TEST_AES_192 -{"Test psa_allocate_key 24 Byte AES\n", 2, PSA_SUCCESS +{"Test psa_key_derivation_input_bytes - Step as secret\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_INPUT_SECRET, + PSA_ERROR_INVALID_ARGUMENT, }, -#endif -#ifdef ARCH_TEST_AES_256 -{"Test psa_allocate_key 32 Byte AES\n", 3, PSA_SUCCESS +{"Test psa_key_derivation_input_bytes - Step as salt\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_INPUT_SALT, + PSA_SUCCESS, }, -#endif -#ifdef ARCH_TEST_RSA_2048 -{"Test psa_allocate_key 2048 RSA public key\n", 4, PSA_SUCCESS +{"Test psa_key_derivation_input_bytes - Step as label\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_INPUT_LABEL, + PSA_SUCCESS, }, -{"Test psa_allocate_key with RSA 2048 keypair\n", 5, PSA_SUCCESS, +{"Test psa_key_derivation_input_bytes - Step as seed\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_INPUT_SEED, + PSA_SUCCESS, }, -#endif -#ifdef ARCH_TEST_DES_1KEY -{"Test psa_allocate_key with DES 64 bit key\n", 6, PSA_SUCCESS, +{"Test psa_key_derivation_input_bytes - Invalid step\n", + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + "abcdefghijklmnop", 16, + PSA_KEY_DERIVATION_STEP_INVALID, + PSA_ERROR_INVALID_ARGUMENT, }, -#endif - -#ifdef ARCH_TEST_DES_2KEY -{"Test psa_allocate_key with Triple DES 2-Key\n", 7, PSA_SUCCESS, -}, -#endif - -#ifdef ARCH_TEST_DES_3KEY -{"Test psa_allocate_key with Triple DES 3-Key\n", 8, PSA_SUCCESS, -}, -#endif - -#ifdef ARCH_TEST_ECC_CURVE_SECP192R1 -{"Test psa_allocate_key with EC Public key\n", 9, PSA_SUCCESS, -}, - -{"Test psa_allocate_key with EC keypair\n", 10, PSA_SUCCESS -}, -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c b/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c index 93a0abe1..5dce9945 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c +++ b/api-tests/dev_apis/crypto/test_c009/test_entry_c009.c @@ -20,7 +20,8 @@ #include "test_c009.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 9) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.c b/api-tests/dev_apis/crypto/test_c010/test_c010.c index 24e335ec..041d26b0 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_c010.c +++ b/api-tests/dev_apis/crypto/test_c010/test_c010.c @@ -23,20 +23,29 @@ client_test_t test_c010_crypto_list[] = { NULL, - psa_get_key_lifetime_test, - psa_get_key_lifetime_negative_test, + psa_key_attributes_set_get_test, NULL, }; static int g_test_count = 1; -int32_t psa_get_key_lifetime_test(security_t caller) +int32_t psa_key_attributes_set_get_test(security_t caller) { - const uint8_t *key_data; - psa_key_policy_t policy; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - psa_key_lifetime_t lifetime; + int32_t i, status; + psa_key_type_t get_key_type; + psa_key_id_t get_key_id; + psa_key_lifetime_t get_key_lifetime; + psa_key_usage_t get_key_usage_flags; + psa_algorithm_t get_key_algorithm; + size_t get_key_bits; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -48,121 +57,78 @@ int32_t psa_get_key_lifetime_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) - { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keypair; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keypair; - else - return VAL_STATUS_INVALID; - } - else - { - if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) - key_data = rsa_384_keydata; - else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) - key_data = rsa_256_keydata; - else - return VAL_STATUS_INVALID; - } - } - else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) - { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) - key_data = ec_keypair; - else - key_data = ec_keydata; - } - else - key_data = check1[i].key_data; - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get the lifetime of a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check1[i].key_handle, &lifetime); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - TEST_ASSERT_EQUAL(lifetime, check1[i].lifetime, TEST_CHECKPOINT_NUM(7)); - } + /* Check if all the attributes are initialized to zero */ + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(3)); - return VAL_STATUS_SUCCESS; -} + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(4)); -int32_t psa_get_key_lifetime_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_lifetime_t lifetime; - psa_key_policy_t policy; + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(5)); - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(6)); - for (i = 0; i < num_checks; i++) - { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(7)); - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, 0, TEST_CHECKPOINT_NUM(8)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &attributes, check1[i].key_id); + val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &attributes, check1[i].key_lifetime); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with invalid key handle\n", - g_test_count++); - /* Get the lifetime of a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check2[i].key_handle, &lifetime); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with zero as key handle\n", - g_test_count++); - /* Get the lifetime of a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, 0, &lifetime); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_get_key_lifetime with empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Get the lifetime of a key slot */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, check2[i].key_handle, &lifetime); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - } - - return VAL_STATUS_SUCCESS; + /* Check if all the attributes are as per the input */ + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(9)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, check1[i].key_id, TEST_CHECKPOINT_NUM(10)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, check1[i].key_lifetime, TEST_CHECKPOINT_NUM(11)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(12)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(13)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(14)); + + /* Reset the attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Check if all the attributes are erased */ + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(15)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(16)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(17)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(18)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(19)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, 0, TEST_CHECKPOINT_NUM(20)); + } + + return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.h b/api-tests/dev_apis/crypto/test_c010/test_c010.h index 03308e8a..eb5bdf7d 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_c010.h +++ b/api-tests/dev_apis/crypto/test_c010/test_c010.h @@ -18,14 +18,13 @@ #define _TEST_C010_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c010) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c010) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c010_crypto_list[]; -int32_t psa_get_key_lifetime_test(security_t caller); -int32_t psa_get_key_lifetime_negative_test(security_t caller); +int32_t psa_key_attributes_set_get_test(security_t caller); #endif /* _TEST_C010_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c010/test_data.h b/api-tests/dev_apis/crypto/test_c010/test_data.h index e8c7b2da..d6dc65d8 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_data.h +++ b/api-tests/dev_apis/crypto/test_c010/test_data.h @@ -19,257 +19,18 @@ typedef struct { char test_desc[75]; - psa_key_handle_t key_handle; psa_key_type_t key_type; - uint8_t key_data[34]; - uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; + psa_key_id_t key_id; + psa_key_lifetime_t key_lifetime; psa_key_lifetime_t lifetime; - uint32_t expected_bit_length; - uint32_t expected_key_length; - psa_status_t expected_status; } test_data; -static const uint8_t rsa_384_keypair[1]; -static const uint8_t rsa_384_keydata[1]; - -static const uint8_t rsa_256_keypair[] = { - 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, - 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, - 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, - 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, - 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, - 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, - 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, - 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, - 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, - 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, - 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, - 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, - 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, - 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, - 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, - 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, - 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, - 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, - 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, - 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, - 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, - 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, - 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, - 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, - 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, - 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, - 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, - 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, - 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, - 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, - 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, - 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, - 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, - 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, - 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, - 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, - 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, - 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, - 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, - 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, - 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, - 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, - 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, - 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, - 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, - 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, - 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, - 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, - 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, - 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, - 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, - 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, - 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, - 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, - 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, - 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, - 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, - 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, - 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, - 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, - 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, - 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, - 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, - 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, - 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, - 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, - 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, - 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, - 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, - 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, - 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, - 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, - 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, - 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, - 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, - 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, - 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, - 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, - 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, - 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, - 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, - 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, - 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, - 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, - 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, - 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, - 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, - 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, - 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, - 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, - 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; - -static const uint8_t rsa_256_keydata[] = { - 0x30, 0x82, 0x01, 0x0A, - 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, - 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, - 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, - 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, - 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, - 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, - 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, - 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, - 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, - 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, - 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, - 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, - 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, - 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, - 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, - 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, - 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, - 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, - 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; - -static const uint8_t ec_keydata[] = { - 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, - 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, - 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, - 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, - 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; - -static const uint8_t ec_keypair[] = { - 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, - 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; - static test_data check1[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_lifetime 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_VOLATILE, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS -}, -#endif -#endif - -#ifdef NO_SUPPORT -/* PSA crypto doesn't support these test scenarios */ -{"Test psa_get_key_lifetime 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, -{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, - 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, - AES_24B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_PERSISTENT, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS -}, - -{"Test psa_get_key_lifetime 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_WRITE_ONCE, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#ifdef ARCH_TEST_RSA_2048 -{"Test psa_get_key_lifetime 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, - {0}, - 270, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - PSA_KEY_LIFETIME_VOLATILE, 2048, 270, PSA_SUCCESS -}, -#endif -#endif - -#ifdef NO_SUPPORT -/* PSA crypto doesn't support these test scenarios */ -{"Test psa_get_key_lifetime with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, - {0}, - 1193, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - PSA_KEY_LIFETIME_PERSISTENT, 2048, 1193, PSA_SUCCESS -}, - -{"Test psa_get_key_lifetime with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, - {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_WRITE_ONCE, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_DES_2KEY -{"Test psa_get_key_lifetime with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_VOLATILE, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS -}, -#endif -#endif - -#ifdef NO_SUPPORT -/* PSA crypto doesn't support these test scenarios */ -{"Test psa_get_key_lifetime with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, -{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - PSA_KEY_LIFETIME_PERSISTENT, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION -#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_get_key_lifetime with EC Public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), - {0}, - 65, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, - PSA_KEY_LIFETIME_VOLATILE, 256, 65, PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 -{"Test psa_get_key_lifetime with EC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), - {0}, - 28, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, - PSA_KEY_LIFETIME_VOLATILE, 224, 28, PSA_SUCCESS -}, -#endif -#endif - -}; - - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_get_key_lifetime with negative cases\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_VOLATILE, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +{"Test set/get key attributes\n", PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_16B_KEY_SIZE), + PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, 0x1234, + PSA_KEY_LIFETIME_PERSISTENT }, -#endif -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c b/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c index 23012e9f..c8e32c7e 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c +++ b/api-tests/dev_apis/crypto/test_c010/test_entry_c010.c @@ -20,7 +20,8 @@ #include "test_c010.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 10) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_DESC "Testing crypto key attributes APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.c b/api-tests/dev_apis/crypto/test_c011/test_c011.c index 13176a2e..4dbc8daa 100644 --- a/api-tests/dev_apis/crypto/test_c011/test_c011.c +++ b/api-tests/dev_apis/crypto/test_c011/test_c011.c @@ -35,6 +35,12 @@ int32_t psa_hash_setup_test(security_t caller) int32_t i, status; psa_hash_operation_t operation; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.h b/api-tests/dev_apis/crypto/test_c011/test_c011.h index 3b334449..4c49ee9b 100644 --- a/api-tests/dev_apis/crypto/test_c011/test_c011.h +++ b/api-tests/dev_apis/crypto/test_c011/test_c011.h @@ -18,9 +18,9 @@ #define _TEST_C011_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c011) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c011) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c b/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c index 33d5730d..0913ede4 100644 --- a/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c +++ b/api-tests/dev_apis/crypto/test_c011/test_entry_c011.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 11) #define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.c b/api-tests/dev_apis/crypto/test_c012/test_c012.c index a02f8ada..1bce2b3e 100644 --- a/api-tests/dev_apis/crypto/test_c012/test_c012.c +++ b/api-tests/dev_apis/crypto/test_c012/test_c012.c @@ -37,6 +37,12 @@ int32_t psa_hash_update_test(security_t caller) int32_t i, status; psa_hash_operation_t operation; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.h b/api-tests/dev_apis/crypto/test_c012/test_c012.h index ca362203..6c827974 100644 --- a/api-tests/dev_apis/crypto/test_c012/test_c012.h +++ b/api-tests/dev_apis/crypto/test_c012/test_c012.h @@ -18,9 +18,9 @@ #define _TEST_C012_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c012) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c012) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c b/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c index cae09041..d7490549 100644 --- a/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c +++ b/api-tests/dev_apis/crypto/test_c012/test_entry_c012.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 12) #define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.c b/api-tests/dev_apis/crypto/test_c013/test_c013.c index ccec9ca2..3072d14c 100644 --- a/api-tests/dev_apis/crypto/test_c013/test_c013.c +++ b/api-tests/dev_apis/crypto/test_c013/test_c013.c @@ -37,6 +37,12 @@ int32_t psa_hash_verify_test(security_t caller) psa_hash_operation_t operation; const char *hash; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.h b/api-tests/dev_apis/crypto/test_c013/test_c013.h index 5135dda7..02e91e64 100644 --- a/api-tests/dev_apis/crypto/test_c013/test_c013.h +++ b/api-tests/dev_apis/crypto/test_c013/test_c013.h @@ -18,9 +18,9 @@ #define _TEST_C013_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c013) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c013) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c b/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c index 99ca4d2f..b343e652 100644 --- a/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c +++ b/api-tests/dev_apis/crypto/test_c013/test_entry_c013.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 13) #define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.c b/api-tests/dev_apis/crypto/test_c014/test_c014.c index 272e0e0f..5a5863ef 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_c014.c +++ b/api-tests/dev_apis/crypto/test_c014/test_c014.c @@ -40,6 +40,12 @@ int32_t psa_hash_finish_test(security_t caller) char hash[HASH_64B]; size_t hash_length, hash_size = sizeof(hash); + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.h b/api-tests/dev_apis/crypto/test_c014/test_c014.h index 348e07c4..35dc7918 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_c014.h +++ b/api-tests/dev_apis/crypto/test_c014/test_c014.h @@ -18,9 +18,9 @@ #define _TEST_C014_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c014) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c014) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c b/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c index 3934edc8..0a95c7a5 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c +++ b/api-tests/dev_apis/crypto/test_c014/test_entry_c014.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 14) #define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.c b/api-tests/dev_apis/crypto/test_c015/test_c015.c index 8f725f3e..3e989e72 100644 --- a/api-tests/dev_apis/crypto/test_c015/test_c015.c +++ b/api-tests/dev_apis/crypto/test_c015/test_c015.c @@ -36,6 +36,12 @@ int32_t psa_hash_abort_test(security_t caller) int32_t i, status; psa_hash_operation_t operation; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.h b/api-tests/dev_apis/crypto/test_c015/test_c015.h index bf435c2c..34490bee 100644 --- a/api-tests/dev_apis/crypto/test_c015/test_c015.h +++ b/api-tests/dev_apis/crypto/test_c015/test_c015.h @@ -18,9 +18,9 @@ #define _TEST_C015_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c015) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c015) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c b/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c index b403a955..5afd52ca 100644 --- a/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c +++ b/api-tests/dev_apis/crypto/test_c015/test_entry_c015.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 15) #define TEST_DESC "Testing crypto hash functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.c b/api-tests/dev_apis/crypto/test_c016/test_c016.c index 9781827a..63fa51c0 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.c +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c @@ -24,7 +24,6 @@ client_test_t test_c016_crypto_list[] = { NULL, psa_generate_key_test, - psa_generate_key_negative_test, NULL, }; @@ -33,17 +32,26 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_generate_key_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - uint32_t i, length; - psa_key_policy_t policy; - psa_key_type_t key_type; - size_t bits; - int32_t status; + int32_t i, status; + size_t length; + psa_key_type_t get_key_type; + psa_key_usage_t get_key_usage; + psa_algorithm_t get_key_alg; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t get_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); @@ -53,53 +61,51 @@ int32_t psa_generate_key_test(security_t caller) status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); + /* Generate the key */ + status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, &attributes, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + if (check1[i].expected_status != PSA_SUCCESS) + continue; - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); + /* Get the attributes of the imported key and check if it matches the given value */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle, + &get_attributes); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].bits, check1[i].extra, check1[i].extra_size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); - - if (check1[i].expected_status != PSA_SUCCESS) - { - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - continue; - } + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &get_attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5)); - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + if (check1[i].attr_bits != 0) + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6)); + else + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, + TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_EQUAL(key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(8)); + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &get_attributes, &get_key_usage); + TEST_ASSERT_EQUAL(get_key_usage, check1[i].usage, TEST_CHECKPOINT_NUM(8)); - TEST_ASSERT_EQUAL(bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(9)); + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &get_attributes, &get_key_alg); + TEST_ASSERT_EQUAL(get_key_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(9)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + /* Check the attributes of the exported key */ TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(11)); + /* Reset the attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &get_attributes); + /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); @@ -107,78 +113,3 @@ int32_t psa_generate_key_test(security_t caller) return VAL_STATUS_SUCCESS; } - -int32_t psa_generate_key_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - uint32_t i; - psa_key_policy_t policy; - int32_t status; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with unallocated key handle\n", - g_test_count++); - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with zero as key handle\n", - g_test_count++); - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, 0, check2[i].key_type, - check2[i].bits, check2[i].extra, check2[i].extra_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with pre-occupied key handle\n", - g_test_count++); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(8)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generate_key with destroyed key handle\n", - g_test_count++); - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - - /* Generate a key or key pair */ - status = val->crypto_function(VAL_CRYPTO_GENERATE_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].bits, check2[i].extra, check2[i].extra_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(10)); - } - - return VAL_STATUS_SUCCESS; -} - diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.h b/api-tests/dev_apis/crypto/test_c016/test_c016.h index 7697b911..3302aa8d 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.h +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.h @@ -18,14 +18,13 @@ #define _TEST_C016_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c016) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c016) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c016_crypto_list[]; int32_t psa_generate_key_test(security_t caller); -int32_t psa_generate_key_negative_test(security_t caller); #endif /* _TEST_C016_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c016/test_data.h b/api-tests/dev_apis/crypto/test_c016/test_data.h index 8bcd0877..c184c901 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_data.h +++ b/api-tests/dev_apis/crypto/test_c016/test_data.h @@ -23,123 +23,89 @@ typedef struct { psa_key_type_t key_type; psa_key_usage_t usage; psa_algorithm_t key_alg; - size_t bits; - void *extra; - size_t extra_size; + size_t attr_bits; uint32_t expected_bit_length; uint32_t expected_key_length; psa_status_t expected_status; } test_data; -#ifdef FUTURE_SUPPORT -static uint32_t rsa_extra = 3; -#endif - static test_data check1[] = { #ifdef ARCH_TEST_CIPER_MODE_CTR #ifdef ARCH_TEST_AES_128 {"Test psa_generate_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_AES_192 {"Test psa_generate_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_24B_KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_AES_256 {"Test psa_generate_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE), BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_1KEY {"Test psa_generate_key with DES 64 bit key\n", 4, PSA_KEY_TYPE_DES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES_8B_KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES_8B_KEY_SIZE), BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_2KEY {"Test psa_generate_key with Triple DES 2-Key\n", 5, PSA_KEY_TYPE_DES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_2KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_2KEY_SIZE), BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_3KEY {"Test psa_generate_key with Triple DES 3-Key\n", 6, PSA_KEY_TYPE_DES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(DES3_3KEY_SIZE), NULL, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_3KEY_SIZE), BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS }, #endif -#ifdef ARCH_TEST_AES_256 -{"Test psa_generate_key with Null extra and Non-Zero extra size\n", 7, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), NULL, sizeof(uint32_t), - 0, 0, PSA_ERROR_INVALID_ARGUMENT -}, -#endif #endif -#ifdef FUTURE_SUPPORT -{"Test psa_generate_key with RSA 2048 Keypair\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_generate_key with RSA 2048 Keypair\n", 7, PSA_KEY_TYPE_RSA_KEY_PAIR, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, NULL, 0, - 2048, 1193, PSA_SUCCESS + 2048, 2048, 1192, PSA_SUCCESS }, -#endif #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION -{"Test psa_generate_key with ECC KeyPair\n", 9, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), - PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, - 224, NULL, 0, +{"Test psa_generate_key with ECC KeyPair\n", 8, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), + PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 224, 224, 28, PSA_SUCCESS }, #endif #endif -#ifdef FUTURE_SUPPORT -{"Test psa_generate_key with Non-Null extra for 32 Byte AES key\n", 10, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_32B_KEY_SIZE), &rsa_extra, sizeof(uint32_t), - 0, 0, PSA_ERROR_INVALID_ARGUMENT -}, -#endif - #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW #ifdef ARCH_TEST_RSA_2048 -{"Test psa_generate_key with RSA 2048 Public key\n", 11, PSA_KEY_TYPE_RSA_PUBLIC_KEY, +{"Test psa_generate_key with RSA 2048 Public key\n", 9, PSA_KEY_TYPE_RSA_PUBLIC_KEY, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, NULL, 0, - 2048, 1193, PSA_ERROR_NOT_SUPPORTED + 2048, 2048, 1192, PSA_ERROR_NOT_SUPPORTED }, #endif #endif -}; -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_generate_key negative cases\n", 12, PSA_KEY_TYPE_AES, - PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), NULL, 0, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +{"Test psa_generate_key with invalid key type\n", 10, 0, + PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_generate_key with invalid usage flags\n", 11, PSA_KEY_TYPE_AES, + PSA_KEY_USAGE_INVALID, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, -#endif -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c b/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c index 3957dd6d..c88aa164 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c +++ b/api-tests/dev_apis/crypto/test_c016/test_entry_c016.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 16) #define TEST_DESC "Testing crypto generator functions APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.c b/api-tests/dev_apis/crypto/test_c017/test_c017.c index 8aeab9c9..4536f35c 100644 --- a/api-tests/dev_apis/crypto/test_c017/test_c017.c +++ b/api-tests/dev_apis/crypto/test_c017/test_c017.c @@ -27,7 +27,7 @@ client_test_t test_c017_crypto_list[] = { NULL, }; -static int g_test_count = 1; +static int g_test_count = 1; static uint8_t data[BUFFER_SIZE], changed[BUFFER_SIZE]; int32_t psa_generate_random_test(security_t caller) @@ -37,6 +37,12 @@ int32_t psa_generate_random_test(security_t caller) uint8_t trail[] = "don't overwrite me"; int32_t status; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.h b/api-tests/dev_apis/crypto/test_c017/test_c017.h index ee8c4efb..dedf975c 100644 --- a/api-tests/dev_apis/crypto/test_c017/test_c017.h +++ b/api-tests/dev_apis/crypto/test_c017/test_c017.h @@ -18,9 +18,9 @@ #define _TEST_C017_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c017) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c017) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c b/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c index 500d2ec6..d39eb093 100644 --- a/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c +++ b/api-tests/dev_apis/crypto/test_c017/test_entry_c017.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,8 @@ #include "test_c017.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 17) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto generation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.c b/api-tests/dev_apis/crypto/test_c018/test_c018.c index 0bdf91a7..e85842d2 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_c018.c +++ b/api-tests/dev_apis/crypto/test_c018/test_c018.c @@ -23,157 +23,174 @@ client_test_t test_c018_crypto_list[] = { NULL, - psa_generator_read_test, - psa_generator_read_negative_test, + psa_key_derivation_input_key_test, + psa_key_derivation_input_key_negative_test, NULL, }; -static int g_test_count = 1; -static uint8_t data[BUFFER_SIZE_HIGH]; +static int g_test_count = 1; -int32_t psa_generator_read_test(security_t caller) +int32_t psa_key_derivation_input_key_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - uint32_t i, j, data_sum, remaining_size; - psa_key_policy_t policy; - psa_crypto_generator_t generator, invalid_generator; - int32_t status; + int32_t i, status; + const uint8_t *key_data; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - memset(&generator, 0, sizeof(generator)); - memset(&invalid_generator, 0xDEADEAD, sizeof(invalid_generator)); - memset(data, 0, sizeof(data)); + if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) + { + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keypair; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keypair; + else + return VAL_STATUS_INVALID; + } + else + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keydata; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keydata; + else + return VAL_STATUS_INVALID; + } + } + else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) + { + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) + key_data = ec_keypair; + else + key_data = ec_keydata; + } + else + key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + if (check1[i].expected_status == PSA_SUCCESS) + { + /* Provide an input for key derivation or key agreement without setup should be + * failure. + */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check1[i].step, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(4)); + } - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); + /* Set up a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check1[i].alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle, - check1[i].key_alg, &check1[i].salt, check1[i].salt_length, &check1[i].label, - check1[i].label_length, check1[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Read some data from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data, - check1[i].size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check1[i].step, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); if (check1[i].expected_status != PSA_SUCCESS) { - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); continue; } - data_sum = 0; - /* Check that if generated data are zero */ - for (j = 0; j < check1[i].size; j++) - { - data_sum += data[j]; - } - - memset(data, 0, sizeof(data)); - TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(10)); - - remaining_size = check1[i].capacity - check1[i].size; - if (remaining_size > 0) - { - /* Read some data from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, - data, remaining_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - - data_sum = 0; - /* Check that if generated data are zero */ - for (j = 0; j < remaining_size; j++) - { - data_sum += data[j]; - } + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - memset(data, 0, sizeof(data)); - TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(12)); + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check1[i].step, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); - /* Read some data from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, - data, check1[i].size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(13)); - } + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; } -int32_t psa_generator_read_negative_test(security_t caller) +int32_t psa_key_derivation_input_key_negative_test(security_t caller) { - uint32_t i; - psa_crypto_generator_t generator[] = {psa_crypto_generator_init(), - PSA_CRYPTO_GENERATOR_INIT, {0} }; - uint32_t generator_count = sizeof(generator)/sizeof(generator[0]); - int32_t status; - - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); - val->print(PRINT_TEST, "Test psa_generator_read without setup\n", 0); + int32_t i, status; + int num_checks = sizeof(check2)/sizeof(check2[0]); + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - memset(data, 0, sizeof(data)); - - for (i = 0; i < generator_count; i++) + /* Set the key data buffer to the input base on algorithm */ + for (i = 0; i < num_checks; i++) { - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator[i], data, 1); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(2)); + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check2[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator[i]); + /* Set up a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check2[i].alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check2[i].step, check2[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); + + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + /* Set up a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check2[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check2[i].step, 0); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.h b/api-tests/dev_apis/crypto/test_c018/test_c018.h index bd196511..3d18506f 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_c018.h +++ b/api-tests/dev_apis/crypto/test_c018/test_c018.h @@ -18,14 +18,14 @@ #define _TEST_C018_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c018) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c018) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c018_crypto_list[]; -int32_t psa_generator_read_test(security_t caller); -int32_t psa_generator_read_negative_test(security_t caller); +int32_t psa_key_derivation_input_key_test(security_t caller); +int32_t psa_key_derivation_input_key_negative_test(security_t caller); #endif /* _TEST_C018_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c018/test_data.h b/api-tests/dev_apis/crypto/test_c018/test_data.h index f2c136e1..56d26fc1 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_data.h +++ b/api-tests/dev_apis/crypto/test_c018/test_data.h @@ -18,80 +18,254 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[32]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint8_t salt[16]; - size_t salt_length; - uint8_t label[16]; - size_t label_length; - size_t capacity; - size_t size; - psa_status_t expected_status; + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[34]; + uint32_t key_length; + size_t attr_bits; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_derivation_step_t step; + psa_algorithm_t alg; + uint32_t expected_bit_length; + uint32_t expected_key_length; + psa_status_t expected_status; } test_data; +static const uint8_t rsa_384_keypair[1]; +static const uint8_t rsa_384_keydata[1]; + +static const uint8_t rsa_256_keypair[] = { + 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, + 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, + 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, + 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, + 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, + 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, + 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, + 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, + 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, + 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, + 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, + 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, + 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, + 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, + 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, + 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, + 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, + 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, + 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, + 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, + 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, + 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, + 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, + 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, + 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, + 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, + 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, + 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, + 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, + 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, + 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, + 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, + 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, + 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, + 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, + 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, + 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, + 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, + 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, + 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, + 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, + 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, + 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, + 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, + 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, + 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, + 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, + 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, + 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, + 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, + 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, + 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, + 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, + 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, + 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, + 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, + 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, + 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, + 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, + 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, + 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, + 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, + 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, + 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, + 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, + 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, + 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, + 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, + 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, + 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, + 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, + 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, + 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, + 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, + 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, + 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, + 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, + 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, + 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, + 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, + 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, + 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, + 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, + 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, + 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, + 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, + 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, + 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, + 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, + 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, + 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; + +static const uint8_t rsa_256_keydata[] = { + 0x30, 0x82, 0x01, 0x0A, + 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, + 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, + 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, + 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, + 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, + 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, + 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, + 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, + 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, + 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, + 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, + 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, + 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, + 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, + 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, + 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, + 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, + 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, + 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; + +static const uint8_t ec_keydata[] = { + 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, + 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, + 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, + 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, + 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; + +static const uint8_t ec_keypair[] = { + 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, + 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; + static test_data check1[] = { -/* Covers the following cases - * - 16 Byte key - * - SHA 256 - * - Output size less than generator capacity - */ -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_SHA256 -{"Test psa_generator_read to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE, + +{"Test psa_key_derivation_input_key 16 Byte Key\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +}, + +{"Test psa_key_derivation_input_key with invalid usage\n", 2, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED +}, + +{"Test psa_key_derivation_input_key with step as label\n", 3, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_LABEL, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_key_derivation_input_key with step as info\n", 4, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_INFO, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_key_derivation_input_key with step as seed\n", 5, PSA_KEY_TYPE_DERIVE, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - 16, PSA_SUCCESS + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SEED, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_key_derivation_input_key with step as salt\n", 6, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SALT, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, + +#ifdef ARCH_TEST_AES_192 +{"Test psa_key_derivation_input_key with key type as AES(not derive)\n", 7, PSA_KEY_TYPE_AES, +{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, + 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, + AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT, }, #endif -/* Covers the following cases - * - 32 Byte key - * - SHA 512 - * - Output size equal to generator capacity - */ -#ifdef ARCH_TEST_SHA512 -{"Test psa_generator_read to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE, + +{"Test psa_key_derivation_input_key incorrect key algorithm\n", 8, PSA_KEY_TYPE_DERIVE, {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512), - {0}, 0, {0}, 0, 64, - 64, PSA_SUCCESS -}, -#endif - -/* Covers the following cases - * - 8 Byte Key - * - SHA 1 - * - Output size greater than the generator capacity - */ -#ifdef ARCH_TEST_SHA1 -{"Test psa_generator_read to get 8 Byte data with SHA-1\n", 3, PSA_KEY_TYPE_DERIVE, -{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1), - {0}, 0, {0}, 0, 64, - 70, PSA_ERROR_INSUFFICIENT_DATA + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_CTR, PSA_KEY_DERIVATION_INPUT_SECRET, + PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED }, -{"Test psa_generator_read to request maximum capacity\n", 4, PSA_KEY_TYPE_DERIVE, -{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1), - {0}, 0, {0}, 0, (255 * 20), - (255 * 20), PSA_SUCCESS +#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#ifdef ARCH_TEST_RSA_2048 +{"Test psa_key_derivation_input_key 2048 RSA public key\n", 9, PSA_KEY_TYPE_RSA_PUBLIC_KEY, + {0}, + 270, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_KEY_DERIVATION_INPUT_SECRET, + PSA_ALG_HKDF(PSA_ALG_SHA_256), + 2048, 270, PSA_ERROR_INVALID_ARGUMENT, }, -{"Test psa_generator_read to request maximum capacity +1\n", 5, PSA_KEY_TYPE_DERIVE, -{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1), - {0}, 0, {0}, 0, (255 * 20), - ((255 * 20) + 1), PSA_ERROR_INSUFFICIENT_DATA +{"Test psa_key_derivation_input_key with RSA 2048 keypair\n", 10, PSA_KEY_TYPE_RSA_KEY_PAIR, + {0}, + 1193, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_KEY_DERIVATION_INPUT_SECRET, + PSA_ALG_HKDF(PSA_ALG_SHA_256), + 2048, 1193, PSA_ERROR_INVALID_ARGUMENT, }, #endif #endif + +{"Test psa_key_derivation_input_key with zero as step\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + 0, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, +}; + +static test_data check2[] = { + +{"Test psa_key_derivation_input_key invalid handle\n", 11, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SECRET, PSA_ALG_HKDF(PSA_ALG_SHA_256), + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_HANDLE +}, }; diff --git a/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c b/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c index 4ae7f2d9..13ee5969 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c +++ b/api-tests/dev_apis/crypto/test_c018/test_entry_c018.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,14 +20,15 @@ #include "test_c018.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 18) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; void test_entry(val_api_t *val_api, psa_api_t *psa_api) { - int32_t status = VAL_STATUS_SUCCESS; + int32_t status = VAL_STATUS_SUCCESS; val = val_api; psa = psa_api; diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.c b/api-tests/dev_apis/crypto/test_c019/test_c019.c index 3f0a670c..2cd2f482 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_c019.c +++ b/api-tests/dev_apis/crypto/test_c019/test_c019.c @@ -19,26 +19,28 @@ #include "val_target.h" #include "test_c019.h" #include "test_data.h" -#include "val_crypto.h" client_test_t test_c019_crypto_list[] = { NULL, - psa_get_generator_capacity_test, - psa_get_generator_capacity_negative_test, + psa_key_derivation_key_agreement_test, + psa_key_derivation_key_agreement_negative_test, NULL, }; -static int g_test_count = 1; -static uint8_t data[BUFFER_SIZE]; +static int g_test_count = 1; -int32_t psa_get_generator_capacity_test(security_t caller) +int32_t psa_key_derivation_key_agreement_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - uint32_t i, remaining_size; - size_t capacity; - psa_key_policy_t policy; - psa_crypto_generator_t generator; - int32_t status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -49,112 +51,85 @@ int32_t psa_get_generator_capacity_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); + /* Set up a key agreement operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check1[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle, - check1[i].key_alg, check1[i].salt, check1[i].salt_length, check1[i].label, - check1[i].label_length, check1[i].capacity); + /* Perform a key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation, + check1[i].step, check1[i].key_handle, check1[i].peer_key, + check1[i].peer_key_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); + + /* Abort the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - /* Retrieve the current capacity of a generator */ - status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); if (check1[i].expected_status != PSA_SUCCESS) - { - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - continue; - } - - TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(10)); - - /* Generate random bytes */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data, - check1[i].size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - - remaining_size = check1[i].capacity - check1[i].size; - /* Retrieve the current capacity of a generator */ - status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); - - TEST_ASSERT_EQUAL(capacity, remaining_size, TEST_CHECKPOINT_NUM(13)); - - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); - - /* Destroy the key */ + /* Destroy a key and restore the slot to its default state */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; } -int32_t psa_get_generator_capacity_negative_test(security_t caller) +int32_t psa_key_derivation_key_agreement_negative_test(security_t caller) { - uint32_t i; - size_t capacity; - psa_crypto_generator_t generator[] = {psa_crypto_generator_init(), - PSA_CRYPTO_GENERATOR_INIT, {0} }; - uint32_t generator_count = sizeof(generator)/sizeof(generator[0]); - int32_t status; + int32_t i, status; + int num_checks = sizeof(check2)/sizeof(check2[0]); + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); - val->print(PRINT_TEST, "Test psa_get_generator_capacity without setup\n", 0); - - for (i = 0; i < generator_count; i++) + for (i = 0; i < num_checks; i++) { - /* Retrieve the current capacity of a generator */ - status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator[i], &capacity); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(2)); + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator[i]); + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation_key_agreement " + "- Invalid handle\n", g_test_count++); + + /* Set up a key agreement operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation, + check2[i].step, check2[i].key_handle, check2[i].peer_key, + check2[i].peer_key_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); + + val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation_key_agreement" + " - Zero as handle\n", g_test_count++); + + /* Set up a key agreement operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT, &operation, + check2[i].step, 0, check2[i].peer_key, check2[i].peer_key_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.h b/api-tests/dev_apis/crypto/test_c019/test_c019.h index d8924d3a..a91daed8 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_c019.h +++ b/api-tests/dev_apis/crypto/test_c019/test_c019.h @@ -18,14 +18,14 @@ #define _TEST_C019_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c019) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c019) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c019_crypto_list[]; -int32_t psa_get_generator_capacity_test(security_t caller); -int32_t psa_get_generator_capacity_negative_test(security_t caller); +int32_t psa_key_derivation_key_agreement_test(security_t caller); +int32_t psa_key_derivation_key_agreement_negative_test(security_t caller); #endif /* _TEST_C019_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c019/test_data.h b/api-tests/dev_apis/crypto/test_c019/test_data.h index 592d03e4..4ce7bd79 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_data.h +++ b/api-tests/dev_apis/crypto/test_c019/test_data.h @@ -18,52 +18,174 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[32]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint8_t salt[16]; - size_t salt_length; - uint8_t label[16]; - size_t label_length; - size_t capacity; - size_t size; - psa_status_t expected_status; + char test_desc[85]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[91]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_derivation_step_t step; + uint8_t peer_key[120]; + size_t peer_key_length; + psa_status_t expected_status; } test_data; + static test_data check1[] = { -/* Covers the following cases - * - 16 Byte key - * - SHA 256 - * - Output size less than generator capacity - */ -#ifdef ARCH_TEST_HKDF +#ifdef ARCH_TEST_ECDH +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +{"Test psa_key_derivation_key_agreement - ECDH SECP256R1\n", 1, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, PSA_SUCCESS +}, + +{"Test psa_key_derivation_key_agreement - Invalid step\n", 2, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_LABEL, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, PSA_ERROR_INVALID_ARGUMENT +}, + +#endif + +#ifdef ARCH_TEST_ECC_CURVE_SECP384R1 +{"Test psa_key_derivation_key_agreement - ECDH SECP384R1\n", 3, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1), +{0x09, 0x9f, 0x3c, 0x70, 0x34, 0xd4, 0xa2, 0xc6, 0x99, 0x88, 0x4d, 0x73, 0xa3, + 0x75, 0xa6, 0x7f, 0x76, 0x24, 0xef, 0x7c, 0x6b, 0x3c, 0x0f, 0x16, 0x06, 0x47, + 0xb6, 0x74, 0x14, 0xdc, 0xe6, 0x55, 0xe3, 0x5b, 0x53, 0x80, 0x41, 0xe6, 0x49, + 0xee, 0x3f, 0xae, 0xf8, 0x96, 0x78, 0x3a, 0xb1, 0x94}, 48, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xe5, 0x58, + 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a, + 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17, + 0x32, 0xbc, 0x50, 0x9d, 0x0d, 0x1a, 0xc4, 0x3a, 0x03, 0x36, 0xde, 0xf9, 0x6f, + 0xda, 0x41, 0xd0, 0x77, 0x4a, 0x35, 0x71, 0xdc, 0xfb, 0xec, 0x7a, 0xac, 0xf3, + 0x19, 0x64, 0x72, 0x16, 0x9e, 0x83, 0x84, 0x30, 0x36, 0x7f, 0x66, 0xee, 0xbe, + 0x3c, 0x6e, 0x70, 0xc4, 0x16, 0xdd, 0x5f, 0x0c, 0x68, 0x75, 0x9d, 0xd1, 0xff, + 0xf8, 0x3f, 0xa4, 0x01, 0x42, 0x20, 0x9d, 0xff, 0x5e, 0xaa, 0xd9, 0x6d, 0xb9, + 0xe6, 0x38, 0x6c}, 97, + PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +{"Test psa_key_derivation_key_agreement - Invalid usage\n", 4, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, + PSA_ERROR_NOT_PERMITTED +}, +#endif +#endif + +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 #ifdef ARCH_TEST_SHA256 -{"Test psa_generator_get_capacity to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - 16, PSA_SUCCESS +#ifdef ARCH_TEST_HKDF +{"Test psa_key_derivation_key_agreement - KDF instead of a key agreement algorithm\n", 5, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_ECDH +{"Test psa_key_derivation_key_agreement - Public key on different curve\n", 6, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xe5, 0x58, + 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a, + 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17, + 0x32, 0xbc, 0x50, 0x9d, 0x0d, 0x1a, 0xc4, 0x3a, 0x03, 0x36, 0xde, 0xf9, 0x6f, + 0xda, 0x41, 0xd0, 0x77, 0x4a, 0x35, 0x71, 0xdc, 0xfb, 0xec, 0x7a, 0xac, 0xf3, + 0x19, 0x64, 0x72, 0x16, 0x9e, 0x83, 0x84, 0x30, 0x36, 0x7f, 0x66, 0xee, 0xbe, + 0x3c, 0x6e, 0x70, 0xc4, 0x16, 0xdd, 0x5f, 0x0c, 0x68, 0x75, 0x9d, 0xd1, 0xff, + 0xf8, 0x3f, 0xa4, 0x01, 0x42, 0x20, 0x9d, 0xff, 0x5e, 0xaa, 0xd9, 0x6d, 0xb9, + 0xe6, 0x38, 0x6c}, 97, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_key_derivation_key_agreement - Public key instead of private key\n", 7, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, PSA_ERROR_INVALID_ARGUMENT }, #endif +#endif +}; -/* Covers the following cases - * - 32 Byte key - * - SHA 512 - * - Output size equal to generator capacity - */ -#ifdef ARCH_TEST_SHA512 -{"Test psa_generator_get_capacity to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512), - {0}, 0, {0}, 0, 64, - 64, PSA_SUCCESS +static test_data check2[] = { +#ifdef ARCH_TEST_ECDH +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +{"Test psa_key_derivation_key_agreement - Negative case\n", 8, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, + PSA_ERROR_INVALID_HANDLE }, #endif #endif diff --git a/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c b/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c index b1c5b150..8d58d19f 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c +++ b/api-tests/dev_apis/crypto/test_c019/test_entry_c019.c @@ -20,14 +20,15 @@ #include "test_c019.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 19) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; void test_entry(val_api_t *val_api, psa_api_t *psa_api) { - int32_t status = VAL_STATUS_SUCCESS; + int32_t status = VAL_STATUS_SUCCESS; val = val_api; psa = psa_api; diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.c b/api-tests/dev_apis/crypto/test_c020/test_c020.c index 0363d03f..7fc0e3f5 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_c020.c +++ b/api-tests/dev_apis/crypto/test_c020/test_c020.c @@ -21,30 +21,27 @@ #include "test_data.h" #include "val_crypto.h" -#define SLOT_1 0 -#define SLOT_2 1 -#define SLOT_3 2 -#define SLOT_4 3 - client_test_t test_c020_crypto_list[] = { NULL, - psa_generator_import_key_test, - psa_generator_import_key_negative_test, + psa_key_derivation_output_bytes_test, NULL, }; -static int g_test_count = 1; -static uint8_t data[BUFFER_SIZE]; -static psa_crypto_generator_t generator; +static int g_test_count = 1; +static uint8_t output[BUFFER_SIZE]; -int32_t psa_generator_import_key_test(security_t caller) +int32_t psa_key_derivation_output_bytes_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - uint32_t i, j, data_sum, remaining_size, length = 0; - uint32_t salt = 0, label = 0; - size_t salt_length = 0, label_length = 0; - psa_key_policy_t policy; - int32_t status; + uint32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -55,274 +52,84 @@ int32_t psa_generator_import_key_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_1], - check1[i].key_alg[SLOT_1]); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_1]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + /* Import the key if the derivation input is key */ + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) + { + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + } - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_1], - &policy); + /* Start the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check1[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle[SLOT_1], - check1[i].key_type[SLOT_1], check1[i].key_data, check1[i].key_length); + /* Set the capacity for the generator */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation, + check1[i].capacity); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - check1[i].key_handle[SLOT_1], check1[i].key_alg[SLOT_1], &salt, salt_length, - &label, label_length, check1[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2], - check1[i].key_alg[SLOT_2]); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_2]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_2], - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check1[i].key_handle[SLOT_2], - check1[i].key_type[SLOT_2], BYTES_TO_BITS(check1[i].size), &generator); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); - - if (check1[i].expected_status != PSA_SUCCESS) + /* Provide input as key or data depending on the step */ + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) { - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_1]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_2]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); - - continue; + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check1[i].step, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); } - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle[SLOT_2], data, - BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); - - TEST_ASSERT_EQUAL(length, check1[i].size, TEST_CHECKPOINT_NUM(14)); - - data_sum = 0; - /* Check that if generated data are zero */ - for (j = 0; j < check1[i].size; j++) + else { - data_sum += data[j]; + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation, + check1[i].step, check1[i].data, check1[i].data_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } - memset(data, 0, sizeof(data)); - TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(15)); + /* Read some data from a key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation, output, + check1[i].output_size); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); - remaining_size = check1[i].capacity - check1[i].size; - if (remaining_size > 0) + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) { - length = 0; - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2], - check1[i].key_alg[SLOT_2]); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_3]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_3], - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17)); - - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, - check1[i].key_handle[SLOT_3], check1[i].key_type[SLOT_2], - BYTES_TO_BITS(check1[i].size), &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18)); - - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle[SLOT_3], data, - BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(19)); - - TEST_ASSERT_EQUAL(length, remaining_size, TEST_CHECKPOINT_NUM(20)); - - data_sum = 0; - /* Check that if generated data are zero */ - for (j = 0; j < remaining_size; j++) - { - data_sum += data[j]; - } - - memset(data, 0, sizeof(data)); - TEST_ASSERT_NOT_EQUAL(data_sum, 0, TEST_CHECKPOINT_NUM(21)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage[SLOT_2], - check1[i].key_alg[SLOT_2]); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle[SLOT_4]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(22)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle[SLOT_4], - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(23)); - - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, - check1[i].key_handle[SLOT_4], check1[i].key_type[SLOT_2], - BYTES_TO_BITS(check1[i].size), &generator); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(24)); - - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_3]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(25)); - - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_4]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(26)); + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(27)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_1]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(28)); - - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle[SLOT_2]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(29)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_generator_import_key_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - uint32_t salt = 0, label = 0; - size_t salt_length = 0, label_length = 0; - uint8_t data[BUFFER_SIZE]; - psa_key_policy_t policy; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage[SLOT_1], - check2[i].key_alg[SLOT_1]); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle[SLOT_1]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle[SLOT_1], - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle[SLOT_1], - check2[i].key_type[SLOT_1], check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - check2[i].key_handle[SLOT_1], check2[i].key_alg[SLOT_1], &salt, salt_length, - &label, label_length, check2[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with invalid handle\n", - g_test_count++); - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check2[i].key_handle[SLOT_2], - check2[i].key_type[SLOT_2], check2[i].size, &generator); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with zero handle\n", - g_test_count++); - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, ZERO_KEY_SLOT, - check2[i].key_type[SLOT_2], check2[i].size, &generator); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7)); + if (check1[i].expected_status != PSA_SUCCESS) + { + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - val->print(PRINT_TEST, "[Check %d] Test psa_generator_import_key with" - " pre-occupied key slot\n", g_test_count++); - /* Create a symmetric key from data read from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_IMPORT_KEY, check2[i].key_handle[SLOT_1], - check2[i].key_type[SLOT_2], check2[i].size, &generator); - TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(9)); + continue; + } - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + /* Read some data from a key derivation operation with no data in the operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation, output, + check1[i].output_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(11)); - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle[SLOT_1]); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + /* Abort the derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + /* Expect bad state when derivation is called on an aborted operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &operation, + output, 0); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.h b/api-tests/dev_apis/crypto/test_c020/test_c020.h index 9584befd..331108e7 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_c020.h +++ b/api-tests/dev_apis/crypto/test_c020/test_c020.h @@ -18,14 +18,13 @@ #define _TEST_C020_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c020) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c020) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c020_crypto_list[]; -int32_t psa_generator_import_key_test(security_t caller); -int32_t psa_generator_import_key_negative_test(security_t caller); +int32_t psa_key_derivation_output_bytes_test(security_t caller); #endif /* _TEST_C020_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c020/test_data.h b/api-tests/dev_apis/crypto/test_c020/test_data.h index 512625dc..e1c6bbfb 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_data.h +++ b/api-tests/dev_apis/crypto/test_c020/test_data.h @@ -18,105 +18,61 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle[4]; - psa_key_type_t key_type[2]; - uint8_t key_data[32]; - uint32_t key_length; - psa_key_usage_t usage[2]; - psa_algorithm_t key_alg[2]; - size_t capacity; - size_t size; - psa_status_t expected_status; + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[34]; + uint32_t key_length; + size_t output_size; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_derivation_step_t step; + size_t capacity; + uint8_t data[16]; + size_t data_length; + psa_status_t expected_status; } test_data; static test_data check1[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -#ifdef ARCH_TEST_SHA256 -{"Test psa_generator_import_key for 16 Byte AES Key\n", {1, 2, 3, 4}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES}, +{"Test psa_key_derivation_output_bytes - Key\n", 1, PSA_KEY_TYPE_DERIVE, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, - {PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR}, - 32, 16, PSA_SUCCESS + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 42, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 42, {0}, 0, + PSA_SUCCESS }, -#endif -#endif -#ifdef ARCH_TEST_SHA512 -#ifdef ARCH_TEST_DES_3KEY -{"Test psa_generator_import_key for Triple DES 3-Key\n", {5, 6, 7, 8}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_DES}, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, -{PSA_ALG_HKDF(PSA_ALG_SHA_512), PSA_ALG_CTR}, - DES3_3KEY_SIZE, DES3_3KEY_SIZE, PSA_SUCCESS +{"Test psa_key_derivation_output_bytes - Info\n", 2, PSA_KEY_TYPE_DERIVE, +{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_INFO, 42, "This is the info", 16, + PSA_SUCCESS }, -#endif -#endif -#ifdef ARCH_TEST_SHA1 -#ifdef ARCH_TEST_AES -{"Test psa_generator_import_key output greater than capacity\n", {9, 10, 11, 12}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES}, -{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, -{PSA_ALG_HKDF(PSA_ALG_SHA_1), PSA_ALG_CTR}, - 64, 80, PSA_ERROR_INSUFFICIENT_DATA +{"Test psa_key_derivation_output_bytes - Salt\n", 3, PSA_KEY_TYPE_DERIVE, +{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SALT, 42, "This is the info", 16, + PSA_ERROR_BAD_STATE }, -#endif -#endif -#ifdef ARCH_TEST_SHA256 -#ifdef ARCH_TEST_RSA -{"Test psa_generator_import_key for RSA Public Key - Invalid type\n", {13, 14, 15, 16}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_RSA_PUBLIC_KEY}, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, -{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR}, - 32, 16, PSA_ERROR_INVALID_ARGUMENT +{"Test psa_key_derivation_output_bytes - Label\n", 4, PSA_KEY_TYPE_DERIVE, +{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_LABEL, 42, "This is the info", 16, + PSA_ERROR_BAD_STATE }, -#endif -#endif -#ifdef ARCH_TEST_SHA256 -#ifdef ARCH_TEST_AES_128 -{"Test psa_generator_import_key for invalid byte for generation\n", {20, 21, 22, 23}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES}, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, -{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR}, - 32, 10, PSA_ERROR_INVALID_ARGUMENT +{"Test psa_key_derivation_output_bytes - Seed\n", 5, PSA_KEY_TYPE_DERIVE, +{0}, 0, 42, 0, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SEED, 42, "This is the info", 16, + PSA_ERROR_BAD_STATE }, -#endif -#endif -#endif -#endif -}; -static test_data check2[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -#ifdef ARCH_TEST_SHA256 -{"Test psa_generator_import_key negative cases\n", -{17, 18, 18, 18}, -{PSA_KEY_TYPE_DERIVE, PSA_KEY_TYPE_AES}, +{"Test psa_key_derivation_output_bytes - Greater Capacity than available\n", 6, PSA_KEY_TYPE_DERIVE, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, {PSA_KEY_USAGE_DERIVE, PSA_KEY_USAGE_EXPORT}, -{PSA_ALG_HKDF(PSA_ALG_SHA_256), PSA_ALG_CTR}, - 32, BYTES_TO_BITS(8), PSA_ERROR_INVALID_HANDLE + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, BUFFER_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 42, {0}, 0, + PSA_ERROR_INSUFFICIENT_DATA, }, -#endif -#endif -#endif -#endif }; diff --git a/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c b/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c index c109392c..283df1c1 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c +++ b/api-tests/dev_apis/crypto/test_c020/test_entry_c020.c @@ -20,7 +20,8 @@ #include "test_c020.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 20) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.c b/api-tests/dev_apis/crypto/test_c021/test_c021.c index 7a3c39ca..947ed2e0 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_c021.c +++ b/api-tests/dev_apis/crypto/test_c021/test_c021.c @@ -21,21 +21,31 @@ #include "test_data.h" #include "val_crypto.h" +#define SLOT_1 1 +#define SLOT_2 2 + client_test_t test_c021_crypto_list[] = { NULL, - psa_generator_abort_test, + psa_key_derivation_output_key_test, NULL, }; -static int g_test_count = 1; -static uint8_t data[BUFFER_SIZE]; +static int g_test_count = 1; -int32_t psa_generator_abort_test(security_t caller) +int32_t psa_key_derivation_output_key_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - psa_key_policy_t policy; - psa_crypto_generator_t generator; + uint32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_handle_t key_handle[2]; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t derv_attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -43,72 +53,93 @@ int32_t psa_generator_abort_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); - - val->print(PRINT_TEST, "[Check %d] Test psa_generator_abort on empty generator\n", - g_test_count++); - /* Abort an empty generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); - val->print(PRINT_TEST, check1[i].test_desc, 0); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + + /* Import the key if the derivation input is key */ + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) + { + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + } + + /* Start the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check1[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); + /* Set the capacity for the generator */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation, + check1[i].capacity); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, check1[i].key_handle, - check1[i].key_alg, check1[i].salt, check1[i].salt_length, check1[i].label, - check1[i].label_length, check1[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Abort the generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Generate random bytes */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, data, check1[i].size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8)); - - val->print(PRINT_TEST, "[Check %d] Multiple psa_generator_abort test\n", g_test_count++); - /* Abort the generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - - /* Abort the generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + /* Provide input as key or data depending on the step */ + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) + { + /* Provide an input for key derivation or key agreement */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, + check1[i].step, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + } + else + { + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES, &operation, + check1[i].step, check1[i].data, check1[i].data_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + } + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &derv_attributes, check1[i].derive_key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &derv_attributes, check1[i].derive_key_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &derv_attributes, + check1[i].derive_key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &derv_attributes, + check1[i].derive_usage); + + /* Derive a key from an ongoing key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes, + &operation, &key_handle[SLOT_1]); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + + if (check1[i].step == PSA_KEY_DERIVATION_INPUT_SECRET) + { + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + } + + if (check1[i].expected_status != PSA_SUCCESS) + { + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + continue; + } + + /* Read some key from a key derivation operation with no data in the operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes, + &operation, &key_handle[SLOT_2]); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INSUFFICIENT_DATA, TEST_CHECKPOINT_NUM(11)); + + /* Abort the derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Expect bad state when derivation is called on an aborted operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY, &derv_attributes, + &operation, &key_handle[SLOT_2]); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.h b/api-tests/dev_apis/crypto/test_c021/test_c021.h index 77b0783d..7c6ea1d1 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_c021.h +++ b/api-tests/dev_apis/crypto/test_c021/test_c021.h @@ -18,13 +18,13 @@ #define _TEST_C021_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c021) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c021) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c021_crypto_list[]; -int32_t psa_generator_abort_test(security_t caller); +int32_t psa_key_derivation_output_key_test(security_t caller); #endif /* _TEST_C021_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c021/test_data.h b/api-tests/dev_apis/crypto/test_c021/test_data.h index 6f42e9e4..6a31c78c 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_data.h +++ b/api-tests/dev_apis/crypto/test_c021/test_data.h @@ -18,34 +18,153 @@ #include "val_crypto.h" typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[32]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - uint8_t salt[16]; - size_t salt_length; - uint8_t label[16]; - size_t label_length; - size_t capacity; - size_t size; - psa_status_t expected_status; + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[34]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_derivation_step_t step; + size_t capacity; + uint8_t data[16]; + size_t data_length; + psa_key_type_t derive_key_type; + size_t derive_key_bits; + psa_key_usage_t derive_usage; + psa_algorithm_t derive_key_alg; + psa_status_t expected_status; } test_data; static test_data check1[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_SHA256 -{"Test psa_generator_abort\n", 1, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - 16, PSA_SUCCESS -}, -#endif -#endif -#endif +{"Test psa_key_derivation_output_key - Key\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Info\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_INFO, 32, "This is the info", 16, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Label\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_LABEL, 32, "This is the info", 16, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Seed\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SEED, 32, "This is the info", 16, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Salt\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SALT, 32, "This is the info", 16, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - DES key export\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0, + PSA_KEY_TYPE_DES, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Greater Capacity than available\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 16, {0}, 0, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_ERROR_INSUFFICIENT_DATA +}, + +{"Test psa_key_derivation_output_key - ECC Public key\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), 256, PSA_KEY_USAGE_EXPORT, + PSA_ERROR_NOT_SUPPORTED, +}, + +{"Test psa_key_derivation_output_key - ECC keypair\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 224, {0}, 0, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), 224, PSA_KEY_USAGE_EXPORT, + PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - RSA Public Key", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0, + PSA_KEY_TYPE_RSA_PUBLIC_KEY, 2048, PSA_KEY_USAGE_EXPORT, + PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_ERROR_NOT_SUPPORTED, +}, + +{"Test psa_key_derivation_output_key - RSA keypair\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 256, {0}, 0, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), 2046, PSA_KEY_USAGE_EXPORT, + PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_SUCCESS +}, + +{"Test psa_key_derivation_output_key - Invalid key size\n", 1, PSA_KEY_TYPE_DERIVE, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), + PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0, + PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_18B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, + PSA_ERROR_NOT_SUPPORTED +}, }; diff --git a/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c b/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c index 621cd978..18883dc8 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c +++ b/api-tests/dev_apis/crypto/test_c021/test_entry_c021.c @@ -20,7 +20,8 @@ #include "test_c021.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 21) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.c b/api-tests/dev_apis/crypto/test_c022/test_c022.c index 049e8d1d..a71e98e2 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_c022.c +++ b/api-tests/dev_apis/crypto/test_c022/test_c022.c @@ -24,174 +24,46 @@ client_test_t test_c022_crypto_list[] = { NULL, - psa_key_derivation_test, - psa_key_derivation_negative_test, + psa_key_derivation_abort_test, NULL, }; static int g_test_count = 1; -static uint8_t data[BUFFER_SIZE]; +static uint8_t output[BUFFER_SIZE]; -int32_t psa_key_derivation_test(security_t caller) +int32_t psa_key_derivation_abort_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - size_t capacity; - psa_key_policy_t policy; - psa_crypto_generator_t generator; + int32_t status; + psa_key_derivation_operation_t func = psa_key_derivation_operation_init(); + psa_key_derivation_operation_t init = PSA_KEY_DERIVATION_OPERATION_INIT; + psa_key_derivation_operation_t zero; - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] ", g_test_count++); - val->print(PRINT_TEST, check1[i].test_desc, 0); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); - capacity = 0; - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - check1[i].key_handle, check1[i].key_alg, check1[i].salt, - check1[i].salt_length, check1[i].label, check1[i].label_length, - check1[i].capacity); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); - - if (check1[i].expected_status != PSA_SUCCESS) - { - /* Abort the generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - continue; - } - - /* Retrieve the current capacity of a generator */ - status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - - TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(9)); - - /* Abort the generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_key_derivation_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_policy_t policy; - psa_key_handle_t empty_key_handle; - psa_crypto_generator_t generator; + memset(&zero, 0, sizeof(zero)); /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - for (i = 0; i < num_checks; i++) - { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - memset(&generator, 0, sizeof(generator)); - memset(data, 0, sizeof(data)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Invalid key handle\n", - g_test_count++); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - check2[i].key_handle, check2[i].key_alg, check2[i].salt, - check2[i].salt_length, check2[i].label, check2[i].label_length, - check2[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, "Test psa_key_derivation_abort\n", 0); - val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Zero as key handle\n", - g_test_count++); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - 0, check2[i].key_alg, check2[i].salt, - check2[i].salt_length, check2[i].label, check2[i].label_length, - check2[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7)); + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &func); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2)); - val->print(PRINT_TEST, "[Check %d] Test psa_key_derivation with Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &empty_key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &init); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, empty_key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &zero); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - /* Set up a key derivation operation. Using this function to initialize the generate as - * XOR or PRNG generator initialization is not implemented. - */ - status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION, &generator, - empty_key_handle, check2[i].key_alg, check2[i].salt, - check2[i].salt_length, check2[i].label, check2[i].label_length, - check2[i].capacity); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(10)); - } + /* Read some data from a key derivation operation with no data in the operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &func, output, + BUFFER_SIZE); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(5)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.h b/api-tests/dev_apis/crypto/test_c022/test_c022.h index 1339ec79..57b7b0c4 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_c022.h +++ b/api-tests/dev_apis/crypto/test_c022/test_c022.h @@ -18,14 +18,13 @@ #define _TEST_C022_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c022) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c022) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c022_crypto_list[]; -int32_t psa_key_derivation_test(security_t caller); -int32_t psa_key_derivation_negative_test(security_t caller); +int32_t psa_key_derivation_abort_test(security_t caller); #endif /* _TEST_C022_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c022/test_data.h b/api-tests/dev_apis/crypto/test_c022/test_data.h index 7dcc94f0..dc0c03e9 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_data.h +++ b/api-tests/dev_apis/crypto/test_c022/test_data.h @@ -17,126 +17,4 @@ #include "val_crypto.h" -typedef struct { - char test_desc[75]; - psa_key_handle_t key_handle; - psa_key_type_t key_type; - uint8_t key_data[32]; - uint32_t key_length; - psa_key_usage_t usage; - psa_algorithm_t key_alg; - const uint8_t salt[16]; - size_t salt_length; - const uint8_t label[16]; - size_t label_length; - size_t capacity; - psa_status_t expected_status; -} test_data; - -static test_data check1[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_SHA256 -{"Test psa_key_derivation to get 16 Byte data with SHA-256\n", 1, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_SHA512 -{"Test psa_key_derivation to get 32 Byte data with SHA-512\n", 2, PSA_KEY_TYPE_DERIVE, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512), - {0}, 0, {0}, 0, 64, - PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_MD5 -{"Test psa_key_derivation to get 32 Byte data with MD-5\n", 3, PSA_KEY_TYPE_DERIVE, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_MD5), - {0}, 0, {0}, 0, 64, - PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_SHA256 -{"Test psa_key_derivation to get 16 Byte data with salt and label\n", 4, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - "abcdefghijklmnop", 16, "This is a label", 15, 32, - PSA_SUCCESS -}, -#endif - -#ifdef ARCH_TEST_SHA1 -{"Test psa_key_derivation with too large capacity for alg and key\n", 6, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_1), - {0}, 0, {0}, 0, 5200, - PSA_ERROR_INVALID_ARGUMENT -}, -#endif - -#ifdef ARCH_TEST_SHA256 -{"Test psa_key_derivation with unsupported key type\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - PSA_ERROR_INVALID_ARGUMENT -}, - -{"Test psa_key_derivation with incorrect usage\n", 12, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256), - {0}, 0, {0}, 0, 32, - PSA_ERROR_NOT_PERMITTED -}, -#endif - -{"Test psa_key_derivation with unsupported key derivation algorithm\n", 14, PSA_KEY_TYPE_DERIVE, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_CATEGORY_HASH), - {0}, 0, {0}, 0, 32, - PSA_ERROR_NOT_SUPPORTED -}, -#endif - -#ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT -{"Test psa_key_derivation with invalid algorithm\n", 5, PSA_KEY_TYPE_DERIVE, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_RSA_PKCS1V15_CRYPT, - {0}, 0, {0}, 0, 64, - PSA_ERROR_INVALID_ARGUMENT -}, -#endif -}; - -static test_data check2[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_SHA512 -{"Test psa_key_derivation to get 32 Byte data with SHA-512\n", 13, PSA_KEY_TYPE_DERIVE, -{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, - 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, - AES_32B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_512), - {0}, 0, {0}, 0, 64, - PSA_SUCCESS -}, -#endif -#endif -}; +/* Keeping this file empty incase if future support is needed */ diff --git a/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c b/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c index 2d7e7981..04b4afc3 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c +++ b/api-tests/dev_apis/crypto/test_c022/test_entry_c022.c @@ -20,7 +20,8 @@ #include "test_c022.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 22) -#define TEST_DESC "Testing crypto generator functions APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.c b/api-tests/dev_apis/crypto/test_c023/test_c023.c index 9c786dcf..6d91e2a9 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_c023.c +++ b/api-tests/dev_apis/crypto/test_c023/test_c023.c @@ -23,18 +23,24 @@ client_test_t test_c023_crypto_list[] = { NULL, - psa_key_policy_get_usage_test, + psa_key_derivation_set_get_capacity_test, NULL, }; static int g_test_count = 1; -int32_t psa_key_policy_get_usage_test(security_t caller) +int32_t psa_key_derivation_set_get_capacity_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - psa_key_policy_t policy; - psa_key_usage_t usage; + size_t capacity = 0; + psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -45,23 +51,49 @@ int32_t psa_key_policy_get_usage_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); + /* Start the key derivation operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, + check1[i].key_alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the capacity for the generator */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation, + check1[i].capacity); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + continue; + } + + /* Get the capacity for the generator */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY, &operation, + &capacity); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Check if the capacity as per the expected value */ + TEST_ASSERT_EQUAL(capacity, check1[i].capacity, TEST_CHECKPOINT_NUM(7)); + + /* Abort the operation */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Setting the capacity on an aborted operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY, &operation, + check1[i].capacity); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); - /* Retrieve the usage field of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &policy, &usage); + /* Getting the capacity on an aborted operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY, &operation, + &capacity); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10)); - TEST_ASSERT_EQUAL(usage, check1[i].usage, TEST_CHECKPOINT_NUM(3)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.h b/api-tests/dev_apis/crypto/test_c023/test_c023.h index 43c40e4d..2e0af108 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_c023.h +++ b/api-tests/dev_apis/crypto/test_c023/test_c023.h @@ -18,13 +18,13 @@ #define _TEST_C023_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c023) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c023) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c023_crypto_list[]; -int32_t psa_key_policy_get_usage_test(security_t caller); +int32_t psa_key_derivation_set_get_capacity_test(security_t caller); #endif /* _TEST_C023_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c023/test_data.h b/api-tests/dev_apis/crypto/test_c023/test_data.h index 2ef937cc..1bc6455b 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_data.h +++ b/api-tests/dev_apis/crypto/test_c023/test_data.h @@ -19,37 +19,21 @@ typedef struct { char test_desc[75]; - psa_key_usage_t usage; psa_algorithm_t key_alg; + size_t capacity; + psa_status_t expected_status; } test_data; static test_data check1[] = { -#ifdef ARCH_TEST_HKDF -#ifdef ARCH_TEST_SHA256 -{"Test psa_key_policy_get_usage with usage as encrypt\n", - PSA_KEY_USAGE_ENCRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256), +{"Test psa_key_derivation_set_get_capacity - Less than operation's capacity\n", + PSA_ALG_HKDF(PSA_ALG_SHA_256), 42, PSA_SUCCESS }, -{"Test psa_key_policy_get_usage with usage as decrypt\n", - PSA_KEY_USAGE_DECRYPT, PSA_ALG_HKDF(PSA_ALG_SHA_256), +{"Test psa_key_derivation_set_get_capacity - Equal to operation's capacity\n", + PSA_ALG_HKDF(PSA_ALG_SHA_256), 8160, PSA_SUCCESS }, -{"Test psa_key_policy_get_usage with usage as derive\n", - PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), +{"Test psa_key_derivation_set_get_capacity - More than operation's capacity\n", + PSA_ALG_HKDF(PSA_ALG_SHA_256), 10000, PSA_ERROR_INVALID_ARGUMENT }, - -{"Test psa_key_policy_get_usage with usage as export\n", - PSA_KEY_USAGE_EXPORT, PSA_ALG_HKDF(PSA_ALG_SHA_256), -}, - -{"Test psa_key_policy_get_usage with usage as sign\n", - PSA_KEY_USAGE_SIGN, PSA_ALG_HKDF(PSA_ALG_SHA_256), -}, - -{"Test psa_key_policy_get_usage with usage as verify\n", - PSA_KEY_USAGE_VERIFY, PSA_ALG_HKDF(PSA_ALG_SHA_256), -}, -#endif -#endif - }; diff --git a/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c b/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c index d177a9db..db4d0bb5 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c +++ b/api-tests/dev_apis/crypto/test_c023/test_entry_c023.c @@ -20,7 +20,8 @@ #include "test_c023.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 23) -#define TEST_DESC "Testing crypto key management APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.c b/api-tests/dev_apis/crypto/test_c024/test_c024.c index 16b52e66..2354ba17 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_c024.c +++ b/api-tests/dev_apis/crypto/test_c024/test_c024.c @@ -23,7 +23,6 @@ client_test_t test_c024_crypto_list[] = { NULL, psa_aead_encrypt_test, - psa_aead_encrypt_negative_test, NULL, }; @@ -44,12 +43,18 @@ static bool_t is_buffer_empty(uint8_t *buffer, size_t size) int32_t psa_aead_encrypt_test(security_t caller) { - int32_t i, status; - uint8_t ciphertext[BUFFER_SIZE]; - psa_key_policy_t policy; - size_t ciphertext_length; - int num_checks = sizeof(check1)/sizeof(check1[0]); - uint8_t *nonce, *additional_data; + int32_t i, status; + uint8_t ciphertext[BUFFER_SIZE]; + size_t ciphertext_length; + int num_checks = sizeof(check1)/sizeof(check1[0]); + uint8_t *nonce, *additional_data; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -60,34 +65,19 @@ int32_t psa_aead_encrypt_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - memset(ciphertext, 0, sizeof(ciphertext)); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (is_buffer_empty(check1[i].nonce, check1[i].nonce_length) == TRUE) { @@ -111,115 +101,40 @@ int32_t psa_aead_encrypt_test(security_t caller) check1[i].additional_data_length, check1[i].plaintext, check1[i].plaintext_length, ciphertext, check1[i].ciphertext_size, &ciphertext_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - } + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + continue; + } /* Check if the length matches */ TEST_ASSERT_EQUAL(ciphertext_length, check1[i].expected_ciphertext_length, - TEST_CHECKPOINT_NUM(8)); + TEST_CHECKPOINT_NUM(6)); /* Check if the data matches */ TEST_ASSERT_MEMCMP(ciphertext, check1[i].expected_ciphertext, ciphertext_length, - TEST_CHECKPOINT_NUM(9)); + TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_aead_encrypt_negative_test(security_t caller) -{ - int32_t i, status; - uint8_t ciphertext[BUFFER_SIZE]; - psa_key_policy_t policy; - size_t ciphertext_length; - int num_checks = sizeof(check2)/sizeof(check2[0]); - uint8_t *nonce, *additional_data; + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); - for (i = 0; i < num_checks; i++) - { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - if (is_buffer_empty(check2[i].nonce, check2[i].nonce_length) == TRUE) - { - nonce = NULL; - check2[i].nonce_length = 0; - } - else - nonce = check2[i].nonce; - - if (is_buffer_empty(check2[i].additional_data, check2[i].additional_data_length) == TRUE) - { - additional_data = NULL; - check2[i].additional_data_length = 0; - } - else - additional_data = check2[i].additional_data; - - val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Invalid key handle\n", - g_test_count++); - /* Process an authenticated encryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check2[i].key_handle, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].plaintext, - check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size, - &ciphertext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Zero as key handle\n", - g_test_count++); - /* Process an authenticated encryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, 0, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].plaintext, - check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size, - &ciphertext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_aead_encrypt - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Process an authenticated encryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check2[i].key_handle, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].plaintext, - check2[i].plaintext_length, ciphertext, check2[i].ciphertext_size, + /* Process an authenticated encryption operation on a destroyed key*/ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT, check1[i].key_handle, + check1[i].key_alg, nonce, check1[i].nonce_length, additional_data, + check1[i].additional_data_length, check1[i].plaintext, + check1[i].plaintext_length, ciphertext, check1[i].ciphertext_size, &ciphertext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.h b/api-tests/dev_apis/crypto/test_c024/test_c024.h index 5060e3e9..1e768630 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_c024.h +++ b/api-tests/dev_apis/crypto/test_c024/test_c024.h @@ -18,15 +18,14 @@ #define _TEST_C024_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c024) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c024) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c024_crypto_list[]; int32_t psa_aead_encrypt_test(security_t caller); -int32_t psa_aead_encrypt_negative_test(security_t caller); #endif /* _TEST_C024_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c024/test_data.h b/api-tests/dev_apis/crypto/test_c024/test_data.h index f2800024..dfe2f1f8 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_data.h +++ b/api-tests/dev_apis/crypto/test_c024/test_data.h @@ -17,8 +17,6 @@ #include "val_crypto.h" -#define EMPTY_KEY_SLOT 31 - typedef struct { char test_desc[75]; psa_key_handle_t key_handle; @@ -162,19 +160,3 @@ static test_data check1[] = { #endif #endif }; - -static test_data check2[] = { -#ifdef ARCH_TEST_GCM -#ifdef ARCH_TEST_AES_128 -{"Test psa_aead_encrypt - Negative case\n", 9, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, -{0}, 13, {0}, 0, "hello world", 11, -{0x5D, 0xC1, 0x72, 0x23, 0x66, 0x96, 0xFD, 0xFC, 0x93, 0x06, 0x27, 0x52, 0xC7, - 0x0A, 0xCB, 0x36, 0x55, 0x30, 0xC9, 0x48, 0x8F, 0x5E, 0xA5, 0xB9, 0x51, 0xFB, - 0x4E}, - BUFFER_SIZE, 27, PSA_ERROR_DOES_NOT_EXIST -}, -#endif -#endif -}; diff --git a/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c b/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c index caf74156..91af9594 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c +++ b/api-tests/dev_apis/crypto/test_c024/test_entry_c024.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 24) #define TEST_DESC "Testing crypto AEAD APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.c b/api-tests/dev_apis/crypto/test_c025/test_c025.c index f9dc3fd5..c8a6df48 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_c025.c +++ b/api-tests/dev_apis/crypto/test_c025/test_c025.c @@ -23,7 +23,6 @@ client_test_t test_c025_crypto_list[] = { NULL, psa_aead_decrypt_test, - psa_aead_decrypt_negative_test, NULL, }; @@ -46,10 +45,16 @@ int32_t psa_aead_decrypt_test(security_t caller) { int32_t i, status; uint8_t plaintext[BUFFER_SIZE]; - psa_key_policy_t policy; size_t plaintext_length; int num_checks = sizeof(check1)/sizeof(check1[0]); uint8_t *nonce, *additional_data; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -60,33 +65,19 @@ int32_t psa_aead_decrypt_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - memset(plaintext, 0, sizeof(plaintext)); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (is_buffer_empty(check1[i].nonce, check1[i].nonce_length) == TRUE) { @@ -131,91 +122,17 @@ int32_t psa_aead_decrypt_test(security_t caller) /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_aead_decrypt_negative_test(security_t caller) -{ - int32_t i, status; - uint8_t plaintext[BUFFER_SIZE]; - psa_key_policy_t policy; - size_t plaintext_length; - int num_checks = sizeof(check2)/sizeof(check2[0]); - uint8_t *nonce, *additional_data; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - if (is_buffer_empty(check2[i].nonce, check2[i].nonce_length) == TRUE) - { - nonce = NULL; - check2[i].nonce_length = 0; - } - else - nonce = check2[i].nonce; - - if (is_buffer_empty(check2[i].additional_data, check2[i].additional_data_length) == TRUE) - { - additional_data = NULL; - check2[i].additional_data_length = 0; - } - else - additional_data = check2[i].additional_data; + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); - val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Invalid key handle\n", - g_test_count++); - /* Process an authenticated decryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check2[i].key_handle, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size, - plaintext, check2[i].plaintext_size, &plaintext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Zero as key handle\n", - g_test_count++); - /* Process an authenticated decryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, 0, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size, - plaintext, check2[i].plaintext_size, &plaintext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_aead_decrypt - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + /* Process an authenticated decryption operation on a destroyed key handle */ + status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check1[i].key_handle, + check1[i].key_alg, nonce, check1[i].nonce_length, additional_data, + check1[i].additional_data_length, check1[i].ciphertext, check1[i].ciphertext_size, + plaintext, check1[i].plaintext_size, &plaintext_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(11)); + } - /* Process an authenticated decryption operation */ - status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT, check2[i].key_handle, - check2[i].key_alg, nonce, check2[i].nonce_length, additional_data, - check2[i].additional_data_length, check2[i].ciphertext, check2[i].ciphertext_size, - plaintext, check2[i].plaintext_size, &plaintext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); - } - - return VAL_STATUS_SUCCESS; + return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.h b/api-tests/dev_apis/crypto/test_c025/test_c025.h index 5b0667b8..27674cd0 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_c025.h +++ b/api-tests/dev_apis/crypto/test_c025/test_c025.h @@ -18,9 +18,9 @@ #define _TEST_C025_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c025) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c025) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c025/test_data.h b/api-tests/dev_apis/crypto/test_c025/test_data.h index 44ce513f..82977ede 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_data.h +++ b/api-tests/dev_apis/crypto/test_c025/test_data.h @@ -17,8 +17,6 @@ #include "val_crypto.h" -#define EMPTY_KEY_SLOT 31 - typedef struct { char test_desc[75]; psa_key_handle_t key_handle; @@ -57,7 +55,7 @@ static test_data check1[] = { 39, 23, PSA_SUCCESS }, -{"Test psa_aead_encrypt - AES-CCM\n", 2, PSA_KEY_TYPE_AES, +{"Test psa_aead_decrypt - AES-CCM\n", 2, PSA_KEY_TYPE_AES, {0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, {0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, @@ -73,7 +71,7 @@ static test_data check1[] = { 0xe9}, 40, 24, PSA_SUCCESS }, -{"Test psa_aead_encrypt - AES-CCM 24 bytes Tag length = 4\n", 3, PSA_KEY_TYPE_AES, +{"Test psa_aead_decrypt - AES-CCM 24 bytes Tag length = 4\n", 3, PSA_KEY_TYPE_AES, {0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), @@ -208,19 +206,3 @@ static test_data check1[] = { #endif #endif }; - -static test_data check2[] = { -#ifdef ARCH_TEST_GCM -#ifdef ARCH_TEST_AES_128 -{"Test psa_aead_decrypt - Negative cases\n", 11, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, -{0}, 13, {0}, 0, "hello world", BUFFER_SIZE, -{0x5D, 0xC1, 0x72, 0x23, 0x66, 0x96, 0xFD, 0xFC, 0x93, 0x06, 0x27, 0x52, 0xC7, - 0x0A, 0xCB, 0x36, 0x55, 0x30, 0xC9, 0x48, 0x8F, 0x5E, 0xA5, 0xB9, 0x51, 0xFB, - 0x4E}, - 11, 27, PSA_ERROR_INVALID_ARGUMENT -}, -#endif -#endif -}; diff --git a/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c b/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c index f71ac410..45822f3f 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c +++ b/api-tests/dev_apis/crypto/test_c025/test_entry_c025.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 25) #define TEST_DESC "Testing crypto AEAD APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.c b/api-tests/dev_apis/crypto/test_c026/test_c026.c index 03d9def5..94fa65fb 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_c026.c +++ b/api-tests/dev_apis/crypto/test_c026/test_c026.c @@ -33,9 +33,15 @@ static psa_mac_operation_t operation; int32_t psa_mac_sign_setup_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - psa_key_policy_t policy; - int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -47,32 +53,15 @@ int32_t psa_mac_sign_setup_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, @@ -98,6 +87,9 @@ int32_t psa_mac_sign_setup_test(security_t caller) /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -106,7 +98,6 @@ int32_t psa_mac_sign_setup_test(security_t caller) int32_t psa_mac_sign_setup_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); - psa_key_policy_t policy; int32_t i, status; /* Initialize the PSA crypto library*/ @@ -115,51 +106,24 @@ int32_t psa_mac_sign_setup_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&operation, 0, sizeof(operation)); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with invalid key handle\n", + val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup invalid key handle\n", g_test_count++); - /* Start a multipart MAC calculation operation */ + /* Start a multipart MAC verification operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check2[i].key_handle, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with zero key handle\n", + val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup zero as key handle\n", g_test_count++); - /* Start a multipart MAC calculation operation */ + /* Start a multipart MAC verification operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_mac_sign_setup with empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Start a multipart MAC calculation operation */ - status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, - check2[i].key_handle, check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; } - diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.h b/api-tests/dev_apis/crypto/test_c026/test_c026.h index 8d3e052e..f90449ca 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_c026.h +++ b/api-tests/dev_apis/crypto/test_c026/test_c026.h @@ -18,9 +18,9 @@ #define _TEST_C026_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c026) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c026) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c026/test_data.h b/api-tests/dev_apis/crypto/test_c026/test_data.h index df4d3a51..02fc1489 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_data.h +++ b/api-tests/dev_apis/crypto/test_c026/test_data.h @@ -17,8 +17,6 @@ #include "val_crypto.h" -#define EMPTY_KEY_SLOT 31 - typedef struct { char test_desc[75]; psa_key_handle_t key_handle; @@ -142,14 +140,18 @@ static test_data check1[] = { }; static test_data check2[] = { -#ifdef ARCH_TEST_AES_128 -#ifdef ARCH_TEST_CMAC -{"Test psa_mac_sign_setup - Negative case\n", 12, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0x00}, - AES_16B_KEY_SIZE, PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC, - PSA_ERROR_INVALID_ARGUMENT +#ifdef ARCH_TEST_HMAC +#ifdef ARCH_TEST_SHA256 +{"Test psa_mac_sign_setup 64 negative case\n", 11, PSA_KEY_TYPE_HMAC, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, + 64, PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256), + PSA_SUCCESS }, #endif #endif }; +; diff --git a/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c b/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c index 89b31266..57aa1b30 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c +++ b/api-tests/dev_apis/crypto/test_c026/test_entry_c026.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 26) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.c b/api-tests/dev_apis/crypto/test_c027/test_c027.c index b6e32889..c4de02be 100644 --- a/api-tests/dev_apis/crypto/test_c027/test_c027.c +++ b/api-tests/dev_apis/crypto/test_c027/test_c027.c @@ -33,11 +33,17 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_mac_update_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - size_t length; - psa_key_policy_t policy; - psa_mac_operation_t operation; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + size_t length; + psa_mac_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,50 +56,39 @@ int32_t psa_mac_update_test(security_t caller) memset(&operation, 0, sizeof(operation)); memset(data, 0, sizeof(data)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Add a message fragment to a multipart MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data, check1[i].data_size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); continue; } @@ -101,20 +96,20 @@ int32_t psa_mac_update_test(security_t caller) /* Finish the calculation of the MAC of a message */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data, sizeof(data), &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Add a message fragment to the same multipart MAC operation*/ status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data, check1[i].data_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.h b/api-tests/dev_apis/crypto/test_c027/test_c027.h index ea4c22fc..4af68c6d 100644 --- a/api-tests/dev_apis/crypto/test_c027/test_c027.h +++ b/api-tests/dev_apis/crypto/test_c027/test_c027.h @@ -18,9 +18,9 @@ #define _TEST_C027_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c027) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c027) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c b/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c index fedebfce..8e40ce17 100644 --- a/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c +++ b/api-tests/dev_apis/crypto/test_c027/test_entry_c027.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 27) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.c b/api-tests/dev_apis/crypto/test_c028/test_c028.c index 475feb77..9599fb45 100644 --- a/api-tests/dev_apis/crypto/test_c028/test_c028.c +++ b/api-tests/dev_apis/crypto/test_c028/test_c028.c @@ -32,12 +32,17 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_mac_sign_finish_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - size_t length; - psa_key_policy_t policy; - psa_mac_operation_t operation; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + size_t length; + psa_mac_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,65 +55,53 @@ int32_t psa_mac_sign_finish_test(security_t caller) memset(&operation, 0, sizeof(operation)); memset(data, 0, sizeof(data)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Add a message fragment to a multipart MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data, check1[i].data_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Finish the calculation of the MAC of a message */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data, check1[i].mac_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); continue; } /* Check if the MAC length matches with the expected length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(9)); /* Check if the MAC data matches with the expected data */ - TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(10)); memset(data, 0, sizeof(data)); @@ -118,15 +111,15 @@ int32_t psa_mac_sign_finish_test(security_t caller) */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data, check1[i].mac_size, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11)); /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.h b/api-tests/dev_apis/crypto/test_c028/test_c028.h index a8b1b0f0..bebadba5 100644 --- a/api-tests/dev_apis/crypto/test_c028/test_c028.h +++ b/api-tests/dev_apis/crypto/test_c028/test_c028.h @@ -18,9 +18,9 @@ #define _TEST_C028_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c028) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c028) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c b/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c index 86dda651..7646fd50 100644 --- a/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c +++ b/api-tests/dev_apis/crypto/test_c028/test_entry_c028.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 28) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.c b/api-tests/dev_apis/crypto/test_c029/test_c029.c index 53be0dbf..816aa105 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_c029.c +++ b/api-tests/dev_apis/crypto/test_c029/test_c029.c @@ -33,9 +33,15 @@ static psa_mac_operation_t operation; int32_t psa_mac_verify_setup_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - psa_key_policy_t policy; - int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -47,43 +53,30 @@ int32_t psa_mac_verify_setup_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC verification operation */ status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); /* Whether setup succeeded or failed, abort must succeed. * Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* If setup failed, reproduce the failure, so that the caller can * test the resulting state of the operation object. @@ -92,12 +85,12 @@ int32_t psa_mac_verify_setup_test(security_t caller) { status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; @@ -106,7 +99,6 @@ int32_t psa_mac_verify_setup_test(security_t caller) int32_t psa_mac_verify_setup_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); - psa_key_policy_t policy; int32_t i, status; /* Initialize the PSA crypto library*/ @@ -115,20 +107,10 @@ int32_t psa_mac_verify_setup_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&operation, 0, sizeof(operation)); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup invalid key handle\n", g_test_count++); /* Start a multipart MAC verification operation */ @@ -142,17 +124,6 @@ int32_t psa_mac_verify_setup_negative_test(security_t caller) status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation, 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - val->print(PRINT_TEST, "[Check %d] Test psa_mac_verify_setup empty key handle\n", - g_test_count++); - /* Start a multipart MAC verification operation */ - status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation, - check2[i].key_handle, check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(6)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.h b/api-tests/dev_apis/crypto/test_c029/test_c029.h index b549fed6..e12700a9 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_c029.h +++ b/api-tests/dev_apis/crypto/test_c029/test_c029.h @@ -18,9 +18,9 @@ #define _TEST_C029_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c029) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c029) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c029/test_data.h b/api-tests/dev_apis/crypto/test_c029/test_data.h index 4adad3a3..1a55b00e 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_data.h +++ b/api-tests/dev_apis/crypto/test_c029/test_data.h @@ -17,8 +17,6 @@ #include "val_crypto.h" -#define EMPTY_KEY_SLOT 31 - typedef struct { char test_desc[75]; psa_key_handle_t key_handle; diff --git a/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c b/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c index 78c323f3..0ca3e509 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c +++ b/api-tests/dev_apis/crypto/test_c029/test_entry_c029.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 29) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.c b/api-tests/dev_apis/crypto/test_c030/test_c030.c index 177b0f0e..323ee8b0 100644 --- a/api-tests/dev_apis/crypto/test_c030/test_c030.c +++ b/api-tests/dev_apis/crypto/test_c030/test_c030.c @@ -31,10 +31,16 @@ static int g_test_count = 1; int32_t psa_mac_verify_finish_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - psa_key_policy_t policy; - psa_mac_operation_t operation; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_mac_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -46,58 +52,46 @@ int32_t psa_mac_verify_finish_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Add a message fragment to a multipart MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, check1[i].data, check1[i].data_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Finish the calculation of the MAC of a message and compare it with * an expected value */ status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH, &operation, check1[i].expected_mac, check1[i].mac_size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); continue; } @@ -107,15 +101,15 @@ int32_t psa_mac_verify_finish_test(security_t caller) */ status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY_FINISH, &operation, check1[i].expected_mac, check1[i].mac_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.h b/api-tests/dev_apis/crypto/test_c030/test_c030.h index 46c27207..eacecd81 100644 --- a/api-tests/dev_apis/crypto/test_c030/test_c030.h +++ b/api-tests/dev_apis/crypto/test_c030/test_c030.h @@ -18,9 +18,9 @@ #define _TEST_C030_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c030) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c030) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c b/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c index 0188a082..6fd48961 100644 --- a/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c +++ b/api-tests/dev_apis/crypto/test_c030/test_entry_c030.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 30) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.c b/api-tests/dev_apis/crypto/test_c031/test_c031.c index 040e8a86..eaef9bd7 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_c031.c +++ b/api-tests/dev_apis/crypto/test_c031/test_c031.c @@ -33,10 +33,16 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_mac_abort_test(security_t caller) { - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t i, status; - psa_key_policy_t policy; - psa_mac_operation_t operation; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_mac_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -48,31 +54,19 @@ int32_t psa_mac_abort_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, @@ -97,19 +91,19 @@ int32_t psa_mac_abort_test(security_t caller) int32_t psa_mac_abort_before_finish_test(security_t caller) { - size_t length; - psa_key_policy_t policy; - psa_algorithm_t key_alg = PSA_ALG_CMAC; - psa_key_usage_t usage = PSA_KEY_USAGE_SIGN; - psa_key_handle_t key_handle = 10; - psa_key_type_t key_type = PSA_KEY_TYPE_AES; - psa_mac_operation_t operation; - uint8_t key_data[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, + size_t length; + psa_algorithm_t key_alg = PSA_ALG_CMAC; + psa_key_usage_t usage = PSA_KEY_USAGE_SIGN; + psa_key_handle_t key_handle = 10; + psa_key_type_t key_type = PSA_KEY_TYPE_AES; + psa_mac_operation_t operation; + uint8_t key_data[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c}; - uint8_t input_data[] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}; - size_t key_length = sizeof(key_data); - size_t inputdata_size = sizeof(input_data); - int32_t status; + uint8_t input_data[] = {0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}; + size_t key_length = sizeof(key_data); + size_t inputdata_size = sizeof(input_data); + int32_t status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; memset(data, 0, sizeof(data)); memset(&operation, 0, sizeof(operation)); @@ -125,26 +119,15 @@ int32_t psa_mac_abort_before_finish_test(security_t caller) status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, usage, key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, key_alg); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, key_handle, key_type, key_data, - key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + key_length, &key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, key_handle, key_alg); diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.h b/api-tests/dev_apis/crypto/test_c031/test_c031.h index 0aee6287..7582a591 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_c031.h +++ b/api-tests/dev_apis/crypto/test_c031/test_c031.h @@ -18,9 +18,9 @@ #define _TEST_C031_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c031) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c031) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c b/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c index bd97a0d7..f7b9d7af 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c +++ b/api-tests/dev_apis/crypto/test_c031/test_entry_c031.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 31) #define TEST_DESC "Testing crypto MAC APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.c b/api-tests/dev_apis/crypto/test_c032/test_c032.c index 44e4682b..0b10ef36 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_c032.c +++ b/api-tests/dev_apis/crypto/test_c032/test_c032.c @@ -35,35 +35,32 @@ int32_t psa_cipher_encrypt_setup_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - const uint8_t *key_data; - psa_key_policy_t policy; + const uint8_t *key_data; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - memset(&operation, 0, sizeof(operation)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -84,7 +81,7 @@ int32_t psa_cipher_encrypt_setup_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -92,41 +89,41 @@ int32_t psa_cipher_encrypt_setup_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); /* Whether setup succeeded or failed, abort must succeed. * Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); if (check1[i].expected_status != PSA_SUCCESS) { status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -136,7 +133,6 @@ int32_t psa_cipher_encrypt_setup_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -144,20 +140,10 @@ int32_t psa_cipher_encrypt_setup_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&operation, 0, sizeof(operation)); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_cipher_encrypt_setup - Invalid key handle\n", g_test_count++); /* Set the key for a multipart symmetric encryption operation */ @@ -171,22 +157,6 @@ int32_t psa_cipher_encrypt_setup_negative_test(security_t caller) status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_cipher_encrypt_setup - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Set the key for a multipart symmetric encryption operation */ - status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, - check2[i].key_handle, check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.h b/api-tests/dev_apis/crypto/test_c032/test_c032.h index 02a902c1..f229c1a5 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_c032.h +++ b/api-tests/dev_apis/crypto/test_c032/test_c032.h @@ -18,9 +18,9 @@ #define _TEST_C032_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c032) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c032) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c032/test_data.h b/api-tests/dev_apis/crypto/test_c032/test_data.h index f7be6795..763afdef 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_data.h +++ b/api-tests/dev_apis/crypto/test_c032/test_data.h @@ -23,6 +23,7 @@ typedef struct { psa_key_type_t key_type; uint8_t key_data[64]; uint32_t key_length; + size_t attr_bits; psa_key_usage_t usage; psa_algorithm_t key_alg; size_t expected_bit_length; @@ -164,7 +165,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_AES_128 {"Test psa_cipher_encrypt_setup 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS }, @@ -173,7 +174,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_AES_192 {"Test psa_cipher_encrypt_setup 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, - 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, AES_24B_KEY_SIZE, + 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, AES_24B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_SUCCESS }, @@ -183,7 +184,7 @@ static test_data check1[] = { {"Test psa_cipher_encrypt_setup 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, - 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, AES_32B_KEY_SIZE, + 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_SUCCESS }, @@ -194,7 +195,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_DES_1KEY {"Test psa_cipher_encrypt_setup DES 64 bit key\n", 4, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, - DES_8B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES_8B_KEY_SIZE), + DES_8B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_SUCCESS }, #endif @@ -203,7 +204,7 @@ static test_data check1[] = { {"Test psa_cipher_encrypt_setup Triple DES 2-Key\n", 5, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - DES3_2KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_2KEY_SIZE), + DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_SUCCESS }, #endif @@ -213,7 +214,7 @@ static test_data check1[] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, - DES3_3KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_3KEY_SIZE), + DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_SUCCESS }, #endif @@ -222,7 +223,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_CIPER_MODE_CTR {"Test psa_cipher_encrypt_setup 16 Byte raw data\n", 7, PSA_KEY_TYPE_RAW_DATA, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_ERROR_NOT_SUPPORTED }, @@ -232,7 +233,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_CMAC {"Test psa_cipher_encrypt_setup - not a cipher algorithm\n", 8, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CMAC, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_ERROR_INVALID_ARGUMENT }, @@ -241,7 +242,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_CIPER {"Test psa_cipher_encrypt_setup - unknown cipher algorithm\n", 9, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_CIPHER, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_ERROR_NOT_SUPPORTED }, @@ -251,7 +252,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_ARC4 {"Test psa_cipher_encrypt_setup - incompatible key ARC4\n", 10, PSA_KEY_TYPE_ARC4, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_ERROR_NOT_SUPPORTED }, @@ -259,7 +260,7 @@ static test_data check1[] = { {"Test psa_cipher_encrypt_setup - incorrect usage\n", 11, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_ERROR_NOT_PERMITTED }, @@ -269,13 +270,13 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW #ifdef ARCH_TEST_RSA_2048 {"Test psa_cipher_encrypt_setup - RSA public key\n", 12, PSA_KEY_TYPE_RSA_PUBLIC_KEY, -{0}, 270, +{0}, 270, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_cipher_encrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR, -{0}, 1193, +{"Test psa_cipher_encrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR, +{0}, 1193, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, PSA_ERROR_INVALID_ARGUMENT }, @@ -285,7 +286,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 {"Test psa_cipher_encrypt_setup - EC Public key\n", 14, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 256, PSA_ERROR_INVALID_ARGUMENT }, @@ -293,7 +294,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_cipher_encrypt_setup - EC keypair\n", 15, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 224, PSA_ERROR_INVALID_ARGUMENT }, @@ -306,7 +307,7 @@ static test_data check2[] = { #ifdef ARCH_TEST_AES_128 {"Test psa_cipher_encrypt_setup negative cases\n", 16, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, + 0x5F, 0xC9, 0xD0}, AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS }, diff --git a/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c b/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c index 1ff8b8e4..e05c81d6 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c +++ b/api-tests/dev_apis/crypto/test_c032/test_entry_c032.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 32) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.c b/api-tests/dev_apis/crypto/test_c033/test_c033.c index c3b60096..f1dc46d5 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_c033.c +++ b/api-tests/dev_apis/crypto/test_c033/test_c033.c @@ -35,35 +35,32 @@ int32_t psa_cipher_decrypt_setup_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - const uint8_t *key_data; - psa_key_policy_t policy; + const uint8_t *key_data; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + /* Set the key data buffer to the input base on algorithm */ for (i = 0; i < num_checks; i++) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - memset(&operation, 0, sizeof(operation)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -84,7 +81,7 @@ int32_t psa_cipher_decrypt_setup_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -92,42 +89,40 @@ int32_t psa_cipher_decrypt_setup_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set the key for a multipart symmetric decryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); /* Whether setup succeeded or failed, abort must succeed. * Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); if (check1[i].expected_status != PSA_SUCCESS) { status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -137,7 +132,6 @@ int32_t psa_cipher_decrypt_setup_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -145,20 +139,10 @@ int32_t psa_cipher_decrypt_setup_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&operation, 0, sizeof(operation)); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_cipher_decrypt_setup - Invalid key handle\n", g_test_count++); /* Set the key for a multipart symmetric decryption operation */ @@ -173,21 +157,6 @@ int32_t psa_cipher_decrypt_setup_negative_test(security_t caller) 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - val->print(PRINT_TEST, "[Check %d] Test psa_cipher_decrypt_setup - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Set the key for a multipart symmetric decryption operation */ - status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, - check2[i].key_handle, check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.h b/api-tests/dev_apis/crypto/test_c033/test_c033.h index 7a0befb9..5e2aa85b 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_c033.h +++ b/api-tests/dev_apis/crypto/test_c033/test_c033.h @@ -18,9 +18,9 @@ #define _TEST_C033_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c033) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c033) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c033/test_data.h b/api-tests/dev_apis/crypto/test_c033/test_data.h index 82cc1097..c44e8ed5 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_data.h +++ b/api-tests/dev_apis/crypto/test_c033/test_data.h @@ -17,8 +17,6 @@ #include "val_crypto.h" -#define EMPTY_KEY_SLOT 31 - typedef struct { char test_desc[75]; psa_key_handle_t key_handle; @@ -276,7 +274,7 @@ static test_data check1[] = { PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_cipher_decrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_cipher_decrypt_setup - RSA keypair\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 1193, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, PSA_ERROR_INVALID_ARGUMENT @@ -295,7 +293,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 {"Test psa_cipher_decrypt_setup - EC keypair\n", 15, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, 224, PSA_ERROR_INVALID_ARGUMENT }, diff --git a/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c b/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c index a979d304..7a97fb30 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c +++ b/api-tests/dev_apis/crypto/test_c033/test_entry_c033.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 33) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.c b/api-tests/dev_apis/crypto/test_c034/test_c034.c index 97c5bee7..eb0f7d81 100644 --- a/api-tests/dev_apis/crypto/test_c034/test_c034.c +++ b/api-tests/dev_apis/crypto/test_c034/test_c034.c @@ -36,9 +36,15 @@ int32_t psa_cipher_generate_iv_test(security_t caller) uint32_t i, j, iv_sum; uint8_t iv[32]; size_t iv_length; - psa_key_policy_t policy; psa_cipher_operation_t operation; int32_t status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,58 +56,45 @@ int32_t psa_cipher_generate_iv_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Generate an IV for a symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_GENERATE_IV, &operation, iv, check1[i].iv_size, &iv_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); continue; } /* Check that if generated iv length match the expected length */ - TEST_ASSERT_EQUAL(iv_length, check1[i].expected_iv_length, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(iv_length, check1[i].expected_iv_length, TEST_CHECKPOINT_NUM(8)); iv_sum = 0; for (j = 0; j < iv_length; j++) @@ -109,23 +102,26 @@ int32_t psa_cipher_generate_iv_test(security_t caller) iv_sum += iv[j]; } - /* Check that if generated iv are zero */ - TEST_ASSERT_NOT_EQUAL(iv_sum, 0, TEST_CHECKPOINT_NUM(11)); + /* Check that if generated iv are not zero */ + TEST_ASSERT_NOT_EQUAL(iv_sum, 0, TEST_CHECKPOINT_NUM(9)); /* Generating an IV for a symmetric encryption operation using the same operator * should fail */ status = val->crypto_function(VAL_CRYPTO_CIPHER_GENERATE_IV, &operation, iv, check1[i].iv_size, &iv_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.h b/api-tests/dev_apis/crypto/test_c034/test_c034.h index 3d1211a6..7e94b95f 100644 --- a/api-tests/dev_apis/crypto/test_c034/test_c034.h +++ b/api-tests/dev_apis/crypto/test_c034/test_c034.h @@ -18,9 +18,9 @@ #define _TEST_C034_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c034) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c034) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c b/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c index c86a67df..b568dafb 100644 --- a/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c +++ b/api-tests/dev_apis/crypto/test_c034/test_entry_c034.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 34) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.c b/api-tests/dev_apis/crypto/test_c035/test_c035.c index 010b2756..5d6e5c57 100644 --- a/api-tests/dev_apis/crypto/test_c035/test_c035.c +++ b/api-tests/dev_apis/crypto/test_c035/test_c035.c @@ -34,8 +34,14 @@ int32_t psa_cipher_set_iv_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - psa_key_policy_t policy; psa_cipher_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -47,57 +53,47 @@ int32_t psa_cipher_set_iv_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Set an IV for a symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv, check1[i].iv_size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); /* Setting an IV for a symmetric encryption operation using the same operator * should fail for both previous success and failure cases */ status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv, check1[i].iv_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.h b/api-tests/dev_apis/crypto/test_c035/test_c035.h index d4cf6f8f..aeda8b9d 100644 --- a/api-tests/dev_apis/crypto/test_c035/test_c035.h +++ b/api-tests/dev_apis/crypto/test_c035/test_c035.h @@ -18,9 +18,9 @@ #define _TEST_C035_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c035) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c035) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c b/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c index a37200fc..1c628ebf 100644 --- a/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c +++ b/api-tests/dev_apis/crypto/test_c035/test_entry_c035.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 35) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.c b/api-tests/dev_apis/crypto/test_c036/test_c036.c index bf5969a9..ac236f98 100644 --- a/api-tests/dev_apis/crypto/test_c036/test_c036.c +++ b/api-tests/dev_apis/crypto/test_c036/test_c036.c @@ -32,15 +32,20 @@ client_test_t test_c036_crypto_list[] = { static int g_test_count = 1; static uint8_t input[SIZE_32B]; static uint8_t output[SIZE_32B]; -static psa_cipher_operation_t operation; int32_t psa_cipher_update_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; size_t length; - psa_key_policy_t policy; - psa_cipher_operation_t invalid_operation; + psa_cipher_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -50,91 +55,74 @@ int32_t psa_cipher_update_test(security_t caller) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); memset(&operation, 0, sizeof(operation)); - memset(&invalid_operation, 0, sizeof(invalid_operation)); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT) { /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); } else if (check1[i].usage == PSA_KEY_USAGE_DECRYPT) { status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } /* Set an IV for a symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv, check1[i].iv_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Encrypt or decrypt a message fragment in an active cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, check1[i].input, check1[i].input_length, output, check1[i].output_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); continue; } /* Check if the output length matches the expected length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(10)); /* Check if the output data matches the expected data */ - TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(13)); - - /* Encrypt or decrypt a message fragment in an invalid cipher operation should fail */ - status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &invalid_operation, - check1[i].input, check1[i].input_length, output, check1[i].output_size, - &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(11)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.h b/api-tests/dev_apis/crypto/test_c036/test_c036.h index 61fe7e53..583c97dc 100644 --- a/api-tests/dev_apis/crypto/test_c036/test_c036.h +++ b/api-tests/dev_apis/crypto/test_c036/test_c036.h @@ -18,9 +18,9 @@ #define _TEST_C036_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c036) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c036) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c b/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c index f46a6b3c..d7b09df2 100644 --- a/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c +++ b/api-tests/dev_apis/crypto/test_c036/test_entry_c036.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 36) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.c b/api-tests/dev_apis/crypto/test_c037/test_c037.c index 8a7fdc88..01b0b346 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_c037.c +++ b/api-tests/dev_apis/crypto/test_c037/test_c037.c @@ -38,8 +38,14 @@ int32_t psa_cipher_finish_test(security_t caller) int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; size_t update_length, finish_length; - psa_key_policy_t policy; psa_cipher_operation_t operation, invalid_operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -49,102 +55,91 @@ int32_t psa_cipher_finish_test(security_t caller) { val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); memset(&operation, 0, sizeof(operation)); - memset(&invalid_operation, 0, sizeof(invalid_operation)); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT) { /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); } else if (check1[i].usage == PSA_KEY_USAGE_DECRYPT) { /* Set the key for a multipart symmetric decryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } /* Set an IV for a symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, check1[i].iv, check1[i].iv_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Encrypt or decrypt a message fragment in an active cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, check1[i].input, check1[i].input_length, output, check1[i].output_size[SLOT_1], &update_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Finish encrypting or decrypting a message in a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_FINISH, &operation, output + update_length, check1[i].output_size[SLOT_2], &finish_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); if (check1[i].expected_status != PSA_SUCCESS) { /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); continue; } /* Check if the output length matches the expected length */ - TEST_ASSERT_EQUAL(finish_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(finish_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(11)); /* Check if the output data matches the expected data */ TEST_ASSERT_MEMCMP(output, check1[i].expected_output, (update_length + finish_length), - TEST_CHECKPOINT_NUM(14)); + TEST_CHECKPOINT_NUM(12)); /* Finish encrypting or decrypting a message using an invalid operation should fail */ status = val->crypto_function(VAL_CRYPTO_CIPHER_FINISH, &invalid_operation, output, check1[i].output_size[SLOT_2], &finish_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &invalid_operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.h b/api-tests/dev_apis/crypto/test_c037/test_c037.h index e7e1bdaa..e74afeff 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_c037.h +++ b/api-tests/dev_apis/crypto/test_c037/test_c037.h @@ -18,9 +18,9 @@ #define _TEST_C037_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c037) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c037) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c b/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c index 7732adb4..7cbcab20 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c +++ b/api-tests/dev_apis/crypto/test_c037/test_entry_c037.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 37) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.c b/api-tests/dev_apis/crypto/test_c038/test_c038.c index 54b4b7d5..c4d6bd95 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_c038.c +++ b/api-tests/dev_apis/crypto/test_c038/test_c038.c @@ -35,8 +35,14 @@ int32_t psa_cipher_abort_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - psa_key_policy_t policy; psa_cipher_operation_t operation; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -48,32 +54,19 @@ int32_t psa_cipher_abort_test(security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (check1[i].usage == PSA_KEY_USAGE_ENCRYPT) { @@ -101,6 +94,9 @@ int32_t psa_cipher_abort_test(security_t caller) /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -109,7 +105,6 @@ int32_t psa_cipher_abort_test(security_t caller) int32_t psa_cipher_abort_before_update_test(security_t caller) { size_t length; - psa_key_policy_t policy; psa_algorithm_t key_alg = PSA_ALG_CBC_NO_PADDING; psa_key_usage_t usage = PSA_KEY_USAGE_ENCRYPT; psa_key_handle_t key_handle = 13; @@ -125,6 +120,7 @@ int32_t psa_cipher_abort_before_update_test(security_t caller) size_t input_length = sizeof(input); size_t iv_size = sizeof(iv); int32_t status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -134,52 +130,44 @@ int32_t psa_cipher_abort_before_update_test(security_t caller) val->print(PRINT_TEST, "Test psa_cipher_update after psa_cipher_abort should fail\n", 0); memset(&operation, 0, sizeof(operation)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, usage, key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, key_handle, - key_type, key_data, key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + key_length, &key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, key_handle, key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Set an IV for a symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_SET_IV, &operation, iv, iv_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Encrypt or decrypt a message fragment in an active cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_UPDATE, &operation, input, input_length, output, SIZE_32B, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.h b/api-tests/dev_apis/crypto/test_c038/test_c038.h index 6d6e5f01..0bbabd97 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_c038.h +++ b/api-tests/dev_apis/crypto/test_c038/test_c038.h @@ -18,9 +18,9 @@ #define _TEST_C038_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c038) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c038) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c b/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c index d027adae..fdbbce11 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c +++ b/api-tests/dev_apis/crypto/test_c038/test_entry_c038.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 38) #define TEST_DESC "Testing crypto symmetric cipher APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.c b/api-tests/dev_apis/crypto/test_c039/test_c039.c index 30a833e1..d93b33c6 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_c039.c +++ b/api-tests/dev_apis/crypto/test_c039/test_c039.c @@ -48,10 +48,16 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - const uint8_t *key_data; - uint8_t *salt; + const uint8_t *key_data; + uint8_t *salt; size_t length; - psa_key_policy_t policy; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -62,25 +68,16 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - memset(output, 0, sizeof(output)); /* Set the key data based on key type */ if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -105,7 +102,7 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -113,19 +110,15 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE) { @@ -139,19 +132,19 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT, check1[i].key_handle, check1[i].key_alg, check1[i].input, check1[i].input_length, salt, check1[i].salt_length, output, check1[i].output_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); continue; } /* Check if the output length matches with the expected output length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6)); /* We test encryption by checking that encrypt-then-decrypt gives back * the original plaintext because of the non-optional random @@ -161,18 +154,21 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT, check1[i].key_handle, check1[i].key_alg, output, length, salt, check1[i].salt_length, output, check1[i].output_size, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Check if the output length matches with the input length */ - TEST_ASSERT_EQUAL(length, check1[i].input_length, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(length, check1[i].input_length, TEST_CHECKPOINT_NUM(8)); /* Check if the output matches with the given input data */ - TEST_ASSERT_MEMCMP(output, check1[i].input, length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_MEMCMP(output, check1[i].input, length, TEST_CHECKPOINT_NUM(9)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -182,9 +178,8 @@ int32_t psa_asymmetric_encrypt_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; - uint8_t *salt; + uint8_t *salt = NULL; size_t length; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -192,18 +187,17 @@ int32_t psa_asymmetric_encrypt_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); + if (is_buffer_empty(check2[i].salt, check2[i].salt_length) == TRUE) + { + salt = NULL; + check2[i].salt_length = 0; + } + else + salt = check2[i].salt; val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Invalid key handle\n", g_test_count++); @@ -220,31 +214,6 @@ int32_t psa_asymmetric_encrypt_negative_test(security_t caller) check2[i].key_alg, check2[i].input, check2[i].input_length, salt, check2[i].salt_length, output, check2[i].output_size, &length); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_encrypt - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE) - { - salt = NULL; - check1[i].salt_length = 0; - } - else - salt = check1[i].salt; - - /* Encrypt a short message with a public key */ - status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_ENCRYPT, check2[i].key_handle, - check2[i].key_alg, check2[i].input, check2[i].input_length, salt, - check2[i].salt_length, output, check2[i].output_size, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.h b/api-tests/dev_apis/crypto/test_c039/test_c039.h index 27d74972..065918d4 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_c039.h +++ b/api-tests/dev_apis/crypto/test_c039/test_c039.h @@ -18,9 +18,9 @@ #define _TEST_C039_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c039) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c039) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c039/test_data.h b/api-tests/dev_apis/crypto/test_c039/test_data.h index 5bb5109c..79dd42a0 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_data.h +++ b/api-tests/dev_apis/crypto/test_c039/test_data.h @@ -158,7 +158,7 @@ static test_data check1[] = { #endif #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT -{"Test psa_asymmetric_encrypt - RSA KEYPAIR PKCS1V15\n", 4, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_encrypt - RSA KEY_PAIR PKCS1V15\n", 4, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, @@ -167,7 +167,7 @@ static test_data check1[] = { 128, 1024, PSA_SUCCESS }, -{"Test psa_asymmetric_encrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_encrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, @@ -227,7 +227,7 @@ static test_data check1[] = { } {"Test psa_asymmetric_encrypt - ECC keypair\n", 10, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 97, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256), {0}, 0, {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, diff --git a/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c b/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c index 323f1738..6f638dec 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c +++ b/api-tests/dev_apis/crypto/test_c039/test_entry_c039.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 39) #define TEST_DESC "Testing crypto asymmetric APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.c b/api-tests/dev_apis/crypto/test_c040/test_c040.c index 760ab197..8dba0df2 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_c040.c +++ b/api-tests/dev_apis/crypto/test_c040/test_c040.c @@ -51,7 +51,13 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) const uint8_t *key_data; uint8_t *salt; size_t length; - psa_key_policy_t policy; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -62,25 +68,16 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - - /* Setting up the watchdog timer for each check */ + /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - memset(output, 0, sizeof(output)); /* Set the key data based on key type */ if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -105,7 +102,7 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -113,19 +110,15 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE) { @@ -159,6 +152,9 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); } return VAL_STATUS_SUCCESS; @@ -170,7 +166,6 @@ int32_t psa_asymmetric_decrypt_negative_test(security_t caller) int32_t i, status; uint8_t *salt; size_t length; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -178,18 +173,18 @@ int32_t psa_asymmetric_decrypt_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); + if (is_buffer_empty(check2[i].salt, check2[i].salt_length) == TRUE) + { + salt = NULL; + check2[i].salt_length = 0; + } + else + salt = check1[i].salt; val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Invalid key handle\n", g_test_count++); @@ -206,31 +201,6 @@ int32_t psa_asymmetric_decrypt_negative_test(security_t caller) check2[i].key_alg, check2[i].input, check2[i].input_length, salt, check2[i].salt_length, output, check2[i].output_size, &length); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_decrypt - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - if (is_buffer_empty(check1[i].salt, check1[i].salt_length) == TRUE) - { - salt = NULL; - check1[i].salt_length = 0; - } - else - salt = check1[i].salt; - - /* Encrypt a short message with a public key */ - status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT, check2[i].key_handle, - check2[i].key_alg, check2[i].input, check2[i].input_length, salt, - check2[i].salt_length, output, check2[i].output_size, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.h b/api-tests/dev_apis/crypto/test_c040/test_c040.h index ebb8f5b0..4aa592ad 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_c040.h +++ b/api-tests/dev_apis/crypto/test_c040/test_c040.h @@ -18,9 +18,9 @@ #define _TEST_C040_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c040) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c040) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c040/test_data.h b/api-tests/dev_apis/crypto/test_c040/test_data.h index c6bc2487..371d2300 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_data.h +++ b/api-tests/dev_apis/crypto/test_c040/test_data.h @@ -125,7 +125,7 @@ static const uint8_t rsa_128_keypair[] = { static test_data check1[] = { #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT -{"Test psa_asymmetric_decrypt - RSA KEYPAIR PKCS1V15\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - RSA KEY_PAIR PKCS1V15\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7, @@ -148,7 +148,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_SHA256 #ifdef ARCH_TEST_RSA_OAEP -{"Test psa_asymmetric_decrypt - RSA KEYPAIR OAEP SHA256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - RSA KEY_PAIR OAEP SHA256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_OAEP(PSA_ALG_SHA_256), {0}, 0, {0x3d, 0x31, 0x46, 0xb1, 0xc9, 0x82, 0x00, 0x42, 0x73, 0xa9, 0xeb, 0xb9, 0xb0, @@ -166,8 +166,8 @@ static test_data check1[] = { 0, 1024, PSA_SUCCESS }, -{"Test psa_asymmetric_decrypt - RSA KEYPAIR OAEP SHA256 with label\n", 3, - PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - RSA KEY_PAIR OAEP SHA256 with label\n", 3, + PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_OAEP(PSA_ALG_SHA_256), {0x74, 0x68, 0x69, 0x73, 0x00, 0x69, 0x73, 0x00, 0x61, 0x00, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x00}, 16, @@ -210,7 +210,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, 0, 1024, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_asymmetric_decrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7, @@ -232,7 +232,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #endif #ifdef ARCH_TEST_SHA256 -{"Test psa_asymmetric_decrypt - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_SHA_256, {0}, 0, {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7, @@ -279,7 +279,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #endif #ifdef ARCH_TEST_RSA_1024 -{"Test psa_asymmetric_decrypt - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7, @@ -305,7 +305,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, static test_data check2[] = { #ifdef ARCH_TEST_RSA_PKCS1V15_CRYPT #ifdef ARCH_TEST_RSA_1024 -{"Test psa_asymmetric_decrypt - Negative case\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_decrypt - Negative case\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_DECRYPT, PSA_ALG_RSA_PKCS1V15_CRYPT, {0}, 0, {0x99, 0xff, 0xde, 0x2f, 0xcc, 0x00, 0xc9, 0xcc, 0x01, 0x97, 0x2e, 0xbf, 0xa7, diff --git a/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c b/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c index 7b36aedc..8744acad 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c +++ b/api-tests/dev_apis/crypto/test_c040/test_entry_c040.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 40) #define TEST_DESC "Testing crypto asymmetric APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.c b/api-tests/dev_apis/crypto/test_c041/test_c041.c index 101e16a0..ea343f33 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_c041.c +++ b/api-tests/dev_apis/crypto/test_c041/test_c041.c @@ -37,7 +37,13 @@ int32_t psa_asymmetric_sign_test(security_t caller) int32_t i, status; const uint8_t *key_data; size_t length; - psa_key_policy_t policy; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -48,25 +54,15 @@ int32_t psa_asymmetric_sign_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - memset(signature, 0, sizeof(signature)); /* Set the key data based on key type */ if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -91,7 +87,7 @@ int32_t psa_asymmetric_sign_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -99,25 +95,21 @@ int32_t psa_asymmetric_sign_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Sign a hash or short message with a private key */ status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN, check1[i].key_handle, check1[i].key_alg, check1[i].input, check1[i].input_length, signature, check1[i].signature_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { @@ -129,14 +121,14 @@ int32_t psa_asymmetric_sign_test(security_t caller) } /* Check if the output length matches with the expected length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(5)); /* Check if the output matches with the expected data */ - TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(6)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; @@ -147,7 +139,6 @@ int32_t psa_asymmetric_sign_negative_test(security_t caller) int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; size_t length; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -155,19 +146,10 @@ int32_t psa_asymmetric_sign_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_sign - Invalid key handle\n", g_test_count++); /* Sign a hash or short message with a private key */ @@ -183,23 +165,6 @@ int32_t psa_asymmetric_sign_negative_test(security_t caller) check2[i].key_alg, check2[i].input, check2[i].input_length, signature, check2[i].signature_size, &length); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_sign - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Sign a hash or short message with a private key */ - status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_SIGN, check2[i].key_handle, - check2[i].key_alg, check2[i].input, check2[i].input_length, - signature, check2[i].signature_size, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.h b/api-tests/dev_apis/crypto/test_c041/test_c041.h index 11f8074a..326bed66 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_c041.h +++ b/api-tests/dev_apis/crypto/test_c041/test_c041.h @@ -18,9 +18,9 @@ #define _TEST_C041_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c041) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c041) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c041/test_data.h b/api-tests/dev_apis/crypto/test_c041/test_data.h index cecccb6c..8c596e1a 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_data.h +++ b/api-tests/dev_apis/crypto/test_c041/test_data.h @@ -112,7 +112,7 @@ static const uint8_t rsa_128_keypair[] = { static test_data check1[] = { #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_sign - RSA KEYPAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, 128, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -131,7 +131,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN #ifdef ARCH_TEST_SHA256 -{"Test psa_asymmetric_sign - RSA KEYPAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - RSA KEY_PAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -156,7 +156,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_DETERMINISTIC_ECDSA #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 {"Test psa_asymmetric_sign - ECDSA SECP256R1 SHA-256\n", 3, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32, PSA_KEY_USAGE_SIGN, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256), {0x9a, 0xc4, 0x33, 0x5b, 0x46, 0x9b, 0xbd, 0x79, 0x14, 0x39, 0x24, 0x85, 0x04, 0xdd, 0x0d, 0x49, 0xc7, 0x13, 0x49, 0xa2, 0x95, 0xfe, 0xe5, 0xa1, 0xc6, 0x85, @@ -192,7 +192,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, 128, 1024, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_asymmetric_sign - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -211,7 +211,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, }, #endif -{"Test psa_asymmetric_sign - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_SHA_256, {0x61, 0x62, 0x63}, 3, 128, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -253,7 +253,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_sign - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, 128, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -272,7 +272,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN #ifdef ARCH_TEST_SHA256 -{"Test psa_asymmetric_sign - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -297,7 +297,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, static test_data check2[] = { #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_sign - Negative case\n", 10, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_sign - Negative case\n", 10, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_SIGN, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, 128, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, diff --git a/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c b/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c index dd70f13e..9edd9f62 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c +++ b/api-tests/dev_apis/crypto/test_c041/test_entry_c041.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 41) #define TEST_DESC "Testing crypto asymmetric APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.c b/api-tests/dev_apis/crypto/test_c042/test_c042.c index 43ed5ecd..d511f2af 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_c042.c +++ b/api-tests/dev_apis/crypto/test_c042/test_c042.c @@ -35,7 +35,13 @@ int32_t psa_asymmetric_verify_test(security_t caller) int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; const uint8_t *key_data; - psa_key_policy_t policy; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -46,23 +52,14 @@ int32_t psa_asymmetric_verify_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - /* Set the key data based on key type */ if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -87,7 +84,7 @@ int32_t psa_asymmetric_verify_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -95,29 +92,25 @@ int32_t psa_asymmetric_verify_test(security_t caller) else key_data = check1[i].key_data; - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Verify the signature a hash or short message using a public key */ status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check1[i].key_handle, check1[i].key_alg, check1[i].input, check1[i].input_length, check1[i].signature, check1[i].signature_size); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); /* Destroy a key and restore the slot to its default state */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } return VAL_STATUS_SUCCESS; @@ -127,7 +120,6 @@ int32_t psa_asymmetric_verify_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; - psa_key_policy_t policy; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -138,21 +130,10 @@ int32_t psa_asymmetric_verify_negative_test(security_t caller) val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Invalid key handle\n", g_test_count++); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Invalid key handle\n", - g_test_count++); /* Verify the signature a hash or short message using a public key */ status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check2[i].key_handle, check2[i].key_alg, check2[i].input, check2[i].input_length, @@ -167,22 +148,6 @@ int32_t psa_asymmetric_verify_negative_test(security_t caller) check2[i].signature, check2[i].signature_size); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - val->print(PRINT_TEST, "[Check %d] Test psa_asymmetric_verify - Empty key handle\n", - g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Verify the signature a hash or short message using a public key */ - status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_VERIFY, check2[i].key_handle, - check2[i].key_alg, check2[i].input, check2[i].input_length, - check2[i].signature, check2[i].signature_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.h b/api-tests/dev_apis/crypto/test_c042/test_c042.h index b6c2f615..fb9c83a9 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_c042.h +++ b/api-tests/dev_apis/crypto/test_c042/test_c042.h @@ -18,9 +18,9 @@ #define _TEST_C042_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c042) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c042) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/dev_apis/crypto/test_c042/test_data.h b/api-tests/dev_apis/crypto/test_c042/test_data.h index 53a4ea60..5f8592ce 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_data.h +++ b/api-tests/dev_apis/crypto/test_c042/test_data.h @@ -117,7 +117,7 @@ static const uint8_t rsa_128_keypair[] = { static test_data check1[] = { #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_verify - RSA KEYPAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 RAW\n", 1, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -136,7 +136,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN #ifdef ARCH_TEST_SHA256 -{"Test psa_asymmetric_verify - RSA KEYPAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - RSA KEY_PAIR PKCS1V15 SHA-256\n", 2, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -160,8 +160,8 @@ static test_data check1[] = { #ifdef ARCH_TEST_SHA256 #ifdef ARCH_TEST_DETERMINISTIC_ECDSA #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_asymmetric_verify - ECDSA KEYPAIR SECP256R1 SHA-256\n", 3, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32, +{"Test psa_asymmetric_verify - ECDSA KEY_PAIR SECP256R1 SHA-256\n", 3, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 32, PSA_KEY_USAGE_VERIFY, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256), {0x9a, 0xc4, 0x33, 0x5b, 0x46, 0x9b, 0xbd, 0x79, 0x14, 0x39, 0x24, 0x85, 0x04, 0xdd, 0x0d, 0x49, 0xc7, 0x13, 0x49, 0xa2, 0x95, 0xfe, 0xe5, 0xa1, 0xc6, 0x85, @@ -197,7 +197,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, 128, 1024, PSA_SUCCESS }, -{"Test psa_asymmetric_verify - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - Small output buffer\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -216,7 +216,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, }, #endif -{"Test psa_asymmetric_verify - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - Invalid algorithm\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_SHA_256, {0x61, 0x62, 0x63}, 3, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -258,7 +258,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_verify - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - Invalid usage\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, @@ -277,7 +277,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN #ifdef ARCH_TEST_SHA256 -{"Test psa_asymmetric_verify - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - Wrong hash size\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_SHA_256), {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, @@ -353,7 +353,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, static test_data check2[] = { #ifdef ARCH_TEST_RSA_1024 #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -{"Test psa_asymmetric_verify - Negative case\n", 13, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_asymmetric_verify - Negative case\n", 13, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 610, PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, {0x61, 0x62, 0x63}, 3, {0x2c, 0x77, 0x44, 0x98, 0x3f, 0x02, 0x3a, 0xc7, 0xbb, 0x1c, 0x55, 0x52, 0x9d, diff --git a/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c b/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c index 7687142f..176c9373 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c +++ b/api-tests/dev_apis/crypto/test_c042/test_entry_c042.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 42) #define TEST_DESC "Testing crypto asymmetric APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.c b/api-tests/dev_apis/crypto/test_c043/test_c043.c index c61aad40..a9d16c80 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_c043.c +++ b/api-tests/dev_apis/crypto/test_c043/test_c043.c @@ -1,4 +1,3 @@ - /** @file * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 @@ -23,21 +22,26 @@ client_test_t test_c043_crypto_list[] = { NULL, - psa_key_agreement_test, - psa_key_agreement_negative_test, + psa_raw_key_agreement_test, + psa_raw_key_agreement_negative_test, NULL, }; static int g_test_count = 1; static uint8_t output[SIZE_50B]; -int32_t psa_key_agreement_test(security_t caller) +int32_t psa_raw_key_agreement_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; - size_t capacity; - psa_key_policy_t policy; - psa_crypto_generator_t generator = {0}; + size_t output_length; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -48,70 +52,37 @@ int32_t psa_key_agreement_test(security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, check1[i].key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); /* Set up a key agreement operation */ - status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator, + status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check1[i].key_alg, check1[i].key_handle, check1[i].peer_key, check1[i].peer_key_length, - check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + output, check1[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - /* Destroy a key and restore the slot to its default state */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); continue; } - /* Retrieve the current capacity of a generator */ - status = val->crypto_function(VAL_CRYPTO_GET_GENERATOR_CAPACITY, &generator, &capacity); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); - - /* Check if the generator capacity matches with the expected capacity */ - TEST_ASSERT_EQUAL(capacity, check1[i].expected_capacity, TEST_CHECKPOINT_NUM(10)); - - /* Read some data from a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_READ, &generator, output, - check1[i].expected_output_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - - /* Check if the output matches with the expected data */ - TEST_ASSERT_MEMCMP(output, check1[i].expected_output, check1[i].expected_output_length, - TEST_CHECKPOINT_NUM(12)); - - /* Abort a generator */ - status = val->crypto_function(VAL_CRYPTO_GENERATOR_ABORT, &generator); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length, + TEST_CHECKPOINT_NUM(7)); /* Destroy a key and restore the slot to its default state */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); @@ -121,12 +92,11 @@ int32_t psa_key_agreement_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_key_agreement_negative_test(security_t caller) +int32_t psa_raw_key_agreement_negative_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; - psa_key_policy_t policy; - psa_crypto_generator_t generator = {0}; + size_t output_length; /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -134,53 +104,27 @@ int32_t psa_key_agreement_negative_test(security_t caller) for (i = 0; i < num_checks; i++) { - val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Invalid key handle\n", - g_test_count++); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Invalid key handle\n", + val->print(PRINT_TEST, "[Check %d] Test psa_raw_key_agreement - Invalid key handle\n", g_test_count++); /* Set up a key agreement operation */ - status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator, + status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg, check2[i].key_handle, check2[i].peer_key, check2[i].peer_key_length, - check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); - - val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Zero as key handle\n", - g_test_count++); - /* Set up a key agreement operation */ - status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator, - 0, check2[i].peer_key, check2[i].peer_key_length, - check2[i].key_alg); + output, check2[i].output_size, &output_length); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); - val->print(PRINT_TEST, "[Check %d] Test psa_key_agreement - Empty key handle\n", + val->print(PRINT_TEST, "[Check %d] Test psa_raw_key_agreement - Zero as key handle\n", g_test_count++); - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check2[i].key_handle, - &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Set up a key agreement operation */ - status = val->crypto_function(VAL_CRYPTO_KEY_AGREEMENT, &generator, - check2[i].key_handle, check2[i].peer_key, check2[i].peer_key_length, - check2[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(7)); + status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg, + 0, check2[i].peer_key, check2[i].peer_key_length, + output, check2[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.h b/api-tests/dev_apis/crypto/test_c043/test_c043.h index 0192b6e6..ec64a531 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_c043.h +++ b/api-tests/dev_apis/crypto/test_c043/test_c043.h @@ -18,14 +18,14 @@ #define _TEST_C043_CLIENT_TESTS_H_ #include "val_crypto.h" -#define test_entry CONCAT(test_entry_,c043) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, c043) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c043_crypto_list[]; -int32_t psa_key_agreement_test(security_t caller); -int32_t psa_key_agreement_negative_test(security_t caller); +int32_t psa_raw_key_agreement_test(security_t caller); +int32_t psa_raw_key_agreement_negative_test(security_t caller); #endif /* _TEST_C043_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c043/test_data.h b/api-tests/dev_apis/crypto/test_c043/test_data.h index e2d100fc..b319e22d 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_data.h +++ b/api-tests/dev_apis/crypto/test_c043/test_data.h @@ -29,7 +29,7 @@ typedef struct { size_t peer_key_length; uint8_t expected_output[48]; size_t expected_output_length; - size_t expected_capacity; + size_t output_size; psa_status_t expected_status; } test_data; @@ -37,11 +37,11 @@ typedef struct { static test_data check1[] = { #ifdef ARCH_TEST_ECDH #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_key_agreement - ECDH SECP256R1\n", 1, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - ECDH SECP256R1\n", 1, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, - 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH, {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, @@ -52,16 +52,33 @@ static test_data check1[] = { 0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24, 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_SUCCESS }, + +{"Test psa_raw_key_agreement - Small buffer size\n", 1, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), +{0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, + 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH, +{0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, + 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, + 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, + 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, + 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, + 65, +{0xd6, 0x84, 0x0f, 0x6b, 0x42, 0xf6, 0xed, 0xaf, 0xd1, 0x31, 0x16, 0xe0, 0xe1, + 0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24, + 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 10, PSA_ERROR_INVALID_ARGUMENT +}, + #endif #ifdef ARCH_TEST_ECC_CURVE_SECP384R1 -{"Test psa_key_agreement - ECDH SECP384R1\n", 2, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP384R1), +{"Test psa_raw_key_agreement - ECDH SECP384R1\n", 2, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP384R1), {0x09, 0x9f, 0x3c, 0x70, 0x34, 0xd4, 0xa2, 0xc6, 0x99, 0x88, 0x4d, 0x73, 0xa3, 0x75, 0xa6, 0x7f, 0x76, 0x24, 0xef, 0x7c, 0x6b, 0x3c, 0x0f, 0x16, 0x06, 0x47, 0xb6, 0x74, 0x14, 0xdc, 0xe6, 0x55, 0xe3, 0x5b, 0x53, 0x80, 0x41, 0xe6, 0x49, 0xee, 0x3f, 0xae, 0xf8, 0x96, 0x78, 0x3a, 0xb1, 0x94}, 48, PSA_KEY_USAGE_DERIVE, - PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + PSA_ALG_ECDH, {0x04, 0xe5, 0x58, 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a, 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17, @@ -79,11 +96,11 @@ static test_data check1[] = { #endif #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_key_agreement - Invalid usage\n", 3, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - Invalid usage\n", 3, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, - 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDH, {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, @@ -95,11 +112,12 @@ static test_data check1[] = { 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_NOT_PERMITTED }, -{"Test psa_key_agreement - Unknown KDF\n", 4, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - Unknown KDF\n", 4, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, - 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(0), + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, + PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_HASH_ALG_INVALID), {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, @@ -108,7 +126,7 @@ static test_data check1[] = { 65, {0xd6, 0x84, 0x0f, 0x6b, 0x42, 0xf6, 0xed, 0xaf, 0xd1, 0x31, 0x16, 0xe0, 0xe1, 0x25, 0x65, 0x20, 0x2f, 0xef, 0x8e, 0x9e, 0xce, 0x7d, 0xce, 0x03, 0x81, 0x24, - 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_NOT_SUPPORTED + 0x64, 0xd0, 0x4b, 0x94, 0x42, 0xde}, 32, 32, PSA_ERROR_INVALID_ARGUMENT }, #endif #endif @@ -116,8 +134,8 @@ static test_data check1[] = { #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 #ifdef ARCH_TEST_SHA256 #ifdef ARCH_TEST_HKDF -{"Test psa_key_agreement - Not a key agreement alg\n", 5, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - Not a key agreement alg\n", 5, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_HKDF(PSA_ALG_SHA_256), @@ -135,11 +153,11 @@ static test_data check1[] = { #endif #ifdef ARCH_TEST_ECDH -{"Test psa_key_agreement - Public key on different curve\n", 6, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - Public key on different curve\n", 6, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, - 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH, {0x04, 0xe5, 0x58, 0xdb, 0xef, 0x53, 0xee, 0xcd, 0xe3, 0xd3, 0xfc, 0xcf, 0xc1, 0xae, 0xa0, 0x8a, 0x89, 0xa9, 0x87, 0x47, 0x5d, 0x12, 0xfd, 0x95, 0x0d, 0x83, 0xcf, 0xa4, 0x17, @@ -152,14 +170,14 @@ static test_data check1[] = { {0}, 0, 0, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_key_agreement - Public key instead of private key\n", 7, +{"Test psa_raw_key_agreement - Public key instead of private key\n", 7, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, - 65, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + 65, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH, {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, @@ -174,11 +192,11 @@ static test_data check1[] = { static test_data check2[] = { #ifdef ARCH_TEST_ECDH #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_key_agreement - Negative case\n", 8, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP256R1), +{"Test psa_raw_key_agreement - Negative case\n", 8, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0xc8, 0x8f, 0x01, 0xf5, 0x10, 0xd9, 0xac, 0x3f, 0x70, 0xa2, 0x92, 0xda, 0xa2, 0x31, 0x6d, 0xe5, 0x44, 0xe9, 0xaa, 0xb8, 0xaf, 0xe8, 0x40, 0x49, 0xc6, 0x2a, - 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH(PSA_ALG_SELECT_RAW), + 0x9c, 0x57, 0x86, 0x2d, 0x14, 0x33}, 32, PSA_KEY_USAGE_DERIVE, PSA_ALG_ECDH, {0x04, 0xd1, 0x2d, 0xfb, 0x52, 0x89, 0xc8, 0xd4, 0xf8, 0x12, 0x08, 0xb7, 0x02, 0x70, 0x39, 0x8c, 0x34, 0x22, 0x96, 0x97, 0x0a, 0x0b, 0xcc, 0xb7, 0x4c, 0x73, 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, diff --git a/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c b/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c index b1ba5e3d..05e493b1 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c +++ b/api-tests/dev_apis/crypto/test_c043/test_entry_c043.c @@ -20,7 +20,8 @@ #include "test_c043.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 43) -#define TEST_DESC "Testing crypto generator APIs\n" +#define TEST_DESC "Testing crypto key derivation APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.c b/api-tests/dev_apis/crypto/test_c044/test_c044.c index aa597895..e528d41d 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_c044.c +++ b/api-tests/dev_apis/crypto/test_c044/test_c044.c @@ -24,7 +24,6 @@ client_test_t test_c044_crypto_list[] = { NULL, psa_copy_key_test, - psa_copy_key_negative_test, NULL, }; @@ -33,16 +32,23 @@ static uint8_t data[BUFFER_SIZE]; int32_t psa_copy_key_test(security_t caller) { - uint32_t length, i; - const uint8_t *key_data; - psa_key_policy_t policy, target_policy, constraint; - psa_key_handle_t target_handle = 0; - psa_key_type_t key_type, target_type; - psa_algorithm_t expected_key_alg; - psa_key_usage_t expected_usage; - size_t bits, target_bits; - int num_checks = sizeof(check1)/sizeof(check1[0]); - int32_t status, export_status; + uint32_t length, i; + const uint8_t *key_data; + psa_key_handle_t target_handle = 0; + psa_key_usage_t get_key_usage_flags; + psa_algorithm_t get_key_algorithm; + size_t get_key_bits; + psa_key_type_t get_key_type; + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t status, export_status; + psa_key_attributes_t source_attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t target_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } /* Initialize the PSA crypto library*/ status = val->crypto_function(VAL_CRYPTO_INIT); @@ -58,14 +64,10 @@ int32_t psa_copy_key_test(security_t caller) status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) { - if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEYPAIR) + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) { if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) key_data = rsa_384_keypair; @@ -86,7 +88,7 @@ int32_t psa_copy_key_test(security_t caller) } else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - if (PSA_KEY_TYPE_IS_ECC_KEYPAIR(check1[i].key_type)) + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) key_data = ec_keypair; else key_data = ec_keydata; @@ -94,208 +96,101 @@ int32_t psa_copy_key_test(security_t caller) else key_data = check1[i].key_data; - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check1[i].usage, - check1[i].key_alg); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, check1[i].key_handle, &policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &source_attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &source_attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &source_attributes, check1[i].usage); /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check1[i].key_handle, - check1[i].key_type, key_data, check1[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, check1[i].key_handle, - &key_type, &bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &target_policy, - check1[i].target_usage, check1[i].target_key_alg); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &source_attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &constraint); + /* Setup the attributes for the target key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &target_attributes, + check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &target_attributes, + check1[i].target_key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &target_attributes, + check1[i].target_usage); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &constraint, - check1[i].constraint_usage, check1[i].constraint_key_alg); /* Make a copy of a key */ - status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle, target_handle, - &constraint); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); - - if (check1[i].expected_status != PSA_SUCCESS) - continue; + status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle, + &target_attributes, &target_handle); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); - /* Destroy the source to ensure that this doesn't affect the target */ + /* Destroy the source key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); - - /* Get basic metadata about a key */ - status = val->crypto_function(VAL_CRYPTO_GET_KEY_INFORMATION, target_handle, - &target_type, &target_bits); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); - TEST_ASSERT_EQUAL(target_type, key_type, TEST_CHECKPOINT_NUM(12)); - TEST_ASSERT_EQUAL(target_bits, bits, TEST_CHECKPOINT_NUM(13)); + if (check1[i].expected_status != PSA_SUCCESS) + { + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &source_attributes); + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &target_attributes); - status = val->crypto_function(VAL_CRYPTO_GET_KEY_POLICY, target_handle, &target_policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + continue; + } - val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_USAGE, &target_policy, &expected_usage); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM, &target_policy, - &expected_key_alg); + /* Check if the target key attributes is as expected */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, target_handle, + &target_attributes); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - TEST_ASSERT_EQUAL(expected_usage, check1[i].expected_usage, TEST_CHECKPOINT_NUM(15)); - TEST_ASSERT_EQUAL(expected_key_alg, check1[i].expected_key_alg, TEST_CHECKPOINT_NUM(16)); + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &target_attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(7)); - if (expected_usage & PSA_KEY_USAGE_EXPORT) - export_status = PSA_SUCCESS; - else - export_status = PSA_ERROR_NOT_PERMITTED; + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &target_attributes, + &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].expected_usage, TEST_CHECKPOINT_NUM(8)); - /* Export a key in binary format */ - status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_handle, data, - BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, export_status, TEST_CHECKPOINT_NUM(17)); + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &target_attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].expected_key_alg, TEST_CHECKPOINT_NUM(9)); - if (export_status != PSA_SUCCESS) - continue; + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &target_attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(10)); - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(18)); + /* Export a key in binary format */ + export_status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, target_handle, data, + BUFFER_SIZE, &length); - if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) + if (!(check1[i].expected_usage & PSA_KEY_USAGE_EXPORT)) { - TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(19)); - } - else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) - { - TEST_ASSERT_MEMCMP(data, key_data, length, TEST_CHECKPOINT_NUM(20)); + export_status = PSA_ERROR_NOT_PERMITTED; } else { - return VAL_STATUS_INVALID; - } - - /* Destroy the key */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(21)); - } - - return VAL_STATUS_SUCCESS; -} - -int32_t psa_copy_key_negative_test(security_t caller) -{ - int num_checks = sizeof(check2)/sizeof(check2[0]); - int32_t i, status; - psa_key_policy_t policy, target_policy, constraint; - psa_key_handle_t target_handle; - - /* Initialize the PSA crypto library*/ - status = val->crypto_function(VAL_CRYPTO_INIT); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); - - for (i = 0; i < num_checks; i++) - { - val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with unallocated target key slot\n", - g_test_count++); - - /* Setting up the watchdog timer for each check */ - status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); - - /* Allocate a key slot for a transient key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); - - /* Initialize a key policy structure to a default that forbids all - * usage of the key - */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &policy); - memset(&target_handle, 0xDEADDEAD, sizeof(target_handle)); - - /* Set the usage policy on a key slot */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &policy, check2[i].usage, - check2[i].key_alg); - - /* Import the key data into the key slot */ - status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, check2[i].key_handle, - check2[i].key_type, check2[i].key_data, check2[i].key_length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &constraint); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &constraint, - check2[i].constraint_usage, check2[i].constraint_key_alg); - - /* Make a copy of a key with unallocated target handle*/ - status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle, - &constraint); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5)); - - val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with target containing key material\n", - g_test_count++); - val->crypto_function(VAL_CRYPTO_KEY_POLICY_INIT, &target_policy); - - /* Allocate a key slot for a target key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); - - /* Set the standard fields of a policy structure */ - val->crypto_function(VAL_CRYPTO_KEY_POLICY_SET_USAGE, &target_policy, - check2[i].target_usage, check2[i].target_key_alg); - - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); - - /* Make a copy of a key */ - status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle, - &constraint); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + /* Check if the target key data is same as source data */ + export_status = PSA_SUCCESS; + TEST_ASSERT_EQUAL(status, export_status, TEST_CHECKPOINT_NUM(11)); - /* Make a copy of a key in the existing target slot*/ - status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle, - &constraint); - TEST_ASSERT_EQUAL(status, PSA_ERROR_ALREADY_EXISTS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(12)); - val->print(PRINT_TEST, "[Check %d] Test psa_copy_key with no source handle\n", - g_test_count++); - /* Destroy the contents of source and target slots */ - status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check2[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) + { + TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(13)); + } + else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) + || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) + { + TEST_ASSERT_MEMCMP(data, key_data, length, TEST_CHECKPOINT_NUM(14)); + } + else + { + return VAL_STATUS_INVALID; + } + } + /* Destroy the target key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, target_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); - - /* Allocate a key slot for a target key */ - status = val->crypto_function(VAL_CRYPTO_ALLOCATE_KEY, &target_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); - /* Set the usage policy on a key slot */ - status = val->crypto_function(VAL_CRYPTO_SET_KEY_POLICY, target_handle, &target_policy); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + /* Copy on a destroyed source should be an error */ + status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check1[i].key_handle, + &target_attributes, &target_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(16)); - /* Make a copy of a key with no source material*/ - status = val->crypto_function(VAL_CRYPTO_COPY_KEY, check2[i].key_handle, target_handle, - &constraint); - TEST_ASSERT_EQUAL(status, PSA_ERROR_DOES_NOT_EXIST, TEST_CHECKPOINT_NUM(14)); + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &source_attributes); + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &target_attributes); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.h b/api-tests/dev_apis/crypto/test_c044/test_c044.h index f187d3b0..ac4a474c 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_c044.h +++ b/api-tests/dev_apis/crypto/test_c044/test_c044.h @@ -27,5 +27,4 @@ extern psa_api_t *psa; extern client_test_t test_c044_crypto_list[]; int32_t psa_copy_key_test(security_t caller); -int32_t psa_copy_key_negative_test(security_t caller); #endif /* _TEST_C044_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c044/test_data.h b/api-tests/dev_apis/crypto/test_c044/test_data.h index 47786db8..e5dd430c 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_data.h +++ b/api-tests/dev_apis/crypto/test_c044/test_data.h @@ -25,11 +25,9 @@ typedef struct { uint32_t key_length; psa_key_usage_t usage; psa_key_usage_t target_usage; - psa_key_usage_t constraint_usage; psa_key_usage_t expected_usage; psa_algorithm_t key_alg; psa_algorithm_t target_key_alg; - psa_algorithm_t constraint_key_alg; psa_algorithm_t expected_key_alg; uint32_t expected_bit_length; uint32_t expected_key_length; @@ -173,33 +171,46 @@ static test_data check1[] = { {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, AES_16B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS }, + +{"Test psa_copy_key without copy usage\n", 2, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, + PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_PERMITTED +}, #endif #ifdef ARCH_TEST_AES_192 -{"Test psa_copy_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, +{"Test psa_copy_key 24 Byte AES\n", 3, PSA_KEY_TYPE_AES, {0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, AES_24B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_AES_256 -{"Test psa_copy_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, +{"Test psa_copy_key 32 Byte AES\n", 4, PSA_KEY_TYPE_AES, {0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, AES_32B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_DECRYPT, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_DECRYPT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS }, #endif @@ -207,52 +218,56 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW #ifdef ARCH_TEST_RSA_2048 -{"Test psa_copy_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, +{"Test psa_copy_key 2048 RSA public key\n", 5, PSA_KEY_TYPE_RSA_PUBLIC_KEY, {0}, 270, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_ENCRYPT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, 270, PSA_SUCCESS }, -{"Test psa_copy_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_copy_key with RSA 2048 keypair\n", 6, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 1193, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY, PSA_KEY_USAGE_EXPORT, - PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_VERIFY, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, 1193, PSA_SUCCESS }, {"Test psa_copy_key with Incompatible target policy(source and target)\n", - 12, PSA_KEY_TYPE_RSA_KEYPAIR, + 7, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 1193, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), PSA_ALG_RSA_PSS(PSA_ALG_ANY_HASH), - -1, -1, + -1, 2048, 1193, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_copy_key with Incompatible constraint\n", 6, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_copy_key with Incompatible constraint\n", 8, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 1193, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_ANY_HASH), PSA_ALG_RSA_PSS(PSA_ALG_ANY_HASH), -1, 2048, 1193, PSA_ERROR_INVALID_ARGUMENT }, -{"Test psa_copy_key with unexport source key usage\n", 7, PSA_KEY_TYPE_RSA_KEYPAIR, +{"Test psa_copy_key with unexport source key usage\n", 9, PSA_KEY_TYPE_RSA_KEY_PAIR, {0}, 1193, - PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_EXPORT, - PSA_KEY_USAGE_EXPORT, 0, - PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_SIGN, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + PSA_ALG_RSA_PKCS1V15_SIGN_RAW, 2048, 1193, PSA_SUCCESS }, @@ -261,34 +276,37 @@ static test_data check1[] = { #ifdef ARCH_TEST_CIPER_MODE_CTR #ifdef ARCH_TEST_DES_1KEY -{"Test psa_copy_key with DES 64 bit key\n", 8, PSA_KEY_TYPE_DES, +{"Test psa_copy_key with DES 64 bit key\n", 10, PSA_KEY_TYPE_DES, {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, DES_8B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_2KEY -{"Test psa_copy_key with Triple DES 2-Key\n", 9, PSA_KEY_TYPE_DES, +{"Test psa_copy_key with Triple DES 2-Key\n", 11, PSA_KEY_TYPE_DES, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, DES3_2KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_3KEY -{"Test psa_copy_key with Triple DES 3-Key\n", 10, PSA_KEY_TYPE_DES, +{"Test psa_copy_key with Triple DES 3-Key\n", 12, PSA_KEY_TYPE_DES, {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, DES3_3KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS }, #endif @@ -296,23 +314,25 @@ static test_data check1[] = { #ifdef ARCH_TEST_ECDSA #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 -{"Test psa_copy_key with EC Public key\n", 11, +{"Test psa_copy_key with EC Public key\n", 13, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, 256, 65, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 -{"Test psa_copy_key with EC keypair\n", 12, - PSA_KEY_TYPE_ECC_KEYPAIR(PSA_ECC_CURVE_SECP224R1), +{"Test psa_copy_key with EC keypair\n", 14, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), {0}, 28, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, PSA_ALG_ECDSA_ANY, 224, 28, PSA_SUCCESS }, #endif @@ -320,29 +340,15 @@ static test_data check1[] = { #ifdef ARCH_TEST_CIPER_MODE_CTR #ifdef ARCH_TEST_AES -{"Test psa_copy_key with Incompatible target policy\n", 13, PSA_KEY_TYPE_AES, +{"Test psa_copy_key with Incompatible target policy\n", 15, PSA_KEY_TYPE_AES, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, AES_16B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_KEY_USAGE_COPY | PSA_KEY_USAGE_EXPORT, + PSA_ALG_CTR, PSA_ALG_CBC_NO_PADDING, PSA_ALG_CBC_NO_PADDING, BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT }, #endif #endif }; - -static test_data check2[] = { -#ifdef ARCH_TEST_CIPER_MODE_CTR -#ifdef ARCH_TEST_AES_128 -{"Test psa_copy_key negative cases\n", 14, PSA_KEY_TYPE_AES, -{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, - 0x5F, 0xC9, 0x77}, - AES_16B_KEY_SIZE, - PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, PSA_KEY_USAGE_EXPORT, - PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, PSA_ALG_CTR, - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS -}, -#endif -#endif -}; diff --git a/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c b/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c index 7eebc5c4..64499fe5 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c +++ b/api-tests/dev_apis/crypto/test_c044/test_entry_c044.c @@ -21,6 +21,7 @@ #define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 44) #define TEST_DESC "Testing crypto key management APIs\n" + TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/dev_apis/crypto/test_c045/test.cmake b/api-tests/dev_apis/crypto/test_c045/test.cmake new file mode 100644 index 00000000..d84ebb68 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c045/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c045.c + test_c045.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.c b/api-tests/dev_apis/crypto/test_c045/test_c045.c new file mode 100644 index 00000000..99b04238 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c045/test_c045.c @@ -0,0 +1,112 @@ +/** @file + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c045.h" +#include "test_data.h" +#include "val_crypto.h" + +client_test_t test_c045_crypto_list[] = { + NULL, + psa_hash_clone_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_hash_clone_test(security_t caller) +{ + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + const char *expected_hash; + char hash[HASH_64B]; + size_t hash_length, hash_size = sizeof(hash); + psa_hash_operation_t source_operation = PSA_HASH_OPERATION_INIT; + psa_hash_operation_t target_operation = PSA_HASH_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + if (check1[i].alg == PSA_ALG_SHA_384) + expected_hash = sha384_hash; + else if (check1[i].alg == PSA_ALG_SHA_512) + expected_hash = sha512_hash; + else + expected_hash = check1[i].hash; + + /* Start a multipart hash operation */ + status = val->crypto_function(VAL_CRYPTO_HASH_SETUP, &source_operation, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Clone a hash operation */ + status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Add a message fragment to a multipart hash source_operation */ + status = val->crypto_function(VAL_CRYPTO_HASH_UPDATE, &target_operation, + &check1[i].input, check1[i].input_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Cloning to an active hash operation should be an error*/ + status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6)); + + /* Finish the calculation of the hash of a message */ + status = val->crypto_function(VAL_CRYPTO_HASH_FINISH, &target_operation, hash, hash_size, + &hash_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + continue; + } + + TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(9)); + + /*Abort the hash operation */ + status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &source_operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &target_operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Cloning on an aborted operator should be an error */ + status = val->crypto_function(VAL_CRYPTO_HASH_CLONE, &source_operation, &target_operation); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.h b/api-tests/dev_apis/crypto/test_c045/test_c045.h new file mode 100644 index 00000000..75f63da6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c045/test_c045.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C045_CLIENT_TESTS_H_ +#define _TEST_C045_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c045) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c045_crypto_list[]; + +int32_t psa_hash_clone_test(security_t caller); +#endif /* _TEST_C045_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c045/test_data.h b/api-tests/dev_apis/crypto/test_c045/test_data.h new file mode 100644 index 00000000..55eff9f8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c045/test_data.h @@ -0,0 +1,115 @@ +/** @file + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[50]; + psa_algorithm_t alg; + char input; + size_t input_length; + char hash[32]; + size_t hash_length; + psa_status_t expected_status; +} test_data; + +static const char sha384_hash[] = { +0x43, 0x72, 0xe3, 0x8a, 0x92, 0xa2, 0x8b, 0x5d, 0x2c, 0x39, 0x1e, 0x62, +0x45, 0x2a, 0x86, 0xd5, 0x0e, 0x02, 0x67, 0x22, 0x8b, 0xe1, 0x76, 0xc7, 0x7d, 0x24, 0x02, 0xef, +0xfe, 0x9f, 0xa5, 0x0d, 0xe4, 0x07, 0xbb, 0xb8, 0x51, 0xb3, 0x7d, 0x59, 0x04, 0xab, 0xa2, 0xde, +0xde, 0x74, 0xda, 0x2a}; + +static const char sha512_hash[] = { +0x29, 0x6e, 0x22, 0x67, 0xd7, 0x4c, 0x27, 0x8d, 0xaa, 0xaa, 0x94, 0x0d, +0x17, 0xb0, 0xcf, 0xb7, 0x4a, 0x50, 0x83, 0xf8, 0xe0, 0x69, 0x72, 0x6d, 0x8c, 0x84, 0x1c, 0xbe, +0x59, 0x6e, 0x04, 0x31, 0xcb, 0x77, 0x41, 0xa5, 0xb5, 0x0f, 0x71, 0x66, 0x6c, 0xfd, 0x54, 0xba, +0xcb, 0x7b, 0x00, 0xae, 0xa8, 0x91, 0x49, 0x9c, 0xf4, 0xef, 0x6a, 0x03, 0xc8, 0xa8, 0x3f, 0xe3, +0x7c, 0x3f, 0x7b, 0xaf}; + +static test_data check1[] = { +#ifdef ARCH_TEST_MD2 +{"Test psa_hash_clone with MD2 algorithm\n", + PSA_ALG_MD2, 0xbd, 1, + {0x8c, 0x9c, 0x17, 0x66, 0x5d, 0x25, 0xb3, 0x5f, 0xc4, 0x13, 0xc4, 0x18, 0x05, 0xc6, 0x79, 0xcf}, + 16, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_MD4 +{"Test psa_hash_clone with MD4 algorithm\n", + PSA_ALG_MD4, 0xbd, 1, + {0x18, 0xc3, 0x3f, 0x97, 0x29, 0x7e, 0xfe, 0x5f, 0x8a, 0x73, 0x22, 0x58, 0x28, 0x9f, 0xda, 0x25}, + 16, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_MD5 +{"Test psa_hash_clone with MD5 algorithm\n", + PSA_ALG_MD5, 0xbd, 1, + {0xab, 0xae, 0x57, 0xcb, 0x56, 0x2e, 0xcf, 0x29, 0x5b, 0x4a, 0x37, 0xa7, 0x6e, 0xfe, 0x61, 0xfb}, + 16, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_RIPEMD160 +{"Test psa_hash_clone with RIPEMD160 algorithm\n", + PSA_ALG_RIPEMD160, 0xbd, 1, + {0x50, 0x89, 0x26, 0x5e, 0xe5, 0xd9, 0xaf, 0x75, 0xd1, 0x2d, 0xbf, 0x7e, 0xa2, 0xf2, 0x7d, 0xbd, + 0xee, 0x43, 0x5b, 0x37}, + 20, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_SHA1 +{"Test psa_hash_clone with SHA1 algorithm\n", + PSA_ALG_SHA_1, 0xbd, 1, + {0x90, 0x34, 0xaa, 0xf4, 0x51, 0x43, 0x99, 0x6a, 0x2b, 0x14, 0x46, 0x5c, 0x35, 0x2a, 0xb0, 0xc6, + 0xfa, 0x26, 0xb2, 0x21}, + 20, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_SHA224 +{"Test psa_hash_clone with SHA224 algorithm\n", + PSA_ALG_SHA_224, 0xbd, 1, + {0xb1, 0xe4, 0x6b, 0xb9, 0xef, 0xe4, 0x5a, 0xf5, 0x54, 0x36, 0x34, 0x49, 0xc6, 0x94, 0x5a, 0x0d, + 0x61, 0x69, 0xfc, 0x3a, 0x5a, 0x39, 0x6a, 0x56, 0xcb, 0x97, 0xcb, 0x57}, + 28, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_SHA256 +{"Test psa_hash_clone with SHA256 algorithm\n", + PSA_ALG_SHA_256, 0xbd, 1, + {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d, 0x05, 0x70, + 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b}, + 32, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_SHA384 +{"Test psa_hash_clone with SHA384 algorithm\n", + PSA_ALG_SHA_384, 0xbd, 1, {0}, 48, PSA_SUCCESS, +}, +#endif + +#ifdef ARCH_TEST_SHA512 +{"Test psa_hash_clone with SHA512 algorithm\n", + PSA_ALG_SHA_512, 0xbd, 1, {0}, 64, PSA_SUCCESS, +}, +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c b/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c new file mode 100644 index 00000000..091008dd --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c045/test_entry_c045.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c045.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 45) +#define TEST_DESC "Testing crypto hash functions APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c045_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c046/test.cmake b/api-tests/dev_apis/crypto/test_c046/test.cmake new file mode 100644 index 00000000..26737106 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c046/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c046.c + test_c046.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.c b/api-tests/dev_apis/crypto/test_c046/test_c046.c new file mode 100644 index 00000000..e7ba526d --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c046/test_c046.c @@ -0,0 +1,108 @@ + +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c046.h" +#include "test_data.h" + +client_test_t test_c046_crypto_list[] = { + NULL, + psa_mac_compute_test, + NULL, +}; + +static int g_test_count = 1; +static uint8_t data[BUFFER_SIZE]; + +int32_t psa_mac_compute_test(security_t caller) +{ + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + size_t length; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + memset(data, 0, sizeof(data)); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Calculate the MAC (message authentication code) of a message */ + status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, check1[i].key_handle, + check1[i].key_alg, check1[i].data, check1[i].data_size, data, + check1[i].mac_size, &length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + continue; + } + + /* Check if the MAC length matches with the expected length */ + TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(6)); + + /* Check if the MAC data matches with the expected data */ + TEST_ASSERT_MEMCMP(check1[i].expected_data, data, length, TEST_CHECKPOINT_NUM(7)); + + memset(data, 0, sizeof(data)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + status = val->crypto_function(VAL_CRYPTO_MAC_COMPUTE, check1[i].key_handle, + check1[i].key_alg, check1[i].data, check1[i].data_size, data, + check1[i].mac_size, &length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.h b/api-tests/dev_apis/crypto/test_c046/test_c046.h new file mode 100644 index 00000000..3fbe0547 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c046/test_c046.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C046_CLIENT_TESTS_H_ +#define _TEST_C046_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c046) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c046_crypto_list[]; + +int32_t psa_mac_compute_test(security_t caller); +#endif /* _TEST_C046_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c046/test_data.h b/api-tests/dev_apis/crypto/test_c046/test_data.h new file mode 100644 index 00000000..5ab7070b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c046/test_data.h @@ -0,0 +1,179 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[64]; + uint32_t key_length; + uint8_t data[16]; + size_t data_size; + uint8_t expected_data[64]; + size_t mac_size; + size_t expected_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_HMAC +#ifdef ARCH_TEST_SHA224 +{"Test psa_mac_compute HMAC SHA 224\n", 1, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_224), + PSA_SUCCESS +}, + +{"Test psa_mac_compute - Incompactible HMAC for CMAC\n", 2, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC, + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_compute - Invalid usage\n", 3, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_EXPORT, PSA_ALG_HMAC(PSA_ALG_SHA_224), + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_compute - truncated MAC too small\n", 4, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1), + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_compute - truncated MAC too large\n", 5, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33), + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_mac_compute - bad algorithm (unknown MAC algorithm)\n", 6, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 64, 28, + PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(0), + PSA_ERROR_NOT_SUPPORTED +}, +#endif + +#ifdef ARCH_TEST_SHA256 +{"Test psa_mac_compute HMAC SHA 256\n", 7, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 64, 32, + PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_256), + PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_SHA512 +{"Test psa_mac_compute HMAC SHA 512\n", 8, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, 0x4f, 0xf0, 0xb4, 0x24, 0x1a, + 0x1d, 0x6c, 0xb0, 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, 0x7a, 0xd0, + 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, + 0x02, 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4, 0xbe, 0x9d, 0x91, 0x4e, + 0xeb, 0x61, 0xf1, 0x70, 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54}, 64, 64, + PSA_KEY_USAGE_SIGN, PSA_ALG_HMAC(PSA_ALG_SHA_512), + PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_SHA224 +{"Test psa_mac_compute HMAC SHA 224 (truncated to 8 Byte)\n", 9, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68}, 64, 8, + PSA_KEY_USAGE_SIGN, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8), + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CMAC +#ifdef ARCH_TEST_AES_128 +{"Test psa_mac_compute CMAC AES 128\n", 10, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, 16, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A, + 0xE7, 0xE0, 0x77}, 64, 16, + PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC, + PSA_SUCCESS +}, + +{"Test psa_mac_compute small size buffer\n", 11, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, 16, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A, + 0xE7, 0xE0, 0x77}, 8, 16, + PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC, + PSA_ERROR_BUFFER_TOO_SMALL +}, +#endif + +{"Test psa_mac_compute - Invalid key type\n", 12, PSA_KEY_TYPE_RAW_DATA, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, 16, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A, + 0xE7, 0xE0, 0x77}, 64, 16, + PSA_KEY_USAGE_SIGN, PSA_ALG_CMAC, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c b/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c new file mode 100644 index 00000000..3116fd02 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c046/test_entry_c046.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c046.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 46) +#define TEST_DESC "Testing crypto MAC APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c046_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c047/test.cmake b/api-tests/dev_apis/crypto/test_c047/test.cmake new file mode 100644 index 00000000..aea8705e --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c047/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c047.c + test_c047.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.c b/api-tests/dev_apis/crypto/test_c047/test_c047.c new file mode 100644 index 00000000..a28c9c6f --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c047/test_c047.c @@ -0,0 +1,90 @@ + +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c047.h" +#include "test_data.h" + +client_test_t test_c047_crypto_list[] = { + NULL, + psa_mac_verify_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_mac_verify_test(security_t caller) +{ + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Calculate the MAC of a message and compare it with a reference value */ + status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, check1[i].key_handle, + check1[i].key_alg, check1[i].data, check1[i].data_size, + check1[i].expected_mac, check1[i].mac_size); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Calculate the MAC of a message on a destroyed key handle should be an error */ + status = val->crypto_function(VAL_CRYPTO_MAC_VERIFY, check1[i].key_handle, + check1[i].key_alg, check1[i].data, check1[i].data_size, + check1[i].expected_mac, check1[i].mac_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.h b/api-tests/dev_apis/crypto/test_c047/test_c047.h new file mode 100644 index 00000000..8c47a82d --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c047/test_c047.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C047_CLIENT_TESTS_H_ +#define _TEST_C047_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c047) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c047_crypto_list[]; + +int32_t psa_mac_verify_test(security_t caller); +#endif /* _TEST_C047_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c047/test_data.h b/api-tests/dev_apis/crypto/test_c047/test_data.h new file mode 100644 index 00000000..e94b27f3 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c047/test_data.h @@ -0,0 +1,197 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[64]; + uint32_t key_length; + uint8_t data[16]; + size_t data_size; + uint8_t expected_mac[64]; + size_t mac_size; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_HMAC +#ifdef ARCH_TEST_SHA224 +{"Test psa_mac_verify HMAC SHA 224\n", 1, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x22}, 28, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_224), + PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_SHA256 +{"Test psa_mac_verify HMAC SHA 256\n", 2, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256), + PSA_SUCCESS +}, + +{"Test psa_mac_verify - Incompactible HMAC for CMAC\n", 3, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC, + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_verify - Invalid usage\n", 4, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_EXPORT, PSA_ALG_HMAC(PSA_ALG_SHA_256), + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_verify - Truncated MAC too large\n", 5, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 33), + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_mac_verify - Truncated MAC too small\n", 6, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_256), 1), + PSA_ERROR_NOT_SUPPORTED +}, + +{"Test psa_mac_verify - bad algorithm (unknown MAC algorithm)\n", 7, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 32, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(0), + PSA_ERROR_NOT_SUPPORTED +}, + +#endif + +#ifdef ARCH_TEST_SHA512 +{"Test psa_mac_verify HMAC SHA 512\n", 8, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, 0x4f, 0xf0, 0xb4, 0x24, 0x1a, + 0x1d, 0x6c, 0xb0, 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, 0x7a, 0xd0, + 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, + 0x02, 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4, 0xbe, 0x9d, 0x91, 0x4e, + 0xeb, 0x61, 0xf1, 0x70, 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54}, 64, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_512), + PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_SHA224 +{"Test psa_mac_verify HMAC SHA 224 (truncated to 8 Byte)\n", 9, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68}, 8, + PSA_KEY_USAGE_VERIFY, PSA_ALG_TRUNCATED_MAC(PSA_ALG_HMAC(PSA_ALG_SHA_224), 8), + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CMAC +{"Test psa_mac_verify CMAC AES 128\n", 10, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, 16, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A, + 0xE7, 0xE0, 0x77}, 16, + PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC, + PSA_SUCCESS +}, +#endif +#endif + +{"Test psa_mac_verify - Invalid key type\n", 11, PSA_KEY_TYPE_RAW_DATA, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, 16, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x9A, 0x8F, 0xFF, 0x8D, 0xA3, 0x5B, 0x97, 0xCB, 0x4C, 0x95, 0xF0, 0xFA, 0x6A, + 0xE7, 0xE0, 0x77}, 16, + PSA_KEY_USAGE_VERIFY, PSA_ALG_CMAC, + PSA_ERROR_INVALID_ARGUMENT +}, + +#ifdef ARCH_TEST_HMAC +#ifdef ARCH_TEST_SHA256 +{"Test psa_mac_verify small size buffer\n", 12, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, + 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, + 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, 30, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_256), + PSA_ERROR_INVALID_SIGNATURE +}, +#endif + +#ifdef ARCH_TEST_SHA224 +{"Test psa_mac_verify incorrect expected MAC\n", 13, PSA_KEY_TYPE_HMAC, +{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 20, +{0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65}, 8, +{0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, 0x68, 0x32, 0x10, 0x7c, 0xd4, + 0x9d, 0xf3, 0x3f, 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, 0x53, 0x68, + 0x4b, 0x20}, 28, + PSA_KEY_USAGE_VERIFY, PSA_ALG_HMAC(PSA_ALG_SHA_224), + PSA_ERROR_INVALID_SIGNATURE +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c b/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c new file mode 100644 index 00000000..5ce7733b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c047/test_entry_c047.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c047.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 47) +#define TEST_DESC "Testing crypto MAC APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c047_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c048/test.cmake b/api-tests/dev_apis/crypto/test_c048/test.cmake new file mode 100644 index 00000000..81879237 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c048/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c048.c + test_c048.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.c b/api-tests/dev_apis/crypto/test_c048/test_c048.c new file mode 100644 index 00000000..8ae030b6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c048/test_c048.c @@ -0,0 +1,100 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c048.h" +#include "test_data.h" + +client_test_t test_c048_crypto_list[] = { + NULL, + psa_cipher_encrypt_test, + NULL, +}; + +static int g_test_count = 1; +static uint8_t output[SIZE_32B]; + +int32_t psa_cipher_encrypt_test(security_t caller) +{ + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + size_t output_length; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Encrypt a message using a symmetric cipher */ + status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, check1[i].key_handle, + check1[i].key_alg, check1[i].input, check1[i].input_length, output, + check1[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + if (check1[i].expected_status != PSA_SUCCESS) + continue; + + /* Check if the output length matches the expected length */ + TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6)); + + /* Check if the output data matches the expected data */ + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length, + TEST_CHECKPOINT_NUM(7)); + + /* Encrypt a message using a symmetric cipher on an aborted key handle should be an error */ + status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT, check1[i].key_handle, + check1[i].key_alg, check1[i].input, check1[i].input_length, output, + check1[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.h b/api-tests/dev_apis/crypto/test_c048/test_c048.h new file mode 100644 index 00000000..dbd289e6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c048/test_c048.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C048_CLIENT_TESTS_H_ +#define _TEST_C048_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c048) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c048_crypto_list[]; + +int32_t psa_cipher_encrypt_test(security_t caller); +#endif /* _TEST_C048_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c048/test_data.h b/api-tests/dev_apis/crypto/test_c048/test_data.h new file mode 100644 index 00000000..0f9abe35 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c048/test_data.h @@ -0,0 +1,162 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + uint8_t input[32]; + size_t input_length; + size_t output_size; + uint8_t expected_output[32]; + size_t expected_output_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CBC_NO_PADDING +{"Test psa_cipher_encrypt - Encrypt - AES CBC_NO_PADDING\n", 1, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 16, SIZE_32B, +{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F, + 0x20, 0x74, 0x3B}, 0, PSA_SUCCESS +}, + +{"Test psa_cipher_encrypt - Encrypt - AES CBC_NO_PADDING (Short input)\n", 2, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 5, 16, +{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 0, PSA_ERROR_INVALID_ARGUMENT +}, +#endif + +#ifdef ARCH_TEST_CBC_PKCS7 +{"Test psa_cipher_encrypt - Encrypt - AES CBC_PKCS7\n", 3, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 16, SIZE_32B, +{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f, + 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31, + 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 16, PSA_SUCCESS +}, + +{"Test psa_cipher_encrypt - Encrypt - AES CBC_PKCS7 (Short input)\n", 4, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17}, 15, SIZE_32B, +{0x62, 0x79, 0xb4, 0x9d, 0x7f, 0x7a, 0x8d, 0xd8, 0x7b, 0x68, 0x51, 0x75, 0xd4, + 0x27, 0x6e, 0x24}, 16, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_CIPER_MODE_CTR +{"Test psa_cipher_encrypt - Encrypt - AES CTR\n", 5, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 16, SIZE_32B, +{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0, + 0xb2, 0xbd, 0x32}, 0, PSA_SUCCESS +}, + +{"Test psa_cipher_encrypt - Encrypt - AES CTR (short input)\n", 6, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CTR, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17}, 15, SIZE_32B, +{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0, + 0xb2, 0xbd}, 0, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CBC_NO_PADDING +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_cipher_encrypt - Encrypt - DES CBC (nopad)\n", 7, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e}, DES_8B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B, +{0x64, 0xf9, 0x17, 0xb0, 0x15, 0x2f, 0x8f, 0x05}, 0, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_2KEY +{"Test psa_cipher_encrypt - Encrypt - 2-key 3DE -CBC (nopad)\n", 8, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8, + 0xcb, 0xcd, 0xce}, DES3_2KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B, +{0x5d, 0x06, 0x52, 0x42, 0x9c, 0x5b, 0x0a, 0xc7}, 0, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_3KEY +{"Test psa_cipher_encrypt - Encrypt - 3-key 3DE -CBC (nopad)\n", 9, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8, + 0xcb, 0xcd, 0xce, 0x31, 0x32, 0x34, 0x37, 0x38, 0x3b, 0x3d, 0x3e}, DES3_3KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 8, SIZE_32B, +{0x81, 0x7c, 0xa7, 0xd6, 0x9b, 0x80, 0xd8, 0x6a}, 0, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CBC_PKCS7 +{"Test psa_cipher_encrypt - small output buffer size\n", 10, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_PKCS7, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 16, 15, +{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f, + 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31, + 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 16, PSA_ERROR_BUFFER_TOO_SMALL +}, +#endif + +#ifdef ARCH_TEST_CBC_NO_PADDING +{"Test psa_cipher_encrypt - Decrypt - AES CBC_NO_PADDING\n", 11, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F, + 0x20, 0x74, 0x3B}, + 16, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 0, PSA_ERROR_NOT_PERMITTED +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c b/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c new file mode 100644 index 00000000..2c041946 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c048/test_entry_c048.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c048.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 48) +#define TEST_DESC "Testing crypto symmetric cipher APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c048_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c049/test.cmake b/api-tests/dev_apis/crypto/test_c049/test.cmake new file mode 100644 index 00000000..56f787a8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c049/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c049.c + test_c049.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.c b/api-tests/dev_apis/crypto/test_c049/test_c049.c new file mode 100644 index 00000000..024abd59 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c049/test_c049.c @@ -0,0 +1,99 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c049.h" +#include "test_data.h" + +client_test_t test_c049_crypto_list[] = { + NULL, + psa_cipher_decrypt_test, + NULL, +}; + +static int g_test_count = 1; +static uint8_t output[SIZE_32B]; + +int32_t psa_cipher_decrypt_test(security_t caller) +{ + int num_checks = sizeof(check1)/sizeof(check1[0]); + int32_t i, status; + size_t output_length; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Decrypt a message using a symmetric cipher */ + status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, check1[i].key_handle, + check1[i].key_alg, check1[i].input, check1[i].input_length, output, + check1[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + if (check1[i].expected_status != PSA_SUCCESS) + continue; + + /* Check if the output length matches the expected length */ + TEST_ASSERT_EQUAL(output_length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6)); + + /* Check if the output data matches the expected data */ + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, output_length, + TEST_CHECKPOINT_NUM(7)); + + status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT, check1[i].key_handle, + check1[i].key_alg, check1[i].input, check1[i].input_length, output, + check1[i].output_size, &output_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(8)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.h b/api-tests/dev_apis/crypto/test_c049/test_c049.h new file mode 100644 index 00000000..93eb0312 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c049/test_c049.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C049_CLIENT_TESTS_H_ +#define _TEST_C049_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c049) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c049_crypto_list[]; + +int32_t psa_cipher_decrypt_test(security_t caller); +#endif /* _TEST_C049_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c049/test_data.h b/api-tests/dev_apis/crypto/test_c049/test_data.h new file mode 100644 index 00000000..25983955 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c049/test_data.h @@ -0,0 +1,160 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + uint8_t input[32]; + size_t input_length; + size_t output_size; + uint8_t expected_output[32]; + size_t expected_output_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CBC_NO_PADDING +{"Test psa_cipher_decrypt - Encrypt - AES CBC_NO_PADDING\n", 1, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 16, SIZE_32B, +{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F, + 0x20, 0x74, 0x3B}, 0, PSA_ERROR_NOT_PERMITTED +}, +#endif + +#ifdef ARCH_TEST_CBC_NO_PADDING +{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING\n", 11, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F, + 0x20, 0x74, 0x3B}, + 16, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 0, PSA_SUCCESS +}, + +{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING (Short input)\n", 12, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CBC_NO_PADDING, +{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 5, 16, +{0x6b, 0xc1, 0xbe, 0xe2, 0x23}, 0, PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_cipher_decrypt - Decrypt - AES CBC_NO_PADDING\n", 2, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0xA0, 0x76, 0xEC, 0x9D, 0xFB, 0xE4, 0x7D, 0x52, 0xAF, 0xC3, 0x57, 0x33, 0x6F, + 0x20, 0x74, 0x3B}, + 16, 10, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 0, PSA_ERROR_BUFFER_TOO_SMALL +}, + +#endif + +#ifdef ARCH_TEST_CBC_PKCS7 +{"Test psa_cipher_decrypt - Decrypt - AES CBC_PKCS7\n", 13, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_PKCS7, +{0xa0, 0x76, 0xec, 0x9d, 0xfb, 0xe4, 0x7d, 0x52, 0xaf, 0xc3, 0x57, 0x33, 0x6f, + 0x20, 0x74, 0x3b, 0xca, 0x7e, 0x8a, 0x15, 0xdc, 0x3c, 0x77, 0x64, 0x36, 0x31, + 0x42, 0x93, 0x03, 0x1c, 0xd4, 0xf3}, 32, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, 0, PSA_SUCCESS +}, + +{"Test psa_cipher_decrypt - Decrypt - AES CBC_PKCS7 (Short input)\n", 14, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_PKCS7, +{0x62, 0x79, 0xb4, 0x9d, 0x7f, 0x7a, 0x8d, 0xd8, 0x7b, 0x68, 0x51, 0x75, 0xd4, + 0x27, 0x6e, 0x24}, 16, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17}, 15, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_CIPER_MODE_CTR +{"Test psa_cipher_decrypt - Decrypt - AES CTR\n", 15, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, +{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0, + 0xb2, 0xbd, 0x32}, 16, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17, 0x2a}, + 0, PSA_SUCCESS +}, + +{"Test psa_cipher_decrypt - Decrypt - AES CTR (short input)\n", 16, PSA_KEY_TYPE_AES, +{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, + 0xcf, 0x4f, 0x3c}, AES_16B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CTR, +{0x8f, 0x94, 0x08, 0xfe, 0x80, 0xa8, 0x1d, 0x3e, 0x81, 0x3d, 0xa3, 0xc7, 0xb0, + 0xb2, 0xbd}, 15, SIZE_32B, +{0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, + 0x93, 0x17}, 0, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CBC_NO_PADDING +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_cipher_decrypt - Decrypt - DES CBC (nopad)\n", 17, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e}, DES_8B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0x64, 0xf9, 0x17, 0xb0, 0x15, 0x2f, 0x8f, 0x05}, 8, SIZE_32B, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_2KEY +{"Test psa_cipher_decrypt - Decrypt - 2-key 3DE -CBC (nopad)\n", 18, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8, + 0xcb, 0xcd, 0xce}, DES3_2KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0x5d, 0x06, 0x52, 0x42, 0x9c, 0x5b, 0x0a, 0xc7}, 8, SIZE_32B, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_3KEY +{"Test psa_cipher_decrypt - 3-key 3DE -CBC (nopad)\n", 19, PSA_KEY_TYPE_DES, +{0x01, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e, 0xc1, 0xc2, 0xc4, 0xc7, 0xc8, + 0xcb, 0xcd, 0xce, 0x31, 0x32, 0x34, 0x37, 0x38, 0x3b, 0x3d, 0x3e}, DES3_3KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CBC_NO_PADDING, +{0x81, 0x7c, 0xa7, 0xd6, 0x9b, 0x80, 0xd8, 0x6a}, 8, SIZE_32B, +{0xed, 0xa4, 0x01, 0x12, 0x39, 0xbc, 0x3a, 0xc9}, 0, PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c b/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c new file mode 100644 index 00000000..1b6073d6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c049/test_entry_c049.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c049.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 49) +#define TEST_DESC "Testing crypto symmetric cipher APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c049_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c050/test.cmake b/api-tests/dev_apis/crypto/test_c050/test.cmake new file mode 100644 index 00000000..a606ed20 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c050/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c050.c + test_c050.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c new file mode 100644 index 00000000..894670ac --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c @@ -0,0 +1,241 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c050.h" +#include "test_data.h" +#include "val_crypto.h" + +client_test_t test_c050_crypto_list[] = { + NULL, + psa_open_key_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_open_key_test(security_t caller) +{ + int32_t status, i = 0; + uint8_t data[BUFFER_SIZE]; + size_t length; + const uint8_t *key_data; + psa_key_type_t get_key_type; + psa_key_usage_t get_key_usage_flags; + psa_algorithm_t get_key_algorithm; + psa_key_id_t key_id; + psa_key_handle_t key_handle; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t get_attributes = PSA_KEY_ATTRIBUTES_INIT; + boot_t boot; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + /* Get the current boot state */ + status = val->get_boot_flag(&boot.state); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* If the boot is due to controlled reset get the Check ID */ + if (boot.state == BOOT_EXPECTED_CONT_TEST_EXEC) + { + status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t)); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(3)); + } + + while (i < num_checks) + { + g_test_count = i + 1; + val->print(PRINT_TEST, "[Check %d] ", g_test_count); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the key data buffer to the input base on algorithm */ + if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) + { + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keypair; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keypair; + else + return VAL_STATUS_INVALID; + } + else + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keydata; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keydata; + else + return VAL_STATUS_INVALID; + } + } + else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) + { + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) + key_data = ec_keypair; + else + key_data = ec_keydata; + } + else + key_data = check1[i].key_data; + + /* Get the cuurent boot state */ + status = val->get_boot_flag(&boot.state); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + if (boot.state == BOOT_NOT_EXPECTED) + { + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + + if (check1[i].key_lifetime == PSA_KEY_LIFETIME_PERSISTENT) + val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &attributes, check1[i].key_id); + + val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &attributes, check1[i].key_lifetime); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Save the details of current check, key id and key handle value in NV memory */ + status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA2), &check1[i].key_id, + sizeof(psa_key_id_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA3), &check1[i].key_handle, + sizeof(psa_key_handle_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + /* Set the boot flag indicating controlled reset */ + status = val->set_boot_flag(BOOT_EXPECTED_CONT_TEST_EXEC); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Wait for system to reset */ + val->crypto_function(VAL_CRYPTO_RESET); + while (1); + } + else if (boot.state == BOOT_EXPECTED_CONT_TEST_EXEC) + { + /* Get the values of check, key id and key handle value before the system was reset */ + status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA2), &key_id, + sizeof(psa_key_id_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + status = val->nvmem_read(VAL_NVMEM_OFFSET(NV_TEST_DATA3), &key_handle, + sizeof(psa_key_handle_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Open a handle to an existing persistent key */ + status = val->crypto_function(VAL_CRYPTO_OPEN_KEY, key_id, &key_handle); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(13)); + + /* If failure is expected, save and continue with the next data set */ + if (check1[i].expected_status != PSA_SUCCESS) + { + ++i; + status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + + status = val->set_boot_flag(BOOT_NOT_EXPECTED); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(15)); + + continue; + } + + /* Get the attributes of the imported key and check if it matches the given value */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, key_handle, + &get_attributes); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(17)); + + if (check1[i].attr_bits != 0) + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, + TEST_CHECKPOINT_NUM(18)); + else + TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, + TEST_CHECKPOINT_NUM(19)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(20)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(21)); + + /* Export a key in binary format */ + status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, data, + BUFFER_SIZE, &length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(22)); + + /* Check the value of the exported key */ + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(23)); + + if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) + { + TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(24)); + } + else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) + || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) + { + TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(25)); + } + else + { + return VAL_STATUS_INVALID; + } + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Save the check ID and set boot flags */ + ++i; + status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(26)); + + status = val->set_boot_flag(BOOT_NOT_EXPECTED); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(27)); + + } + else + return VAL_STATUS_ERROR; + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.h b/api-tests/dev_apis/crypto/test_c050/test_c050.h new file mode 100644 index 00000000..4680a0ac --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C050_CLIENT_TESTS_H_ +#define _TEST_C050_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c050) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c050_crypto_list[]; + +int32_t psa_open_key_test(security_t caller); +#endif /* _TEST_C050_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c050/test_data.h b/api-tests/dev_apis/crypto/test_c050/test_data.h new file mode 100644 index 00000000..c0fdb563 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c050/test_data.h @@ -0,0 +1,276 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + psa_key_id_t key_id; + uint8_t key_data[34]; + uint32_t key_length; + size_t attr_bits; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_lifetime_t key_lifetime; + uint32_t expected_bit_length; + uint32_t expected_key_length; + psa_status_t expected_status; +} test_data; + +static const uint8_t rsa_384_keypair[1]; +static const uint8_t rsa_384_keydata[1]; + +static const uint8_t rsa_256_keypair[] = { + 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, + 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, + 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, + 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, + 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, + 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, + 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, + 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, + 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, + 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, + 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, + 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, + 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, + 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, + 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, + 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, + 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, + 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, + 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, + 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, + 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, + 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, + 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, + 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, + 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, + 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, + 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, + 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, + 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, + 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, + 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, + 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, + 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, + 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, + 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, + 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, + 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, + 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, + 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, + 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, + 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, + 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, + 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, + 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, + 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, + 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, + 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, + 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, + 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, + 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, + 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, + 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, + 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, + 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, + 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, + 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, + 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, + 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, + 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, + 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, + 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, + 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, + 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, + 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, + 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, + 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, + 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, + 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, + 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, + 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, + 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, + 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, + 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, + 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, + 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, + 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, + 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, + 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, + 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, + 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, + 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, + 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, + 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, + 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, + 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, + 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, + 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, + 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, + 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, + 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, + 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; + +static const uint8_t rsa_256_keydata[] = { + 0x30, 0x82, 0x01, 0x0A, + 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, + 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, + 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, + 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, + 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, + 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, + 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, + 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, + 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, + 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, + 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, + 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, + 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, + 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, + 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, + 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, + 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, + 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, + 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; + +static const uint8_t ec_keydata[] = { + 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, + 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, + 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, + 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, + 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; + +static const uint8_t ec_keypair[] = { + 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, + 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; + +static test_data check1[] = { +#ifdef ARCH_TEST_CIPER_MODE_CTR +#ifdef ARCH_TEST_AES_128 +{"Test psa_open_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, 0x12, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9, 0x77}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_AES_192 +{"Test psa_open_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, 0x34, +{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, + 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05}, + AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_AES_256 +{"Test psa_open_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, 0x56, +{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, + 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, + 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#ifdef ARCH_TEST_RSA_2048 +{"Test psa_open_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, 0x78, + {0}, + 270, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_KEY_LIFETIME_PERSISTENT, + 2048, 270, PSA_SUCCESS +}, + +{"Test psa_open_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, 0x89, + {0}, + 1193, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, PSA_KEY_LIFETIME_PERSISTENT, + 2048, 1193, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CIPER_MODE_CTR +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_open_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, 0x90, + {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, + DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_2KEY +{"Test psa_open_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, 0x123, +{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + DES3_2KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_3KEY +{"Test psa_open_key with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, 0x456, +{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + DES3_3KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_ECDSA +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +{"Test psa_open_key with EC Public key\n", 9, 0x789, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), + {0}, + 65, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, PSA_KEY_LIFETIME_PERSISTENT, + 256, 65, PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 +{"Test psa_open_key with EC keypair\n", 10, 0x1234, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), + {0}, + 28, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, PSA_KEY_LIFETIME_PERSISTENT, + 224, 28, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CIPER_MODE_CTR +#ifdef ARCH_TEST_AES +{"Test psa_open_key with key data greater than the algorithm size\n", 11, PSA_KEY_TYPE_AES, + 0x5678, +{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, + 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9, 0x05, 0xC9, 0xED, + 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, + AES_32B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c b/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c new file mode 100644 index 00000000..1af4e507 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c050/test_entry_c050.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c050.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 50) +#define TEST_DESC "Testing crypto key management APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c050_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c051/test.cmake b/api-tests/dev_apis/crypto/test_c051/test.cmake new file mode 100644 index 00000000..bb075102 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c051/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c051.c + test_c051.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.c b/api-tests/dev_apis/crypto/test_c051/test_c051.c new file mode 100644 index 00000000..e87dd92b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c051/test_c051.c @@ -0,0 +1,177 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c051.h" +#include "test_data.h" + +client_test_t test_c051_crypto_list[] = { + NULL, + psa_close_key_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_close_key_test(security_t caller) +{ + int32_t i, status; + const uint8_t *key_data; + psa_key_type_t get_key_type; + psa_key_id_t get_key_id; + psa_key_lifetime_t get_key_lifetime; + psa_key_usage_t get_key_usage_flags; + psa_algorithm_t get_key_algorithm; + size_t get_key_bits; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t set_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + /* Set the key data buffer to the input base on algorithm */ + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type)) + { + if (check1[i].key_type == PSA_KEY_TYPE_RSA_KEY_PAIR) + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keypair; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keypair; + else + return VAL_STATUS_INVALID; + } + else + { + if (check1[i].expected_bit_length == BYTES_TO_BITS(384)) + key_data = rsa_384_keydata; + else if (check1[i].expected_bit_length == BYTES_TO_BITS(256)) + key_data = rsa_256_keydata; + else + return VAL_STATUS_INVALID; + } + } + else if (PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) + { + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(check1[i].key_type)) + key_data = ec_keypair; + else + key_data = ec_keydata; + } + else + key_data = check1[i].key_data; + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &set_attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_BITS, &set_attributes, check1[i].attr_bits); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &set_attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ID, &set_attributes, check1[i].key_id); + val->crypto_function(VAL_CRYPTO_SET_KEY_LIFETIME, &set_attributes, check1[i].key_lifetime); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &set_attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &set_attributes, key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Close the key handle */ + status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Getting the attributes of the closed key should return error */ + status = val->crypto_function(VAL_CRYPTO_GET_KEY_ATTRIBUTES, check1[i].key_handle, + &attributes); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(5)); + + /* Check if all the attributes are erased */ + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, 0, TEST_CHECKPOINT_NUM(6)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, 0, TEST_CHECKPOINT_NUM(7)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, 0, TEST_CHECKPOINT_NUM(8)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, 0, TEST_CHECKPOINT_NUM(9)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, 0, TEST_CHECKPOINT_NUM(10)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, 0, TEST_CHECKPOINT_NUM(11)); + + /* Closing an empty key handle should return error */ + status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(12)); + + if (check1[i].key_lifetime == PSA_KEY_LIFETIME_PERSISTENT) + { + /* Open the key handle and retrieve the data */ + status = val->crypto_function(VAL_CRYPTO_OPEN_KEY, check1[i].key_id, + &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(13)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(14)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ID, &attributes, &get_key_id); + TEST_ASSERT_EQUAL(get_key_id, check1[i].key_id, TEST_CHECKPOINT_NUM(15)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_LIFETIME, &attributes, &get_key_lifetime); + TEST_ASSERT_EQUAL(get_key_lifetime, check1[i].key_lifetime, TEST_CHECKPOINT_NUM(16)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); + TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(17)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); + TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(18)); + + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, + TEST_CHECKPOINT_NUM(19)); + + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(20)); + + status = val->crypto_function(VAL_CRYPTO_CLOSE_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(21)); + } + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.h b/api-tests/dev_apis/crypto/test_c051/test_c051.h new file mode 100644 index 00000000..552d28ae --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c051/test_c051.h @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C051_CLIENT_TESTS_H_ +#define _TEST_C051_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c051) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c051_crypto_list[]; + +int32_t psa_close_key_test(security_t caller); +#endif /* _TEST_C051_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c051/test_data.h b/api-tests/dev_apis/crypto/test_c051/test_data.h new file mode 100644 index 00000000..6792a2ad --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c051/test_data.h @@ -0,0 +1,272 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[34]; + uint32_t key_length; + size_t attr_bits; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_key_id_t key_id; + psa_key_lifetime_t key_lifetime; + uint32_t expected_bit_length; + psa_status_t expected_status; +} test_data; + +static const uint8_t rsa_384_keypair[1]; +static const uint8_t rsa_384_keydata[1]; +static const uint8_t rsa_256_keypair[] = { + 0x30, 0x82, 0x04, 0xA5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, + 0x95, 0x08, 0xE1, 0x57, 0x41, 0xF2, 0x71, 0x6D, 0xB7, 0xD2, 0x45, 0x41, 0x27, + 0x01, 0x65, 0xC6, 0x45, 0xAE, 0xF2, 0xBC, 0x24, 0x30, 0xB8, 0x95, 0xCE, 0x2F, + 0x4E, 0xD6, 0xF6, 0x1C, 0x88, 0xBC, 0x7C, 0x9F, 0xFB, 0xA8, 0x67, 0x7F, 0xFE, + 0x5C, 0x9C, 0x51, 0x75, 0xF7, 0x8A, 0xCA, 0x07, 0xE7, 0x35, 0x2F, 0x8F, 0xE1, + 0xBD, 0x7B, 0xC0, 0x2F, 0x7C, 0xAB, 0x64, 0xA8, 0x17, 0xFC, 0xCA, 0x5D, 0x7B, + 0xBA, 0xE0, 0x21, 0xE5, 0x72, 0x2E, 0x6F, 0x2E, 0x86, 0xD8, 0x95, 0x73, 0xDA, + 0xAC, 0x1B, 0x53, 0xB9, 0x5F, 0x3F, 0xD7, 0x19, 0x0D, 0x25, 0x4F, 0xE1, 0x63, + 0x63, 0x51, 0x8B, 0x0B, 0x64, 0x3F, 0xAD, 0x43, 0xB8, 0xA5, 0x1C, 0x5C, 0x34, + 0xB3, 0xAE, 0x00, 0xA0, 0x63, 0xC5, 0xF6, 0x7F, 0x0B, 0x59, 0x68, 0x78, 0x73, + 0xA6, 0x8C, 0x18, 0xA9, 0x02, 0x6D, 0xAF, 0xC3, 0x19, 0x01, 0x2E, 0xB8, 0x10, + 0xE3, 0xC6, 0xCC, 0x40, 0xB4, 0x69, 0xA3, 0x46, 0x33, 0x69, 0x87, 0x6E, 0xC4, + 0xBB, 0x17, 0xA6, 0xF3, 0xE8, 0xDD, 0xAD, 0x73, 0xBC, 0x7B, 0x2F, 0x21, 0xB5, + 0xFD, 0x66, 0x51, 0x0C, 0xBD, 0x54, 0xB3, 0xE1, 0x6D, 0x5F, 0x1C, 0xBC, 0x23, + 0x73, 0xD1, 0x09, 0x03, 0x89, 0x14, 0xD2, 0x10, 0xB9, 0x64, 0xC3, 0x2A, 0xD0, + 0xA1, 0x96, 0x4A, 0xBC, 0xE1, 0xD4, 0x1A, 0x5B, 0xC7, 0xA0, 0xC0, 0xC1, 0x63, + 0x78, 0x0F, 0x44, 0x37, 0x30, 0x32, 0x96, 0x80, 0x32, 0x23, 0x95, 0xA1, 0x77, + 0xBA, 0x13, 0xD2, 0x97, 0x73, 0xE2, 0x5D, 0x25, 0xC9, 0x6A, 0x0D, 0xC3, 0x39, + 0x60, 0xA4, 0xB4, 0xB0, 0x69, 0x42, 0x42, 0x09, 0xE9, 0xD8, 0x08, 0xBC, 0x33, + 0x20, 0xB3, 0x58, 0x22, 0xA7, 0xAA, 0xEB, 0xC4, 0xE1, 0xE6, 0x61, 0x83, 0xC5, + 0xD2, 0x96, 0xDF, 0xD9, 0xD0, 0x4F, 0xAD, 0xD7, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0xD0, 0x34, 0x0F, 0x52, 0x62, 0x05, 0x50, + 0x01, 0xEF, 0x9F, 0xED, 0x64, 0x6E, 0xC2, 0xC4, 0xDA, 0x1A, 0xF2, 0x84, 0xD7, + 0x92, 0x10, 0x48, 0x92, 0xC4, 0xE9, 0x6A, 0xEB, 0x8B, 0x75, 0x6C, 0xC6, 0x79, + 0x38, 0xF2, 0xC9, 0x72, 0x4A, 0x86, 0x64, 0x54, 0x95, 0x77, 0xCB, 0xC3, 0x9A, + 0x9D, 0xB7, 0xD4, 0x1D, 0xA4, 0x00, 0xC8, 0x9E, 0x4E, 0xE4, 0xDD, 0xC7, 0xBA, + 0x67, 0x16, 0xC1, 0x74, 0xBC, 0xA9, 0xD6, 0x94, 0x8F, 0x2B, 0x30, 0x1A, 0xFB, + 0xED, 0xDF, 0x21, 0x05, 0x23, 0xD9, 0x4A, 0x39, 0xBD, 0x98, 0x6B, 0x65, 0x9A, + 0xB8, 0xDC, 0xC4, 0x7D, 0xEE, 0xA6, 0x43, 0x15, 0x2E, 0x3D, 0xBE, 0x1D, 0x22, + 0x60, 0x2A, 0x73, 0x30, 0xD5, 0x3E, 0xD8, 0xA2, 0xAC, 0x86, 0x43, 0x2E, 0xC4, + 0xF5, 0x64, 0x5E, 0x3F, 0x89, 0x75, 0x0F, 0x11, 0xD8, 0x51, 0x25, 0x4E, 0x9F, + 0xD8, 0xAA, 0xA3, 0xCE, 0x60, 0xB3, 0xE2, 0x8A, 0xD9, 0x7E, 0x1B, 0xF0, 0x64, + 0xCA, 0x9A, 0x5B, 0x05, 0x0B, 0x5B, 0xAA, 0xCB, 0xE5, 0xE3, 0x3F, 0x6E, 0x32, + 0x22, 0x05, 0xF3, 0xD0, 0xFA, 0xEF, 0x74, 0x52, 0x81, 0xE2, 0x5F, 0x74, 0xD3, + 0xBD, 0xFF, 0x31, 0x83, 0x45, 0x75, 0xFA, 0x63, 0x7A, 0x97, 0x2E, 0xD6, 0xB6, + 0x19, 0xC6, 0x92, 0x26, 0xE4, 0x28, 0x06, 0x50, 0x50, 0x0E, 0x78, 0x2E, 0xA9, + 0x78, 0x0D, 0x14, 0x97, 0xB4, 0x12, 0xD8, 0x31, 0x40, 0xAB, 0xA1, 0x01, 0x41, + 0xC2, 0x30, 0xF8, 0x07, 0x5F, 0x16, 0xE4, 0x61, 0x77, 0xD2, 0x60, 0xF2, 0x9F, + 0x8D, 0xE8, 0xF4, 0xBA, 0xEB, 0x63, 0xDE, 0x2A, 0x97, 0x81, 0xEF, 0x4C, 0x6C, + 0xE6, 0x55, 0x34, 0x51, 0x2B, 0x28, 0x34, 0xF4, 0x53, 0x1C, 0xC4, 0x58, 0x0A, + 0x3F, 0xBB, 0xAF, 0xB5, 0xF7, 0x4A, 0x85, 0x43, 0x2D, 0x3C, 0xF1, 0x58, 0x58, + 0x81, 0x02, 0x81, 0x81, 0x00, 0xF2, 0x2C, 0x54, 0x76, 0x39, 0x23, 0x63, 0xC9, + 0x10, 0x32, 0xB7, 0x93, 0xAD, 0xAF, 0xBE, 0x19, 0x75, 0x96, 0x81, 0x64, 0xE6, + 0xB5, 0xB8, 0x89, 0x42, 0x41, 0xD1, 0x6D, 0xD0, 0x1C, 0x1B, 0xF8, 0x1B, 0xAC, + 0x69, 0xCB, 0x36, 0x3C, 0x64, 0x7D, 0xDC, 0xF4, 0x19, 0xB8, 0xC3, 0x60, 0xB1, + 0x57, 0x48, 0x5F, 0x52, 0x4F, 0x59, 0x3A, 0x55, 0x7F, 0x32, 0xC0, 0x19, 0x43, + 0x50, 0x3F, 0xAE, 0xCE, 0x6F, 0x17, 0xF3, 0x0E, 0x9F, 0x40, 0xCA, 0x4E, 0xAD, + 0x15, 0x3B, 0xC9, 0x79, 0xE9, 0xC0, 0x59, 0x38, 0x73, 0x70, 0x9C, 0x0A, 0x7C, + 0xC9, 0x3A, 0x48, 0x32, 0xA7, 0xD8, 0x49, 0x75, 0x0A, 0x85, 0xC2, 0xC2, 0xFD, + 0x15, 0x73, 0xDA, 0x99, 0x09, 0x2A, 0x69, 0x9A, 0x9F, 0x0A, 0x71, 0xBF, 0xB0, + 0x04, 0xA6, 0x8C, 0x7A, 0x5A, 0x6F, 0x48, 0x5A, 0x54, 0x3B, 0xC6, 0xB1, 0x53, + 0x17, 0xDF, 0xE7, 0x02, 0x81, 0x81, 0x00, 0xCB, 0x93, 0xDE, 0x77, 0x15, 0x5D, + 0xB7, 0x5C, 0x5C, 0x7C, 0xD8, 0x90, 0xA9, 0x98, 0x2D, 0xD6, 0x69, 0x0E, 0x63, + 0xB3, 0xA3, 0xDC, 0xA6, 0xCC, 0x8B, 0x6A, 0xA4, 0xA2, 0x12, 0x8C, 0x8E, 0x7B, + 0x48, 0x2C, 0xB2, 0x4B, 0x37, 0xDC, 0x06, 0x18, 0x7D, 0xEA, 0xFE, 0x76, 0xA1, + 0xD4, 0xA1, 0xE9, 0x3F, 0x0D, 0xCD, 0x1B, 0x5F, 0xAF, 0x5F, 0x9E, 0x96, 0x5B, + 0x5B, 0x0F, 0xA1, 0x7C, 0xAF, 0xB3, 0x9B, 0x90, 0xDB, 0x57, 0x73, 0x3A, 0xED, + 0xB0, 0x23, 0x44, 0xAE, 0x41, 0x4F, 0x1F, 0x07, 0x42, 0x13, 0x23, 0x4C, 0xCB, + 0xFA, 0xF4, 0x14, 0xA4, 0xD5, 0xF7, 0x9E, 0x36, 0x7C, 0x5B, 0x9F, 0xA8, 0x3C, + 0xC1, 0x85, 0x5F, 0x74, 0xD2, 0x39, 0x2D, 0xFF, 0xD0, 0x84, 0xDF, 0xFB, 0xB3, + 0x20, 0x7A, 0x2E, 0x9B, 0x17, 0xAE, 0xE6, 0xBA, 0x0B, 0xAE, 0x5F, 0x53, 0xA4, + 0x52, 0xED, 0x1B, 0xC4, 0x91, 0x02, 0x81, 0x81, 0x00, 0xEC, 0x98, 0xDA, 0xBB, + 0xD5, 0xFE, 0xF9, 0x52, 0x4A, 0x7D, 0x02, 0x55, 0x49, 0x6F, 0x55, 0x6E, 0x52, + 0x2F, 0x84, 0xA3, 0x2B, 0xB3, 0x86, 0x62, 0xB3, 0x54, 0xD2, 0x63, 0x52, 0xDA, + 0xE3, 0x88, 0x76, 0xA0, 0xEF, 0x8B, 0x15, 0xA5, 0xD3, 0x18, 0x14, 0x72, 0x77, + 0x5E, 0xC7, 0xA3, 0x04, 0x1F, 0x9E, 0x19, 0x62, 0xB5, 0x1B, 0x1B, 0x9E, 0xC3, + 0xF2, 0xB5, 0x32, 0xF9, 0x4C, 0xC1, 0xAA, 0xEB, 0x0C, 0x26, 0x7D, 0xD4, 0x5F, + 0x4A, 0x51, 0x5C, 0xA4, 0x45, 0x06, 0x70, 0x44, 0xA7, 0x56, 0xC0, 0xD4, 0x22, + 0x14, 0x76, 0x9E, 0xD8, 0x63, 0x50, 0x89, 0x90, 0xD3, 0xE2, 0xBF, 0x81, 0x95, + 0x92, 0x31, 0x41, 0x87, 0x39, 0x1A, 0x43, 0x0B, 0x18, 0xA5, 0x53, 0x1F, 0x39, + 0x1A, 0x5F, 0x1F, 0x43, 0xBC, 0x87, 0x6A, 0xDF, 0x6E, 0xD3, 0x22, 0x00, 0xFE, + 0x22, 0x98, 0x70, 0x4E, 0x1A, 0x19, 0x29, 0x02, 0x81, 0x81, 0x00, 0x8A, 0x41, + 0x56, 0x28, 0x51, 0x9E, 0x5F, 0xD4, 0x9E, 0x0B, 0x3B, 0x98, 0xA3, 0x54, 0xF2, + 0x6C, 0x56, 0xD4, 0xAA, 0xE9, 0x69, 0x33, 0x85, 0x24, 0x0C, 0xDA, 0xD4, 0x0C, + 0x2D, 0xC4, 0xBF, 0x4F, 0x02, 0x69, 0x38, 0x7C, 0xD4, 0xE6, 0xDC, 0x4C, 0xED, + 0xD7, 0x16, 0x11, 0xC3, 0x3E, 0x00, 0xE7, 0xC3, 0x26, 0xC0, 0x51, 0x02, 0xDE, + 0xBB, 0x75, 0x9C, 0x6F, 0x56, 0x9C, 0x7A, 0xF3, 0x8E, 0xEF, 0xCF, 0x8A, 0xC5, + 0x2B, 0xD2, 0xDA, 0x06, 0x6A, 0x44, 0xC9, 0x73, 0xFE, 0x6E, 0x99, 0x87, 0xF8, + 0x5B, 0xBE, 0xF1, 0x7C, 0xE6, 0x65, 0xB5, 0x4F, 0x6C, 0xF0, 0xC9, 0xC5, 0xFF, + 0x16, 0xCA, 0x8B, 0x1B, 0x17, 0xE2, 0x58, 0x3D, 0xA2, 0x37, 0xAB, 0x01, 0xBC, + 0xBF, 0x40, 0xCE, 0x53, 0x8C, 0x8E, 0xED, 0xEF, 0xEE, 0x59, 0x9D, 0xE0, 0x63, + 0xE6, 0x7C, 0x5E, 0xF5, 0x8E, 0x4B, 0xF1, 0x3B, 0xC1, 0x02, 0x81, 0x80, 0x4D, + 0x45, 0xF9, 0x40, 0x8C, 0xC5, 0x5B, 0xF4, 0x2A, 0x1A, 0x8A, 0xB4, 0xF2, 0x1C, + 0xAC, 0x6B, 0xE9, 0x0C, 0x56, 0x36, 0xB7, 0x4E, 0x72, 0x96, 0xD5, 0xE5, 0x8A, + 0xD2, 0xE2, 0xFF, 0xF1, 0xF1, 0x18, 0x13, 0x3D, 0x86, 0x09, 0xB8, 0xD8, 0x76, + 0xA7, 0xC9, 0x1C, 0x71, 0x52, 0x94, 0x30, 0x43, 0xE0, 0xF1, 0x78, 0x74, 0xFD, + 0x61, 0x1B, 0x4C, 0x09, 0xCC, 0xE6, 0x68, 0x2A, 0x71, 0xAD, 0x1C, 0xDF, 0x43, + 0xBC, 0x56, 0xDB, 0xA5, 0xA4, 0xBE, 0x35, 0x70, 0xA4, 0x5E, 0xCF, 0x4F, 0xFC, + 0x00, 0x55, 0x99, 0x3A, 0x3D, 0x23, 0xCF, 0x67, 0x5A, 0xF5, 0x22, 0xF8, 0xB5, + 0x29, 0xD0, 0x44, 0x11, 0xEB, 0x35, 0x2E, 0x46, 0xBE, 0xFD, 0x8E, 0x18, 0xB2, + 0x5F, 0xA8, 0xBF, 0x19, 0x32, 0xA1, 0xF5, 0xDC, 0x03, 0xE6, 0x7C, 0x9A, 0x1F, + 0x0C, 0x7C, 0xA9, 0xB0, 0x0E, 0x21, 0x37, 0x3B, 0xF1, 0xB0}; + +static const uint8_t rsa_256_keydata[] = { + 0x30, 0x82, 0x01, 0x0A, + 0x02, 0x82, 0x01, 0x01, 0x00, 0xDB, 0x1C, 0x7F, 0x2E, 0x0B, 0xCD, 0xBF, 0xCE, 0xD1, + 0x75, 0x10, 0xA0, 0xA2, 0xB8, 0xCE, 0x7D, 0xAA, 0xE2, 0x05, 0xE0, 0x7A, 0xD8, 0x44, + 0x63, 0x8F, 0xB5, 0xBD, 0xC0, 0xB0, 0x19, 0xB9, 0x37, 0xB8, 0x19, 0x4A, 0x0E, 0xF1, + 0x5D, 0x74, 0x80, 0x67, 0x46, 0x87, 0x06, 0xDE, 0x5B, 0x7F, 0x06, 0x03, 0xBD, 0xC1, + 0x8D, 0x5E, 0x07, 0x15, 0xD4, 0x5B, 0xF4, 0xDC, 0xE5, 0xCF, 0x3D, 0xF9, 0xC1, 0x11, + 0x2C, 0xAE, 0x6A, 0xB9, 0x8A, 0xBD, 0x1D, 0x67, 0x66, 0x17, 0xEA, 0x4E, 0xBD, 0xDB, + 0x15, 0x9A, 0x82, 0x87, 0xE4, 0xF0, 0x78, 0xC3, 0xA3, 0x85, 0x87, 0xB0, 0xFD, 0x9F, + 0xA9, 0x99, 0x5F, 0xE3, 0x33, 0xEC, 0xCC, 0xEA, 0x0B, 0xB5, 0x61, 0x5E, 0xF1, 0x49, + 0x7E, 0x3F, 0xA3, 0x2D, 0xEA, 0x01, 0x0C, 0xCC, 0x42, 0x9A, 0x76, 0x9B, 0xC4, 0xD0, + 0x37, 0xD3, 0xB1, 0x17, 0x01, 0x61, 0x01, 0x16, 0x59, 0x7E, 0x1C, 0x17, 0xC3, 0x53, + 0xFD, 0xD1, 0x72, 0xCB, 0x4C, 0x60, 0x15, 0xDA, 0x7D, 0xE2, 0xEA, 0xAD, 0x50, 0xEF, + 0x8E, 0xE2, 0x8B, 0xD4, 0x6A, 0x77, 0x55, 0xD6, 0x70, 0xD9, 0x6B, 0xBB, 0xF1, 0xEE, + 0x39, 0x04, 0x38, 0xA3, 0xBD, 0xE2, 0xD1, 0xE0, 0x66, 0x6B, 0xE2, 0x9C, 0x47, 0x99, + 0xE9, 0x28, 0xE6, 0xB6, 0xFC, 0x2E, 0xCA, 0x67, 0x43, 0x84, 0xE8, 0xD5, 0x83, 0xD6, + 0x9D, 0x98, 0x6B, 0x01, 0x3E, 0x81, 0xDC, 0x3C, 0x7A, 0xCA, 0xF9, 0xF3, 0x9C, 0xF7, + 0xD6, 0x28, 0x1B, 0x27, 0x78, 0x7C, 0xC3, 0xD0, 0xD5, 0x63, 0xA7, 0x81, 0x34, 0x89, + 0xAD, 0x25, 0x6A, 0xBD, 0xF2, 0xEA, 0xED, 0xFA, 0x57, 0xFC, 0xE5, 0x34, 0xC6, 0xC1, + 0x0F, 0x71, 0x2D, 0xD2, 0x08, 0x10, 0x1B, 0xAD, 0x44, 0x41, 0xE0, 0xFE, 0x79, 0xA0, + 0x63, 0x93, 0x8A, 0xB1, 0x5D, 0xE9, 0xB0, 0xEE, 0x6F, 0x02, 0x03, 0x01, 0x00, 0x01}; + +static const uint8_t ec_keydata[] = { + 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, + 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, + 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, + 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, + 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; + +static const uint8_t ec_keypair[] = { + 0x68, 0x49, 0xf9, 0x7d, 0x10, 0x66, 0xf6, 0x99, 0x77, 0x59, 0x63, 0x7c, 0x7e, 0x38, + 0x99, 0x46, 0x4c, 0xee, 0x3e, 0xc7, 0xac, 0x97, 0x06, 0x53, 0xa0, 0xbe, 0x07, 0x42}; + +static test_data check1[] = { + +#ifdef ARCH_TEST_CIPER_MODE_CTR +#ifdef ARCH_TEST_AES_128 +{"Test psa_close_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9}, + AES_16B_KEY_SIZE, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x12, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_16B_KEY_SIZE), PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_AES_192 +{"Test psa_close_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, +{0x24, 0x13, 0x61, 0x47, 0x61, 0xB8, 0xC8, 0xF0, 0xDF, 0xAB, 0x5A, 0x0E, 0x87, + 0x40, 0xAC, 0xA3, 0x90, 0x77, 0x83, 0x52, 0x31, 0x74, 0xF9}, + AES_24B_KEY_SIZE, BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x34, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(AES_24B_KEY_SIZE), PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_AES_256 +{"Test psa_close_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, +{0xEA, 0xD5, 0xE6, 0xC8, 0x51, 0xF9, 0xEC, 0xBB, 0x9B, 0x57, 0x7C, 0xED, 0xD2, + 0x4B, 0x82, 0x84, 0x9F, 0x9F, 0xE6, 0x73, 0x21, 0x3D, 0x1A, 0x05, 0xC9, 0xED, + 0xDF, 0x25, 0x17, 0x68, 0x86, 0xAE}, + AES_32B_KEY_SIZE, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0x56, PSA_KEY_LIFETIME_VOLATILE, + BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#ifdef ARCH_TEST_RSA_2048 +{"Test psa_close_key 2048 RSA public key\n", 4, PSA_KEY_TYPE_RSA_PUBLIC_KEY, + {0}, + 270, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 0x78, PSA_KEY_LIFETIME_PERSISTENT, + 2048, PSA_SUCCESS +}, + +{"Test psa_close_key with RSA 2048 keypair\n", 5, PSA_KEY_TYPE_RSA_KEY_PAIR, + {0}, + 1193, 2048, PSA_KEY_USAGE_EXPORT, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, + 0x89, PSA_KEY_LIFETIME_PERSISTENT, + 2048, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CIPER_MODE_CTR +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_close_key with DES 64 bit key\n", 6, PSA_KEY_TYPE_DES, + {0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, + DES_8B_KEY_SIZE, BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xAB, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES_8B_KEY_SIZE), PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_2KEY +{"Test psa_close_key with Triple DES 2-Key\n", 7, PSA_KEY_TYPE_DES, +{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + DES3_2KEY_SIZE, BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xBC, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES3_2KEY_SIZE), PSA_SUCCESS +}, +#endif + +#ifdef ARCH_TEST_DES_3KEY +{"Test psa_close_key with Triple DES 3-Key\n", 8, PSA_KEY_TYPE_DES, +{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0xF1, 0xE0, 0xD3, 0xC2, 0xB5, 0xA4, 0x97, 0x86, + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + DES3_3KEY_SIZE, BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, + 0xCD, PSA_KEY_LIFETIME_PERSISTENT, + BYTES_TO_BITS(DES3_3KEY_SIZE), PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_ECDSA +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +{"Test psa_close_key with EC Public key\n", 9, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), + {0}, + 65, 256, PSA_KEY_USAGE_EXPORT, PSA_ALG_ECDSA_ANY, + 0xEF, PSA_KEY_LIFETIME_PERSISTENT, + 256, PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_ASYMMETRIC_ENCRYPTION +#ifdef ARCH_TEST_ECC_CURVE_SECP224R1 +{"Test psa_close_key with EC keypair\n", 10, + PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), + {0}, + 28, 224, PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, + 0x123, PSA_KEY_LIFETIME_PERSISTENT, + 224, PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c b/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c new file mode 100644 index 00000000..7faa27d6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c051/test_entry_c051.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c051.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 51) +#define TEST_DESC "Testing crypto key management APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c051_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c052/test.cmake b/api-tests/dev_apis/crypto/test_c052/test.cmake new file mode 100644 index 00000000..ea2b77f5 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c052/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c052.c + test_c052.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.c b/api-tests/dev_apis/crypto/test_c052/test_c052.c new file mode 100644 index 00000000..8e8df069 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c052/test_c052.c @@ -0,0 +1,90 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c052.h" +#include "test_data.h" + +client_test_t test_c052_crypto_list[] = { + NULL, + psa_aead_encrypt_setup_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_encrypt_setup_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Setting up aead on destroyed key handle should return an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.h b/api-tests/dev_apis/crypto/test_c052/test_c052.h new file mode 100644 index 00000000..20fc7440 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c052/test_c052.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C052_CLIENT_TESTS_H_ +#define _TEST_C052_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c052) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c052_crypto_list[]; + +int32_t psa_aead_encrypt_setup_test(security_t caller); + +#endif /* _TEST_C052_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c052/test_data.h b/api-tests/dev_apis/crypto/test_c052/test_data.h new file mode 100644 index 00000000..efe55f52 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c052/test_data.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_encrypt_setup - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, + PSA_SUCCESS +}, + +{"Test psa_aead_encrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_encrypt_setup - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_aead_encrypt_setup - DES Key\n", 4, PSA_KEY_TYPE_DES, +{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, DES_8B_KEY_SIZE, + PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, + PSA_ERROR_NOT_SUPPORTED +}, +#endif +#endif + +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CIPER_MODE_CFB +{"Test psa_aead_encrypt_setup - Unsupported Algorithm\n", 5, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CFB, PSA_ALG_CFB, + PSA_ERROR_NOT_SUPPORTED +}, +#endif + +#ifdef ARCH_TEST_GCM +{"Test psa_aead_encrypt_setup - Invalid key usage\n", 6, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM, + PSA_ERROR_NOT_PERMITTED +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c b/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c new file mode 100644 index 00000000..9a93bfd7 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c052/test_entry_c052.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c052.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 52) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c052_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c053/test.cmake b/api-tests/dev_apis/crypto/test_c053/test.cmake new file mode 100644 index 00000000..661f1d82 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c053/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c053.c + test_c053.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.c b/api-tests/dev_apis/crypto/test_c053/test_c053.c new file mode 100644 index 00000000..c54b7830 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c053/test_c053.c @@ -0,0 +1,90 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c053.h" +#include "test_data.h" + +client_test_t test_c053_crypto_list[] = { + NULL, + psa_aead_decrypt_setup_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_decrypt_setup_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated decryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Setting up aead on destroyed key handle should return an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.h b/api-tests/dev_apis/crypto/test_c053/test_c053.h new file mode 100644 index 00000000..23afbc1f --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c053/test_c053.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C053_CLIENT_TESTS_H_ +#define _TEST_C053_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c053) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c053_crypto_list[]; + +int32_t psa_aead_decrypt_setup_test(security_t caller); + +#endif /* _TEST_C053_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c053/test_data.h b/api-tests/dev_apis/crypto/test_c053/test_data.h new file mode 100644 index 00000000..1dd20fa6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c053/test_data.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_decrypt_setup - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM, + PSA_SUCCESS +}, + +{"Test psa_aead_decrypt_setup - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_decrypt_setup - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM, + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_DES_1KEY +{"Test psa_aead_decrypt_setup - DES Key\n", 4, PSA_KEY_TYPE_DES, +{0x70, 0x24, 0x55, 0x0C, 0x14, 0x9D, 0xED, 0x29}, DES_8B_KEY_SIZE, + PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM, + PSA_ERROR_NOT_SUPPORTED +}, +#endif +#endif + +#ifdef ARCH_TEST_AES_128 +#ifdef ARCH_TEST_CIPER_MODE_CFB +{"Test psa_aead_decrypt_setup - Unsupported Algorithm\n", 5, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CFB, PSA_ALG_CFB, + PSA_ERROR_NOT_SUPPORTED +}, +#endif + +#ifdef ARCH_TEST_GCM +{"Test psa_aead_decrypt_setup - Invalid key usage\n", 6, PSA_KEY_TYPE_AES, +{0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, + 0x5F, 0xC9}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, + PSA_ERROR_NOT_PERMITTED +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c b/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c new file mode 100644 index 00000000..70c97199 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c053/test_entry_c053.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c053.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 53) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c053_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c054/test.cmake b/api-tests/dev_apis/crypto/test_c054/test.cmake new file mode 100644 index 00000000..6dcf140b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c054/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c054.c + test_c054.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.c b/api-tests/dev_apis/crypto/test_c054/test_c054.c new file mode 100644 index 00000000..c95b2078 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c054/test_c054.c @@ -0,0 +1,127 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c054.h" +#include "test_data.h" + +client_test_t test_c054_crypto_list[] = { + NULL, + psa_aead_generate_nonce_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_generate_nonce_test(security_t caller) +{ + int32_t i, j, status, nonce_sum; + uint8_t nonce[SIZE_32B]; + size_t nonce_length; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Generate a random nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce, + check1[i].nonce_size, &nonce_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Check that if generated iv are non-zero */ + nonce_sum = 0; + for (j = 0; j < nonce_length; j++) + { + nonce_sum += nonce[j]; + } + + TEST_ASSERT_NOT_EQUAL(nonce_sum, 0, TEST_CHECKPOINT_NUM(8)); + + /* Generate a random nonce on an ongoing operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce, + check1[i].nonce_size, &nonce_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Generate a random nonce on an aborted operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_GENERATE_NONCE, &operation, nonce, + check1[i].nonce_size, &nonce_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.h b/api-tests/dev_apis/crypto/test_c054/test_c054.h new file mode 100644 index 00000000..11be08b2 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c054/test_c054.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C054_CLIENT_TESTS_H_ +#define _TEST_C054_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c054) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c054_crypto_list[]; + +int32_t psa_aead_generate_nonce_test(security_t caller); + +#endif /* _TEST_C054_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c054/test_data.h b/api-tests/dev_apis/crypto/test_c054/test_data.h new file mode 100644 index 00000000..7fbeb40e --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c054/test_data.h @@ -0,0 +1,68 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + size_t nonce_size; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_generate_nonce - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, SIZE_32B, + PSA_SUCCESS +}, + +{"Test psa_aead_generate_nonce - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, SIZE_32B, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), + PSA_SUCCESS +}, + +{"Test psa_aead_generate_nonce - Small buffer size\n", 3, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, 8, + PSA_ERROR_BUFFER_TOO_SMALL +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_generate_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 4, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, SIZE_32B, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c b/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c new file mode 100644 index 00000000..0092c864 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c054/test_entry_c054.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c054.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 54) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c054_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c055/test.cmake b/api-tests/dev_apis/crypto/test_c055/test.cmake new file mode 100644 index 00000000..42bc8e68 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c055/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c055.c + test_c055.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.c b/api-tests/dev_apis/crypto/test_c055/test_c055.c new file mode 100644 index 00000000..d67a219f --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c055/test_c055.c @@ -0,0 +1,116 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c055.h" +#include "test_data.h" + +client_test_t test_c055_crypto_list[] = { + NULL, + psa_aead_set_nonce_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_set_nonce_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Setting the nonce on an ongoing operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Setting the nonce on an aborted operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.h b/api-tests/dev_apis/crypto/test_c055/test_c055.h new file mode 100644 index 00000000..fc9c9b85 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c055/test_c055.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C055_CLIENT_TESTS_H_ +#define _TEST_C055_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c055) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c055_crypto_list[]; + +int32_t psa_aead_set_nonce_test(security_t caller); + +#endif /* _TEST_C055_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c055/test_data.h b/api-tests/dev_apis/crypto/test_c055/test_data.h new file mode 100644 index 00000000..458e70bd --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c055/test_data.h @@ -0,0 +1,86 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t nonce[32]; + size_t nonce_size; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_set_nonce - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, + PSA_SUCCESS +}, + +{"Test psa_aead_set_nonce - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, + PSA_SUCCESS +}, + +{"Test psa_aead_set_nonce - Small nounce size\n", 3, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02}, 3, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_set_nonce - Large nonce size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F}, 32, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_set_nonce - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c b/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c new file mode 100644 index 00000000..d70ff1ab --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c055/test_entry_c055.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c055.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 55) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c055_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c056/test.cmake b/api-tests/dev_apis/crypto/test_c056/test.cmake new file mode 100644 index 00000000..6aa55f5f --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c056/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c056.c + test_c056.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.c b/api-tests/dev_apis/crypto/test_c056/test_c056.c new file mode 100644 index 00000000..c4356c61 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c056/test_c056.c @@ -0,0 +1,121 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c056.h" +#include "test_data.h" + +client_test_t test_c056_crypto_list[] = { + NULL, + psa_aead_set_lengths_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_set_lengths_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Declare the lengths of the message and additional data for AEAD */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].plaintext_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Declare the lengths of failed operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, + check1[i].ad_length, check1[i].plaintext_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(7)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Declare the lengths of an aborted operation should be an error */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].plaintext_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.h b/api-tests/dev_apis/crypto/test_c056/test_c056.h new file mode 100644 index 00000000..ed57bdcc --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c056/test_c056.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C056_CLIENT_TESTS_H_ +#define _TEST_C056_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c056) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c056_crypto_list[]; + +int32_t psa_aead_set_lengths_test(security_t caller); + +#endif /* _TEST_C056_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c056/test_data.h b/api-tests/dev_apis/crypto/test_c056/test_data.h new file mode 100644 index 00000000..8022ea99 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c056/test_data.h @@ -0,0 +1,97 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t nonce[32]; + size_t nonce_size; + size_t ad_length; + size_t plaintext_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_set_lengths - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 8, 32, + PSA_SUCCESS +}, + +{"Test psa_aead_set_lengths - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 8, 32, + PSA_SUCCESS +}, + +{"Test psa_aead_set_lengths - Zero ad size\n", 3, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 0, 32, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_set_lengths - Zero plaintext size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 8, 0, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_set_lengths - Invalid lengths\n", 5, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 1, 1, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_set_lengths - Vey large lengths\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 1000, 1000, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c b/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c new file mode 100644 index 00000000..7085f479 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c056/test_entry_c056.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c056.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 56) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c056_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c057/test.cmake b/api-tests/dev_apis/crypto/test_c057/test.cmake new file mode 100644 index 00000000..1458e522 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c057/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c057.c + test_c057.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.c b/api-tests/dev_apis/crypto/test_c057/test_c057.c new file mode 100644 index 00000000..81cd91d6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c057/test_c057.c @@ -0,0 +1,126 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c057.h" +#include "test_data.h" + +client_test_t test_c057_crypto_list[] = { + NULL, + psa_aead_update_ad_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_update_ad_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Declare the lengths of the message and additional data for AEAD */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].plaintext_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Pass additional data to an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(7)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Pass additional data to an inactive AEAD operation should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Pass additional data to an inactive AEAD operation should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(13)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.h b/api-tests/dev_apis/crypto/test_c057/test_c057.h new file mode 100644 index 00000000..7a26ad94 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c057/test_c057.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C057_CLIENT_TESTS_H_ +#define _TEST_C057_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c057) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c057_crypto_list[]; + +int32_t psa_aead_update_ad_test(security_t caller); + +#endif /* _TEST_C057_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c057/test_data.h b/api-tests/dev_apis/crypto/test_c057/test_data.h new file mode 100644 index 00000000..68bb98cd --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c057/test_data.h @@ -0,0 +1,104 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t additional_data[32]; + uint8_t nonce[32]; + size_t nonce_size; + size_t ad_length; + size_t plaintext_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_update_ad - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 32, + PSA_SUCCESS +}, + +{"Test psa_aead_update_ad - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 32, + PSA_SUCCESS +}, + +{"Test psa_aead_update_ad - Zero ad size\n", 3, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 0, 32, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_update_ad - Zero plaintext size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 8, 0, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_update_ad - Invalid lengths\n", 5, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 1, 1, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_update_ad - Vey large lengths\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x10}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 1000, 1000, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c b/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c new file mode 100644 index 00000000..50d33f7e --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c057/test_entry_c057.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c057.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 57) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c057_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c058/test.cmake b/api-tests/dev_apis/crypto/test_c058/test.cmake new file mode 100644 index 00000000..fc3c86d6 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c058/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c058.c + test_c058.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.c b/api-tests/dev_apis/crypto/test_c058/test_c058.c new file mode 100644 index 00000000..5ab48c91 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c058/test_c058.c @@ -0,0 +1,140 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c058.h" +#include "test_data.h" + +client_test_t test_c058_crypto_list[] = { + NULL, + psa_aead_update_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_update_test(security_t caller) +{ + int32_t i, status; + uint8_t output[BUFFER_SIZE]; + size_t length; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Declare the lengths of the message and additional data for AEAD */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].input_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Pass additional data to an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Encrypt or decrypt a message fragment in an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation, + check1[i].plaintext_length, check1[i].plaintext, output, + check1[i].output_size, &length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Encrypt or decrypt a message fragment in an inactive AEAD operation should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation, + check1[i].plaintext_length, check1[i].plaintext, output, + check1[i].output_size, &length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Compare the output and its length with the expected values */ + TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(13)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(15)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Encrypt or decrypt a message fragment in an inactive AEAD operation should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation, + check1[i].plaintext_length, check1[i].plaintext, output, + check1[i].output_size, &length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(16)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.h b/api-tests/dev_apis/crypto/test_c058/test_c058.h new file mode 100644 index 00000000..13f7b835 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c058/test_c058.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C058_CLIENT_TESTS_H_ +#define _TEST_C058_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c058) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c058_crypto_list[]; + +int32_t psa_aead_update_test(security_t caller); + +#endif /* _TEST_C058_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c058/test_data.h b/api-tests/dev_apis/crypto/test_c058/test_data.h new file mode 100644 index 00000000..bdae86a5 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c058/test_data.h @@ -0,0 +1,132 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t plaintext[30]; + uint8_t additional_data[32]; + uint8_t nonce[32]; + size_t nonce_size; + size_t ad_length; + size_t plaintext_length; + size_t input_length; + size_t output_size; + size_t expected_output[45]; + size_t expected_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_update - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e, + 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b, + 0xe9}, 40, + PSA_SUCCESS +}, + +{"Test psa_aead_update - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b, + 0x4f, 0x39}, 28, + PSA_SUCCESS +}, + +{"Test psa_aead_update - Zero plaintext size\n", 3, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0}, +{0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 8, 0, 0, BUFFER_SIZE, {0}, 0, + PSA_ERROR_INVALID_ARGUMENT +}, + +{"Test psa_aead_update - Small buffer size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0, + PSA_ERROR_BUFFER_TOO_SMALL +}, + +{"Test psa_aead_update - Input length overflows plaintext length\n", 5, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 10, BUFFER_SIZE, {0}, 0, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_update - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40, + 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02, + 0x02, 0x01}, +{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, +{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3}, + 12, 12, 28, 28, BUFFER_SIZE, +{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86, + 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13, + 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12, + 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c b/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c new file mode 100644 index 00000000..ba708614 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c058/test_entry_c058.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c058.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 58) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c058_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c059/test.cmake b/api-tests/dev_apis/crypto/test_c059/test.cmake new file mode 100644 index 00000000..8bd61d7a --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c059/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c059.c + test_c059.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.c b/api-tests/dev_apis/crypto/test_c059/test_c059.c new file mode 100644 index 00000000..5fb910fd --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c059/test_c059.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c059.h" +#include "test_data.h" + +client_test_t test_c059_crypto_list[] = { + NULL, + psa_aead_finish_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_finish_test(security_t caller) +{ + int32_t i, status; + uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; + size_t length, tag_length; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Declare the lengths of the message and additional data for AEAD */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].input_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Pass additional data to an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Encrypt or decrypt a message fragment in an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation, + check1[i].plaintext_length, check1[i].plaintext, output, + BUFFER_SIZE, &length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Finish encrypting a message in an AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Finish encrypting a message with an inactive operator should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Compare the output and its length with the expected values */ + TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(tag_length, check1[i].expected_tag_length, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_MEMCMP(tag, check1[i].expected_tag, tag_length, TEST_CHECKPOINT_NUM(16)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(18)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Finish encrypting a message with an inactive operator should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_FINISH, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size, &tag_length); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(19)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.h b/api-tests/dev_apis/crypto/test_c059/test_c059.h new file mode 100644 index 00000000..bc4dea78 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c059/test_c059.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C059_CLIENT_TESTS_H_ +#define _TEST_C059_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c059) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c059_crypto_list[]; + +int32_t psa_aead_finish_test(security_t caller); + +#endif /* _TEST_C059_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c059/test_data.h b/api-tests/dev_apis/crypto/test_c059/test_data.h new file mode 100644 index 00000000..9ea4b0ec --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c059/test_data.h @@ -0,0 +1,124 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t plaintext[30]; + uint8_t additional_data[32]; + uint8_t nonce[32]; + size_t nonce_size; + size_t ad_length; + size_t plaintext_length; + size_t input_length; + size_t output_size; + size_t expected_output[45]; + size_t expected_length; + size_t tag_size; + size_t expected_tag[64]; + size_t expected_tag_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_finish - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e, + 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b, + 0xe9}, 40, SIZE_32B, {0}, 0, + PSA_SUCCESS +}, + +{"Test psa_aead_finish - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b, + 0x4f, 0x39}, 28, SIZE_32B, {0}, 0, + PSA_SUCCESS +}, + +{"Test psa_aead_finish - Small buffer size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0, SIZE_32B, {0}, 0, + PSA_ERROR_BUFFER_TOO_SMALL +}, + +{"Test psa_aead_finish - Input length is less than plaintext length\n", 5, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 30, BUFFER_SIZE, {0}, 0, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_finish - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40, + 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02, + 0x02, 0x01}, +{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, +{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3}, + 12, 12, 28, 28, BUFFER_SIZE, +{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86, + 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13, + 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12, + 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c b/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c new file mode 100644 index 00000000..6fe48021 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c059/test_entry_c059.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c059.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 59) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c059_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c060/test.cmake b/api-tests/dev_apis/crypto/test_c060/test.cmake new file mode 100644 index 00000000..37ad289c --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c060/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c060.c + test_c060.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.c b/api-tests/dev_apis/crypto/test_c060/test_c060.c new file mode 100644 index 00000000..354f3b8b --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c060/test_c060.c @@ -0,0 +1,111 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c060.h" +#include "test_data.h" + +client_test_t test_c060_crypto_list[] = { + NULL, + psa_aead_abort_test, + psa_aead_abort_init_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_abort_test(security_t caller) +{ + int32_t i, status; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ENCRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Reset the key attributes and check if psa_import_key fails */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + } + + return VAL_STATUS_SUCCESS; +} + +int32_t psa_aead_abort_init_test(security_t caller) +{ + int32_t i, status; + psa_aead_operation_t operation[] = {PSA_AEAD_OPERATION_INIT, psa_aead_operation_init(), {0} }; + uint32_t operation_count = sizeof(operation)/sizeof(operation[0]); + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, "Test psa_aead_abort with all initializations\n", 0); + + for (i = 0; i < operation_count; i++) + { + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation[i]); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2)); + } + + return VAL_STATUS_SUCCESS; +} + + diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.h b/api-tests/dev_apis/crypto/test_c060/test_c060.h new file mode 100644 index 00000000..856e1883 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c060/test_c060.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C060_CLIENT_TESTS_H_ +#define _TEST_C060_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c060) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c060_crypto_list[]; + +int32_t psa_aead_abort_test(security_t caller); +int32_t psa_aead_abort_init_test(security_t caller); + +#endif /* _TEST_C060_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c060/test_data.h b/api-tests/dev_apis/crypto/test_c060/test_data.h new file mode 100644 index 00000000..fcdef1f8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c060/test_data.h @@ -0,0 +1,60 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_abort - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, PSA_ALG_CCM, + PSA_SUCCESS +}, + +{"Test psa_aead_abort - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), + PSA_SUCCESS +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_abort - GCM - 16B AES - 12B Nounce & 12B addi data\n", 3, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_GCM, PSA_ALG_GCM, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c b/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c new file mode 100644 index 00000000..2f7e4c1d --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c060/test_entry_c060.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c060.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 60) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c060_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/test_c061/test.cmake b/api-tests/dev_apis/crypto/test_c061/test.cmake new file mode 100644 index 00000000..5a24243f --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c061/test.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_c061.c + test_c061.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.c b/api-tests/dev_apis/crypto/test_c061/test_c061.c new file mode 100644 index 00000000..9becfed8 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c061/test_c061.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c061.h" +#include "test_data.h" + +client_test_t test_c061_crypto_list[] = { + NULL, + psa_aead_verify_test, + NULL, +}; + +static int g_test_count = 1; + +int32_t psa_aead_verify_test(security_t caller) +{ + int32_t i, status; + uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; + size_t length; + int num_checks = sizeof(check1)/sizeof(check1[0]); + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; + + if (num_checks == 0) + { + val->print(PRINT_TEST, "No test available for the selected crypto configuration\n", 0); + return RESULT_SKIP(VAL_STATUS_NO_TESTS); + } + + /* Initialize the PSA crypto library*/ + status = val->crypto_function(VAL_CRYPTO_INIT); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(1)); + + for (i = 0; i < num_checks; i++) + { + val->print(PRINT_TEST, "[Check %d] ", g_test_count++); + val->print(PRINT_TEST, check1[i].test_desc, 0); + + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + + /* Setup the attributes for the key */ + val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); + val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); + val->crypto_function(VAL_CRYPTO_SET_KEY_ALGORITHM, &attributes, check1[i].key_alg); + + /* Import the key data into the key slot */ + status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, check1[i].key_data, + check1[i].key_length, &check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + + /* Set the key for a multipart authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_DECRYPT_SETUP, &operation, + check1[i].key_handle, check1[i].alg); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + + /* Set the nonce for an authenticated encryption operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, + check1[i].nonce_size); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + + /* Declare the lengths of the message and additional data for AEAD */ + status = val->crypto_function(VAL_CRYPTO_AEAD_SET_LENGTHS, &operation, check1[i].ad_length, + check1[i].input_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + + /* Pass additional data to an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE_AD, &operation, + check1[i].additional_data, check1[i].ad_length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + + /* Encrypt or decrypt a message fragment in an active AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_UPDATE, &operation, + check1[i].plaintext_length, check1[i].plaintext, output, + BUFFER_SIZE, &length); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + + /* Finish authenticating and decrypting a message in an AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(9)); + + if (check1[i].expected_status != PSA_SUCCESS) + { + /* Finish authenticating and decrypting a msg with an inactive operator should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(10)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + continue; + } + + /* Compare the output and its length with the expected values */ + TEST_ASSERT_EQUAL(length, check1[i].expected_length, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_MEMCMP(tag, check1[i].expected_tag, check1[i].expected_tag_length, + TEST_CHECKPOINT_NUM(15)); + + /* Abort the AEAD operation */ + status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); + + /* Destroy the key */ + status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(17)); + + /* Reset the key attributes */ + val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); + + /* Finish authenticating and decrypting a message with an inactive operator should fail */ + status = val->crypto_function(VAL_CRYPTO_AEAD_VERIFY, &operation, output, + check1[i].output_size, &length, tag, check1[i].tag_size); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(18)); + + } + + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.h b/api-tests/dev_apis/crypto/test_c061/test_c061.h new file mode 100644 index 00000000..7b52a258 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c061/test_c061.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_C061_CLIENT_TESTS_H_ +#define _TEST_C061_CLIENT_TESTS_H_ + +#include "val_crypto.h" +#define test_entry CONCAT(test_entry_, c061) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) + +extern val_api_t *val; +extern psa_api_t *psa; +extern client_test_t test_c061_crypto_list[]; + +int32_t psa_aead_verify_test(security_t caller); + +#endif /* _TEST_C061_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c061/test_data.h b/api-tests/dev_apis/crypto/test_c061/test_data.h new file mode 100644 index 00000000..af8e2610 --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c061/test_data.h @@ -0,0 +1,124 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_crypto.h" + +typedef struct { + char test_desc[75]; + psa_key_handle_t key_handle; + psa_key_type_t key_type; + uint8_t key_data[32]; + uint32_t key_length; + psa_key_usage_t usage; + psa_algorithm_t key_alg; + psa_algorithm_t alg; + uint8_t plaintext[30]; + uint8_t additional_data[32]; + uint8_t nonce[32]; + size_t nonce_size; + size_t ad_length; + size_t plaintext_length; + size_t input_length; + size_t output_size; + size_t expected_output[45]; + size_t expected_length; + size_t tag_size; + size_t expected_tag[64]; + size_t expected_tag_length; + psa_status_t expected_status; +} test_data; + +static test_data check1[] = { +#ifdef ARCH_TEST_CCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_verify - AES-CCM\n", 1, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0xd8, 0x0e, + 0x8b, 0xf8, 0x0f, 0x4a, 0x46, 0xca, 0xb0, 0x6d, 0x43, 0x13, 0xf0, 0xdb, 0x9b, + 0xe9}, 40, SIZE_32B, {0}, 0, + PSA_SUCCESS +}, + +{"Test psa_aead_verify - AES-CCM 24 bytes Tag length = 4\n", 2, PSA_KEY_TYPE_AES, +{0x41, 0x89, 0x35, 0x1B, 0x5C, 0xAE, 0xA3, 0x75, 0xA0, 0x29, 0x9E, 0x81, 0xC6, + 0x21, 0xBF, 0x43}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, + PSA_ALG_AEAD_WITH_TAG_LENGTH(PSA_ALG_CCM, 4), +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, BUFFER_SIZE, +{0x26, 0xc5, 0x69, 0x61, 0xc0, 0x35, 0xa7, 0xe4, 0x52, 0xcc, 0xe6, 0x1b, 0xc6, + 0xee, 0x22, 0x0d, 0x77, 0xb3, 0xf9, 0x4d, 0x18, 0xfd, 0x10, 0xb6, 0x64, 0x3b, + 0x4f, 0x39}, 28, SIZE_32B, {0}, 0, + PSA_SUCCESS +}, + +{"Test psa_aead_verify - Small buffer size\n", 4, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 24, 10, {0}, 0, SIZE_32B, {0}, 0, + PSA_ERROR_BUFFER_TOO_SMALL +}, + +{"Test psa_aead_verify - Input length is less than plaintext length\n", 5, PSA_KEY_TYPE_AES, +{0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, + 0x93, 0xCC, 0x6B}, + AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_CCM, PSA_ALG_CCM, +{0x45, 0x35, 0xd1, 0x2b, 0x43, 0x77, 0x92, 0x8a, 0x7c, 0x0a, 0x61, 0xc9, 0xf8, + 0x25, 0xa4, 0x86, 0x71, 0xea, 0x05, 0x91, 0x07, 0x48, 0xc8, 0xef}, +{0x48, 0xc0, 0x90, 0x69, 0x30, 0x56, 0x1e, 0x0a, 0xb0, 0xef, 0x4c, 0xd9, 0x72}, +{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F}, 16, 13, 24, 30, BUFFER_SIZE, {0}, 0, + PSA_ERROR_INVALID_ARGUMENT +}, +#endif +#endif + +#ifdef ARCH_TEST_GCM +#ifdef ARCH_TEST_AES_128 +{"Test psa_aead_verify - GCM - 16B AES - 12B Nounce & 12B addi data\n", 6, PSA_KEY_TYPE_AES, +{0x3d, 0xe0, 0x98, 0x74, 0xb3, 0x88, 0xe6, 0x49, 0x19, 0x88, 0xd0, 0xc3, 0x60, + 0x7e, 0xae, 0x1f}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DECRYPT, PSA_ALG_GCM, PSA_ALG_GCM, +{0x45, 0x00, 0x00, 0x1c, 0x42, 0xa2, 0x00, 0x00, 0x80, 0x01, 0x44, 0x1f, 0x40, + 0x67, 0x93, 0xb6, 0xe0, 0x00, 0x00, 0x02, 0x0a, 0x00, 0xf5, 0xff, 0x01, 0x02, + 0x02, 0x01}, +{0x42, 0xf6, 0x7e, 0x3f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, +{0x57, 0x69, 0x0e, 0x43, 0x4e, 0x28, 0x00, 0x00, 0xa2, 0xfc, 0xa1, 0xa3}, + 12, 12, 28, 28, BUFFER_SIZE, +{0xFB, 0xA2, 0xCA, 0x84, 0x5E, 0x5D, 0xF9, 0xF0, 0xF2, 0x2C, 0x3E, 0x6E, 0x86, + 0xDD, 0x83, 0x1E, 0x1F, 0xC6, 0x57, 0x92, 0xCD, 0x1A, 0xF9, 0x13, 0x0E, 0x13, + 0x79, 0xED, 0x36, 0x9F, 0x07, 0x1F, 0x35, 0xE0, 0x34, 0xBE, 0x95, 0xF1, 0x12, + 0xE4, 0xE7, 0xD0, 0x5D, 0x35}, 44, + PSA_SUCCESS +}, +#endif +#endif +}; diff --git a/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c b/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c new file mode 100644 index 00000000..4bc7d58a --- /dev/null +++ b/api-tests/dev_apis/crypto/test_c061/test_entry_c061.c @@ -0,0 +1,54 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_c061.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_CRYPTO_BASE, 61) +#define TEST_DESC "Testing crypto AEAD APIs\n" + +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_crypto_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_c061_crypto_list, FALSE); + + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->crypto_function(VAL_CRYPTO_FREE); + val->test_exit(); +} diff --git a/api-tests/dev_apis/crypto/testsuite.db b/api-tests/dev_apis/crypto/testsuite.db index ebe6839a..e857a3e1 100644 --- a/api-tests/dev_apis/crypto/testsuite.db +++ b/api-tests/dev_apis/crypto/testsuite.db @@ -64,5 +64,22 @@ test_c041 test_c042 test_c043 test_c044 +test_c045 +test_c046 +test_c047 +test_c048 +test_c049 +test_c050 +test_c051 +test_c052 +test_c053 +test_c054 +test_c055 +test_c056 +test_c057 +test_c058 +test_c059 +test_c060 +test_c061 (END) diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c index 1f6276da..222cd67c 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c @@ -32,7 +32,9 @@ static int g_test_count = 1; int32_t psa_initial_attestation_get_token_test(security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); - uint32_t i, status, token_size; + uint32_t i; + int32_t status; + size_t token_buffer_size, token_size; uint8_t challenge[PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64+1]; uint8_t token_buffer[TOKEN_SIZE]; @@ -45,14 +47,14 @@ int32_t psa_initial_attestation_get_token_test(security_t caller) memset(token_buffer, 0, sizeof(token_buffer)); status = val->attestation_function(VAL_INITIAL_ATTEST_GET_TOKEN_SIZE, - check1[i].challenge_size, &token_size); + check1[i].challenge_size, &token_buffer_size); if (status != PSA_SUCCESS) { if (check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32 || check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_48 || check1[i].challenge_size != PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64) { - token_size = check1[i].token_size; + token_buffer_size = check1[i].token_size; check1[i].challenge_size = check1[i].actual_challenge_size; } else @@ -60,7 +62,7 @@ int32_t psa_initial_attestation_get_token_test(security_t caller) } status = val->attestation_function(VAL_INITIAL_ATTEST_GET_TOKEN, challenge, - check1[i].challenge_size, token_buffer, &token_size); + check1[i].challenge_size, token_buffer, token_buffer_size, &token_size); TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(1)); if (check1[i].expected_status != PSA_SUCCESS) @@ -78,7 +80,9 @@ int32_t psa_initial_attestation_get_token_test(security_t caller) int32_t psa_initial_attestation_get_token_size_test(security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); - uint32_t i, status, token_size; + uint32_t i; + int32_t status; + size_t token_size; for (i = 0; i < num_checks; i++) { diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h index f4e7024c..29aae088 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h @@ -18,9 +18,9 @@ #define _TEST_A001_CLIENT_TESTS_H_ #include "val_attestation.h" -#define test_entry CONCAT(test_entry_, a001) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, a001) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #define TOKEN_SIZE 512 diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_data.h b/api-tests/dev_apis/initial_attestation/test_a001/test_data.h index bfeba554..036aab15 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_data.h +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_data.h @@ -19,9 +19,9 @@ typedef struct { char test_desc[100]; - uint32_t challenge_size; - uint32_t actual_challenge_size; - uint32_t token_size; + size_t challenge_size; + size_t actual_challenge_size; + size_t token_size; psa_status_t expected_status; } test_data; @@ -40,31 +40,31 @@ static test_data check1[] = { }, {"Test psa_initial_attestation_get_token with zero challenge size\n", - 0, 0, TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + 0, 0, TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token with small challenge size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token with invalid challenge size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token with large challenge size\n", - MAX_CHALLENGE_SIZE+1, MAX_CHALLENGE_SIZE+1, TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + MAX_CHALLENGE_SIZE+1, MAX_CHALLENGE_SIZE+1, TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token with zero as token size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32, - 0, PSA_ATTEST_ERR_INVALID_INPUT + 0, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token with small token size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32, - PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_ATTEST_ERR_TOKEN_BUFFER_OVERFLOW + PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_ERROR_BUFFER_TOO_SMALL }, }; @@ -83,21 +83,21 @@ static test_data check2[] = { {"Test psa_initial_attestation_get_token_size with zero challenge size\n", 0, 0, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token_size with small challenge size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32-1, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token_size with invalid challenge size\n", PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32+1, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_initial_attestation_get_token_size with large challenge size\n", MAX_CHALLENGE_SIZE+1, MAX_CHALLENGE_SIZE+1, - TOKEN_SIZE, PSA_ATTEST_ERR_INVALID_INPUT + TOKEN_SIZE, PSA_ERROR_INVALID_ARGUMENT }, }; diff --git a/api-tests/docs/psa_attestation_testlist.md b/api-tests/docs/psa_attestation_testlist.md index 478b494e..12153ad7 100644 --- a/api-tests/docs/psa_attestation_testlist.md +++ b/api-tests/docs/psa_attestation_testlist.md @@ -2,17 +2,17 @@ | Test | Return value | API | Test Algorithm | Test Cases | |-----------|--------------------------------------|-------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| test_a001 | PSA_ATTEST_ERR_SUCCESS | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | 1. Provide correct inputs to API with described challenge sizes
2. Expect API to return this define as return value each time
3. Verify the token | 1. Challenge_size = 32
2. Challenge_size = 48
3. Challenge_size = 64 | -| | PSA_ATTEST_ERR_INVALID_INPUT | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | 1. Provide described challenge sizes to the API along with other valid parameters
2. Expect API to return this define as return value each time | 1. Challenge_size is zero
2. Invalid challenge size between 0 and 32
3. Invalid challenge size between 32 and 64
4. Challenge_size is greater than MAX_CHALLENGE_SIZE | -| | PSA_ATTEST_ERR_TOKEN_BUFFER_OVERFLOW | psa_initial_attest_get_token() | 1. Provide described taken size to the API along with other valid parameters
2. Expect API to return this define as return value each time | 1. Token_size as zero
2. Token_size less than challenge size | -| | PSA_ATTEST_ERR_INIT_FAILED | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where attestation initialisation fails | | -| | PSA_ATTEST_ERR_CLAIM_UNAVAILABLE | psa_initial_attest_get_token() | Can't simulate. Test can't generate stimulus where claim can unavailable | | -| | PSA_ATTEST_ERR_GENERAL | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where unexpected error happened during API operation | | +| test_a001 | PSA_SUCCESS | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | 1. Provide correct inputs to API with described challenge sizes
2. Expect API to return this define as return value each time
3. Verify the token | 1. Challenge_size = 32
2. Challenge_size = 48
3. Challenge_size = 64 | +| | PSA_ERROR_INVALID_ARGUMENT | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | 1. Provide described challenge sizes to the API along with other valid parameters
2. Expect API to return this define as return value each time | 1. Challenge_size is zero
2. Invalid challenge size between 0 and 32
3. Invalid challenge size between 32 and 64
4. Challenge_size is greater than MAX_CHALLENGE_SIZE | +| | PSA_ERROR_BUFFER_TOO_SMALL | psa_initial_attest_get_token() | 1. Provide described taken size to the API along with other valid parameters
2. Expect API to return this define as return value each time | 1. Token_size as zero
2. Token_size less than challenge size | +| | PSA_ERROR_SERVICE_FAILURE | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where attestation initialisation fails | | +| | PSA_ERROR_GENERIC_ERROR | psa_initial_attest_get_token()
psa_initial_attest_get_token_size() | Can't simulate. Test can't generate stimulus where unexpected error happened during API operation | | ## Note -1. In verifying the token, only the data type of claims and presence of the mandatory claims are checked and the values of the claims are not checked. -2. Checks related to token signature validation will be part of future release +1. In verifying the token, only the data type of claims and presence of the mandatory claims are checked and the values of the claims are not checked.
+2. Specify the version of underlying PSA crypto in /api-tests/platform/targets//nspe/common/pal_config.h
+3. Supported crypto versions are CRYPTO_VERSION_BETA1, CRYPTO_VERSION_BETA2 and CRYPTO_VERSION_BETA3 # License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/docs/psa_crypto_testlist.md b/api-tests/docs/psa_crypto_testlist.md index 983ba367..67aa616e 100644 --- a/api-tests/docs/psa_crypto_testlist.md +++ b/api-tests/docs/psa_crypto_testlist.md @@ -2,626 +2,750 @@ -| Group | Test | Function | Scenario | Return Value | Steps | Test Case | -|------------------------------|-----------|----------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------|------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| -| Basic | test_c001 | psa_crypto_init | Library initialization | PSA_SUCCESS | Calling this function should return SUCCESS | | -| | | | Applications must call this function before calling any other function in this module. | PSA_SUCCESS | Try calling crypto operations doing a crypto_init should be successful(can be covered as part of other testcase) | | -| | | | Applications may call this function more than once. Once a call succeeds, subsequent calls are guaranteed to succeed. | PSA_SUCCESS | Try calling multiple crypto init and should return SUCCESS | | -| | | | Applications must call this function before calling any other function in this module. | PSA_ERROR_BAD_STATE | Try calling crypto operations without doing a crypto_init should return FAILURE | | -| | | | | | | | -| Key Management | test_c002 | psa_import_key | Import a key in binary format. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Import the key data into the key slot | 5. 2048 RSA keypair | -| | | | | | 6. Get basic metadata about a key | 6. DES 64 bit key | -| | | | | | 7. Export a key in binary format | 7. Triple DES 2-Key | -| | | | | | 8. Check if original key data matches with the exported data | 8. Triple DES 3-Key | -| | | | | | | 9. EC Public key | -| | | | | | | 10. EC keypair | -| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with incorrect key type | Incorrect key type | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Key data greater than the algorithm size | -| | | | | | | 2. Incorrect key data size | -| | | | | | | | -| | | | | | | | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid key handle should return this error | 1. Destroyed key handle
2. Zero as key handle
3. Unallocated key handle | -| | | | | PSA_ERROR_ALREADY_EXISTS | Pass the key slot to store data which is already occupied | Already occupied key slot | -| | test_c003 | psa_export_key | Export a key in binary format | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | | | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Import the key data into the key slot | 5. 2048 RSA keypair | -| | | | | | 6. Get basic metadata about a key | 6. DES 64 bit key | -| | | | | | 7. Export a key in binary format | 7. Triple DES 2-Key | -| | | | | | 8. Check if original key data matches with the exported data | 8. Triple DES 3-Key | -| | | | | | | 9. EC Public key | -| | | | | | | 10. EC keypair | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with buffer size less than required | Less buffer size | -| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with with key policy as verify should return this error | Key policy as PSA_KEY_USAGE_VERIFY | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Zero key slot | -| | | | | | | 2. Unallocated key slot | -| | | | | | | 3. Destroyed key slot | -| | | | | PSA_ERROR_BAD_STATE | Calling this function with key policy that cannot be exported | Invalid key policy usage | -| | | | | PSA_ERROR_DOES_NOT_EXIST | Calling this function with empty key slot | Empty key slot | -| | test_c004 | psa_export_public_key | Export a public key or the public part of a key pair in binary format. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 2048 RSA public key | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 2048 RSA keypair | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. EC Public key | -| | | | | | 4. Set the usage policy on a key slot | 4. EC keypair | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Get basic metadata about a key | | -| | | | | | 7. Export a key in binary format | | -| | | | | | 8. Check if original key data matches with the exported data | | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with buffer size less than required | Less buffer size | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. DES 64 bit key | -| | | | | | | 2. Triple DES 2-Key | -| | | | | | | 3. Triple DES 3-Key | -| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with with key policy as verify should return this error | Key policy as PSA_KEY_USAGE_VERIFY | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid key handle should return this error | 1. Zero key slot | -| | | | | | | 2. Unallocated key slot | -| | | | | | | 3. Destroyed key slot | -| | | | | PSA_ERROR_BAD_STATE | Calling this function with key policy that cannot be exported | Invalid key policy usage | -| | | | | PSA_ERROR_DOES_NOT_EXIST | Calling this function with empty key slot | Empty key slot | -| | test_c005 | psa_destroy_key | Destroy a key and restore the slot to its default state. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Import the key data into the key slot | 5. 2048 RSA keypair | -| | | | | | 6. Get basic metadata about a key | 6. DES 64 bit key | -| | | | | | 7. Destroy a key and restore the slot to its default state | 7. Triple DES 2-Key | -| | | | | | 8. Check that if the key metadata are destroyed | 8. Triple DES 3-Key | -| | | | | | | 9. EC Public key | -| | | | | | | 10. EC keypair | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Invalid key slot | -| | | | | | | 2. Zero key slot | -| | | | | | | 3. Empty key slot | -| | test_c006 | psa_get_key_information | Get basic metadata about a key. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Import the key data into the key slot | 5. 2048 RSA keypair | -| | | | | | 6. Get basic metadata about a key | 6. DES 64 bit key | -| | | | | | | 7. Triple DES 2-Key | -| | | | | | | 8. Triple DES 3-Key | -| | | | | | | 9. EC Public key | -| | | | | | | 10. EC keypair | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Zero key slot | -| | | | | | | 2. Unallocated key slot | -| | | | | | | 2. Destroyed key slot | -| | | | | PSA_ERROR_DOES_NOT_EXIST | Pass the key slot number which has the key type as none | Empty key slot | -| | NO TEST | psa_key_policy_set_usage | Set the standard fields of a policy structure. | void | Void function. Covered as part of other cases | | -| | | | | | | | -| Key Policies | test_c007 | psa_set_key_policy | Set the usage policy on a key slot. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Import the key data into the key slot | 5. 2048 RSA keypair | -| | | | | | 6. Get the usage policy for a key slot | 6. DES 64 bit key | -| | | | | | 7. Check if the policy matches the original input | 7. Triple DES 2-Key | -| | | | | | | 8. Triple DES 3-Key | -| | | | | | | 9. EC Public key | -| | | | | | | 10. EC keypair | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Unallocated key slot | -| | | | | | | 2. Zero key slot | -| | | | | | | 3. Destroyed key slot | -| | | | | PSA_ERROR_ALREADY_EXISTS | Pass the key slot to store data which is already occupied | Already occupied key slot | -| | test_c008 | psa_get_key_policy | Get the usage policy for a key slot | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. 2048 RSA public key | -| | | | | | 5. Change the lifetime of a key slot | 5. 2048 RSA keypair | -| | | | | | 6. Import the key data into the key slot | 6. DES 64 bit key | -| | | | | | 7. Get the usage policy for a key slot | 7. Triple DES 2-Key | -| | | | | | 8. Retrieve the usage field of a policy structure | 8. Triple DES 3-Key | -| | | | | | 9. Retrieve the algorithm field of a policy structure | 9. EC Public key | -| | | | | | 10. Make sure they match the original value | 10. EC keypair | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Zero key slot | -| | | | | | | 2. Destroyed key slot | -| | test_c009 | psa_allocate_key | Allocate a key slot for a transient key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Volatile keys | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | | -| | | | | | 3. Allocate a key slot for a transient key | | -| | | | | | | | -| | | | | | | | -| | | | | | | | -| | | | | | | | -| | | | | | | | -| | | | | PSA_ERROR_INSUFFICIENT_MEMORY | Calling this function with multiple time | | -| | | | | | | | -| | | | | | | | -| | test_c010 | psa_get_key_lifetime | Retrieve the lifetime of a key slot. | PSA_SUCCESS | 1. Initialize the PSA crypto library | Testing only volatile keys and persistance key types will be supported in future release | -| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Change the lifetime of a key slot | | -| | | | | | 6. Import the key data into the key slot | | -| | | | | | 7. Get the lifetime of a key slot | | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Zero key slot | -| | | | | | | 2. Invalid key slot | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key policy | -| Message Authentication Codes | test_c011 | psa_hash_start | Start a multipart hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | -| | | | | | 2. Start a multipart hash operation | 2. MD4 | -| | | | | | | 3. MD5 | -| | | | | | | 4. RIPEMD160 | -| | | | | | | 5. SHA1 | -| | | | | | | 6. SHA224 | -| | | | | | | 7. SHA256 | -| | | | | | | 8. SHA512 | -| | | | | | | 9. SHA512_224 | -| | | | | | | 10. SHA512_256 | -| | | | | | | 11. SHA3_224 1 | -| | | | | | | 2. SHA3_256 1 | -| | | | | | | 3. SHA3_384 1 | -| | | | | | | 4. SHA3_512 | -| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported algorithm should return error | Invalid hash algorithm | -| | test_c012 | psa_hash_update | Add a message fragment to a multipart hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | -| | | | | | 2. Start a multipart hash operation | 2. MD4 | -| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | -| | | | | | | 4. RIPEMD160 | -| | | | | | | 5. SHA1 | -| | | | | | | 6. SHA224 | -| | | | | | | 7. SHA256 | -| | | | | | | 8. SHA384 | -| | | | | | | 9. SHA512 | -| | | | | PSA_ERROR_BAD_STATE | 1. Calling this function without calling the psa_hash_start() should return error | Inactive operation handle | -| | | | | | 2. Calling this function with completed operation handle should return error | Completed operation handle | -| | test_c013 | psa_hash_verify | Finish the calculation of the hash of a message and compare it with an expected value. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | -| | | | | | 2. Start a multipart hash operation | 2. MD4 | -| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | -| | | | | | 4. Finish the calculation of the hash of a message and compare it with an expected value | 4. RIPEMD160 | -| | | | | | | 5. SHA1 | -| | | | | | | 6. SHA224 | -| | | | | | | 7. SHA256 | -| | | | | | | 8. SHA384 | -| | | | | | | 9. SHA512 | -| | | | | PSA_ERROR_BAD_STATE | Calling this function with inactive operation handle should return error | 1. Inactive operation handle | -| | | | | | Calling this function with invalid operation handle should return error | 2. Invalid operation handle | -| | | | | PSA_ERROR_INVALID_SIGNATURE | Calling this function with incorrect expected value should return error | 1. Incorrect expected hash value | -| | | | | | | 2. Incorrect expected hash length | -| | test_c014 | psa_hash_finish | Finish the calculation of the hash of a message. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | -| | | | | | 2. Start a multipart hash operation | 2. MD4 | -| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | -| | | | | | 4. Finish the calculation of the hash of a message | 4. RIPEMD160 | -| | | | | | 5. Compare it with the expected value | 5. SHA1 | -| | | | | | | 6. SHA224 | -| | | | | | | 7. SHA256 | -| | | | | | | 8. SHA384 | -| | | | | | | 9. SHA512 | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with an inactive operation handle should return error | Inactive operation handle | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with a hash buffer whose size is less than the algorithm output should return error | Buffer size less than required | -| | test_c015 | psa_hash_abort | Abort a hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | -| | | | | | 2. Start a multipart hash operation | 2. MD4 | -| | | | | | 3. Abort a hash operation | 3. MD5 | -| | | | | | | 4. RIPEMD160 | -| | | | | | | 5. SHA1 | -| | | | | | | 6. SHA224 | -| | | | | | | 7. SHA256 | -| | | | | | | 8. SHA384 | -| | | | | | | 9. SHA512 | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling psa_hash_finish after calling psa_hash_abort should return error | | -| Generator | test_c016 | psa_generate_key | Generate a key or key pair | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES | -| | | | | | 2. Initialize a key policy structure | 2. DES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. ECC | -| | | | | | 4. Set the usage policy on a key slot | 4. RSA | -| | | | | | 5. Generate a key or key pair | | -| | | | | | 6. Get basic metadata about a key | | -| | | | | | 7. Check if key type and key length matches | | -| | | | | | 8. Export a key in binary format | | -| | | | | | 9. Check if the metadata matches | | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with unallocated key slot should return this error | Unallocated key slot | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with zero as key slot should return this error | Zero as key slot | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with destroyed key slot should return this error | Destroyed as key slot | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with Null extra and Non-Zero extra size should return this error | Null extra and Non-Zero extra size | -| | | | | PSA_ERROR_ALREADY_EXISTS | Calling this function with pre-occupied key slot should return this error | Pre-occupied key slot | -| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function to generate only public key should return this error | Key type as public key | -| | test_c017 | psa_generate_random | Generate random bytes | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte data | -| | | | | | 2. Generate random bytes Run several times, to ensure that every output byte will be nonzero at least once | 2. 24 Byte data | -| | | | | | 3. Check that no more than bytes have been overwritten | 3. 32 Byte data | -| | | | | | 4. Check that every byte was changed to nonzero at least once. | 4. 64 Byte data | -| | | | | | | 5. 128 Byte data | -| | | | | | | 6. 256 Byte data | -| | | | | | | 7. 512 Byte data | -| | | | | | | 8. 1000 Byte data | -| | | | | | | 9. 1024 Byte data | -| | test_c018 | psa_generator_read | Read some data from a generator | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte key | -| | | | | | 2. Initialize a key policy structure | 2. 32 Byte key | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 8 Byte Key | -| | | | | | 4. Set the usage policy on a key slot | 4. SHA 256 | -| | | | | | 5. Import the key data into the key slot | 5. SHA 512 | -| | | | | | 6. Set up a key derivation operation | 6. SHA 1 | -| | | | | | 7. Generate random bytes | 7. Output size less than generator capacity | -| | | | | | 8. Check that if generated data are non-zero | 8. Output size equal to generator capacity | -| | | | | | 9. Generate random bytes for remaining capacity | 9. Request maximum capacity | -| | | | | | 10. Check that if generated data are non-zero | | -| | | | | | 11. Generate random bytes and check that it fails | | -| | | | | PSA_ERROR_INSUFFICIENT_DATA | Calling this function with output size greater than the current capacity should return this error | Output size greater than the current capacity | -| | | | | PSA_ERROR_INSUFFICIENT_DATA | Calling this function with capacity greater than the allowed capacity should return this error | Request maximum capacity +1 | -| | | | | PSA_ERROR_BAD_STATE | Calling this function without setup should return this error | | -| | test_c019 | psa_get_generator_capacity | Retrieve the current capacity of a generator | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Output size less than generator capacity | -| | | | | | 2. Initialize a key policy structure | 2. Output size equal to generator capacity | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Set up a key derivation operation | | -| | | | | | 7. Retrieve the current capacity of a generator | | -| | | | | | 8. Check that it is equal to the input capacity | | -| | | | | | 9. Generate random bytes | | -| | | | | | 10. Retrieve the current capacity of a generator | | -| | | | | | 11. Check that it is equal to the remaining capacity | | -| | | | | PSA_ERROR_BAD_STATE | Calling this function without setup should return this error | | -| | test_c020 | psa_generator_import_key | Create a symmetric key from data read from a generator | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure | 2. 32 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Set up a key derivation operation | | -| | | | | | 7. Initialize a key policy structure for new slot | | -| | | | | | 8. Set the standard fields of a policy structure | | -| | | | | | 9. Set the usage policy on a new key slot | | -| | | | | | 10. Create a symmetric key from data read from a generator | | -| | | | | | 11. Export a key in binary format | | -| | | | | | 12. Check that length of the key matches | | -| | | | | | 13. Check that the key is non-zero | | -| | | | | | 14. Initialize a key policy structure for new slot | | -| | | | | | 15. Set the standard fields of a policy structure | | -| | | | | | 16. Set the usage policy on a new key slot | | -| | | | | | 17. Create a symmetric key from data read from a generator for the remaining size | | -| | | | | | 18. Export a key in binary format | | -| | | | | | 19. Check that length of the key matches | | -| | | | | | 20. Check that the key is non-zero | | -| | | | | | 21. Initialize a key policy structure for new slot | | -| | | | | | 22. Set the standard fields of a policy structure | | -| | | | | | 23. Set the usage policy on a new key slot | | -| | | | | | 24. Create a symmetric key from data read from a generator for the some size | | -| | | | | | Check that it fails | | -| | | | | PSA_ERROR_INSUFFICIENT_DATA | Calling this function with output greater than capacity should return this error | Output greater than capacity | -| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with public key algorithm should return this error | 1. RSA public key
2.Invalid key size | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid arguments should return this error | 1. Invalid key slot | -| | | | | | | 2. Zero as key slot | -| | | | | | | | -| | | | | PSA_ERROR_ALREADY_EXISTS | Calling this function with already occupied key slot should return this error | Pre-occupied key slot | -| | test_c021 | psa_generator_abort | Abort a generator | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Abort | -| | | | | | 2. Initialize a key policy structure | 2. Multiple | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. Calling generator functions after abort should fail | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Set the key for a multipart symmetric encryption/decryption operation | | -| | | | | | 7. Abort a cipher operation | | -| | | | | | 8. Multiple abort cipher operation should return success | | -| Key derivation | test_c022 | psa_key_derivation | Set up a key derivation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte data with SHA-256 | -| | | | | | 2. Initialize a key policy structure | 2. 32 byte data with SHA-512 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte data with MD-5 | -| | | | | | 4. Import the key data into the key slot | 4. Salt and label provided as input | -| | | | | | 5. Set up a key derivation operation | | -| | | | | | 6. Retrieve the current capacity of a generator | | -| | | | | | 7. Make sure that the capacity is same as input capacity | | -| | | | | PSA_INVALID_ARGUMENT | Calling this function with invalid argument should return this error | 1. Invalid algorithm | -| | | | | | | 2. Unsupported generator capacity | -| | | | | | | 3. Unsupported key type | -| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with incorrect usage should return this error | 1. Incorrect usage | -| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported key derivation algorithm should return this error | 1. Unsupported key derivation algorithm | -| | | | | PSA_ERROR_INVALID_HANDLE | Calling this functoin wih incorrect key handle | 1. Invalid key handle
2. Zero as key slot | -| | | | | PSA_ERROR_DOES_NOT_EXIST | Calling this function with empty key slot should return this error | Empty key slot | -| Key policies | test_c023 | psa_key_policy_get_usage | Retrieve the usage field of a policy structure | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Encrypt | -| | | | | | 2. Initialize a key policy structure | 2. Decrypt | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. Export | -| | | | | | 4. Retrieve the usage field of a policy structure | 4. Sign | -| | | | | | 5. Check that usage is same as input | 5. Verify | -| | | | | | | 6. Derive | -| AEAD | test_c024 | psa_aead_encrypt | Process an authenticated encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. CCM - 16B AES - Nounce and additional data | -| | | | | | 2. Initialize a key policy structure | 2. GCM - 16B AES - NULL Nounce & addi data | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. GCM -16B AES - 12B Nounce & 12B addi data | -| | | | | | 4. Set the usage policy on a key slot | 4. CCM - 16B AES - 13B Nounce & 8B addi data | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Call aead encrypt | | -| | | | | | 7. Check if the status is expected | | -| | | | | | 8. Check if the cipher text is expected length | | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES key | -| | | | | | | 2. Unsupported algorithm | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Zero as key slot | -| | | | | | | 2. Invalid key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | 1. Small output buffer size | -| | | | | | | 2. Invalid key usage | -| | test_c025 | psa_aead_decrypt | Process an authenticated decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. CCM - 16B AES - Nounce and additional data | -| | | | | | 2. Initialize a key policy structure | 2. GCM - 16B AES - NULL Nounce & addi data | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. GCM -16B AES - 12B Nounce & 12B addi data | -| | | | | | 4. Set the usage policy on a key slot | 4. CCM - 16B AES - 13B Nounce & 8B addi data | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Call aead decrypt | | -| | | | | | 7. Check if the status is expected | | -| | | | | | 8. Check if the plain text is expected length | | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES key | -| | | | | | | 2. Unsupported algorithm | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | Invalid tag length | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Zero as key slot | -| | | | | | | 2. Invalid key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | 1. Small output buffer size | -| | | | | | | 2. Invalid key usage | -| Message Authentication Codes | test_c026 | psa_mac_sign_setup | Start a multipart MAC calculation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 64 Byte HMAC | -| | | | | | 2. Initialize a key policy structure | 2. 16 Byte AES - CMAC | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Start a multipart MAC calculation operation | | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte AES - GMAC | -| | | | | | | 2. Incompatible HMAC for CMAC | -| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | -| | | | | | | 4. Truncated MAC too small | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | -| | | | | | | 2. Truncated MAC too large | -| | | | | | | 3. Bad algorithm (not a MAC algorithm) | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key handle | -| | | | | | | 2. Zero as key handle | -| | test_c027 | psa_mac_update | Add a message fragment to a multipart MAC operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1.64 Byte HMAC SHA256 | -| | | | | | 2. Initialize a key policy structure | 2. 16 Byte AES - CMAC | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte HMAC SHA512 | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Start a multipart MAC calculation operation | | -| | | | | | 7. Add a message fragment to a multipart MAC operation | | -| | | | | | 8. Check for the expected status | | -| | | | | | 9. If success, Finish the calculation of the MAC of a message | | -| | | | | | 10. Add a message fragment to the same multipart MAC operation should fail | | -| | | | | PSA_ERROR_BAD_STATE | | 1. Completed operation as input | -| | | | | | | 2. Uninitialized operation as input | -| | test_c028 | psa_mac_sign_finish | Finish the calculation of the MAC of a message | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | -| | | | | | 2. Initialize a key policy structure | 2. HMAC SHA 256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. HMAC SHA 512 | -| | | | | | 4. Set the usage policy on a key slot | 4. HMAC SHA 224 (truncated to 8 Byte) | -| | | | | | 5. Import the key data into the key slot | 5. CMAC AES 128 | -| | | | | | 6. Start a multipart MAC calculation operation | | -| | | | | | 7. Add a message fragment to a multipart MAC operation | | -| | | | | | 8. Finish the calculation of the MAC of a message | | -| | | | | | 9. Check for the expected status | | -| | | | | | 10. If success, Check if the MAC length matches with the expected length | | -| | | | | | 11. Check if the MAC data matches with the expected data | | -| | | | | | 12. Finish the calculation of the MAC of a message using same operation should return error | | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small size buffer | -| | | | | PSA_ERROR_BAD_STATE | | Invalid operation as input | -| | test_c029 | psa_mac_verify_setup | | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 64 Byte HMAC | -| | | | | | 2. Initialize a key policy structure | 2. 16 Byte AES - CMAC | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Start a multipart MAC verification operation | | -| | | | | | 7. Check for the expected status | | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte AES - GMAC | -| | | | | | | 2. Incompatible HMAC for CMAC | -| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | -| | | | | | | 4. Truncated MAC too small | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty slot as input | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | -| | | | | | | 2. Truncated MAC too large | -| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key handle | -| | | | | | | 2. Zero as key handle | -| | test_c030 | psa_mac_verify_finish | Finish the calculation of the MAC of a message and compare it with an expected value | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | -| | | | | | 2. Initialize a key policy structure | 2. HMAC SHA 256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. HMAC SHA 512 | -| | | | | | 4. Set the usage policy on a key slot | 4. HMAC SHA 224 (truncated to 8 Byte) | -| | | | | | 5. Import the key data into the key slot | 5. CMAC AES 128 | -| | | | | | 6. Start a multipart MAC calculation operation | | -| | | | | | 7. Add a message fragment to a multipart MAC operation | | -| | | | | | 8. Finish the calculation of the MAC of a message | | -| | | | | | 9. Check for the expected status | | -| | | | | | 10. Finish the calculation of the MAC of a message using same operation should return error | | -| | | | | PSA_ERROR_INVALID_SIGNATURE | | 1. Small size buffer | -| | | | | | | 2. Incorrect expected hash | -| | | | | PSA_ERROR_BAD_STATE | | Invalid operation as input | -| | test_c031 | psa_mac_abort | Abort a MAC operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | -| | | | | | 2. Initialize a key policy structure | 2. HMAC SHA 256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. HMAC SHA 512 | -| | | | | | 4. Set the usage policy on a key slot | 4. CMAC AES 128 | -| | | | | | 5. Import the key data into the key slot | 5. HMAC truncated | -| | | | | | 6. Start a multipart MAC calculation operation | 6. Multiple abort | -| | | | | | 7. Abort the MAC operation | 7. psa_mac_finish after psa_mac_abort should return failure | -| Symmetric Ciphers | test_c032 | psa_cipher_encrypt_setup | Set the key for a multipart symmetric encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. DES 64 bit key | -| | | | | | 5. Import the key data into the key slot | 5. Triple DES 2-Key | -| | | | | | 6. Set the key for a multipart symmetric encryption operation | 6. Triple DES 3-Key | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte raw data | -| | | | | | | 2. Unknown cipher algorithm | -| | | | | | | 3. Incompatible key ARC4 | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a cipher algorithm | -| | | | | | | 2. RSA public key | -| | | | | | | 3. RSA keypair | -| | | | | | | 4. EC Public key | -| | | | | | | 5. EC keypair | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Incorrect usage | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated key handle | -| | | | | | | 2. Zero as key handle | -| | test_c033 | psa_cipher_decrypt_setup | Set the key for a multipart symmetric decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | -| | | | | | 2. Initialize a key policy structure | 2. HMAC SHA 256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. HMAC SHA 512 | -| | | | | | 4. Set the usage policy on a key slot | 4. CMAC AES 128 | -| | | | | | 5. Import the key data into the key slot | 5. HMAC truncated | -| | | | | | 6. Set the key for a multipart symmetric decryption operation | 6. Multiple abort | -| | | | | | | 7. psa_mac_finish after psa_mac_abort should return failure | -| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte raw data | -| | | | | | | 2. Unknown cipher algorithm | -| | | | | | | 3. Incompatible key ARC4 | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a cipher algorithm | -| | | | | | | 2. RSA public key | -| | | | | | | 3. RSA keypair | -| | | | | | | 4. EC Public key | -| | | | | | | 5. EC keypair | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated key handle | -| | | | | | | 2. Zero as key handle | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | test_c034 | psa_cipher_generate_iv | Generate an IV for a symmetric encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. DES 64 bit key | -| | | | | | 5. Import the key data into the key slot | 5. Triple DES 2-Key | -| | | | | | 6. Set the key for a multipart symmetric encryption operation | 6. Triple DES 3-Key | -| | | | | | 7. Generate an IV for a symmetric encryption operation | 7. AES - large iv buffer | -| | | | | | 8. Check that if generated iv length match the expected length | 8. DES - large iv buffer | -| | | | | | 9. Check that if generated iv are zero | | -| | | | | | 10. Generating an IV for a symmetric encryption operation using the same operator should fail | | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | 1. AES - small iv buffer | -| | | | | | | 2. DES - small iv buffer | -| | | | | PSA_ERROR_BAD_STATE | | 1. Completed operation handle | -| | test_c035 | psa_cipher_set_iv | Set the IV for a symmetric encryption or decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES | -| | | | | | 4. Set the usage policy on a key slot | 4. DES 64 bit key | -| | | | | | 5. Import the key data into the key slot | 5. Triple DES 2-Key | -| | | | | | 6. Set the key for a multipart symmetric encryption/decryption operation | 6. Triple DES 3-Key | -| | | | | | 7. Set an IV for a symmetric encryption/decryption operation | | -| | | | | | 8. Check that if generated iv length match the expected length | | -| | | | | | 9. Check that if generated iv are zero | | -| | | | | | 10. Setting an IV for a symmetric encryption/decryption operation using the same operator should fail | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. AES - small iv buffer 2. DES - small iv buffer 3. AES - large iv buffer 4. DES - large iv buffer | -| | | | | PSA_ERROR_BAD_STATE | | 1. Completed operation handle | -| | test_c036 | psa_cipher_update | Encrypt or decrypt a message fragment in an active cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | -| | | | | | 2. Initialize a key policy structure | 2. AES CBC_NO_PADDING (Short input) | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. AES CBC_PKCS7 | -| | | | | | 4. Set the usage policy on a key slot | 4. AES CBC_PKCS7 (Short input) | -| | | | | | 5. Import the key data into the key slot | 5. AES CTR | -| | | | | | 6. Set the key for a multipart symmetric encryption operation | 6. DES CBC (nopad) | -| | | | | | 7. Set an IV for a symmetric encryption operation | 7. 2-key 3DE -CBC (nopad) | -| | | | | | 8. Encrypt or decrypt a message fragment in an active cipher operation | 8. 3-key 3DE -CBC (nopad) | -| | | | | | 9. Check if the output length matches the expected length | | -| | | | | | 10. Check if the output data matches the expected data | | -| | | | | | 11. Encrypt or decrypt a message fragment in an invalid cipher operation should fail | | -| | | | | PSA_ERROR_BAD_STATE | Encrypt or decrypt a message fragment in an invalid cipher operation should fail | Invalid operation as input | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | -| | test_c037 | psa_cipher_finish | Finish encrypting or decrypting a message in a cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | -| | | | | | 2. Initialize a key policy structure | 2. AES CBC_NO_PADDING (Short input) | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. AES CBC_PKCS7 | -| | | | | | 4. Set the usage policy on a key slot | 4. AES CBC_PKCS7 (Short input) | -| | | | | | 5. Import the key data into the key slot | 5. AES CTR | -| | | | | | 6. Set the key for a multipart symmetric encryption operation | 6. DES CBC (nopad) | -| | | | | | 7. Set an IV for a symmetric encryption operation | 7. 2-key 3DE -CBC (nopad) | -| | | | | | 8. Encrypt or decrypt a message fragment in an active cipher operation | 8. 3-key 3DE -CBC (nopad) | -| | | | | | 9. Finish encrypting or decrypting a message in a cipher operation | | -| | | | | | 10. Check if the output length matches the expected length | | -| | | | | | 11. Check if the output data matches the expected data | | -| | | | | | 12. Finish encrypting or decrypting a message using an invalid operation should fail | | -| | | | | PSA_ERROR_BAD_STATE | Encrypt or decrypt a message fragment in an invalid cipher operation should fail | Invalid operation as input | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | AES CBC_NO_PADDING (Short input) | -| | test_c038 | psa_cipher_abort | Abort a cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Encrypt - AES CBC_NO_PADDING | -| | | | | | 2. Initialize a key policy structure | 2. Encrypt - AES CBC_PKCS7 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. Encrypt - AES CTR | -| | | | | | 4. Set the usage policy on a key slot | 4. Encrypt - DES CBC (nopad) | -| | | | | | 5. Import the key data into the key slot | 5. Encrypt - 2-key 3DE -CBC (nopad) | -| | | | | | 6. Set the key for a multipart symmetric encryption/decryption operation | 6. Encrypt - 3-key 3DE -CBC (nopad) | -| | | | | | 7. Abort a cipher operation | 7. Decrypt - AES CBC_NO_PADDING | -| | | | | | 8. Multiple abort cipher operation should return success | 8. Decrypt - AES CBC_PKCS7 | -| | | | | | | 9. Decrypt - AES CTR | -| | | | | | | 10. Decrypt - DES CBC (nopad) | -| | | | | | | 11. Decrypt - 2-key 3DE -CBC (nopad) | -| | | | | | | 12. Decrypt - 3-key 3DE -CBC (nopad) | -| | | | | | | 13. psa_cipher_update after psa_cipher_abort should fail | -| Asymmetric Cryptography | test_c039 | psa_asymmetric_encrypt | Encrypt a short message with a public key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA PKCS1V15 | -| | | | | | 2. Initialize a key policy structure | 2. RSA OAEP SHA256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. RSA OAEP SHA256 with label | -| | | | | | 4. Set the usage policy on a key slot | 4. RSA KEYPAIR PKCS1V15 | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Encrypt a short message with a public key | | -| | | | | | 7. Check if the output length matches with the expected output length | | -| | | | | | 8. Decrypt the cipher text | | -| | | | | | 9. Check if the output length matches with the input length | | -| | | | | | 10. Check if the output matches with the given input data | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | -| | | | | | | 2. Invalid algorithm | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated key handle | -| | | | | | | 2. Zero as key handle | -| | test_c040 | psa_asymmetric_decrypt | Decrypt a short message with a private key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 | -| | | | | | 2. Initialize a key policy structure | 2. RSA KEYPAIR OAEP SHA256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. RSA KEYPAIR OAEP SHA256 with label | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Decrypt a short message with a private key | | -| | | | | | 7. Check if the output length matches with the expected length | | -| | | | | | 8. Check if the output matches with the expected data | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type (RSA public key) | -| | | | | | | 2. Invalid algorithm | -| | | | | | | 3. Invalid key type (AES Key) | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key slot
2. Zero key slot | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | -| | test_c041 | psa_asymmetric_sign | Sign a hash or short message with a private key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 RAW | -| | | | | | 2. Initialize a key policy structure | 2. RSA KEYPAIR PKCS1V15 SHA-256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. ECDSA KEYPAIR SECP256R1 SHA-256 | -| | | | | | 4. Set the usage policy on a key slot | | -| | | | | | 5. Import the key data into the key slot | | -| | | | | | 6. Sign a hash or short message with a private key | | -| | | | | | 7. Check if the output length matches with the expected length | | -| | | | | | 8. Check if the output matches with the expected data | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type (RSA public key) | -| | | | | | | 2. Invalid algorithm | -| | | | | | | 3. Invalid key type (AES Key) | -| | | | | | | 4. Wrong hash size | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key slot
2. Zero key slot | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | -| | test_c042 | psa_asymmetric_verify | Verify the signature a hash or short message using a public key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 RAW | -| | | | | | 2. Initialize a key policy structure | 2. RSA KEYPAIR PKCS1V15 SHA-256 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. ECDSA KEYPAIR SECP256R1 SHA-256 | -| | | | | | 4. Set the key data based on key type | 4. RSA public key | -| | | | | | 5. Set the usage policy on a key slot | 5. EC public key | -| | | | | | 6. Import the key data into the key slot | | -| | | | | | 7. Verify the signature a hash or short message using a public key | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid algorithm | -| | | | | | | 2. Wrong hash size | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key slot
2. Zero key slot | -| | | | | PSA_ERROR_INVALID_SIGNATURE | | Wrong signature size | -| | | | | | | Wrong signature | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_NOT_SUPPORTED | | Invalid key type (AES Key) | -| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | -| | test_c043 | psa_key_agreement | Set up a key agreement operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. ECDH SECP256R1 | -| | | | | | 2. Initialize a key policy structure | 2. ECDH SECP384R1 | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | | -| | | | | | 4. Set the key data based on key type | | -| | | | | | 5. Set the usage policy on a key slot | | -| | | | | | 6. Import the key data into the key slot | | -| | | | | | 7. Set up a key agreement operation | | -| | | | | | 8. Retrieve the current capacity of a generator | | -| | | | | | 9. Check if the generator capacity matches with the expected capacity | | -| | | | | | 10. Read some data from a generator | | -| | | | | | 11. Check if the output matches with the expected data | | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a key agreement alg | -| | | | | | | 2. Public key on different curve | -| | | | | | | 2. Public key instead of private key | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key slot
2. Zero key slot | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | -| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | -| | | | | PSA_ERROR_NOT_SUPPORTED | | Invalid key type (AES Key) | -| | test_c044 | psa_copy_key | Copy key material from one location to another | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | -| | | | | | 2. Initialize a key policy structure | 2. 24 Byte AES | -| | | | | | 3. Allocate a key slot for a transient key and set the standard fields of a policy structure | 3. 32 Byte AES with constraints | -| | | | | | 4. Set the key data based on key type | 4. 2048 RSA public key | -| | | | | | 5. Set the usage policy on a key slot | 5. 2048 RSA key pair | -| | | | | | 6. Import the key data into the key slot | 6. DES 64 bit key | -| | | | | | 7. Allocate a key slot for the target key | 7. Triple DES 2-Key | -| | | | | | 8. Set the usage policy on a key slot | 8. Triple DES 3-Key | -| | | | | | 9. Make a copy of a key | 9. EC Public key | -| | | | | | 10. Destroy the source to ensure that this doesn't affect the target | 10. EC key pair | -| | | | | | 11. Export a key in binary format and check if it matches with source material | 11. Incompatible target polic | -| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Incompatible target policy(source and target) | -| | | | | | | 2. Incompatible constraint | -| | | | | PSA_SUCCESS | | 1. Unexport source key usage | -| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated target key slot | -| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty source handle | -| | | | | PSA_ERROR_ALREADY_EXISTS | | Target already containing key material | - +| Group | Test | Function | Scenario | Return Value | Steps | Test Case | | +|------------------------------|-----------|----------------------------------|----------------------------------------------------------------------------------------|---------------------------------------------|------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|---| +| Library Initialization | test_c001 | psa_crypto_init | Library initialization | PSA_SUCCESS | Calling this function should return SUCCESS | | | +| | | | Applications must call this function before calling any other function in this module. | PSA_SUCCESS | Try calling crypto operations doing a crypto_init should be successful(can be covered as part of other testcase) | | | +| | | | Applications may call this function more than once. Once a call succeeds | subsequent calls are guaranteed to succeed. | PSA_SUCCESS | Try calling multiple crypto init and should return SUCCESS | | +| | | | Applications must call this function before calling any other function in this module. | PSA_ERROR_BAD_STATE | Try calling crypto operations without doing a crypto_init should return FAILURE | | | +| | | | | | | | | +| Key Management | test_c002 | psa_import_key | Import a key in binary format. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Get basic metadata about a key | 4. 2048 RSA public key | | +| | | | | | 5. Export a key in binary format | 5. 2048 RSA keypair | | +| | | | | | 6. Check if original key data matches with the exported data | 6. DES 64 bit key | | +| | | | | | 7. Reset the key attributes | 7. Triple DES 2-Key | | +| | | | | | | 8. Triple DES 3-Key | | +| | | | | | | 9. EC Public key | | +| | | | | | | 10. EC keypair | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with incorrect key type | Incorrect key type | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Key data greater than the algorithm size | | +| | | | | | | 2. Incorrect key data size | | +| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid key handle should return this error | | | +| Key Management | test_c003 | psa_export_key | Export a key in binary format | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Get basic metadata about a key | 4. 2048 RSA public key | | +| | | | | | 5. Export a key in binary format | 5. 2048 RSA keypair | | +| | | | | | 6. Check if original key data matches with the exported data | 6. DES 64 bit key | | +| | | | | | 7. Reset the key attributes | 7. Triple DES 2-Key | | +| | | | | | | 8. Triple DES 3-Key | | +| | | | | | | 9. EC Public key | | +| | | | | | | 10. EC keypair | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with buffer size less than required | Less buffer size | | +| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with with key policy as verify should return this error | Key policy as PSA_KEY_USAGE_VERIFY | | +| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | 1. Destroyed key slot | | +| Key Management | test_c004 | psa_export_public_key | Export a public key or the public part of a key pair in binary format. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 2048 RSA public key | | +| | | | | | 2. Setup the attributes for the key | 2. 2048 RSA keypair | | +| | | | | | 3. Import the key data into the key slot | 3. EC Public key | | +| | | | | | 4. Get basic metadata about a key | 4. EC keypair | | +| | | | | | 5. Export a key in binary format | | | +| | | | | | 6. Check if original key data matches with the exported data | | | +| | | | | | 7. Reset the key attributes | | | +| | | | | | | | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with buffer size less than required | Less buffer size | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. DES 64 bit key | | +| | | | | | | 2. Triple DES 2-Key | | +| | | | | | | 3. Triple DES 3-Key | | +| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with with key policy as verify should return this error | Key usage as PSA_KEY_USAGE_VERIFY | | +| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid key handle should return this error | 1. Destroyed key slot | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function with key policy that cannot be exported | Invalid key policy usage | | +| | | | | PSA_ERROR_DOES_NOT_EXIST | Calling this function with empty key slot | Empty key slot | | +| Key Management | test_c005 | psa_destroy_key | Destroy a key and restore the slot to its default state. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Get basic metadata about a key | 4. 2048 RSA public key | | +| | | | | | 5. Destroy a key and restore the slot to its default state | 5. 2048 RSA keypair | | +| | | | | | 6. Check that if the key metadata are destroyed | 6. DES 64 bit key | | +| | | | | | | 7. Triple DES 2-Key | | +| | | | | | | 8. Triple DES 3-Key | | +| | | | | | | 9. EC Public key | | +| | | | | | | 10. EC keypair | | +| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with invalid parameter should return this error | Already destroyed key slot | | +| Message Digests | test_c006 | psa_hash_compute | Calculate the hash (digest) of a message | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Calculate the hash (digest) of a message | 2. MD4 | | +| | | | | | 3. Check if it matches with the expected values | 3. MD5 | | +| | | | | | | 4. RIPEMD160 | | +| | | | | | | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with small buffer size should return this error | small buffer size | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with invalid algorithm should return this error | Invalid algorithm | | +| Message Digests | test_c007 | psa_hash_compare | Calculate the hash (digest) of a message and compare it with a reference value | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Calculate the hash (digest) of a message and compare it with a reference value | 2. MD4 | | +| | | | | | | 3. MD5 | | +| | | | | | | 4. RIPEMD160 | | +| | | | | | | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | Calling this function with incorrect expected hash | Incorrect expected hash | | +| | | | | | Calling this function with incorrect expected hash | Incorrect expected hash length | | +| Key Derivation | test_c008 | psa_key_derivation_setup | Set up a key derivation operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. ECDH + HKDF-SHA-256 | | +| | | | | | 2. Set up a key derivation operation | | | +| | | | | | 3. Abort the key derivation operation | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Bad key derivation algorithm | | +| | | | | | | 2. Invalid Algorithm | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported parameter should return this error | ECDH, unknown KDF | | +| Key Derivation | test_c009 | psa_key_derivation_input_bytes | Provide an input for key derivation or key agreement | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Step as Info | | +| | | | | | 2. Initialize a key policy structure to a default that forbids all usage of the key | 2. Step as salt | | +| | | | | | 3. Provide an input for key derivation or key agreement | 3. Step as label | | +| | | | | | 4. Allocate a key slot for a transient key | 4. Step as seed | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Step as secret | | +| | | | | | | 2. Invalid step | | +| | | | | PSA_ERROR_BAD_STATE | Key derivation on an aborted operation | Aborted operation | | +| Key Attributes | test_c010 | psa_set_key_id | Set the attributes for the key | NA | 1. Initialize the PSA crypto library | Testing only volatile keys and persistence key types will be supported in future release | | +| | | psa_set_key_lifetime | | | 2. Check if all the attributes are initialized to zero | | | +| | | psa_set_key_type | | | 3. Setup the attributes for the key | | | +| | | psa_set_key_bits | | | 4. Check if all the attributes are as per the input | | | +| | | psa_set_key_usage_flags | | | 5. Reset the attributes | | | +| | | psa_set_key_algorithm | | | 6. Check if all the attributes are erased | | | +| | | psa_get_key_id | Get the attributes for the key | | | | | +| | | psa_get_key_lifetime | | | | | | +| | | psa_get_key_type | | | | | | +| | | psa_get_key_bits | | | | | | +| | | psa_get_key_usage_flags | | | | | | +| | | psa_get_key_algorithm | | | | | | +| | | psa_reset_key_attributes | | | | | | +| Message Digests | test_c011 | psa_hash_start | Start a multipart hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Abort the hash operation | 3. MD5 | | +| | | | | | | 4. RIPEMD160 | | +| | | | | | | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA512 | | +| | | | | | | 9. SHA512_224 | | +| | | | | | | 10. SHA512_256 | | +| | | | | | | 11. SHA3_224 1 | | +| | | | | | | 2. SHA3_256 1 | | +| | | | | | | 3. SHA3_384 1 | | +| | | | | | | 4. SHA3_512 | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported algorithm should return error | Invalid hash algorithm | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function again after setup | Multiple setup calls after one another | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Invalid algorithm | | +| | | | | | | 2. CTR algorithm | | +| Message Digests | test_c012 | psa_hash_update | Add a message fragment to a multipart hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | | +| | | | | | 4. Abort the hash operation | 4. RIPEMD160 | | +| | | | | | | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| | | | | PSA_ERROR_BAD_STATE | 1. Calling this function without calling the psa_hash_setup() should return error | Operation handle without setup | | +| | | | | | 2. Calling this function with completed operation handle should return error | Completed operation handle | | +| Message Digests | test_c013 | psa_hash_verify | Finish the calculation of the hash of a message and compare it with an expected value. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | | +| | | | | | 4. Finish the calculation of the hash of a message and compare it with an expected value | 4. RIPEMD160 | | +| | | | | | 5. Abort the hash operation | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function with inactive operation handle should return error | 1. Inactive operation handle | | +| | | | | | Calling this function with invalid operation handle should return error | 2. Invalid operation handle | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | Calling this function with incorrect expected value should return error | 1. Incorrect expected hash value | | +| | | | | | | 2. Incorrect expected hash length | | +| Message Digests | test_c014 | psa_hash_finish | Finish the calculation of the hash of a message. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Add a message fragment to a multipart hash operation | 3. MD5 | | +| | | | | | 4. Finish the calculation of the hash of a message | 4. RIPEMD160 | | +| | | | | | 5. Compare it with the expected value | 5. SHA1 | | +| | | | | | 6. Abort the hash operation | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with an inactive operation handle should return error | Inactive operation handle | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | Calling this function with a hash buffer whose size is less than the algorithm output should return error | Buffer size less than required | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function with completed operation handle | completed operation handle | | +| Message Digests | test_c015 | psa_hash_abort | Abort a hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Abort a hash operation | 3. MD5 | | +| | | | | | | 4. RIPEMD160 | | +| | | | | | | 5. SHA1 | | +| | | | | | | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA384 | | +| | | | | | | 9. SHA512 | | +| Generation | test_c016 | psa_generate_key | Generate a key or key pair | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES | | +| | | | | | 2. Setup the attributes for the key | 2. DES | | +| | | | | | 3. Generate a key or key pair | 3. ECC | | +| | | | | | 4. Get basic metadata about a key | 4. RSA | | +| | | | | | 5. Check if key type and key length matches | | | +| | | | | | 6. Export a key in binary format | | | +| | | | | | 7. Check if the metadata matches | | | +| | | | | | 8. Reset and destroy the key | | | +| | | | | | | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid usage flags | invalid usage flags | | +| | | | | PSA_ERROR_ALREADY_EXISTS | Calling this function with pre-occupied key slot should return this error | Pre-occupied key slot | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function to generate only public key should return this error | 1. Key type as public key | | +| | | | | | | 2. Invalid key type | | +| Generation | test_c017 | psa_generate_random | Generate random bytes | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte data | | +| | | | | | 2. Generate random bytes Run several times to ensure that every output byte will be nonzero at least once | 2. 24 Byte data | | +| | | | | | 3. Check that no more than bytes have been overwritten | 3. 32 Byte data | | +| | | | | | 4. Check that every byte was changed to nonzero at least once. | 4. 64 Byte data | | +| | | | | | | 5. 128 Byte data | | +| | | | | | | 6. 256 Byte data | | +| | | | | | | 7. 512 Byte data | | +| | | | | | | 8. 1000 Byte data | | +| | | | | | | 9. 1024 Byte data | | +| Key Derivation | test_c018 | psa_key_derivation_input_key | Provide an input for key derivation in the form of a key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte key | | +| | | | | | 2. Setup the attributes for the key | | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Set up a key derivation operation | | | +| | | | | | 5. Provide an input for key derivation or key agreement | | | +| | | | | | 6. Abort the key derivation operation | | | +| | | | | PSA_ERROR_NOT_PERMITTED | Calling this function with incorrect data | 1. Invalid usage | | +| | | | | | | 2. Incorrect key algorithm | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Step as label | | +| | | | | | | 2. Step as info | | +| | | | | | | 3. Step as seed | | +| | | | | | | 4. Step as salt | | +| | | | | | | 5. Input key type as AES (not derive) | | +| | | | | | | 6. Key type a RSA public key | | +| | | | | | | 7. Key type as RSA Keypair | | +| | | | | PSA_ERROR_INVALID_HANDLE | Calling this function with destroyed key handle | 1. No key in slot | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function without setup should return this error | | | +| Key Derivation | test_c019 | psa_key_derivation_key_agreement | Perform a key agreement and use the shared secret as input to a key derivation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. ECDH SECP256R1 | | +| | | | | | 2. Setup the attributes for the key | 2. ECDH SECP384R1 | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Set up a key agreement operation | | | +| | | | | | 5. Perform a key agreement | | | +| | | | | | 6. Abort | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Invalid step | | +| | | | | | | 2. Invalid usage | | +| | | | | | | 3. KDF instead of a key agreement algorithm | | +| | | | | | | 4. Public key on different curve | | +| | | | | | | 5. Public key instead of private key | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Zero as key slot | | +| | | | | | | 2. Empty key handle | | +| Key Derivation | test_c020 | psa_key_derivation_output_bytes | Read some data from a key derivation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Key | | +| | | | | | 2. Setup the attributes for the key | 2. Info | | +| | | | | | 3. Import the key if the derivation input is key | | | +| | | | | | 4. Set up a key derivation operation | | | +| | | | | | 5. Set the capacity for the generator | | | +| | | | | | 6. Provide input as key or data depending on the step | | | +| | | | | | 7. Read some data from a key derivation operation | | | +| | | | | | 8. Abort the derivation operation | | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function with only supportive step | 1. Salt | | +| | | | | | | 2. Label | | +| | | | | | | 3. Seed | | +| | | | | | | 4. Aborted operation | | +| | | | | PSA_ERROR_INSUFFICIENT_DATA | Calling this function when there are no capacity | 1. Requesting greater capacity than available | | +| | | | | | | 2. No data available in the operation | | +| Key Derivation | test_c021 | psa_key_derivation_output_key | Derive a key from an ongoing key derivation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Key | | +| | | | | | 2. Setup the attributes for the key | 2. Indo | | +| | | | | | 3. Import the key if the derivation input is key | 3. Label | | +| | | | | | 4. Set up a key derivation operation | 4. Seed | | +| | | | | | 5. Set the capacity for the generator | 5. Salt | | +| | | | | | 6. Provide input as key or data depending on the step | 6. DES key export | | +| | | | | | 7. Setup the attributes for the new key | 7. ECC keypair | | +| | | | | | 8. Derive a key from an ongoing key derivation operation | 9. RSA keypair | | +| | | | | | 9. Abort the derivation operation | | | +| | | | | PSA_ERROR_INSUFFICIENT_DATA | Calling this function with insufficient data | 1. Requesting greater capacity than available | | +| | | | | | | 2. No data available in the operation | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function on an aborted operation shoukd return this error | Aborted operation | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Generating public key | 1. RSA public key | | +| | | | | | | 2. ECC public key | | +| Key Derivation | test_c022 | psa_key_derivation_abort | Abort a key derivation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | | | +| | | | | | 2. Abort the key derivation operation for the different types of initialization | | | +| | | | | | 3. Read some data from a key derivation operation with no data in the operation | | | +| Key Derivation | test_c023 | psa_key_derivation_set_capacity | Set the maximum capacity of a key derivation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Less than operation's capacity | | +| | | psa_key_derivation_get_capacity | Retrieve the current capacity of a key derivation operation | | 2. Start the key derivation operation | 2. Equal to operation's capacity | | +| | | | | | 3. Set the capacity for the generator | | | +| | | | | | 4. Get the capacity for the generator | | | +| | | | | | 5. Check if the capacity as per the expected value | | | +| | | | | | 6. Abort the operation | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | More than operation's capacity | | +| | | | | PSA_ERROR_BAD_STATE | Calling this function on an aborted operation shoukd return this error | 1. Get capacity on an aborted operation | | +| | | | | | | 2. Set capacity on an aborted operation | | +| AEAD | test_c024 | psa_aead_encrypt | Process an authenticated encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. CCM - 16B AES - 13B Nounce & 8B addi data | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM | | +| | | | | | 3. Import the key data into the key slot | 3. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 4. Call aead encrypt | 4. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 5. Check if the status is expected | 5 | | +| | | | | | 6. Check if the cipher text and length is as expected | | | +| | | | | | 7. Destroy and reset the key | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES key | | +| | | | | | | 2. Unsupported algorithm | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Operation on a destroyed key handle | | +| | | | | PSA_ERROR_NOT_PERMITTED | | 1. Small output buffer size | | +| | | | | | | 2. Invalid key usage | | +| AEAD | test_c025 | psa_aead_decrypt | Process an authenticated decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. GCM -16B AES - 12B Nounce & 12B addi data | | +| | | | | | 2. Setup the attributes for the key | 2. CCM - 16B AES - 13B Nounce & 8B addi data | | +| | | | | | 3. Import the key data into the key slot | 3. AES CCM | | +| | | | | | 4. Call aead decrypt | 4. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 5. Check if the status is expected | | | +| | | | | | 6. Check if the cipher text and length is as expected | | | +| | | | | | 7. Destroy and reset the key | | | +| | | | | | | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES key | | +| | | | | | | 2. Unsupported algorithm | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | Invalid tag length | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Destroyed key handle | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid key usage | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | | 1. Invalid cipher text | | +| | | | | | | 2. Invalid cipher text size | | +| Message Authentication Codes | test_c026 | psa_mac_sign_setup | Start a multipart MAC calculation operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 64 Byte HMAC | | +| | | | | | 2. Setup the attributes for the key | 2. 16 Byte AES - CMAC | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Start a multipart MAC calculation operation | | | +| | | | | | 5. Abort the MAC operation | | | +| | | | | | 6. Destroy the key | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte AES - GMAC | | +| | | | | | | 2. Incompatible HMAC for CMAC | | +| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | | +| | | | | | | 4. Truncated MAC too small | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | | +| | | | | | | 2. Truncated MAC too large | | +| | | | | | | 3. Bad algorithm (not a MAC algorithm) | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key handle | | +| | | | | | | 2. Zero as key handle | | +| Message Authentication Codes | test_c027 | psa_mac_update | Add a message fragment to a multipart MAC operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1.64 Byte HMAC SHA256 | | +| | | | | | 2. Setup the attributes for the key | 2. 16 Byte AES - CMAC | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte HMAC SHA512 | | +| | | | | | 4. Start a multipart MAC calculation operation | | | +| | | | | | 5. Add a message fragment to a multipart MAC operation | | | +| | | | | | 6. Finish the calculation of the MAC of a message | | | +| | | | | | 7. Abort a MAC operation | | | +| | | | | | 8. Destroy the key | | | +| | | | | PSA_ERROR_BAD_STATE | | 1. Completed operation as input | | +| | | | | | | 2. Uninitialized operation as input | | +| Message Authentication Codes | test_c028 | psa_mac_sign_finish | Finish the calculation of the MAC of a message | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | | +| | | | | | 2. Setup the attributes for the key | 2. HMAC SHA 256 | | +| | | | | | 3. Import the key data into the key slot | 3. HMAC SHA 512 | | +| | | | | | 4. Start a multipart MAC calculation operation | 4. HMAC SHA 224 (truncated to 8 Byte) | | +| | | | | | 5. Add a message fragment to a multipart MAC operation | 5. CMAC AES 128 | | +| | | | | | 6. Finish the calculation of the MAC of a message | | | +| | | | | | 7. Check if the MAC length matches with the expected length | | | +| | | | | | 8. Check if the MAC data matches with the expected data | | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small size buffer | | +| | | | | PSA_ERROR_BAD_STATE | Finish the calculation of the MAC of a message using same operation should return error | Aborted operation as input | | +| Message Authentication Codes | test_c029 | psa_mac_verify_setup | | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 64 Byte HMAC | | +| | | | | | 2. Setup the attributes for the key | 2. 16 Byte AES - CMAC | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Start a multipart MAC calculation operation | | | +| | | | | | 5. Abort the MAC operation | | | +| | | | | | 6. Destroy the key | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte AES - GMAC | | +| | | | | | | 2. Incompatible HMAC for CMAC | | +| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | | +| | | | | | | 4. Truncated MAC too small | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | | +| | | | | | | 2. Truncated MAC too large | | +| | | | | | | 3. Bad algorithm (unknown MAC algorithm) | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid key handle | | +| | | | | | | 2. Zero as key handle | | +| Message Authentication Codes | test_c030 | psa_mac_verify_finish | Finish the calculation of the MAC of a message and compare it with an expected value | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | | +| | | | | | 2. Setup the attributes for the key | 2. HMAC SHA 256 | | +| | | | | | 3. Import the key data into the key slot | 3. HMAC SHA 512 | | +| | | | | | 4. Start a multipart MAC calculation operation | 4. HMAC SHA 224 (truncated to 8 Byte) | | +| | | | | | 5. Add a message fragment to a multipart MAC operation | 5. CMAC AES 128 | | +| | | | | | 6. Finish the calculation of the MAC of a message and compare with expected value | | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | | 1. Small size buffer | | +| | | | | | | 2. Incorrect expected hash | | +| | | | | PSA_ERROR_BAD_STATE | | Invalid operation as input | | +| Message Authentication Codes | test_c031 | psa_mac_abort | Abort a MAC operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | | +| | | | | | 2. Setup the attributes for the key | 2. HMAC SHA 256 | | +| | | | | | 3. Import the key data into the key slot | 3. HMAC SHA 512 | | +| | | | | | 4. Start a multipart MAC calculation operation | 4. CMAC AES 128 | | +| | | | | | 5. Abort the MAC operation | 5. HMAC truncated | | +| | | | | | 6. Destroy the key | 6. Multiple abort | | +| | | | | | | 7. psa_mac_finish after psa_mac_abort should return failure | | +| Symmetric Ciphers | test_c032 | psa_cipher_encrypt_setup | Set the key for a multipart symmetric encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Set the key for a multipart symmetric encryption operation | 4. DES 64 bit key | | +| | | | | | 5. Reset and destroy the key | 5. Triple DES 2-Key | | +| | | | | | | 6. Triple DES 3-Key | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte raw data | | +| | | | | | | 2. Unknown cipher algorithm | | +| | | | | | | 3. Incompatible key ARC4 | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a cipher algorithm | | +| | | | | | | 2. RSA public key | | +| | | | | | | 3. RSA keypair | | +| | | | | | | 4. EC Public key | | +| | | | | | | 5. EC keypair | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Incorrect usage | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated key handle | | +| | | | | | | 2. Zero as key handle | | +| Symmetric Ciphers | test_c033 | psa_cipher_decrypt_setup | Set the key for a multipart symmetric decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Set the key for a multipart symmetric decryption operation | 4. DES 64 bit key | | +| | | | | | 5. Reset and destroy the key | 5. Triple DES 2-Key | | +| | | | | | | 6. Triple DES 3-Key | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. 16 Byte raw data | | +| | | | | | | 2. Unknown cipher algorithm | | +| | | | | | | 3. Incompatible key ARC4 | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a cipher algorithm | | +| | | | | | | 2. RSA public key | | +| | | | | | | 3. RSA keypair | | +| | | | | | | 4. EC Public key | | +| | | | | | | 5. EC keypair | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated key handle | | +| | | | | | | 2. Zero as key handle | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| Symmetric Ciphers | test_c034 | psa_cipher_generate_iv | Generate an IV for a symmetric encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Set the key for a multipart symmetric decryption operation | 4. DES 64 bit key | | +| | | | | | 5. Generate an IV for a symmetric encryption operation | 5. Triple DES 2-Key | | +| | | | | | 6. Check that if generated iv length match the expected length | 6. Triple DES 3-Key | | +| | | | | | 7. Check that if generated iv are not zero | 7. AES - large iv buffer | | +| | | | | | 8. Reset and destroy the key | 8. DES - large iv buffer | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | 1. AES - small iv buffer | | +| | | | | | | 2. DES - small iv buffer | | +| | | | | PSA_ERROR_BAD_STATE | | 1. Completed operation handle | | +| Symmetric Ciphers | test_c035 | psa_cipher_set_iv | Set the IV for a symmetric encryption or decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Set the key for a multipart symmetric encryption/decryption operation | 4. DES 64 bit key | | +| | | | | | 5. Set an IV for a symmetric encryption/decryption operation | 5. Triple DES 2-Key | | +| | | | | | 6. Reset and destroy the key | 6. Triple DES 3-Key | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. AES - small iv buffer | | +| | | | | | | 2. DES - small iv buffer | | +| | | | | | | 3. AES - large iv buffer | | +| | | | | | | 4. DES - large iv buffer | | +| | | | | PSA_ERROR_BAD_STATE | Setting an IV for a symmetric encryption/decryption operation using the same operator should fail | 1. Completed operation handle | | +| Symmetric Ciphers | test_c036 | psa_cipher_update | Encrypt or decrypt a message fragment in an active cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | | +| | | | | | 2. Setup the attributes for the key | 2. AES CBC_NO_PADDING (Short input) | | +| | | | | | 3. Import the key data into the key slot | 3. AES CBC_PKCS7 | | +| | | | | | 4. Set the key for a multipart symmetric encryption operation | 4. AES CBC_PKCS7 (Short input) | | +| | | | | | 5. Set an IV for a symmetric encryption operation | 5. AES CTR | | +| | | | | | 6. Encrypt or decrypt a message fragment in an active cipher operation | 6. DES CBC (nopad) | | +| | | | | | 7. Check if the output length matches the expected length | 7. 2-key 3DE -CBC (nopad) | | +| | | | | | 8. Check if the output data matches the expected data | 8. 3-key 3DE -CBC (nopad) | | +| | | | | | 9. Reset and destroy the key | | | +| | | | | PSA_ERROR_BAD_STATE | Encrypt or decrypt a message fragment in an invalid cipher operation should fail | Invalid operation as input | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | | +| Symmetric Ciphers | test_c037 | psa_cipher_finish | Finish encrypting or decrypting a message in a cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | | +| | | | | | 2. Setup the attributes for the key | 2. AES CBC_PKCS7 | | +| | | | | | 3. Import the key data into the key slot | 3. AES CBC_PKCS7 (Short input) | | +| | | | | | 4. Set the key for a multipart symmetric encryption operation | 4. AES CTR | | +| | | | | | 5. Set an IV for a symmetric encryption operation | 5. DES CBC (nopad) | | +| | | | | | 6. Encrypt or decrypt a message fragment in an active cipher operation | 6. 2-key 3DE -CBC (nopad) | | +| | | | | | 7. Finish encrypting or decrypting a message in a cipher operation | 7. 3-key 3DE -CBC (nopad) | | +| | | | | | 8. Check if the output length matches the expected length | | | +| | | | | | 9. Check if the output data matches the expected data | | | +| | | | | | 10. Reset and destroy the key | | | +| | | | | PSA_ERROR_BAD_STATE | Encrypt or decrypt a message fragment in an invalid cipher operation should fail | Invalid operation as input | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | AES CBC_NO_PADDING (Short input) | | +| Symmetric Ciphers | test_c038 | psa_cipher_abort | Abort a cipher operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. Encrypt - AES CBC_NO_PADDING | | +| | | | | | 2. Setup the attributes for the key | 2. Encrypt - AES CBC_PKCS7 | | +| | | | | | 3. Import the key data into the key slot | 3. Encrypt - AES CTR | | +| | | | | | 4. Set the key for a multipart symmetric encryption/decryption operation | 4. Encrypt - DES CBC (nopad) | | +| | | | | | 5. Abort a cipher operation | 5. Encrypt - 2-key 3DE -CBC (nopad) | | +| | | | | | 6. Multiple abort cipher operation should return success | 6. Encrypt - 3-key 3DE -CBC (nopad) | | +| | | | | | | 7. Decrypt - AES CBC_NO_PADDING | | +| | | | | | | 8. Decrypt - AES CBC_PKCS7 | | +| | | | | | | 9. Decrypt - AES CTR | | +| | | | | | | 10. Decrypt - DES CBC (nopad) | | +| | | | | | | 11. Decrypt - 2-key 3DE -CBC (nopad) | | +| | | | | | | 12. Decrypt - 3-key 3DE -CBC (nopad) | | +| | | | | | | 13. psa_cipher_update after psa_cipher_abort should fail | | +| Asymmetric Cryptography | test_c039 | psa_asymmetric_encrypt | Encrypt a short message with a public key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA PKCS1V15 | | +| | | | | | 2. Setup the attributes for the key | 2. RSA OAEP SHA256 | | +| | | | | | 3. Import the key data into the key slot | 3. RSA OAEP SHA256 with label | | +| | | | | | 4. Encrypt a short message with a public key | 4. RSA KEYPAIR PKCS1V15 | | +| | | | | | 5. Check if the output length matches with the expected output length | | | +| | | | | | 6. Decrypt the cipher text | | | +| | | | | | 7. Check if the output length matches with the input length | | | +| | | | | | 8. Check if the output matches with the given input data | | | +| | | | | | 9. Reset and destroy the key | | | +| | | | | | | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type | | +| | | | | | | 2. Invalid algorithm | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Invalid handle | | +| | | | | | | 2. Zero as key handle | | +| Asymmetric Cryptography | test_c040 | psa_asymmetric_decrypt | Decrypt a short message with a private key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 | | +| | | | | | 2. Setup the attributes for the key | 2. RSA KEYPAIR OAEP SHA256 | | +| | | | | | 3. Import the key data into the key slot | 3. RSA KEYPAIR OAEP SHA256 with label | | +| | | | | | 4. Decrypt a short message with a private key | | | +| | | | | | 5. Check if the output length matches with the expected length | | | +| | | | | | 6. Check if the output matches with the expected data | | | +| | | | | | 7. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT+E524 | | 1. Invalid key type (RSA public key) | | +| | | | | | | 2. Invalid algorithm | | +| | | | | | | 3. Invalid key type (AES Key) | | +| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Uninitialized key handle | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | | +| Asymmetric Cryptography | test_c041 | psa_asymmetric_sign | Sign a hash or short message with a private key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 RAW | | +| | | | | | 2. Setup the attributes for the key | 2. RSA KEYPAIR PKCS1V15 SHA-256 | | +| | | | | | 3. Import the key data into the key slot | 3. ECDSA KEYPAIR SECP256R1 SHA-256 | | +| | | | | | 4. Sign a hash or short message with a private key | | | +| | | | | | 4. Check if the output length matches with the expected length | | | +| | | | | | 5. Check if the output matches with the expected data | | | +| | | | | | 6. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid key type (RSA public key) | | +| | | | | | | 2. Invalid algorithm | | +| | | | | | | 3. Invalid key type (AES Key) | | +| | | | | | | 4. Wrong hash size | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Uninitialized key handle | | +| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | | +| Asymmetric Cryptography | test_c042 | psa_asymmetric_verify | Verify the signature a hash or short message using a public key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. RSA KEYPAIR PKCS1V15 RAW | | +| | | | | | 2. Setup the attributes for the key | 2. RSA KEYPAIR PKCS1V15 SHA-256 | | +| | | | | | 3. Import the key data into the key slot | 3. ECDSA KEYPAIR SECP256R1 SHA-256 | | +| | | | | | 4. Verify the signature a hash or short message using a public key | 4. RSA public key | | +| | | | | | 5. Reset and destroy the key | 5. EC public key | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Invalid algorithm | | +| | | | | | | 2. Wrong hash size | | +| | | | | PSA_ERROR_INVALID_HANDLE | | | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | | Wrong signature size | | +| | | | | | | Wrong signature | | +| | | | | PSA_ERROR_DOES_NOT_EXIST | | Empty key slot | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | Invalid key type (AES Key) | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer | | +| Key Derivation | test_c043 | psa_raw_key_agreement | Perform a key agreement and return the raw shared secret | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. ECDH SECP256R1 | | +| | | | | | 2. Setup the attributes for the key | 2. ECDH SECP384R1 | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Set up a key agreement operation | | | +| | | | | | 5. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Not a key agreement alg | | +| | | | | | | 2. Public key on different curve | | +| | | | | | | 3. Public key instead of private key | | +| | | | | | | 4. Unknown KDF | | +| | | | | | | 5. Small size buffer | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Uninitialized key handle | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid usage | | +| Key Management | test_c044 | psa_copy_key | Copy key material from one location to another | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES with constraints | | +| | | | | | 4. Setup the attributes for the target key | 4. 2048 RSA public key | | +| | | | | | 5. Make a copy of a key | 5. 2048 RSA key pair | | +| | | | | | 6. Destroy the source to ensure that this doesn't affect the target | 6. DES 64 bit key | | +| | | | | | 7. Export a key in binary format and check if it matches with source material | 7. Triple DES 2-Key | | +| | | | | | 8. Reset and destroy the key | 8. Triple DES 3-Key | | +| | | | | | | 9. EC Public key | | +| | | | | | | 10. EC key pair | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Incompatible target policy(source and target) | | +| | | | | | | 2. Incompatible constraint | | +| | | | | | | 3. Incompatible target policy | | +| | | | | | | 4. Copy on a destroyed source | | +| | | | | PSA_ERROR_INVALID_HANDLE | | 1. Unallocated target key slot | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Usage set as export (not copy) | | +| Key Management | test_c045 | psa_hash_clone | Clone a hash operation. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. MD2 | | +| | | | | | 2. Start a multipart hash operation | 2. MD4 | | +| | | | | | 3. Clone a hash operation | 3. MD5 | | +| | | | | | 4. Add a message fragment to a multipart hash source_operation | 4. RIPEMD160 | | +| | | | | | 5. Finish the calculation of the hash of a message | 5. SHA1 | | +| | | | | | 6. Abort the hash operation | 6. SHA224 | | +| | | | | | | 7. SHA256 | | +| | | | | | | 8. SHA512 | | +| | | | | PSA_ERROR_BAD_STATE | Cloning to an active hash operation should be an error | 1. Active clone hash | | +| | | | | | | 2. Aborted operator | | +| Message Authentication Codes | test_c046 | psa_mac_compute | Calculate the MAC (message authentication code) of a message. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | | +| | | | | | 2. Setup the attributes for the key | 2. CMAC AES 128 | | +| | | | | | 3. Import the key data into the key slot | 3. HMAC SHA 224 (truncated to 8 Byte | | +| | | | | | 4. Calculate the MAC (message authentication code) of a message | 4. HMAC SHA 512 | | +| | | | | | 5. Check if the MAC length and data matches with the expected values | 5. HMAC SHA 256 | | +| | | | | | 6. Reset and destroy the key | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported values | 1. Incompactible HMAC for CMAC | | +| | | | | | | 2. Invalid usage | | +| | | | | | | 3. Truncated MAC too small | | +| | | | | | | 4. Bad algorithm (unknown MAC algorithm) | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | Calling this function with invalid parameter should return this error | 1. Invalid key type | | +| | | | | | | 2. Truncated MAC too large | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small size buffer | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Destroyed key handle | | +| Message Authentication Codes | test_c047 | psa_mac_verify | Calculate the MAC of a message and compare it with a reference value | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. HMAC SHA 224 | | +| | | | | | 2. Setup the attributes for the key | 2. HMAC SHA 256 | | +| | | | | | 3. Import the key data into the key slot | 3. HMAC SHA 512 | | +| | | | | | 4. Calculate and verify MAC with reference value | 4. HMAC SHA 224 (truncated to 8 Byte) | | +| | | | | | 5. Reset and destroy the key | 5. CMAC AES 128 | | +| | | | | PSA_ERROR_NOT_SUPPORTED | Calling this function with unsupported values | 1. Incompactible HMAC for CMAC | | +| | | | | | | 2. Invalid usage | | +| | | | | | | 3. Truncated MAC too small | | +| | | | | | | 4. Bad algorithm (unknown MAC algorithm) | | +| | | | | PSA_ERROR_INVALID_SIGNATURE | | 1. Small size buffer | | +| | | | | | | 2. Incorrect expected MAC | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Truncated MAC too large | | +| | | | | | | 2. Invalid key type | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Destroyed key handle | | +| Symmetric Ciphers | test_c048 | psa_cipher_encrypt | Encrypt a message using a symmetric cipher. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | | +| | | | | | 2. Setup the attributes for the key | 2. AES CBC_PKCS7 | | +| | | | | | 3. Import the key data into the key slot | 3. AES CBC_PKCS7 (Short input) | | +| | | | | | 4. Encrypt a message using a symmetric cipher | 4. AES CTR | | +| | | | | | 5. Check if the output matches the expected value | 5. AES CTR (short input) | | +| | | | | | 6. Reset and destroy the key | 6. DES CBC (nopad) | | +| | | | | | | 7. 2-key 3DE -CBC (nopad) | | +| | | | | | | 8. 3-key 3DE -CBC (nopad) | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Decrypt - AES CBC_NO_PADDING | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | AES CBC_NO_PADDING (Short input) | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Aborted key handle | | +| Symmetric Ciphers | test_c049 | psa_cipher_decrypt | Decrypt a message using a symmetric cipher. | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES CBC_NO_PADDING | | +| | | | | | 2. Setup the attributes for the key | 2. AES CBC_PKCS7 | | +| | | | | | 3. Import the key data into the key slot | 3. AES CBC_PKCS7 (Short input) | | +| | | | | | 4. Encrypt a message using a symmetric cipher | 4. AES CTR | | +| | | | | | 5. Check if the output matches the expected value | 5. AES CTR (short input) | | +| | | | | | 6. Reset and destroy the key | 6. DES CBC (nopad) | | +| | | | | | | 7. 2-key 3DE -CBC (nopad) | | +| | | | | | | 8. 3-key 3DE -CBC (nopad) | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | AES CBC_NO_PADDING (Short input) | | +| | | | | PSA_ERROR_NOT_PERMITTED | | AES CBC_NO_PADDING | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small output buffer size | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Aborted key handle | | +| Key Management | test_c050 | psa_open_key | Open a handle to an existing persistent key | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Save the details of current check, key id and key handle value in NV memory | 4. 2048 RSA public key | | +| | | | | | 5. Reset the system | 5. 2048 RSA keypair | | +| | | | | | 6. After reset, get the values of check, key id and key handle value before the system was reset from NV | 6. DES 64 bit key | | +| | | | | | 7. Get the attributes of the imported key and check if it matches the given value | 7. Triple DES 2-Key | | +| | | | | | 8. Export a key in binary format | 8. Triple DES 3-Key | | +| | | | | | 9. Check the value of the exported key | 9. EC Public key | | +| | | | | | 10. Reset and destroy the key | 10. EC keypair | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | Key data greater than the algorithm size | | +| Key Management | test_c051 | psa_close_key | Close a key handle | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. 16 Byte AES | | +| | | | | | 2. Setup the attributes for the key | 2. 24 Byte AES | | +| | | | | | 3. Import the key data into the key slot | 3. 32 Byte AES | | +| | | | | | 4. Close the key handle | 4. 2048 RSA public key | | +| | | | | | 5. Check if all the attributes are erased | 5. 2048 RSA keypair | | +| | | | | | 6. Open the key handle and retrieve the data | 6. DES 64 bit key | | +| | | | | | | 7. Triple DES 2-Key | | +| | | | | | | 8. Triple DES 3-Key | | +| | | | | | | 9. EC Public key | | +| | | | | | | 10. EC keypair | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Closing an empty key handle | | +| AEAD | test_c052 | psa_aead_encrypt_setup | Set the key for a multipart authenticated encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated encryption operation | | | +| | | | | | 5. Destroy the key | | | +| | | | | | 6. Abort the AEAD operation | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES Key | | +| | | | | | | 2. Unsupported Algorithm | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid key usage | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Destroyed key handle | | +| AEAD | test_c053 | psa_aead_decrypt_setup | Set the key for a multipart authenticated decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Destroy the key | | | +| | | | | | 6. Abort the AEAD operation | | | +| | | | | PSA_ERROR_NOT_SUPPORTED | | 1. DES Key | | +| | | | | | | 2. Unsupported Algorithm | | +| | | | | PSA_ERROR_NOT_PERMITTED | | Invalid key usage | | +| | | | | PSA_ERROR_INVALID_HANDLE | | Destroyed key handle | | +| AEAD | test_c054 | psa_aead_generate_nonce | Generate a random nonce for an authenticated encryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Generate a random nonce for an authenticated encryption operation | | | +| | | | | | 6. Check that if generated iv are non zero | | | +| | | | | | 7. Destroy the key | | | +| | | | | | 8. Reset the key attributes | | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small buffer size | | +| | | | | PSA_ERROR_BAD_STATE | | 1. Call generate a random nonce twice | | +| | | | | | | 2. Aborted operation | | +| AEAD | test_c055 | psa_aead_set_nonce | Set the nonce for an authenticated encryption or decryption operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Small nounce size | | +| | | | | | | 2. Large nonce size | | +| | | | | PSA_ERROR_BAD_STATE | | 1. Call set nonce twice | | +| | | | | | | 2. Aborted operation | | +| AEAD | test_c056 | psa_aead_set_lengths | Declare the lengths of the message and additional data for AEAD | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Declare the lengths of the message and additional data for AEAD | | | +| | | | | | 7. Abort the AEAD operation | | | +| | | | | | 8. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Zero ad size | | +| | | | | | | 2. Zero plaintext size | | +| | | | | | | 3. Invalid lengths | | +| | | | | | | 4. Vey large lengths | | +| | | | | PSA_ERROR_BAD_STATE | | 1. Failed operation | | +| | | | | | | 2. Aborted operation | | +| AEAD | test_c057 | psa_aead_update_ad | Pass additional data to an active AEAD operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Declare the lengths of the message and additional data for AEAD | | | +| | | | | | 7. Pass additional data to an active AEAD operation | | | +| | | | | | 8. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Zero ad size | | +| | | | | | | 2. Zero plaintext size | | +| | | | | | | 3. Invalid lengths | | +| | | | | | | 4. Vey large lengths | | +| | | | | PSA_ERROR_BAD_STATE | | Inactive AEAD operation | | +| AEAD | test_c058 | psa_aead_update | Encrypt or decrypt a message fragment in an active AEAD operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Declare the lengths of the message and additional data for AEAD | | | +| | | | | | 7. Pass additional data to an active AEAD operation | | | +| | | | | | 8. Encrypt or decrypt a message fragment in an active AEAD operation | | | +| | | | | | 9. Compare the output and its length with the expected values | | | +| | | | | | 10. Abort the AEAD operation | | | +| | | | | | 11. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Zero plaintext size | | +| | | | | | | 2. Input length overflows plaintext length | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small buffer size | | +| | | | | PSA_ERROR_BAD_STATE | | Inactive AEAD operation | | +| AEAD | test_c059 | psa_aead_finish | Finish encrypting a message in an AEAD operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Declare the lengths of the message and additional data for AEAD | | | +| | | | | | 7. Pass additional data to an active AEAD operation | | | +| | | | | | 8. Encrypt or decrypt a message fragment in an active AEAD operation | | | +| | | | | | 9. Finish encrypting a message in an AEAD operation | | | +| | | | | | 10. Compare the output and its length with the expected values | | | +| | | | | | 11. Abort the AEAD operation | | | +| | | | | | 12. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | 1. Zero plaintext size | | +| | | | | | | 2. Input length overflows plaintext length | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small buffer size | | +| | | | | PSA_ERROR_BAD_STATE | | Inactive AEAD operation | | +| AEAD | test_c060 | psa_aead_abort | Abort an AEAD operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Abort the AEAD operation | | | +| | | | | | 6. Reset and destroy the key | | | +| AEAD | test_c061 | psa_aead_verify | Finish authenticating and decrypting a message in an AEAD operation | PSA_SUCCESS | 1. Initialize the PSA crypto library | 1. AES-CCM | | +| | | | | | 2. Setup the attributes for the key | 2. AES-CCM 24 bytes Tag length = 4 | | +| | | | | | 3. Import the key data into the key slot | 3. GCM - 16B AES - 12B Nounce & 12B addi data | | +| | | | | | 4. Set the key for a multipart authenticated decryption operation | | | +| | | | | | 5. Set the nonce for an authenticated encryption operation | | | +| | | | | | 6. Declare the lengths of the message and additional data for AEAD | | | +| | | | | | 7. Pass additional data to an active AEAD operation | | | +| | | | | | 8. Encrypt or decrypt a message fragment in an active AEAD operation | | | +| | | | | | 9. Finish decrypting a message in an AEAD operation | | | +| | | | | | 10. Compare the output and its length with the expected values | | | +| | | | | | 11. Abort the AEAD operation | | | +| | | | | | 12. Reset and destroy the key | | | +| | | | | PSA_ERROR_INVALID_ARGUMENT | | Input length is less than plaintext length | | +| | | | | PSA_ERROR_BUFFER_TOO_SMALL | | Small buffer size | | +| | | | | PSA_ERROR_BAD_STATE | | Inactive operator | | ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index 289dc5d8..28713398 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -40,6 +40,9 @@ #define SP_HEAP_MEM_SUPP #endif /* PSA_CMAKE_BUILD */ +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h index f18a7852..443e0bc2 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h @@ -94,13 +94,13 @@ #error "ARCH_TEST_CTR_AES defined, but not all prerequisites" #endif -#if (defined(ARCH_TEST_CBC_AES)|| defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_AES defined, but not all prerequisites" #endif #if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) ||!defined(ARCH_TEST_CIPER_MODE_CBC)) + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) #error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" #endif diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c index 3df6aa8d..fd2e0557 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c @@ -28,96 +28,124 @@ **/ int32_t pal_crypto_function(int type, va_list valist) { - int i; - size_t size, *length, salt_length, label_length, ciphertext_size; - uint8_t *buffer, *ciphertext; - const uint8_t *salt, *label, *nonce, *additional_data; - uint8_t *plaintext; - uint32_t status; - const void *extra; - size_t extra_size, capacity, *gen_cap, nonce_length, additional_data_length; - psa_key_handle_t handle, *key_handle, target_handle; - psa_key_type_t key_type, *key_type_out; - psa_key_policy_t *policy; - psa_key_usage_t usage, *usage_out; - psa_key_lifetime_t *lifetime_out; - psa_algorithm_t alg, *alg_out; - psa_hash_operation_t *hash_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_crypto_generator_t *generator; - + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; switch (type) { case PAL_CRYPTO_INIT: return psa_crypto_init(); case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t*); + buffer = va_arg(valist, uint8_t *); size = va_arg(valist, int); return psa_generate_random(buffer, size); case PAL_CRYPTO_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - status = psa_import_key(handle, key_type, buffer, size); + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; case PAL_CRYPTO_EXPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_key(handle, buffer, size, length); - return status; + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t*)); - size = va_arg(valist, int); - length = (size_t *)va_arg(valist, size_t*); - status = psa_export_public_key(handle, buffer, size, length); - return status; - case PAL_CRYPTO_KEY_POLICY_INIT: - policy = va_arg(valist, psa_key_policy_t*); - memset(policy, 0, sizeof(psa_key_policy_t)); + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); return 0; - case PAL_CRYPTO_KEY_POLICY_SET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage = va_arg(valist, psa_key_usage_t); - alg = va_arg(valist, psa_algorithm_t); - psa_key_policy_set_usage(policy, usage, alg); + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); return 0; - case PAL_CRYPTO_SET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_set_key_policy(handle, policy); - case PAL_CRYPTO_DESTROY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - status = psa_destroy_key(handle); - return status; - case PAL_CRYPTO_GET_KEY_INFORMATION: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type_out = va_arg(valist, psa_key_type_t*); - length = (size_t *)va_arg(valist, size_t*); - status = psa_get_key_information(handle, key_type_out, length); - return status; - case PAL_CRYPTO_GET_KEY_POLICY: - handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_get_key_policy(handle, policy); - case PAL_CRYPTO_KEY_POLICY_GET_USAGE: - policy = va_arg(valist, psa_key_policy_t*); - usage_out = va_arg(valist, psa_key_usage_t*); - *usage_out = psa_key_policy_get_usage(policy); + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); return 0; - case PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM: - policy = va_arg(valist, psa_key_policy_t*); - alg_out = va_arg(valist, psa_algorithm_t*); - *alg_out = psa_key_policy_get_algorithm(policy); + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); return 0; case PAL_CRYPTO_GET_KEY_LIFETIME: - handle = (psa_key_handle_t)va_arg(valist, int); - lifetime_out = va_arg(valist, psa_key_lifetime_t*); - return psa_get_key_lifetime(handle, lifetime_out); + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); case PAL_CRYPTO_HASH_SETUP: hash_operation = va_arg(valist, psa_hash_operation_t*); alg = va_arg(valist, psa_algorithm_t); @@ -141,44 +169,31 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); - case PAL_CRYPTO_GENERATE_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - extra = va_arg(valist, const void*); - extra_size = va_arg(valist, size_t); - return psa_generate_key(handle, key_type, size, extra, extra_size); - case PAL_CRYPTO_GENERATOR_READ: - generator = va_arg(valist, psa_crypto_generator_t*); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, int); - return psa_generator_read(generator, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: alg = va_arg(valist, psa_algorithm_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - label = va_arg(valist, const uint8_t *); - label_length = va_arg(valist, size_t); - capacity = va_arg(valist, size_t); - return psa_key_derivation(generator, handle, alg, salt, salt_length, label, - label_length, capacity); - case PAL_CRYPTO_GET_GENERATOR_CAPACITY: - generator = va_arg(valist, psa_crypto_generator_t*); - gen_cap = va_arg(valist, size_t*); - return psa_get_generator_capacity(generator, gen_cap); - case PAL_CRYPTO_GENERATOR_IMPORT_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - key_type = va_arg(valist, psa_key_type_t); - size = va_arg(valist, size_t); - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_import_key(handle, key_type, size, generator); - case PAL_CRYPTO_GENERATOR_ABORT: - generator = va_arg(valist, psa_crypto_generator_t*); - return psa_generator_abort(generator); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); case PAL_CRYPTO_AEAD_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -189,10 +204,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_encrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); case PAL_CRYPTO_AEAD_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); nonce = va_arg(valist, const uint8_t *); nonce_length = va_arg(valist, size_t); @@ -203,13 +218,74 @@ int32_t pal_crypto_function(int type, va_list valist) plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_aead_decrypt(handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, handle, alg); + return psa_mac_sign_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_UPDATE: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -223,9 +299,9 @@ int32_t pal_crypto_function(int type, va_list valist) return psa_mac_sign_finish(mac_operation, buffer, size, length); case PAL_CRYPTO_MAC_VERIFY_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, handle, alg); + return psa_mac_verify_setup(mac_operation, key_handle, alg); case PAL_CRYPTO_MAC_VERIFY_FINISH: mac_operation = va_arg(valist, psa_mac_operation_t*); buffer = va_arg(valist, uint8_t*); @@ -234,8 +310,27 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -244,10 +339,10 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t *); size = va_arg(valist, size_t); @@ -256,18 +351,18 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, handle, alg); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: cipher_operation = va_arg(valist, psa_cipher_operation_t *); - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, handle, alg); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); case PAL_CRYPTO_CIPHER_GENERATE_IV: cipher_operation = va_arg(valist, psa_cipher_operation_t *); buffer = va_arg(valist, uint8_t*); @@ -287,7 +382,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); + length); case PAL_CRYPTO_CIPHER_FINISH: cipher_operation = va_arg(valist, psa_cipher_operation_t *); ciphertext = va_arg(valist, uint8_t *); @@ -297,39 +392,110 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_SIGN: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); length = va_arg(valist, size_t*); - return psa_asymmetric_sign(handle, alg, buffer, size, ciphertext, ciphertext_size, - length); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); case PAL_CRYPTO_ASYMMTERIC_VERIFY: - handle = (psa_key_handle_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); ciphertext = va_arg(valist, uint8_t *); ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(handle, alg, buffer, size, ciphertext, ciphertext_size); - case PAL_CRYPTO_KEY_AGREEMENT: - generator = va_arg(valist, psa_crypto_generator_t*); - handle = (psa_key_handle_t)va_arg(valist, int); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_agreement(generator, handle, buffer, size, alg); - case PAL_CRYPTO_ALLOCATE_KEY: - key_handle = (psa_key_handle_t *)va_arg(valist, int*); - return psa_allocate_key(key_handle); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); case PAL_CRYPTO_COPY_KEY: - handle = (psa_key_handle_t)va_arg(valist, int); - target_handle = (psa_key_handle_t)va_arg(valist, int); - policy = va_arg(valist, psa_key_policy_t*); - return psa_copy_key(handle, target_handle, policy); + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); case PAL_CRYPTO_FREE: for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) psa_destroy_key(i); diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h index d1dabfa4..486f7935 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h @@ -21,55 +21,82 @@ #include "pal_common.h" enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_GET_KEY_INFO = 0x7, - PAL_CRYPTO_KEY_POLICY_INIT = 0x8, - PAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - PAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - PAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - PAL_CRYPTO_SET_KEY_POLICY = 0xC, - PAL_CRYPTO_GET_KEY_POLICY = 0xD, - PAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - PAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - PAL_CRYPTO_HASH_SETUP = 0x11, - PAL_CRYPTO_HASH_UPDATE = 0x12, - PAL_CRYPTO_HASH_VERIFY = 0x13, - PAL_CRYPTO_HASH_FINISH = 0x14, - PAL_CRYPTO_HASH_ABORT = 0x15, - PAL_CRYPTO_GENERATE_KEY = 0x16, - PAL_CRYPTO_GENERATOR_READ = 0x17, - PAL_CRYPTO_KEY_DERIVATION = 0x18, - PAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - PAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - PAL_CRYPTO_GENERATOR_ABORT = 0x1B, - PAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - PAL_CRYPTO_AEAD_DECRYPT = 0x1D, - PAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - PAL_CRYPTO_MAC_UPDATE = 0x1F, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - PAL_CRYPTO_MAC_ABORT = 0x23, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - PAL_CRYPTO_CIPHER_SET_IV = 0x2C, - PAL_CRYPTO_CIPHER_UPDATE = 0x2D, - PAL_CRYPTO_CIPHER_FINISH = 0x2E, - PAL_CRYPTO_CIPHER_ABORT = 0x2F, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - PAL_CRYPTO_KEY_AGREEMENT = 0x32, - PAL_CRYPTO_ALLOCATE_KEY = 0x33, - PAL_CRYPTO_COPY_KEY = 0x34, - PAL_CRYPTO_FREE = 0xFE, + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, }; int32_t pal_crypto_function(int type, va_list valist); diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index ae2bdba4..38ed2836 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -17,24 +17,14 @@ #include "pal_attestation_crypto.h" -static uint32_t public_key_registered = 0; - +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static uint32_t check_hash_sizes(void) -{ - if (T_COSE_CRYPTO_SHA256_SIZE != PSA_HASH_SIZE(PSA_ALG_SHA_256)) - { - return PAL_ATTEST_HASH_FAIL; - } - - return PAL_ATTEST_SUCCESS; -} - static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) { psa_ecc_curve_t psa_curve; @@ -82,130 +72,94 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) { - int32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; - - cose_ret = check_hash_sizes(); - if (cose_ret) - { - goto error; - } + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + psa_algorithm_t psa_alg; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; - psa_ret = psa_hash_setup(&psa_hash_ctx->operation, cose_hash_alg_id_to_psa(cose_hash_alg_id)); + /* Actually do the hash set up */ + hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); - if (psa_ret == PAL_ATTEST_SUCCESS) - { - psa_hash_ctx->status = PAL_ATTEST_SUCCESS; - cose_ret = PAL_ATTEST_SUCCESS; - } - else if (psa_ret == PSA_ERROR_NOT_SUPPORTED) - { - cose_ret = PAL_ATTEST_HASH_UNSUPPORTED; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Copy the PSA handle back into the context */ + hash_ctx->context.handle = psa_hash.handle; -error: - return cose_ret; + /* Map errors and return */ + return (psa_status_t)hash_ctx->status; } void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf_c data_to_hash) { - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; + + if (hash_ctx->status != PSA_SUCCESS) + return; + + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ return; } - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + /* Actually hash the data */ + hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - if (data_to_hash.ptr != NULL) - { - psa_hash_ctx->status = psa_hash_update(&psa_hash_ctx->operation, - data_to_hash.ptr, - data_to_hash.len); - } - else - { - /* Intentionally do nothing, just computing the size of the token */ - } - } + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; } int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - uint32_t cose_ret = PAL_ATTEST_SUCCESS; - psa_status_t psa_ret; - struct pal_cose_psa_crypto_hash *psa_hash_ctx; + psa_hash_operation_t psa_hash; - if (sizeof(struct pal_cose_crypto_hash) < sizeof(struct pal_cose_psa_crypto_hash)) - { - cose_ret = PAL_ATTEST_HASH_FAIL; - goto error; - } + /* Copy the PSA handle out of the generic context */ + psa_hash.handle = (uint32_t)hash_ctx->context.handle; - psa_hash_ctx = (struct pal_cose_psa_crypto_hash *)hash_ctx; + if (hash_ctx->status != PSA_SUCCESS) + goto Done; - if (psa_hash_ctx->status == PAL_ATTEST_SUCCESS) - { - psa_ret = psa_hash_finish(&psa_hash_ctx->operation, - buffer_to_hold_result.ptr, - buffer_to_hold_result.len, - &(hash_result->len)); - - if (psa_ret == PAL_ATTEST_SUCCESS) - { - hash_result->ptr = buffer_to_hold_result.ptr; - cose_ret = 0; - } - else if (psa_ret == PSA_ERROR_BUFFER_TOO_SMALL) - { - cose_ret = PAL_ATTEST_HASH_BUFFER_SIZE; - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } - } - else - { - cose_ret = PAL_ATTEST_HASH_FAIL; - } + /* Actually finish up the hash */ + hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + + hash_result->ptr = buffer_to_hold_result.ptr; + + /* Copy the PSA handle back into the context. */ + hash_ctx->context.handle = psa_hash.handle; + +Done: + return ((psa_status_t)hash_ctx->status); -error: - return cose_ret; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t status = PAL_ATTEST_SUCCESS; + uint32_t return_value = 0; struct pal_cose_crypto_hash hash_ctx; - status = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (status) - return status; + return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); + if (return_value) + goto Done; pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + return_value = pal_cose_crypto_hash_finish(&hash_ctx, + buffer_for_hash, + hash); - return status; +Done: + return return_value; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -223,18 +177,19 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); QCBOREncode_OpenArray(&cbor_encode_ctx); + /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, - COSE_SIG_CONTEXT_STRING_SIGNATURE1); + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, - protected_headers); - /* sign_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ /* external_aad */ QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - /* fake payload */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); QCBOREncode_CloseArray(&cbor_encode_ctx); /* Get the result and convert it to struct q_useful_buf_c representation */ @@ -242,7 +197,8 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (qcbor_result) { /* Mainly means that the protected_headers were too big - (which should never happen) */ + * (which should never happen) + */ status = PAL_ATTEST_ERR_SIGN_STRUCT; goto Done; } @@ -257,90 +213,129 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha if (status) goto Done; - /* Hash the first part of the TBS. Take all but the last two - * bytes. The last two bytes are the fake payload from above. It - * is replaced by the real payload which is hashed next. The fake - * payload is needed so the array count is right. This is one of - * the main things that make it possible to implement with one - * buffer for the whole cose sign1. + /* This is hashing of the first part, all the CBOR + * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, - tbs_first_part.len - 2)); + pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); - /* Hash the payload */ + /* Hash the payload, the second part. */ pal_cose_crypto_hash_update(&hash_ctx, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); Done: return status; } -uint32_t pal_import_attest_key(int32_t alg) +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { - psa_key_type_t attest_key_type; - size_t public_key_size; - psa_status_t status = PSA_SUCCESS; - psa_key_policy_t policy; - psa_ecc_curve_t psa_curve; - psa_key_handle_t public_key_handle; + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); + psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; - /* Mapping of COSE curve type to PSA curve types */ - psa_curve = attest_map_elliptic_curve_type(P_256); - if (psa_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_VERIFY, alg); +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return status; + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return status; + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - /* Register public key to crypto service */ - public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - status = psa_import_key(public_key_handle, + /* Import the public key */ + status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, + (const uint8_t *)&attest_public_key, public_key_size + 1); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + if (psa_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + (const uint8_t *)&attest_public_key, + public_key_size + 1, + &public_key_handle); + + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif return status; } +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) { - uint32_t status = PAL_ATTEST_SUCCESS; + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - if (!public_key_registered) - { - status = pal_import_attest_key(cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; - public_key_registered = 1; - } + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; -/* - * Enable the verify function when Trusted Firmare - M Supports + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; - * Verify the signature a hash or short message using a public key. - status = psa_asymmetric_verify(public_key_handle, - cose_algorithm_id, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); -*/ - return status; + return PAL_ATTEST_SUCCESS; } diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index 2d63ad13..2175e656 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -22,9 +22,9 @@ typedef struct{ uint8_t *pubx_key; - uint32_t pubx_key_size; + size_t pubx_key_size; uint8_t *puby_key; - uint32_t puby_key_size; + size_t puby_key_size; } ecc_key_t; struct ecc_public_key_t { @@ -48,11 +48,11 @@ static const struct ecc_public_key_t attest_public_key = { }; struct pal_cose_crypto_hash { - /* Can't put the actual size here without creating dependecy on - * actual hash implementation, so this is a fairly large and - * accommodating size. - */ - uint8_t bytes[128]; + union { + void *ptr; + uint64_t handle; + } context; + int64_t status; }; struct pal_cose_psa_crypto_hash { @@ -95,7 +95,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); -uint32_t pal_import_attest_key(int32_t alg); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c index 178fdc9c..60c71645 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c @@ -29,7 +29,7 @@ static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, QCBORError qcbor_result; QCBOREncodeContext cbor_encode_ctx; int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; + struct q_useful_buf_c encoded_key_id; /* Get the public key x and y */ /* Encode it into a COSE_Key structure */ @@ -136,26 +136,18 @@ static int get_item_in_map(QCBORDecodeContext *decode_context, } static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child, - bool *loop_back) + struct q_useful_buf_c *child) { struct items_to_get_t item_list[3]; item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = T_COSE_SHORT_CIRCUIT_LABEL; - item_list[2].label = 0; - *loop_back = false; + item_list[1].label = 0; if (get_items_in_map(decode_context, item_list)) { return PAL_ATTEST_ERROR; } - if (item_list[1].item.uDataType == QCBOR_TYPE_TRUE) - { - *loop_back = true; - } - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) { return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; @@ -324,11 +316,10 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, token_size : Size of the token buffer @return - error status **/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size) +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) { int32_t status = PAL_ATTEST_SUCCESS; - bool short_circuit; int32_t cose_algorithm_id; QCBORItem item; QCBORDecodeContext decode_context; @@ -412,8 +403,7 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_s return status; /* Parse the unprotected headers and check the data type and value */ - short_circuit = false; - status = parse_unprotected_headers(&decode_context, &kid, &short_circuit); + status = parse_unprotected_headers(&decode_context, &kid); if (status != PAL_ATTEST_SUCCESS) return status; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index 8a0c5455..e7449a00 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -140,8 +140,7 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) #define NULL_USEFUL_BUF_C NULLUsefulBufC @@ -158,6 +157,8 @@ enum attestation_error_code { PAL_ATTEST_HASH_BUFFER_SIZE, PAL_ATTEST_ERR_PROTECTED_HEADERS, PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERROR, }; @@ -166,5 +167,5 @@ struct items_to_get_t { QCBORItem item; }; -int32_t pal_initial_attest_verify_token(uint8_t *challenge, uint32_t challenge_size, - uint8_t *token, uint32_t token_size); +int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c index 2d99f74d..83c1ebda 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c @@ -27,25 +27,27 @@ int32_t pal_attestation_function(int type, va_list valist) { uint8_t *challenge, *token; - uint32_t challenge_size, *token_size, verify_token_size; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; switch (type) { case PAL_INITIAL_ATTEST_GET_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - token_size = va_arg(valist, uint32_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_size); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, uint32_t); - token_size = va_arg(valist, uint32_t*); + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); case PAL_INITIAL_ATTEST_VERIFY_TOKEN: challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, uint32_t); + challenge_size = va_arg(valist, size_t); token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, uint32_t); + verify_token_size = va_arg(valist, size_t); return pal_initial_attest_verify_token(challenge, challenge_size, token, verify_token_size); default: diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h index 2af2858e..3b1a7133 100644 --- a/api-tests/val/common/val.h +++ b/api-tests/val/common/val.h @@ -186,10 +186,16 @@ typedef enum { BOOT_EXPECTED_NS = 0x3, /* Test performs panic check for secure test run and expect reboot */ BOOT_EXPECTED_S = 0x4, - /* Test expected reboot but it didn't happen */ + /* Test expects reboot but it didn't happen */ BOOT_EXPECTED_BUT_FAILED = 0x5, - /* Test expect reboot for secure/non-secure test run. If reboot happens, re-enter same test */ + /* Test expects reboot for secure/non-secure test run. If reboot happens, + * re-enter the same test and execute the next check function + */ BOOT_EXPECTED_REENTER_TEST = 0x6, + /* Test expect reboot for the test run. If reboot happens, + * re-enter the same test and continue executing the same check function + */ + BOOT_EXPECTED_CONT_TEST_EXEC = 0x7, } boot_state_t; typedef enum { @@ -197,6 +203,9 @@ typedef enum { NV_TEST_ID_PREVIOUS = 0x1, NV_TEST_ID_CURRENT = 0x2, NV_TEST_CNT = 0x3, + NV_TEST_DATA1 = 0x4, + NV_TEST_DATA2 = 0x5, + NV_TEST_DATA3 = 0x6, } nvmem_index_t; /* enums to report test sub-state */ @@ -231,6 +240,7 @@ typedef enum { VAL_STATUS_HEAP_NOT_AVAILABLE = 0x2A, VAL_STATUS_UNSUPPORTED = 0x2B, VAL_STATUS_DRIVER_FN_FAILED = 0x2C, + VAL_STATUS_NO_TESTS = 0X2D, VAL_STATUS_ERROR_MAX = INT_MAX, } val_status_t; diff --git a/api-tests/val/nspe/val_crypto.h b/api-tests/val/nspe/val_crypto.h index 6fc3f562..8956d562 100644 --- a/api-tests/val/nspe/val_crypto.h +++ b/api-tests/val/nspe/val_crypto.h @@ -50,57 +50,86 @@ #define PSA_KEY_USAGE_INVALID 0xFFFFFFFF #define PSA_HASH_ALG_INVALID 0x01FFFFFF #define PSA_ALG_INVALID 0xFFFFFFFF +#define PSA_KEY_DERIVATION_STEP_INVALID 0x0000FFFF enum crypto_function_code { - VAL_CRYPTO_INIT = 0x1, - VAL_CRYPTO_GENERATE_RANDOM = 0x2, - VAL_CRYPTO_IMPORT_KEY = 0x3, - VAL_CRYPTO_EXPORT_KEY = 0x4, - VAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - VAL_CRYPTO_DESTROY_KEY = 0x6, - VAL_CRYPTO_GET_KEY_INFO = 0x7, - VAL_CRYPTO_KEY_POLICY_INIT = 0x8, - VAL_CRYPTO_KEY_POLICY_SET_USAGE = 0x9, - VAL_CRYPTO_KEY_POLICY_GET_USAGE = 0xA, - VAL_CRYPTO_KEY_POLICY_GET_ALGORITHM = 0xB, - VAL_CRYPTO_SET_KEY_POLICY = 0xC, - VAL_CRYPTO_GET_KEY_POLICY = 0xD, - VAL_CRYPTO_GET_KEY_INFORMATION = 0xE, - VAL_CRYPTO_GET_KEY_LIFETIME = 0xF, - VAL_CRYPTO_HASH_SETUP = 0x11, - VAL_CRYPTO_HASH_UPDATE = 0x12, - VAL_CRYPTO_HASH_VERIFY = 0x13, - VAL_CRYPTO_HASH_FINISH = 0x14, - VAL_CRYPTO_HASH_ABORT = 0x15, - VAL_CRYPTO_GENERATE_KEY = 0x16, - VAL_CRYPTO_GENERATOR_READ = 0x17, - VAL_CRYPTO_KEY_DERIVATION = 0x18, - VAL_CRYPTO_GET_GENERATOR_CAPACITY = 0x19, - VAL_CRYPTO_GENERATOR_IMPORT_KEY = 0x1A, - VAL_CRYPTO_GENERATOR_ABORT = 0x1B, - VAL_CRYPTO_AEAD_ENCRYPT = 0x1C, - VAL_CRYPTO_AEAD_DECRYPT = 0x1D, - VAL_CRYPTO_MAC_SIGN_SETUP = 0x1E, - VAL_CRYPTO_MAC_UPDATE = 0x1F, - VAL_CRYPTO_MAC_SIGN_FINISH = 0x20, - VAL_CRYPTO_MAC_VERIFY_SETUP = 0x21, - VAL_CRYPTO_MAC_VERIFY_FINISH = 0x22, - VAL_CRYPTO_MAC_ABORT = 0x23, - VAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x24, - VAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x25, - VAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x26, - VAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x2A, - VAL_CRYPTO_CIPHER_GENERATE_IV = 0x2B, - VAL_CRYPTO_CIPHER_SET_IV = 0x2C, - VAL_CRYPTO_CIPHER_UPDATE = 0x2D, - VAL_CRYPTO_CIPHER_FINISH = 0x2E, - VAL_CRYPTO_CIPHER_ABORT = 0x2F, - VAL_CRYPTO_ASYMMTERIC_SIGN = 0x30, - VAL_CRYPTO_ASYMMTERIC_VERIFY = 0x31, - VAL_CRYPTO_KEY_AGREEMENT = 0x32, - VAL_CRYPTO_ALLOCATE_KEY = 0x33, - VAL_CRYPTO_COPY_KEY = 0x34, - VAL_CRYPTO_FREE = 0xFE, + VAL_CRYPTO_INIT = 0x1, + VAL_CRYPTO_GENERATE_RANDOM = 0x2, + VAL_CRYPTO_IMPORT_KEY = 0x3, + VAL_CRYPTO_EXPORT_KEY = 0x4, + VAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + VAL_CRYPTO_DESTROY_KEY = 0x6, + VAL_CRYPTO_HASH_SETUP = 0x7, + VAL_CRYPTO_HASH_UPDATE = 0x8, + VAL_CRYPTO_HASH_VERIFY = 0x9, + VAL_CRYPTO_HASH_FINISH = 0xA, + VAL_CRYPTO_HASH_ABORT = 0xB, + VAL_CRYPTO_GENERATE_KEY = 0xC, + VAL_CRYPTO_AEAD_ENCRYPT = 0xD, + VAL_CRYPTO_AEAD_DECRYPT = 0xE, + VAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + VAL_CRYPTO_MAC_UPDATE = 0x10, + VAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + VAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + VAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + VAL_CRYPTO_MAC_ABORT = 0x14, + VAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + VAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + VAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + VAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + VAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + VAL_CRYPTO_CIPHER_SET_IV = 0x1A, + VAL_CRYPTO_CIPHER_UPDATE = 0x1B, + VAL_CRYPTO_CIPHER_FINISH = 0x1C, + VAL_CRYPTO_CIPHER_ABORT = 0x1D, + VAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + VAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + VAL_CRYPTO_COPY_KEY = 0x20, + VAL_CRYPTO_SET_KEY_TYPE = 0x21, + VAL_CRYPTO_SET_KEY_BITS = 0x22, + VAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + VAL_CRYPTO_GET_KEY_TYPE = 0x24, + VAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + VAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + VAL_CRYPTO_SET_KEY_ID = 0x27, + VAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + VAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + VAL_CRYPTO_GET_KEY_ID = 0x2A, + VAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + VAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + VAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + VAL_CRYPTO_GET_KEY_BITS = 0x2E, + VAL_CRYPTO_HASH_COMPUTE = 0x2F, + VAL_CRYPTO_HASH_COMPARE = 0x30, + VAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + VAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + VAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + VAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + VAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + VAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + VAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + VAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + VAL_CRYPTO_HASH_CLONE = 0x3B, + VAL_CRYPTO_MAC_COMPUTE = 0x3C, + VAL_CRYPTO_MAC_VERIFY = 0x3D, + VAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + VAL_CRYPTO_CIPHER_DECRYPT = 0x40, + VAL_CRYPTO_OPEN_KEY = 0x41, + VAL_CRYPTO_CLOSE_KEY = 0x42, + VAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + VAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + VAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + VAL_CRYPTO_AEAD_SET_NONCE = 0x46, + VAL_CRYPTO_AEAD_SET_LENGTHS = 0x47, + VAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + VAL_CRYPTO_AEAD_UPDATE = 0x49, + VAL_CRYPTO_AEAD_FINISH = 0x4A, + VAL_CRYPTO_AEAD_VERIFY = 0x4B, + VAL_CRYPTO_AEAD_ABORT = 0x4C, + VAL_CRYPTO_RESET = 0xFD, + VAL_CRYPTO_FREE = 0xFE, }; int32_t val_crypto_function(int type, ...); diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c index dad52d61..19f83561 100644 --- a/api-tests/val/nspe/val_framework.c +++ b/api-tests/val/nspe/val_framework.c @@ -111,7 +111,8 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test return status; } - if (boot.state == BOOT_NOT_EXPECTED || boot.state == BOOT_EXPECTED_REENTER_TEST) + if (boot.state == BOOT_NOT_EXPECTED || boot.state == BOOT_EXPECTED_REENTER_TEST + || boot.state == BOOT_EXPECTED_CONT_TEST_EXEC) { while (tests_list[i] != NULL) { @@ -127,10 +128,13 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test continue; } - status = val_set_boot_flag(BOOT_NOT_EXPECTED); - if (VAL_ERROR(status)) + if (boot.state != BOOT_EXPECTED_CONT_TEST_EXEC) { - return status; + status = val_set_boot_flag(BOOT_NOT_EXPECTED); + if (VAL_ERROR(status)) + { + return status; + } } if (i == 1) @@ -556,7 +560,8 @@ val_status_t val_get_last_run_test_id(test_id_t *test_id) BOOT_EXPECTED_NS, BOOT_EXPECTED_S, BOOT_EXPECTED_BUT_FAILED, - BOOT_EXPECTED_REENTER_TEST + BOOT_EXPECTED_REENTER_TEST, + BOOT_EXPECTED_CONT_TEST_EXEC }; status = val_get_boot_flag(&boot.state); From ffb74483fd6b4129f42e4af2b3d86e2ba8902018 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Mon, 12 Aug 2019 15:35:46 +0530 Subject: [PATCH 10/54] Fix: DEPENDS options added for CMake targets. Signed-off-by: Vinay Kumar Kotegowder --- api-tests/tools/scripts/target_cfg/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api-tests/tools/scripts/target_cfg/CMakeLists.txt b/api-tests/tools/scripts/target_cfg/CMakeLists.txt index 546c0689..e6b917c5 100644 --- a/api-tests/tools/scripts/target_cfg/CMakeLists.txt +++ b/api-tests/tools/scripts/target_cfg/CMakeLists.txt @@ -55,6 +55,7 @@ add_custom_command( ${OUTPUT_HEADER} COMMENT "[PSA] : Creating output header ${OUTPUT_HEADER}" COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} + DEPENDS ${TGT_CONFIG_SOURCE_C} ) # Adding executable @@ -69,6 +70,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-m32") add_custom_target( run_generator_output ALL SOURCES ${OUTPUT_HEADER} + DEPENDS ${PROJECT_NAME} ) # install target to put the OUTPUT_HEADER to it's final location From 213823f57d440e95132be7f4c7ab394d3356f8db Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Tue, 13 Aug 2019 10:20:04 +0530 Subject: [PATCH 11/54] Attestation: Removing crypto hash implementation defined attributes Signed-off-by: Gowtham Siddarth --- .../dev_apis/crypto/test_c039/test_data.h | 10 ++- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- .../pal_attestation_crypto.c | 73 ++++++------------- .../pal_attestation_crypto.h | 19 +---- .../initial_attestation/pal_attestation_eat.h | 3 +- 19 files changed, 181 insertions(+), 399 deletions(-) diff --git a/api-tests/dev_apis/crypto/test_c039/test_data.h b/api-tests/dev_apis/crypto/test_c039/test_data.h index 79dd42a0..bdbcd54e 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_data.h +++ b/api-tests/dev_apis/crypto/test_c039/test_data.h @@ -215,17 +215,20 @@ static test_data check1[] = { #endif #endif -#ifdef FUTURE_SUPPORT +#ifdef ARCH_TEST_ECDSA +#ifdef ARCH_TEST_ECC_CURVE_SECP192R1 {"Test psa_asymmetric_encrypt - ECC public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | PSA_ECC_CURVE_SECP192R1, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP192R1), {0}, 75, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDSA_ANY, {0}, 0, {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad}, 22, 128, 0, 192, PSA_SUCCESS -} +}, +#endif +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 {"Test psa_asymmetric_encrypt - ECC keypair\n", 10, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 97, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256), @@ -236,6 +239,7 @@ static test_data check1[] = { 0, 192, PSA_SUCCESS } #endif +#endif }; static test_data check2[] = { diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index 38ed2836..2da03fa4 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -70,35 +70,24 @@ static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) } } -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id) +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) { - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Map the algorithm ID */ psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); /* Actually do the hash set up */ - hash_ctx->status = psa_hash_setup(&psa_hash, psa_alg); + status = psa_hash_setup(psa_hash, psa_alg); - /* Copy the PSA handle back into the context */ - hash_ctx->context.handle = psa_hash.handle; + return status; - /* Map errors and return */ - return (psa_status_t)hash_ctx->status; } -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - return; - if (data_to_hash.ptr == NULL) { /* No data was passed in to be hashed indicating the mode of use is * the computation of the size of hash. This mode is hashing is used @@ -111,55 +100,41 @@ void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, } /* Actually hash the data */ - hash_ctx->status = psa_hash_update(&psa_hash, data_to_hash.ptr, data_to_hash.len); - - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); } -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result) { - psa_hash_operation_t psa_hash; - - /* Copy the PSA handle out of the generic context */ - psa_hash.handle = (uint32_t)hash_ctx->context.handle; - - if (hash_ctx->status != PSA_SUCCESS) - goto Done; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; /* Actually finish up the hash */ - hash_ctx->status = psa_hash_finish(&psa_hash, buffer_to_hold_result.ptr, + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - /* Copy the PSA handle back into the context. */ - hash_ctx->context.handle = psa_hash.handle; - -Done: - return ((psa_status_t)hash_ctx->status); + return status; } int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash) { - uint32_t return_value = 0; - struct pal_cose_crypto_hash hash_ctx; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - return_value = pal_cose_crypto_hash_start(&hash_ctx, COSE_ALG_SHA256_PROPRIETARY); - if (return_value) + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) goto Done; - pal_cose_crypto_hash_update(&hash_ctx, bytes_to_hash); - return_value = pal_cose_crypto_hash_finish(&hash_ctx, - buffer_for_hash, - hash); + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; Done: - return return_value; + return status; } uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, @@ -170,9 +145,9 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha QCBOREncodeContext cbor_encode_ctx; struct q_useful_buf_c tbs_first_part; QCBORError qcbor_result; - struct pal_cose_crypto_hash hash_ctx = {{0}}; int32_t hash_alg_id; UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; /* This builds the CBOR-format to-be-signed bytes */ QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); @@ -209,20 +184,20 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() * will handle it properly */ - status = pal_cose_crypto_hash_start(&hash_ctx, hash_alg_id); + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); if (status) goto Done; /* This is hashing of the first part, all the CBOR * except the payload. */ - pal_cose_crypto_hash_update(&hash_ctx, useful_buf_head(tbs_first_part, tbs_first_part.len)); + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&hash_ctx, payload); + pal_cose_crypto_hash_update(&psa_hash, payload); /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&hash_ctx, buffer_for_hash, hash); + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); Done: return status; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index 2175e656..bd479905 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -47,19 +47,6 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -struct pal_cose_crypto_hash { - union { - void *ptr; - uint64_t handle; - } context; - int64_t status; -}; - -struct pal_cose_psa_crypto_hash { - psa_status_t status; - psa_hash_operation_t operation; -}; - static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, @@ -84,10 +71,10 @@ static const ecc_key_t attest_key = { sizeof(initial_attestation_public_y_key) }; -int32_t pal_cose_crypto_hash_start(struct pal_cose_crypto_hash *hash_ctx, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(struct pal_cose_crypto_hash *hash_ctx, +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, struct q_useful_buf buffer_to_hold_result, struct q_useful_buf_c *hash_result); int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index e7449a00..10e3649d 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -140,7 +140,8 @@ 1 << (EAT_CBOR_ARM_RANGE_BASE \ - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT) +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) #define NULL_USEFUL_BUF_C NULLUsefulBufC From b1cd50fd5a40db69543e20b12050c68040da5337 Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Wed, 21 Aug 2019 11:50:26 +0530 Subject: [PATCH 12/54] Renaming the enum to avoid redeclaration error - The enums "SECURE" and "NONSECURE" are common names and may conflict with implementation defines such as in CMSIS. - Renamed the structure security_t to caller_security_t to make it more meaningful. Signed-off-by: Gowtham Siddarth --- .../dev_apis/crypto/test_c001/test_c001.c | 6 +++--- .../dev_apis/crypto/test_c001/test_c001.h | 6 +++--- .../dev_apis/crypto/test_c002/test_c002.c | 2 +- .../dev_apis/crypto/test_c002/test_c002.h | 2 +- .../dev_apis/crypto/test_c003/test_c003.c | 2 +- .../dev_apis/crypto/test_c003/test_c003.h | 4 ++-- .../dev_apis/crypto/test_c004/test_c004.c | 2 +- .../dev_apis/crypto/test_c004/test_c004.h | 2 +- .../dev_apis/crypto/test_c005/test_c005.c | 2 +- .../dev_apis/crypto/test_c005/test_c005.h | 2 +- .../dev_apis/crypto/test_c006/test_c006.c | 2 +- .../dev_apis/crypto/test_c006/test_c006.h | 2 +- .../dev_apis/crypto/test_c007/test_c007.c | 2 +- .../dev_apis/crypto/test_c007/test_c007.h | 2 +- .../dev_apis/crypto/test_c008/test_c008.c | 2 +- .../dev_apis/crypto/test_c008/test_c008.h | 2 +- .../dev_apis/crypto/test_c009/test_c009.c | 2 +- .../dev_apis/crypto/test_c009/test_c009.h | 2 +- .../dev_apis/crypto/test_c010/test_c010.c | 2 +- .../dev_apis/crypto/test_c010/test_c010.h | 2 +- .../dev_apis/crypto/test_c011/test_c011.c | 2 +- .../dev_apis/crypto/test_c011/test_c011.h | 4 ++-- .../dev_apis/crypto/test_c012/test_c012.c | 6 +++--- .../dev_apis/crypto/test_c012/test_c012.h | 6 +++--- .../dev_apis/crypto/test_c013/test_c013.c | 4 ++-- .../dev_apis/crypto/test_c013/test_c013.h | 4 ++-- .../dev_apis/crypto/test_c014/test_c014.c | 6 +++--- .../dev_apis/crypto/test_c014/test_c014.h | 6 +++--- .../dev_apis/crypto/test_c015/test_c015.c | 4 ++-- .../dev_apis/crypto/test_c015/test_c015.h | 4 ++-- .../dev_apis/crypto/test_c016/test_c016.c | 2 +- .../dev_apis/crypto/test_c016/test_c016.h | 2 +- .../dev_apis/crypto/test_c017/test_c017.c | 2 +- .../dev_apis/crypto/test_c017/test_c017.h | 2 +- .../dev_apis/crypto/test_c018/test_c018.c | 4 ++-- .../dev_apis/crypto/test_c018/test_c018.h | 4 ++-- .../dev_apis/crypto/test_c019/test_c019.c | 4 ++-- .../dev_apis/crypto/test_c019/test_c019.h | 4 ++-- .../dev_apis/crypto/test_c020/test_c020.c | 2 +- .../dev_apis/crypto/test_c020/test_c020.h | 2 +- .../dev_apis/crypto/test_c021/test_c021.c | 2 +- .../dev_apis/crypto/test_c021/test_c021.h | 2 +- .../dev_apis/crypto/test_c022/test_c022.c | 2 +- .../dev_apis/crypto/test_c022/test_c022.h | 2 +- .../dev_apis/crypto/test_c023/test_c023.c | 2 +- .../dev_apis/crypto/test_c023/test_c023.h | 2 +- .../dev_apis/crypto/test_c024/test_c024.c | 2 +- .../dev_apis/crypto/test_c024/test_c024.h | 2 +- .../dev_apis/crypto/test_c025/test_c025.c | 2 +- .../dev_apis/crypto/test_c025/test_c025.h | 4 ++-- .../dev_apis/crypto/test_c026/test_c026.c | 4 ++-- .../dev_apis/crypto/test_c026/test_c026.h | 4 ++-- .../dev_apis/crypto/test_c027/test_c027.c | 4 ++-- .../dev_apis/crypto/test_c027/test_c027.h | 4 ++-- .../dev_apis/crypto/test_c028/test_c028.c | 2 +- .../dev_apis/crypto/test_c028/test_c028.h | 2 +- .../dev_apis/crypto/test_c029/test_c029.c | 4 ++-- .../dev_apis/crypto/test_c029/test_c029.h | 4 ++-- .../dev_apis/crypto/test_c030/test_c030.c | 2 +- .../dev_apis/crypto/test_c030/test_c030.h | 2 +- .../dev_apis/crypto/test_c031/test_c031.c | 4 ++-- .../dev_apis/crypto/test_c031/test_c031.h | 4 ++-- .../dev_apis/crypto/test_c032/test_c032.c | 4 ++-- .../dev_apis/crypto/test_c032/test_c032.h | 4 ++-- .../dev_apis/crypto/test_c033/test_c033.c | 4 ++-- .../dev_apis/crypto/test_c033/test_c033.h | 4 ++-- .../dev_apis/crypto/test_c034/test_c034.c | 2 +- .../dev_apis/crypto/test_c034/test_c034.h | 2 +- .../dev_apis/crypto/test_c035/test_c035.c | 2 +- .../dev_apis/crypto/test_c035/test_c035.h | 2 +- .../dev_apis/crypto/test_c036/test_c036.c | 4 ++-- .../dev_apis/crypto/test_c036/test_c036.h | 4 ++-- .../dev_apis/crypto/test_c037/test_c037.c | 2 +- .../dev_apis/crypto/test_c037/test_c037.h | 2 +- .../dev_apis/crypto/test_c038/test_c038.c | 4 ++-- .../dev_apis/crypto/test_c038/test_c038.h | 4 ++-- .../dev_apis/crypto/test_c039/test_c039.c | 4 ++-- .../dev_apis/crypto/test_c039/test_c039.h | 4 ++-- .../dev_apis/crypto/test_c040/test_c040.c | 4 ++-- .../dev_apis/crypto/test_c040/test_c040.h | 4 ++-- .../dev_apis/crypto/test_c041/test_c041.c | 4 ++-- .../dev_apis/crypto/test_c041/test_c041.h | 4 ++-- .../dev_apis/crypto/test_c042/test_c042.c | 4 ++-- .../dev_apis/crypto/test_c042/test_c042.h | 4 ++-- .../dev_apis/crypto/test_c043/test_c043.c | 4 ++-- .../dev_apis/crypto/test_c043/test_c043.h | 4 ++-- .../dev_apis/crypto/test_c044/test_c044.c | 2 +- .../dev_apis/crypto/test_c044/test_c044.h | 2 +- .../dev_apis/crypto/test_c045/test_c045.c | 2 +- .../dev_apis/crypto/test_c045/test_c045.h | 2 +- .../dev_apis/crypto/test_c046/test_c046.c | 2 +- .../dev_apis/crypto/test_c046/test_c046.h | 2 +- .../dev_apis/crypto/test_c047/test_c047.c | 2 +- .../dev_apis/crypto/test_c047/test_c047.h | 2 +- .../dev_apis/crypto/test_c048/test_c048.c | 2 +- .../dev_apis/crypto/test_c048/test_c048.h | 2 +- .../dev_apis/crypto/test_c049/test_c049.c | 2 +- .../dev_apis/crypto/test_c049/test_c049.h | 2 +- .../dev_apis/crypto/test_c050/test_c050.c | 2 +- .../dev_apis/crypto/test_c050/test_c050.h | 2 +- .../dev_apis/crypto/test_c051/test_c051.c | 2 +- .../dev_apis/crypto/test_c051/test_c051.h | 2 +- .../dev_apis/crypto/test_c052/test_c052.c | 2 +- .../dev_apis/crypto/test_c052/test_c052.h | 2 +- .../dev_apis/crypto/test_c053/test_c053.c | 2 +- .../dev_apis/crypto/test_c053/test_c053.h | 2 +- .../dev_apis/crypto/test_c054/test_c054.c | 2 +- .../dev_apis/crypto/test_c054/test_c054.h | 2 +- .../dev_apis/crypto/test_c055/test_c055.c | 2 +- .../dev_apis/crypto/test_c055/test_c055.h | 2 +- .../dev_apis/crypto/test_c056/test_c056.c | 2 +- .../dev_apis/crypto/test_c056/test_c056.h | 2 +- .../dev_apis/crypto/test_c057/test_c057.c | 2 +- .../dev_apis/crypto/test_c057/test_c057.h | 2 +- .../dev_apis/crypto/test_c058/test_c058.c | 2 +- .../dev_apis/crypto/test_c058/test_c058.h | 2 +- .../dev_apis/crypto/test_c059/test_c059.c | 2 +- .../dev_apis/crypto/test_c059/test_c059.h | 2 +- .../dev_apis/crypto/test_c060/test_c060.c | 4 ++-- .../dev_apis/crypto/test_c060/test_c060.h | 4 ++-- .../dev_apis/crypto/test_c061/test_c061.c | 2 +- .../dev_apis/crypto/test_c061/test_c061.h | 2 +- .../initial_attestation/test_a001/test_a001.c | 4 ++-- .../initial_attestation/test_a001/test_a001.h | 4 ++-- .../test_s001/test_s001.c | 2 +- .../test_s001/test_s001.h | 2 +- .../test_s002/test_s002.c | 4 ++-- .../test_s002/test_s002.h | 4 ++-- .../test_s003/test_s003.c | 2 +- .../test_s003/test_s003.h | 2 +- .../test_s004/test_s004.c | 2 +- .../test_s004/test_s004.h | 2 +- .../test_s005/test_s005.c | 2 +- .../test_s005/test_s005.h | 2 +- .../test_s006/test_s006.c | 2 +- .../test_s006/test_s006.h | 2 +- .../test_s007/test_s007.c | 2 +- .../test_s007/test_s007.h | 2 +- .../test_s008/test_s008.c | 4 ++-- .../test_s008/test_s008.h | 4 ++-- .../test_s009/test_s009.c | 2 +- .../test_s009/test_s009.h | 2 +- .../test_s010/test_s010.c | 2 +- .../test_s010/test_s010.h | 2 +- .../protected_storage/test_p011/test_p011.c | 2 +- .../protected_storage/test_p011/test_p011.h | 2 +- .../protected_storage/test_p012/test_p012.c | 2 +- .../protected_storage/test_p012/test_p012.h | 2 +- .../protected_storage/test_p013/test_p013.c | 2 +- .../protected_storage/test_p013/test_p013.h | 2 +- .../protected_storage/test_p014/test_p014.c | 2 +- .../protected_storage/test_p014/test_p014.h | 2 +- .../protected_storage/test_p015/test_p015.c | 2 +- .../protected_storage/test_p015/test_p015.h | 2 +- .../protected_storage/test_p016/test_p016.c | 2 +- .../protected_storage/test_p016/test_p016.h | 2 +- .../protected_storage/test_p017/test_p017.c | 2 +- .../protected_storage/test_p017/test_p017.h | 2 +- api-tests/docs/psa_ipc_testlist.md | 12 +++++------ api-tests/ff/ipc/test_i001/test_i001.c | 8 ++++---- api-tests/ff/ipc/test_i001/test_i001.h | 4 ++-- api-tests/ff/ipc/test_i002/test_i002.c | 20 +++++++++---------- api-tests/ff/ipc/test_i002/test_i002.h | 16 +++++++-------- api-tests/ff/ipc/test_i003/test_i003.c | 12 +++++------ api-tests/ff/ipc/test_i003/test_i003.h | 12 +++++------ api-tests/ff/ipc/test_i004/test_i004.c | 6 +++--- api-tests/ff/ipc/test_i004/test_i004.h | 2 +- api-tests/ff/ipc/test_i005/test_i005.c | 6 +++--- api-tests/ff/ipc/test_i005/test_i005.h | 2 +- api-tests/ff/ipc/test_i006/test_i006.c | 6 +++--- api-tests/ff/ipc/test_i006/test_i006.h | 2 +- api-tests/ff/ipc/test_i007/test_i007.c | 6 +++--- api-tests/ff/ipc/test_i007/test_i007.h | 2 +- api-tests/ff/ipc/test_i008/test_i008.c | 6 +++--- api-tests/ff/ipc/test_i008/test_i008.h | 2 +- api-tests/ff/ipc/test_i009/test_i009.c | 2 +- api-tests/ff/ipc/test_i009/test_i009.h | 2 +- api-tests/ff/ipc/test_i010/test_i010.c | 6 +++--- api-tests/ff/ipc/test_i010/test_i010.h | 2 +- api-tests/ff/ipc/test_i011/test_i011.c | 6 +++--- api-tests/ff/ipc/test_i011/test_i011.h | 2 +- api-tests/ff/ipc/test_i012/test_i012.c | 6 +++--- api-tests/ff/ipc/test_i012/test_i012.h | 2 +- api-tests/ff/ipc/test_i013/test_i013.c | 2 +- api-tests/ff/ipc/test_i013/test_i013.h | 2 +- api-tests/ff/ipc/test_i014/test_i014.c | 2 +- api-tests/ff/ipc/test_i014/test_i014.h | 2 +- api-tests/ff/ipc/test_i015/test_i015.c | 2 +- api-tests/ff/ipc/test_i015/test_i015.h | 2 +- api-tests/ff/ipc/test_i016/test_i016.c | 2 +- api-tests/ff/ipc/test_i016/test_i016.h | 2 +- api-tests/ff/ipc/test_i017/test_i017.c | 2 +- api-tests/ff/ipc/test_i017/test_i017.h | 2 +- api-tests/ff/ipc/test_i018/test_i018.c | 2 +- api-tests/ff/ipc/test_i018/test_i018.h | 2 +- api-tests/ff/ipc/test_i019/test_i019.c | 2 +- api-tests/ff/ipc/test_i019/test_i019.h | 2 +- api-tests/ff/ipc/test_i020/test_i020.c | 2 +- api-tests/ff/ipc/test_i020/test_i020.h | 2 +- api-tests/ff/ipc/test_i021/test_i021.c | 2 +- api-tests/ff/ipc/test_i021/test_i021.h | 2 +- api-tests/ff/ipc/test_i022/test_i022.c | 2 +- api-tests/ff/ipc/test_i022/test_i022.h | 2 +- api-tests/ff/ipc/test_i023/test_i023.c | 2 +- api-tests/ff/ipc/test_i023/test_i023.h | 2 +- api-tests/ff/ipc/test_i024/test_i024.c | 6 +++--- api-tests/ff/ipc/test_i024/test_i024.h | 2 +- api-tests/ff/ipc/test_i025/test_i025.c | 6 +++--- api-tests/ff/ipc/test_i025/test_i025.h | 2 +- api-tests/ff/ipc/test_i026/test_i026.c | 6 +++--- api-tests/ff/ipc/test_i026/test_i026.h | 2 +- api-tests/ff/ipc/test_i027/test_i027.c | 6 +++--- api-tests/ff/ipc/test_i027/test_i027.h | 2 +- api-tests/ff/ipc/test_i028/test_i028.c | 2 +- api-tests/ff/ipc/test_i028/test_i028.h | 2 +- api-tests/ff/ipc/test_i029/test_i029.c | 2 +- api-tests/ff/ipc/test_i029/test_i029.h | 2 +- api-tests/ff/ipc/test_i030/test_i030.c | 2 +- api-tests/ff/ipc/test_i030/test_i030.h | 2 +- api-tests/ff/ipc/test_i031/test_i031.c | 2 +- api-tests/ff/ipc/test_i031/test_i031.h | 2 +- api-tests/ff/ipc/test_i032/test_i032.c | 2 +- api-tests/ff/ipc/test_i032/test_i032.h | 2 +- api-tests/ff/ipc/test_i033/test_i033.c | 2 +- api-tests/ff/ipc/test_i033/test_i033.h | 2 +- api-tests/ff/ipc/test_i034/test_i034.c | 2 +- api-tests/ff/ipc/test_i034/test_i034.h | 2 +- api-tests/ff/ipc/test_i035/test_i035.c | 2 +- api-tests/ff/ipc/test_i035/test_i035.h | 2 +- api-tests/ff/ipc/test_i036/test_i036.c | 2 +- api-tests/ff/ipc/test_i036/test_i036.h | 2 +- api-tests/ff/ipc/test_i037/test_i037.c | 2 +- api-tests/ff/ipc/test_i037/test_i037.h | 2 +- api-tests/ff/ipc/test_i038/test_i038.c | 2 +- api-tests/ff/ipc/test_i038/test_i038.h | 2 +- api-tests/ff/ipc/test_i039/test_i039.c | 2 +- api-tests/ff/ipc/test_i039/test_i039.h | 2 +- api-tests/ff/ipc/test_i040/test_i040.c | 2 +- api-tests/ff/ipc/test_i040/test_i040.h | 2 +- api-tests/ff/ipc/test_i041/test_i041.c | 2 +- api-tests/ff/ipc/test_i041/test_i041.h | 2 +- api-tests/ff/ipc/test_i042/test_i042.c | 2 +- api-tests/ff/ipc/test_i042/test_i042.h | 2 +- api-tests/ff/ipc/test_i043/test_i043.c | 2 +- api-tests/ff/ipc/test_i043/test_i043.h | 2 +- api-tests/ff/ipc/test_i044/test_i044.c | 2 +- api-tests/ff/ipc/test_i044/test_i044.h | 2 +- api-tests/ff/ipc/test_i045/test_i045.c | 2 +- api-tests/ff/ipc/test_i045/test_i045.h | 2 +- api-tests/ff/ipc/test_i046/test_i046.c | 2 +- api-tests/ff/ipc/test_i046/test_i046.h | 2 +- api-tests/ff/ipc/test_i047/test_i047.c | 2 +- api-tests/ff/ipc/test_i047/test_i047.h | 2 +- api-tests/ff/ipc/test_i048/test_i048.c | 10 +++++----- api-tests/ff/ipc/test_i048/test_i048.h | 2 +- api-tests/ff/ipc/test_i049/test_i049.c | 10 +++++----- api-tests/ff/ipc/test_i049/test_i049.h | 2 +- api-tests/ff/ipc/test_i050/test_i050.c | 10 +++++----- api-tests/ff/ipc/test_i050/test_i050.h | 2 +- api-tests/ff/ipc/test_i051/test_i051.c | 10 +++++----- api-tests/ff/ipc/test_i051/test_i051.h | 2 +- api-tests/ff/ipc/test_i052/test_i052.c | 10 +++++----- api-tests/ff/ipc/test_i052/test_i052.h | 2 +- api-tests/ff/ipc/test_i053/test_i053.c | 10 +++++----- api-tests/ff/ipc/test_i053/test_i053.h | 2 +- api-tests/ff/ipc/test_i054/test_i054.c | 2 +- api-tests/ff/ipc/test_i054/test_i054.h | 2 +- api-tests/ff/ipc/test_i055/test_i055.c | 2 +- api-tests/ff/ipc/test_i055/test_i055.h | 2 +- api-tests/ff/ipc/test_i056/test_i056.c | 2 +- api-tests/ff/ipc/test_i056/test_i056.h | 2 +- api-tests/ff/ipc/test_i057/test_i057.c | 2 +- api-tests/ff/ipc/test_i057/test_i057.h | 2 +- api-tests/ff/ipc/test_i058/test_i058.c | 2 +- api-tests/ff/ipc/test_i058/test_i058.h | 2 +- api-tests/ff/ipc/test_i059/test_i059.c | 2 +- api-tests/ff/ipc/test_i059/test_i059.h | 2 +- api-tests/ff/ipc/test_i060/test_i060.c | 2 +- api-tests/ff/ipc/test_i060/test_i060.h | 2 +- api-tests/ff/ipc/test_i061/test_i061.c | 2 +- api-tests/ff/ipc/test_i061/test_i061.h | 2 +- api-tests/ff/ipc/test_i062/test_i062.c | 2 +- api-tests/ff/ipc/test_i062/test_i062.h | 2 +- api-tests/ff/ipc/test_i063/test_i063.c | 2 +- api-tests/ff/ipc/test_i063/test_i063.h | 2 +- api-tests/ff/ipc/test_i064/test_i064.c | 2 +- api-tests/ff/ipc/test_i064/test_i064.h | 2 +- api-tests/ff/ipc/test_i065/test_i065.c | 2 +- api-tests/ff/ipc/test_i065/test_i065.h | 2 +- api-tests/ff/ipc/test_i066/test_i066.c | 2 +- api-tests/ff/ipc/test_i066/test_i066.h | 2 +- api-tests/ff/ipc/test_i067/test_i067.c | 2 +- api-tests/ff/ipc/test_i067/test_i067.h | 2 +- api-tests/ff/ipc/test_i068/test_i068.c | 2 +- api-tests/ff/ipc/test_i068/test_i068.h | 2 +- api-tests/ff/ipc/test_i069/test_i069.c | 2 +- api-tests/ff/ipc/test_i069/test_i069.h | 2 +- api-tests/ff/ipc/test_i070/test_i070.c | 2 +- api-tests/ff/ipc/test_i070/test_i070.h | 2 +- api-tests/ff/ipc/test_i071/test_i071.c | 2 +- api-tests/ff/ipc/test_i071/test_i071.h | 2 +- api-tests/ff/ipc/test_i072/test_i072.c | 4 ++-- api-tests/ff/ipc/test_i072/test_i072.h | 4 ++-- api-tests/ff/ipc/test_i073/test_i073.c | 4 ++-- api-tests/ff/ipc/test_i073/test_i073.h | 4 ++-- api-tests/ff/ipc/test_i074/test_i074.c | 8 ++++---- api-tests/ff/ipc/test_i074/test_i074.h | 4 ++-- api-tests/ff/ipc/test_i075/test_i075.c | 4 ++-- api-tests/ff/ipc/test_i075/test_i075.h | 4 ++-- api-tests/ff/ipc/test_i076/test_i076.c | 4 ++-- api-tests/ff/ipc/test_i076/test_i076.h | 4 ++-- api-tests/ff/ipc/test_i077/test_i077.c | 4 ++-- api-tests/ff/ipc/test_i077/test_i077.h | 4 ++-- api-tests/ff/ipc/test_i078/test_i078.c | 8 ++++---- api-tests/ff/ipc/test_i078/test_i078.h | 4 ++-- api-tests/ff/ipc/test_i079/test_i079.c | 4 ++-- api-tests/ff/ipc/test_i079/test_i079.h | 4 ++-- api-tests/ff/ipc/test_i080/test_i080.c | 4 ++-- api-tests/ff/ipc/test_i080/test_i080.h | 4 ++-- api-tests/ff/ipc/test_i081/test_i081.c | 4 ++-- api-tests/ff/ipc/test_i081/test_i081.h | 4 ++-- api-tests/ff/ipc/test_i082/test_i082.c | 8 ++++---- api-tests/ff/ipc/test_i082/test_i082.h | 4 ++-- api-tests/ff/ipc/test_i083/test_i083.c | 4 ++-- api-tests/ff/ipc/test_i083/test_i083.h | 4 ++-- api-tests/ff/ipc/test_i084/test_i084.c | 4 ++-- api-tests/ff/ipc/test_i084/test_i084.h | 4 ++-- api-tests/ff/ipc/test_i085/test_i085.c | 4 ++-- api-tests/ff/ipc/test_i085/test_i085.h | 4 ++-- api-tests/ff/ipc/test_i086/test_i086.c | 8 ++++---- api-tests/ff/ipc/test_i086/test_i086.h | 4 ++-- api-tests/ff/ipc/test_i087/test_i087.c | 4 ++-- api-tests/ff/ipc/test_i087/test_i087.h | 4 ++-- api-tests/ff/ipc/test_l088/test_l088.c | 2 +- api-tests/ff/ipc/test_l088/test_l088.h | 2 +- api-tests/val/common/val.h | 8 ++++---- api-tests/val/nspe/val_framework.c | 2 +- api-tests/val/spe/val_partition_common.h | 2 +- 338 files changed, 521 insertions(+), 521 deletions(-) diff --git a/api-tests/dev_apis/crypto/test_c001/test_c001.c b/api-tests/dev_apis/crypto/test_c001/test_c001.c index 0b334fcf..4f32416c 100644 --- a/api-tests/dev_apis/crypto/test_c001/test_c001.c +++ b/api-tests/dev_apis/crypto/test_c001/test_c001.c @@ -27,7 +27,7 @@ client_test_t test_c001_crypto_list[] = { NULL, }; -int32_t psa_generate_random_without_init_test(security_t caller) +int32_t psa_generate_random_without_init_test(caller_security_t caller) { uint8_t output[GENERATE_SIZE]; int32_t status; @@ -44,7 +44,7 @@ int32_t psa_generate_random_without_init_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_crypto_init_test(security_t caller) +int32_t psa_crypto_init_test(caller_security_t caller) { int32_t status; @@ -57,7 +57,7 @@ int32_t psa_crypto_init_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t multiple_psa_crypto_init_test(security_t caller) +int32_t multiple_psa_crypto_init_test(caller_security_t caller) { int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c001/test_c001.h b/api-tests/dev_apis/crypto/test_c001/test_c001.h index de257664..0c9c4c99 100644 --- a/api-tests/dev_apis/crypto/test_c001/test_c001.h +++ b/api-tests/dev_apis/crypto/test_c001/test_c001.h @@ -28,7 +28,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c001_crypto_list[]; -int32_t psa_crypto_init_test(security_t caller); -int32_t multiple_psa_crypto_init_test(security_t caller); -int32_t psa_generate_random_without_init_test(security_t caller); +int32_t psa_crypto_init_test(caller_security_t caller); +int32_t multiple_psa_crypto_init_test(caller_security_t caller); +int32_t psa_generate_random_without_init_test(caller_security_t caller); #endif /* _TEST_C001_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.c b/api-tests/dev_apis/crypto/test_c002/test_c002.c index 63944c99..656aebc4 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.c +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c @@ -29,7 +29,7 @@ client_test_t test_c002_crypto_list[] = { static int g_test_count = 1; -int32_t psa_import_key_test(security_t caller) +int32_t psa_import_key_test(caller_security_t caller) { int32_t i, status; uint8_t data[BUFFER_SIZE]; diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.h b/api-tests/dev_apis/crypto/test_c002/test_c002.h index d12fb7db..fecfedb6 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.h +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c002_crypto_list[]; -int32_t psa_import_key_test(security_t caller); +int32_t psa_import_key_test(caller_security_t caller); #endif /* _TEST_C002_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.c b/api-tests/dev_apis/crypto/test_c003/test_c003.c index 814513dd..47607d86 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_c003.c +++ b/api-tests/dev_apis/crypto/test_c003/test_c003.c @@ -29,7 +29,7 @@ client_test_t test_c003_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_export_key_test(security_t caller) +int32_t psa_export_key_test(caller_security_t caller) { int32_t i, status; size_t length; diff --git a/api-tests/dev_apis/crypto/test_c003/test_c003.h b/api-tests/dev_apis/crypto/test_c003/test_c003.h index 96ed12bd..3bd4e535 100644 --- a/api-tests/dev_apis/crypto/test_c003/test_c003.h +++ b/api-tests/dev_apis/crypto/test_c003/test_c003.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c003_crypto_list[]; -int32_t psa_export_key_test(security_t caller); -int32_t psa_export_key_negative_test(security_t caller); +int32_t psa_export_key_test(caller_security_t caller); +int32_t psa_export_key_negative_test(caller_security_t caller); #endif /* _TEST_C003_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.c b/api-tests/dev_apis/crypto/test_c004/test_c004.c index 2eed9a4b..00bdfd34 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_c004.c +++ b/api-tests/dev_apis/crypto/test_c004/test_c004.c @@ -29,7 +29,7 @@ client_test_t test_c004_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t test_psa_export_public_key(security_t caller) +int32_t test_psa_export_public_key(caller_security_t caller) { int32_t i, status; size_t length; diff --git a/api-tests/dev_apis/crypto/test_c004/test_c004.h b/api-tests/dev_apis/crypto/test_c004/test_c004.h index 518013f2..b8f27de9 100644 --- a/api-tests/dev_apis/crypto/test_c004/test_c004.h +++ b/api-tests/dev_apis/crypto/test_c004/test_c004.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c004_crypto_list[]; -int32_t test_psa_export_public_key(security_t caller); +int32_t test_psa_export_public_key(caller_security_t caller); #endif /* _TEST_C004_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.c b/api-tests/dev_apis/crypto/test_c005/test_c005.c index e14e1172..0dabc9d9 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_c005.c +++ b/api-tests/dev_apis/crypto/test_c005/test_c005.c @@ -28,7 +28,7 @@ client_test_t test_c005_crypto_list[] = { static int g_test_count = 1; -int32_t psa_destroy_key_test(security_t caller) +int32_t psa_destroy_key_test(caller_security_t caller) { int32_t i, status; const uint8_t *key_data; diff --git a/api-tests/dev_apis/crypto/test_c005/test_c005.h b/api-tests/dev_apis/crypto/test_c005/test_c005.h index 50cad3d3..95e228b8 100644 --- a/api-tests/dev_apis/crypto/test_c005/test_c005.h +++ b/api-tests/dev_apis/crypto/test_c005/test_c005.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c005_crypto_list[]; -int32_t psa_destroy_key_test(security_t caller); +int32_t psa_destroy_key_test(caller_security_t caller); #endif /* _TEST_C005_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.c b/api-tests/dev_apis/crypto/test_c006/test_c006.c index 61fecdcb..594e3eb4 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_c006.c +++ b/api-tests/dev_apis/crypto/test_c006/test_c006.c @@ -29,7 +29,7 @@ client_test_t test_c006_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_compute_test(security_t caller) +int32_t psa_hash_compute_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.h b/api-tests/dev_apis/crypto/test_c006/test_c006.h index c46a0b36..9a1a6220 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_c006.h +++ b/api-tests/dev_apis/crypto/test_c006/test_c006.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c006_crypto_list[]; -int32_t psa_hash_compute_test(security_t caller); +int32_t psa_hash_compute_test(caller_security_t caller); #endif /* _TEST_C006_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.c b/api-tests/dev_apis/crypto/test_c007/test_c007.c index 1c86caa8..895242a3 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_c007.c +++ b/api-tests/dev_apis/crypto/test_c007/test_c007.c @@ -29,7 +29,7 @@ client_test_t test_c007_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_compare_test(security_t caller) +int32_t psa_hash_compare_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c007/test_c007.h b/api-tests/dev_apis/crypto/test_c007/test_c007.h index 55918d92..fb5c3854 100644 --- a/api-tests/dev_apis/crypto/test_c007/test_c007.h +++ b/api-tests/dev_apis/crypto/test_c007/test_c007.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c007_crypto_list[]; -int32_t psa_hash_compare_test(security_t caller); +int32_t psa_hash_compare_test(caller_security_t caller); #endif /* _TEST_C007_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.c b/api-tests/dev_apis/crypto/test_c008/test_c008.c index afd77420..5063c136 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_c008.c +++ b/api-tests/dev_apis/crypto/test_c008/test_c008.c @@ -29,7 +29,7 @@ client_test_t test_c008_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_setup_test(security_t caller) +int32_t psa_key_derivation_setup_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c008/test_c008.h b/api-tests/dev_apis/crypto/test_c008/test_c008.h index 7fd82709..c86acf82 100644 --- a/api-tests/dev_apis/crypto/test_c008/test_c008.h +++ b/api-tests/dev_apis/crypto/test_c008/test_c008.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c008_crypto_list[]; -int32_t psa_key_derivation_setup_test(security_t caller); +int32_t psa_key_derivation_setup_test(caller_security_t caller); #endif /* _TEST_C008_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.c b/api-tests/dev_apis/crypto/test_c009/test_c009.c index 5410ec41..1288bf6f 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_c009.c +++ b/api-tests/dev_apis/crypto/test_c009/test_c009.c @@ -29,7 +29,7 @@ client_test_t test_c009_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_input_bytes_test(security_t caller) +int32_t psa_key_derivation_input_bytes_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c009/test_c009.h b/api-tests/dev_apis/crypto/test_c009/test_c009.h index c96f1f60..356ad727 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_c009.h +++ b/api-tests/dev_apis/crypto/test_c009/test_c009.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c009_crypto_list[]; -int32_t psa_key_derivation_input_bytes_test(security_t caller); +int32_t psa_key_derivation_input_bytes_test(caller_security_t caller); #endif /* _TEST_C009_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.c b/api-tests/dev_apis/crypto/test_c010/test_c010.c index 041d26b0..5455c0a2 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_c010.c +++ b/api-tests/dev_apis/crypto/test_c010/test_c010.c @@ -29,7 +29,7 @@ client_test_t test_c010_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_attributes_set_get_test(security_t caller) +int32_t psa_key_attributes_set_get_test(caller_security_t caller) { int32_t i, status; psa_key_type_t get_key_type; diff --git a/api-tests/dev_apis/crypto/test_c010/test_c010.h b/api-tests/dev_apis/crypto/test_c010/test_c010.h index eb5bdf7d..7159b5ab 100644 --- a/api-tests/dev_apis/crypto/test_c010/test_c010.h +++ b/api-tests/dev_apis/crypto/test_c010/test_c010.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c010_crypto_list[]; -int32_t psa_key_attributes_set_get_test(security_t caller); +int32_t psa_key_attributes_set_get_test(caller_security_t caller); #endif /* _TEST_C010_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.c b/api-tests/dev_apis/crypto/test_c011/test_c011.c index 4dbc8daa..4abab812 100644 --- a/api-tests/dev_apis/crypto/test_c011/test_c011.c +++ b/api-tests/dev_apis/crypto/test_c011/test_c011.c @@ -29,7 +29,7 @@ client_test_t test_c011_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_setup_test(security_t caller) +int32_t psa_hash_setup_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c011/test_c011.h b/api-tests/dev_apis/crypto/test_c011/test_c011.h index 4c49ee9b..b16284b7 100644 --- a/api-tests/dev_apis/crypto/test_c011/test_c011.h +++ b/api-tests/dev_apis/crypto/test_c011/test_c011.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c011_crypto_list[]; -int32_t psa_hash_setup_test(security_t caller); -int32_t psa_get_key_lifetime_negative_test(security_t caller); +int32_t psa_hash_setup_test(caller_security_t caller); +int32_t psa_get_key_lifetime_negative_test(caller_security_t caller); #endif /* _TEST_C011_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.c b/api-tests/dev_apis/crypto/test_c012/test_c012.c index 1bce2b3e..3e3cc21b 100644 --- a/api-tests/dev_apis/crypto/test_c012/test_c012.c +++ b/api-tests/dev_apis/crypto/test_c012/test_c012.c @@ -31,7 +31,7 @@ client_test_t test_c012_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_update_test(security_t caller) +int32_t psa_hash_update_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -76,7 +76,7 @@ int32_t psa_hash_update_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_update_invalid_handle(security_t caller) +int32_t psa_hash_update_invalid_handle(caller_security_t caller) { psa_hash_operation_t operation; uint8_t input[] = "Hello World"; @@ -108,7 +108,7 @@ int32_t psa_hash_update_invalid_handle(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_update_with_completed_handle(security_t caller) +int32_t psa_hash_update_with_completed_handle(caller_security_t caller) { psa_hash_operation_t operation; uint8_t input[] = {0xbd}; diff --git a/api-tests/dev_apis/crypto/test_c012/test_c012.h b/api-tests/dev_apis/crypto/test_c012/test_c012.h index 6c827974..acbf7770 100644 --- a/api-tests/dev_apis/crypto/test_c012/test_c012.h +++ b/api-tests/dev_apis/crypto/test_c012/test_c012.h @@ -26,7 +26,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c012_crypto_list[]; -int32_t psa_hash_update_test(security_t caller); -int32_t psa_hash_update_invalid_handle(security_t caller); -int32_t psa_hash_update_with_completed_handle(security_t caller); +int32_t psa_hash_update_test(caller_security_t caller); +int32_t psa_hash_update_invalid_handle(caller_security_t caller); +int32_t psa_hash_update_with_completed_handle(caller_security_t caller); #endif /* _TEST_C012_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.c b/api-tests/dev_apis/crypto/test_c013/test_c013.c index 3072d14c..772ea61c 100644 --- a/api-tests/dev_apis/crypto/test_c013/test_c013.c +++ b/api-tests/dev_apis/crypto/test_c013/test_c013.c @@ -30,7 +30,7 @@ client_test_t test_c013_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_verify_test(security_t caller) +int32_t psa_hash_verify_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -86,7 +86,7 @@ int32_t psa_hash_verify_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_verify_inactive_operation_handle(security_t caller) +int32_t psa_hash_verify_inactive_operation_handle(caller_security_t caller) { psa_hash_operation_t operation, invalid_operation; char input = 0xbd; diff --git a/api-tests/dev_apis/crypto/test_c013/test_c013.h b/api-tests/dev_apis/crypto/test_c013/test_c013.h index 02e91e64..2e721278 100644 --- a/api-tests/dev_apis/crypto/test_c013/test_c013.h +++ b/api-tests/dev_apis/crypto/test_c013/test_c013.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c013_crypto_list[]; -int32_t psa_hash_verify_test(security_t caller); -int32_t psa_hash_verify_inactive_operation_handle(security_t caller); +int32_t psa_hash_verify_test(caller_security_t caller); +int32_t psa_hash_verify_inactive_operation_handle(caller_security_t caller); #endif /* _TEST_C013_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.c b/api-tests/dev_apis/crypto/test_c014/test_c014.c index 5a5863ef..a35079ca 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_c014.c +++ b/api-tests/dev_apis/crypto/test_c014/test_c014.c @@ -31,7 +31,7 @@ client_test_t test_c014_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_finish_test(security_t caller) +int32_t psa_hash_finish_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -97,7 +97,7 @@ int32_t psa_hash_finish_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_finish_inactive_operation_handle(security_t caller) +int32_t psa_hash_finish_inactive_operation_handle(caller_security_t caller) { psa_hash_operation_t operation; char input = 0xbd; @@ -145,7 +145,7 @@ int32_t psa_hash_finish_inactive_operation_handle(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_finish_invalid_hash_buffer_size(security_t caller) +int32_t psa_hash_finish_invalid_hash_buffer_size(caller_security_t caller) { psa_hash_operation_t operation; char input = 0xbd; diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.h b/api-tests/dev_apis/crypto/test_c014/test_c014.h index 35dc7918..81b92eee 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_c014.h +++ b/api-tests/dev_apis/crypto/test_c014/test_c014.h @@ -26,7 +26,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c014_crypto_list[]; -int32_t psa_hash_finish_test(security_t caller); -int32_t psa_hash_finish_inactive_operation_handle(security_t caller); -int32_t psa_hash_finish_invalid_hash_buffer_size(security_t caller); +int32_t psa_hash_finish_test(caller_security_t caller); +int32_t psa_hash_finish_inactive_operation_handle(caller_security_t caller); +int32_t psa_hash_finish_invalid_hash_buffer_size(caller_security_t caller); #endif /* _TEST_C014_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.c b/api-tests/dev_apis/crypto/test_c015/test_c015.c index 3e989e72..cd5c96d3 100644 --- a/api-tests/dev_apis/crypto/test_c015/test_c015.c +++ b/api-tests/dev_apis/crypto/test_c015/test_c015.c @@ -30,7 +30,7 @@ client_test_t test_c015_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_abort_test(security_t caller) +int32_t psa_hash_abort_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -73,7 +73,7 @@ int32_t psa_hash_abort_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_hash_abort_before_operation_finish(security_t caller) +int32_t psa_hash_abort_before_operation_finish(caller_security_t caller) { psa_hash_operation_t operation; char input = 0xbd; diff --git a/api-tests/dev_apis/crypto/test_c015/test_c015.h b/api-tests/dev_apis/crypto/test_c015/test_c015.h index 34490bee..b3edc26d 100644 --- a/api-tests/dev_apis/crypto/test_c015/test_c015.h +++ b/api-tests/dev_apis/crypto/test_c015/test_c015.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c015_crypto_list[]; -int32_t psa_hash_abort_test(security_t caller); -int32_t psa_hash_abort_before_operation_finish(security_t caller); +int32_t psa_hash_abort_test(caller_security_t caller); +int32_t psa_hash_abort_before_operation_finish(caller_security_t caller); #endif /* _TEST_C015_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.c b/api-tests/dev_apis/crypto/test_c016/test_c016.c index 63fa51c0..f1ef9dbd 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.c +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c @@ -30,7 +30,7 @@ client_test_t test_c016_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_generate_key_test(security_t caller) +int32_t psa_generate_key_test(caller_security_t caller) { int32_t i, status; size_t length; diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.h b/api-tests/dev_apis/crypto/test_c016/test_c016.h index 3302aa8d..86ed9858 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.h +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c016_crypto_list[]; -int32_t psa_generate_key_test(security_t caller); +int32_t psa_generate_key_test(caller_security_t caller); #endif /* _TEST_C016_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.c b/api-tests/dev_apis/crypto/test_c017/test_c017.c index 4536f35c..9088ddfe 100644 --- a/api-tests/dev_apis/crypto/test_c017/test_c017.c +++ b/api-tests/dev_apis/crypto/test_c017/test_c017.c @@ -30,7 +30,7 @@ client_test_t test_c017_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE], changed[BUFFER_SIZE]; -int32_t psa_generate_random_test(security_t caller) +int32_t psa_generate_random_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); uint32_t i, j, run; diff --git a/api-tests/dev_apis/crypto/test_c017/test_c017.h b/api-tests/dev_apis/crypto/test_c017/test_c017.h index dedf975c..aaf24a03 100644 --- a/api-tests/dev_apis/crypto/test_c017/test_c017.h +++ b/api-tests/dev_apis/crypto/test_c017/test_c017.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c017_crypto_list[]; -int32_t psa_generate_random_test(security_t caller); +int32_t psa_generate_random_test(caller_security_t caller); #endif /* _TEST_C017_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.c b/api-tests/dev_apis/crypto/test_c018/test_c018.c index e85842d2..3c5a2f93 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_c018.c +++ b/api-tests/dev_apis/crypto/test_c018/test_c018.c @@ -30,7 +30,7 @@ client_test_t test_c018_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_input_key_test(security_t caller) +int32_t psa_key_derivation_input_key_test(caller_security_t caller) { int32_t i, status; const uint8_t *key_data; @@ -148,7 +148,7 @@ int32_t psa_key_derivation_input_key_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_key_derivation_input_key_negative_test(security_t caller) +int32_t psa_key_derivation_input_key_negative_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check2)/sizeof(check2[0]); diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.h b/api-tests/dev_apis/crypto/test_c018/test_c018.h index 3d18506f..02555bad 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_c018.h +++ b/api-tests/dev_apis/crypto/test_c018/test_c018.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c018_crypto_list[]; -int32_t psa_key_derivation_input_key_test(security_t caller); -int32_t psa_key_derivation_input_key_negative_test(security_t caller); +int32_t psa_key_derivation_input_key_test(caller_security_t caller); +int32_t psa_key_derivation_input_key_negative_test(caller_security_t caller); #endif /* _TEST_C018_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.c b/api-tests/dev_apis/crypto/test_c019/test_c019.c index 2cd2f482..7593f8c9 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_c019.c +++ b/api-tests/dev_apis/crypto/test_c019/test_c019.c @@ -29,7 +29,7 @@ client_test_t test_c019_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_key_agreement_test(security_t caller) +int32_t psa_key_derivation_key_agreement_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -94,7 +94,7 @@ int32_t psa_key_derivation_key_agreement_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_key_derivation_key_agreement_negative_test(security_t caller) +int32_t psa_key_derivation_key_agreement_negative_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check2)/sizeof(check2[0]); diff --git a/api-tests/dev_apis/crypto/test_c019/test_c019.h b/api-tests/dev_apis/crypto/test_c019/test_c019.h index a91daed8..40f2a365 100644 --- a/api-tests/dev_apis/crypto/test_c019/test_c019.h +++ b/api-tests/dev_apis/crypto/test_c019/test_c019.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c019_crypto_list[]; -int32_t psa_key_derivation_key_agreement_test(security_t caller); -int32_t psa_key_derivation_key_agreement_negative_test(security_t caller); +int32_t psa_key_derivation_key_agreement_test(caller_security_t caller); +int32_t psa_key_derivation_key_agreement_negative_test(caller_security_t caller); #endif /* _TEST_C019_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.c b/api-tests/dev_apis/crypto/test_c020/test_c020.c index 7fc0e3f5..b4f40370 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_c020.c +++ b/api-tests/dev_apis/crypto/test_c020/test_c020.c @@ -30,7 +30,7 @@ client_test_t test_c020_crypto_list[] = { static int g_test_count = 1; static uint8_t output[BUFFER_SIZE]; -int32_t psa_key_derivation_output_bytes_test(security_t caller) +int32_t psa_key_derivation_output_bytes_test(caller_security_t caller) { uint32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c020/test_c020.h b/api-tests/dev_apis/crypto/test_c020/test_c020.h index 331108e7..3e3cdb3c 100644 --- a/api-tests/dev_apis/crypto/test_c020/test_c020.h +++ b/api-tests/dev_apis/crypto/test_c020/test_c020.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c020_crypto_list[]; -int32_t psa_key_derivation_output_bytes_test(security_t caller); +int32_t psa_key_derivation_output_bytes_test(caller_security_t caller); #endif /* _TEST_C020_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.c b/api-tests/dev_apis/crypto/test_c021/test_c021.c index 947ed2e0..78a3571b 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_c021.c +++ b/api-tests/dev_apis/crypto/test_c021/test_c021.c @@ -32,7 +32,7 @@ client_test_t test_c021_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_output_key_test(security_t caller) +int32_t psa_key_derivation_output_key_test(caller_security_t caller) { uint32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c021/test_c021.h b/api-tests/dev_apis/crypto/test_c021/test_c021.h index 7c6ea1d1..787fa99f 100644 --- a/api-tests/dev_apis/crypto/test_c021/test_c021.h +++ b/api-tests/dev_apis/crypto/test_c021/test_c021.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c021_crypto_list[]; -int32_t psa_key_derivation_output_key_test(security_t caller); +int32_t psa_key_derivation_output_key_test(caller_security_t caller); #endif /* _TEST_C021_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.c b/api-tests/dev_apis/crypto/test_c022/test_c022.c index a71e98e2..7278a329 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_c022.c +++ b/api-tests/dev_apis/crypto/test_c022/test_c022.c @@ -31,7 +31,7 @@ client_test_t test_c022_crypto_list[] = { static int g_test_count = 1; static uint8_t output[BUFFER_SIZE]; -int32_t psa_key_derivation_abort_test(security_t caller) +int32_t psa_key_derivation_abort_test(caller_security_t caller) { int32_t status; psa_key_derivation_operation_t func = psa_key_derivation_operation_init(); diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.h b/api-tests/dev_apis/crypto/test_c022/test_c022.h index 57b7b0c4..78233706 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_c022.h +++ b/api-tests/dev_apis/crypto/test_c022/test_c022.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c022_crypto_list[]; -int32_t psa_key_derivation_abort_test(security_t caller); +int32_t psa_key_derivation_abort_test(caller_security_t caller); #endif /* _TEST_C022_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.c b/api-tests/dev_apis/crypto/test_c023/test_c023.c index 6d91e2a9..5f019a41 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_c023.c +++ b/api-tests/dev_apis/crypto/test_c023/test_c023.c @@ -29,7 +29,7 @@ client_test_t test_c023_crypto_list[] = { static int g_test_count = 1; -int32_t psa_key_derivation_set_get_capacity_test(security_t caller) +int32_t psa_key_derivation_set_get_capacity_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c023/test_c023.h b/api-tests/dev_apis/crypto/test_c023/test_c023.h index 2e0af108..1fc9fbf9 100644 --- a/api-tests/dev_apis/crypto/test_c023/test_c023.h +++ b/api-tests/dev_apis/crypto/test_c023/test_c023.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c023_crypto_list[]; -int32_t psa_key_derivation_set_get_capacity_test(security_t caller); +int32_t psa_key_derivation_set_get_capacity_test(caller_security_t caller); #endif /* _TEST_C023_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.c b/api-tests/dev_apis/crypto/test_c024/test_c024.c index 2354ba17..ae709d6a 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_c024.c +++ b/api-tests/dev_apis/crypto/test_c024/test_c024.c @@ -41,7 +41,7 @@ static bool_t is_buffer_empty(uint8_t *buffer, size_t size) return TRUE; } -int32_t psa_aead_encrypt_test(security_t caller) +int32_t psa_aead_encrypt_test(caller_security_t caller) { int32_t i, status; uint8_t ciphertext[BUFFER_SIZE]; diff --git a/api-tests/dev_apis/crypto/test_c024/test_c024.h b/api-tests/dev_apis/crypto/test_c024/test_c024.h index 1e768630..3b613902 100644 --- a/api-tests/dev_apis/crypto/test_c024/test_c024.h +++ b/api-tests/dev_apis/crypto/test_c024/test_c024.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c024_crypto_list[]; -int32_t psa_aead_encrypt_test(security_t caller); +int32_t psa_aead_encrypt_test(caller_security_t caller); #endif /* _TEST_C024_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.c b/api-tests/dev_apis/crypto/test_c025/test_c025.c index c8a6df48..f71d7938 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_c025.c +++ b/api-tests/dev_apis/crypto/test_c025/test_c025.c @@ -41,7 +41,7 @@ static bool_t is_buffer_empty(uint8_t *buffer, size_t size) return TRUE; } -int32_t psa_aead_decrypt_test(security_t caller) +int32_t psa_aead_decrypt_test(caller_security_t caller) { int32_t i, status; uint8_t plaintext[BUFFER_SIZE]; diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.h b/api-tests/dev_apis/crypto/test_c025/test_c025.h index 27674cd0..1955eddf 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_c025.h +++ b/api-tests/dev_apis/crypto/test_c025/test_c025.h @@ -26,7 +26,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c025_crypto_list[]; -int32_t psa_aead_decrypt_test(security_t caller); -int32_t psa_aead_decrypt_negative_test(security_t caller); +int32_t psa_aead_decrypt_test(caller_security_t caller); +int32_t psa_aead_decrypt_negative_test(caller_security_t caller); #endif /* _TEST_C025_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.c b/api-tests/dev_apis/crypto/test_c026/test_c026.c index 94fa65fb..826866ca 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_c026.c +++ b/api-tests/dev_apis/crypto/test_c026/test_c026.c @@ -31,7 +31,7 @@ client_test_t test_c026_crypto_list[] = { static int g_test_count = 1; static psa_mac_operation_t operation; -int32_t psa_mac_sign_setup_test(security_t caller) +int32_t psa_mac_sign_setup_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -95,7 +95,7 @@ int32_t psa_mac_sign_setup_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_mac_sign_setup_negative_test(security_t caller) +int32_t psa_mac_sign_setup_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.h b/api-tests/dev_apis/crypto/test_c026/test_c026.h index f90449ca..fab5a56d 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_c026.h +++ b/api-tests/dev_apis/crypto/test_c026/test_c026.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c026_crypto_list[]; -int32_t psa_mac_sign_setup_test(security_t caller); -int32_t psa_mac_sign_setup_negative_test(security_t caller); +int32_t psa_mac_sign_setup_test(caller_security_t caller); +int32_t psa_mac_sign_setup_negative_test(caller_security_t caller); #endif /* _TEST_C026_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.c b/api-tests/dev_apis/crypto/test_c027/test_c027.c index c4de02be..89bcbf2d 100644 --- a/api-tests/dev_apis/crypto/test_c027/test_c027.c +++ b/api-tests/dev_apis/crypto/test_c027/test_c027.c @@ -31,7 +31,7 @@ client_test_t test_c027_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_mac_update_test(security_t caller) +int32_t psa_mac_update_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -115,7 +115,7 @@ int32_t psa_mac_update_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_mac_update_invalid_operator_test(security_t caller) +int32_t psa_mac_update_invalid_operator_test(caller_security_t caller) { int32_t i, status; psa_mac_operation_t operation[] = {psa_mac_operation_init(), PSA_MAC_OPERATION_INIT, {0} }; diff --git a/api-tests/dev_apis/crypto/test_c027/test_c027.h b/api-tests/dev_apis/crypto/test_c027/test_c027.h index 4af68c6d..69f72f15 100644 --- a/api-tests/dev_apis/crypto/test_c027/test_c027.h +++ b/api-tests/dev_apis/crypto/test_c027/test_c027.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c027_crypto_list[]; -int32_t psa_mac_update_test(security_t caller); -int32_t psa_mac_update_invalid_operator_test(security_t caller); +int32_t psa_mac_update_test(caller_security_t caller); +int32_t psa_mac_update_invalid_operator_test(caller_security_t caller); #endif /* _TEST_C027_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.c b/api-tests/dev_apis/crypto/test_c028/test_c028.c index 9599fb45..540af723 100644 --- a/api-tests/dev_apis/crypto/test_c028/test_c028.c +++ b/api-tests/dev_apis/crypto/test_c028/test_c028.c @@ -30,7 +30,7 @@ client_test_t test_c028_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_mac_sign_finish_test(security_t caller) +int32_t psa_mac_sign_finish_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c028/test_c028.h b/api-tests/dev_apis/crypto/test_c028/test_c028.h index bebadba5..792a1a9b 100644 --- a/api-tests/dev_apis/crypto/test_c028/test_c028.h +++ b/api-tests/dev_apis/crypto/test_c028/test_c028.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c028_crypto_list[]; -int32_t psa_mac_sign_finish_test(security_t caller); +int32_t psa_mac_sign_finish_test(caller_security_t caller); #endif /* _TEST_C028_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.c b/api-tests/dev_apis/crypto/test_c029/test_c029.c index 816aa105..ee9b7f57 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_c029.c +++ b/api-tests/dev_apis/crypto/test_c029/test_c029.c @@ -31,7 +31,7 @@ client_test_t test_c029_crypto_list[] = { static int g_test_count = 1; static psa_mac_operation_t operation; -int32_t psa_mac_verify_setup_test(security_t caller) +int32_t psa_mac_verify_setup_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -96,7 +96,7 @@ int32_t psa_mac_verify_setup_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_mac_verify_setup_negative_test(security_t caller) +int32_t psa_mac_verify_setup_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c029/test_c029.h b/api-tests/dev_apis/crypto/test_c029/test_c029.h index e12700a9..81234faa 100644 --- a/api-tests/dev_apis/crypto/test_c029/test_c029.h +++ b/api-tests/dev_apis/crypto/test_c029/test_c029.h @@ -26,7 +26,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c029_crypto_list[]; -int32_t psa_mac_verify_setup_test(security_t caller); -int32_t psa_mac_verify_setup_negative_test(security_t caller); +int32_t psa_mac_verify_setup_test(caller_security_t caller); +int32_t psa_mac_verify_setup_negative_test(caller_security_t caller); #endif /* _TEST_C029_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.c b/api-tests/dev_apis/crypto/test_c030/test_c030.c index 323ee8b0..6643c342 100644 --- a/api-tests/dev_apis/crypto/test_c030/test_c030.c +++ b/api-tests/dev_apis/crypto/test_c030/test_c030.c @@ -29,7 +29,7 @@ client_test_t test_c030_crypto_list[] = { static int g_test_count = 1; -int32_t psa_mac_verify_finish_test(security_t caller) +int32_t psa_mac_verify_finish_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c030/test_c030.h b/api-tests/dev_apis/crypto/test_c030/test_c030.h index eacecd81..defd6031 100644 --- a/api-tests/dev_apis/crypto/test_c030/test_c030.h +++ b/api-tests/dev_apis/crypto/test_c030/test_c030.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c030_crypto_list[]; -int32_t psa_mac_verify_finish_test(security_t caller); +int32_t psa_mac_verify_finish_test(caller_security_t caller); #endif /* _TEST_C030_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.c b/api-tests/dev_apis/crypto/test_c031/test_c031.c index eaef9bd7..909ea11a 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_c031.c +++ b/api-tests/dev_apis/crypto/test_c031/test_c031.c @@ -31,7 +31,7 @@ client_test_t test_c031_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_mac_abort_test(security_t caller) +int32_t psa_mac_abort_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -89,7 +89,7 @@ int32_t psa_mac_abort_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_mac_abort_before_finish_test(security_t caller) +int32_t psa_mac_abort_before_finish_test(caller_security_t caller) { size_t length; psa_algorithm_t key_alg = PSA_ALG_CMAC; diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.h b/api-tests/dev_apis/crypto/test_c031/test_c031.h index 7582a591..ba716fac 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_c031.h +++ b/api-tests/dev_apis/crypto/test_c031/test_c031.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c031_crypto_list[]; -int32_t psa_mac_abort_test(security_t caller); -int32_t psa_mac_abort_before_finish_test(security_t caller); +int32_t psa_mac_abort_test(caller_security_t caller); +int32_t psa_mac_abort_before_finish_test(caller_security_t caller); #endif /* _TEST_C031_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.c b/api-tests/dev_apis/crypto/test_c032/test_c032.c index 0b10ef36..c246c0c5 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_c032.c +++ b/api-tests/dev_apis/crypto/test_c032/test_c032.c @@ -31,7 +31,7 @@ client_test_t test_c032_crypto_list[] = { static int g_test_count = 1; static psa_cipher_operation_t operation; -int32_t psa_cipher_encrypt_setup_test(security_t caller) +int32_t psa_cipher_encrypt_setup_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -129,7 +129,7 @@ int32_t psa_cipher_encrypt_setup_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_cipher_encrypt_setup_negative_test(security_t caller) +int32_t psa_cipher_encrypt_setup_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.h b/api-tests/dev_apis/crypto/test_c032/test_c032.h index f229c1a5..f9887a2f 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_c032.h +++ b/api-tests/dev_apis/crypto/test_c032/test_c032.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c032_crypto_list[]; -int32_t psa_cipher_encrypt_setup_test(security_t caller); -int32_t psa_cipher_encrypt_setup_negative_test(security_t caller); +int32_t psa_cipher_encrypt_setup_test(caller_security_t caller); +int32_t psa_cipher_encrypt_setup_negative_test(caller_security_t caller); #endif /* _TEST_C032_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.c b/api-tests/dev_apis/crypto/test_c033/test_c033.c index f1dc46d5..c44e1153 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_c033.c +++ b/api-tests/dev_apis/crypto/test_c033/test_c033.c @@ -31,7 +31,7 @@ client_test_t test_c033_crypto_list[] = { static int g_test_count = 1; static psa_cipher_operation_t operation; -int32_t psa_cipher_decrypt_setup_test(security_t caller) +int32_t psa_cipher_decrypt_setup_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -128,7 +128,7 @@ int32_t psa_cipher_decrypt_setup_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_cipher_decrypt_setup_negative_test(security_t caller) +int32_t psa_cipher_decrypt_setup_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.h b/api-tests/dev_apis/crypto/test_c033/test_c033.h index 5e2aa85b..ea045b45 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_c033.h +++ b/api-tests/dev_apis/crypto/test_c033/test_c033.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c033_crypto_list[]; -int32_t psa_cipher_decrypt_setup_test(security_t caller); -int32_t psa_cipher_decrypt_setup_negative_test(security_t caller); +int32_t psa_cipher_decrypt_setup_test(caller_security_t caller); +int32_t psa_cipher_decrypt_setup_negative_test(caller_security_t caller); #endif /* _TEST_C033_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.c b/api-tests/dev_apis/crypto/test_c034/test_c034.c index eb0f7d81..0017ce07 100644 --- a/api-tests/dev_apis/crypto/test_c034/test_c034.c +++ b/api-tests/dev_apis/crypto/test_c034/test_c034.c @@ -30,7 +30,7 @@ client_test_t test_c034_crypto_list[] = { static int g_test_count = 1; -int32_t psa_cipher_generate_iv_test(security_t caller) +int32_t psa_cipher_generate_iv_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); uint32_t i, j, iv_sum; diff --git a/api-tests/dev_apis/crypto/test_c034/test_c034.h b/api-tests/dev_apis/crypto/test_c034/test_c034.h index 7e94b95f..67273ab8 100644 --- a/api-tests/dev_apis/crypto/test_c034/test_c034.h +++ b/api-tests/dev_apis/crypto/test_c034/test_c034.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c034_crypto_list[]; -int32_t psa_cipher_generate_iv_test(security_t caller); +int32_t psa_cipher_generate_iv_test(caller_security_t caller); #endif /* _TEST_C034_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.c b/api-tests/dev_apis/crypto/test_c035/test_c035.c index 5d6e5c57..8d19a105 100644 --- a/api-tests/dev_apis/crypto/test_c035/test_c035.c +++ b/api-tests/dev_apis/crypto/test_c035/test_c035.c @@ -30,7 +30,7 @@ client_test_t test_c035_crypto_list[] = { static int g_test_count = 1; -int32_t psa_cipher_set_iv_test(security_t caller) +int32_t psa_cipher_set_iv_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c035/test_c035.h b/api-tests/dev_apis/crypto/test_c035/test_c035.h index aeda8b9d..b5a6a49d 100644 --- a/api-tests/dev_apis/crypto/test_c035/test_c035.h +++ b/api-tests/dev_apis/crypto/test_c035/test_c035.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c035_crypto_list[]; -int32_t psa_cipher_set_iv_test(security_t caller); +int32_t psa_cipher_set_iv_test(caller_security_t caller); #endif /* _TEST_C035_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.c b/api-tests/dev_apis/crypto/test_c036/test_c036.c index ac236f98..64fea253 100644 --- a/api-tests/dev_apis/crypto/test_c036/test_c036.c +++ b/api-tests/dev_apis/crypto/test_c036/test_c036.c @@ -33,7 +33,7 @@ static int g_test_count = 1; static uint8_t input[SIZE_32B]; static uint8_t output[SIZE_32B]; -int32_t psa_cipher_update_test(security_t caller) +int32_t psa_cipher_update_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -128,7 +128,7 @@ int32_t psa_cipher_update_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_cipher_update_negative_test(security_t caller) +int32_t psa_cipher_update_negative_test(caller_security_t caller) { int32_t i, status; psa_cipher_operation_t operations[] = {psa_cipher_operation_init(), diff --git a/api-tests/dev_apis/crypto/test_c036/test_c036.h b/api-tests/dev_apis/crypto/test_c036/test_c036.h index 583c97dc..20567626 100644 --- a/api-tests/dev_apis/crypto/test_c036/test_c036.h +++ b/api-tests/dev_apis/crypto/test_c036/test_c036.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c036_crypto_list[]; -int32_t psa_cipher_update_test(security_t caller); -int32_t psa_cipher_update_negative_test(security_t caller); +int32_t psa_cipher_update_test(caller_security_t caller); +int32_t psa_cipher_update_negative_test(caller_security_t caller); #endif /* _TEST_C036_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.c b/api-tests/dev_apis/crypto/test_c037/test_c037.c index 01b0b346..40ee54bc 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_c037.c +++ b/api-tests/dev_apis/crypto/test_c037/test_c037.c @@ -33,7 +33,7 @@ client_test_t test_c037_crypto_list[] = { static int g_test_count = 1; static uint8_t output[SIZE_32B]; -int32_t psa_cipher_finish_test(security_t caller) +int32_t psa_cipher_finish_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.h b/api-tests/dev_apis/crypto/test_c037/test_c037.h index e74afeff..cf57c407 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_c037.h +++ b/api-tests/dev_apis/crypto/test_c037/test_c037.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c037_crypto_list[]; -int32_t psa_cipher_finish_test(security_t caller); +int32_t psa_cipher_finish_test(caller_security_t caller); #endif /* _TEST_C037_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.c b/api-tests/dev_apis/crypto/test_c038/test_c038.c index c4d6bd95..99e008ca 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_c038.c +++ b/api-tests/dev_apis/crypto/test_c038/test_c038.c @@ -31,7 +31,7 @@ client_test_t test_c038_crypto_list[] = { static int g_test_count = 1; static uint8_t output[SIZE_32B]; -int32_t psa_cipher_abort_test(security_t caller) +int32_t psa_cipher_abort_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -102,7 +102,7 @@ int32_t psa_cipher_abort_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_cipher_abort_before_update_test(security_t caller) +int32_t psa_cipher_abort_before_update_test(caller_security_t caller) { size_t length; psa_algorithm_t key_alg = PSA_ALG_CBC_NO_PADDING; diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.h b/api-tests/dev_apis/crypto/test_c038/test_c038.h index 0bbabd97..3568e655 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_c038.h +++ b/api-tests/dev_apis/crypto/test_c038/test_c038.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c038_crypto_list[]; -int32_t psa_cipher_abort_test(security_t caller); -int32_t psa_cipher_abort_before_update_test(security_t caller); +int32_t psa_cipher_abort_test(caller_security_t caller); +int32_t psa_cipher_abort_before_update_test(caller_security_t caller); #endif /* _TEST_C038_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.c b/api-tests/dev_apis/crypto/test_c039/test_c039.c index d93b33c6..72648bc1 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_c039.c +++ b/api-tests/dev_apis/crypto/test_c039/test_c039.c @@ -44,7 +44,7 @@ static bool_t is_buffer_empty(uint8_t *buffer, size_t size) static int g_test_count = 1; static uint8_t output[SIZE_128B]; -int32_t psa_asymmetric_encrypt_test(security_t caller) +int32_t psa_asymmetric_encrypt_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -174,7 +174,7 @@ int32_t psa_asymmetric_encrypt_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_asymmetric_encrypt_negative_test(security_t caller) +int32_t psa_asymmetric_encrypt_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c039/test_c039.h b/api-tests/dev_apis/crypto/test_c039/test_c039.h index 065918d4..dd431d33 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_c039.h +++ b/api-tests/dev_apis/crypto/test_c039/test_c039.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c039_crypto_list[]; -int32_t psa_asymmetric_encrypt_test(security_t caller); -int32_t psa_asymmetric_encrypt_negative_test(security_t caller); +int32_t psa_asymmetric_encrypt_test(caller_security_t caller); +int32_t psa_asymmetric_encrypt_negative_test(caller_security_t caller); #endif /* _TEST_C039_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.c b/api-tests/dev_apis/crypto/test_c040/test_c040.c index 8dba0df2..e2490b5e 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_c040.c +++ b/api-tests/dev_apis/crypto/test_c040/test_c040.c @@ -44,7 +44,7 @@ static bool_t is_buffer_empty(uint8_t *buffer, size_t size) static int g_test_count = 1; static uint8_t output[SIZE_128B]; -int32_t psa_asymmetric_decrypt_test(security_t caller) +int32_t psa_asymmetric_decrypt_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -160,7 +160,7 @@ int32_t psa_asymmetric_decrypt_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_asymmetric_decrypt_negative_test(security_t caller) +int32_t psa_asymmetric_decrypt_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.h b/api-tests/dev_apis/crypto/test_c040/test_c040.h index 4aa592ad..80e95f9d 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_c040.h +++ b/api-tests/dev_apis/crypto/test_c040/test_c040.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c040_crypto_list[]; -int32_t psa_asymmetric_decrypt_test(security_t caller); -int32_t psa_asymmetric_decrypt_negative_test(security_t caller); +int32_t psa_asymmetric_decrypt_test(caller_security_t caller); +int32_t psa_asymmetric_decrypt_negative_test(caller_security_t caller); #endif /* _TEST_C040_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.c b/api-tests/dev_apis/crypto/test_c041/test_c041.c index ea343f33..7f8e2b43 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_c041.c +++ b/api-tests/dev_apis/crypto/test_c041/test_c041.c @@ -31,7 +31,7 @@ client_test_t test_c041_crypto_list[] = { static int g_test_count = 1; static uint8_t signature[SIZE_128B]; -int32_t psa_asymmetric_sign_test(security_t caller) +int32_t psa_asymmetric_sign_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -134,7 +134,7 @@ int32_t psa_asymmetric_sign_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_asymmetric_sign_negative_test(security_t caller) +int32_t psa_asymmetric_sign_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.h b/api-tests/dev_apis/crypto/test_c041/test_c041.h index 326bed66..f761ec6e 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_c041.h +++ b/api-tests/dev_apis/crypto/test_c041/test_c041.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c041_crypto_list[]; -int32_t psa_asymmetric_sign_test(security_t caller); -int32_t psa_asymmetric_sign_negative_test(security_t caller); +int32_t psa_asymmetric_sign_test(caller_security_t caller); +int32_t psa_asymmetric_sign_negative_test(caller_security_t caller); #endif /* _TEST_C041_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.c b/api-tests/dev_apis/crypto/test_c042/test_c042.c index d511f2af..996577de 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_c042.c +++ b/api-tests/dev_apis/crypto/test_c042/test_c042.c @@ -30,7 +30,7 @@ client_test_t test_c042_crypto_list[] = { static int g_test_count = 1; -int32_t psa_asymmetric_verify_test(security_t caller) +int32_t psa_asymmetric_verify_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -116,7 +116,7 @@ int32_t psa_asymmetric_verify_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_asymmetric_verify_negative_test(security_t caller) +int32_t psa_asymmetric_verify_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c042/test_c042.h b/api-tests/dev_apis/crypto/test_c042/test_c042.h index fb9c83a9..ffa2eaf3 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_c042.h +++ b/api-tests/dev_apis/crypto/test_c042/test_c042.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c042_crypto_list[]; -int32_t psa_asymmetric_verify_test(security_t caller); -int32_t psa_asymmetric_verify_negative_test(security_t caller); +int32_t psa_asymmetric_verify_test(caller_security_t caller); +int32_t psa_asymmetric_verify_negative_test(caller_security_t caller); #endif /* _TEST_C042_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.c b/api-tests/dev_apis/crypto/test_c043/test_c043.c index a9d16c80..89ae1fc3 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_c043.c +++ b/api-tests/dev_apis/crypto/test_c043/test_c043.c @@ -30,7 +30,7 @@ client_test_t test_c043_crypto_list[] = { static int g_test_count = 1; static uint8_t output[SIZE_50B]; -int32_t psa_raw_key_agreement_test(security_t caller) +int32_t psa_raw_key_agreement_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; @@ -92,7 +92,7 @@ int32_t psa_raw_key_agreement_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_raw_key_agreement_negative_test(security_t caller) +int32_t psa_raw_key_agreement_negative_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.h b/api-tests/dev_apis/crypto/test_c043/test_c043.h index ec64a531..136a47b3 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_c043.h +++ b/api-tests/dev_apis/crypto/test_c043/test_c043.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c043_crypto_list[]; -int32_t psa_raw_key_agreement_test(security_t caller); -int32_t psa_raw_key_agreement_negative_test(security_t caller); +int32_t psa_raw_key_agreement_test(caller_security_t caller); +int32_t psa_raw_key_agreement_negative_test(caller_security_t caller); #endif /* _TEST_C043_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.c b/api-tests/dev_apis/crypto/test_c044/test_c044.c index e528d41d..60cf422c 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_c044.c +++ b/api-tests/dev_apis/crypto/test_c044/test_c044.c @@ -30,7 +30,7 @@ client_test_t test_c044_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_copy_key_test(security_t caller) +int32_t psa_copy_key_test(caller_security_t caller) { uint32_t length, i; const uint8_t *key_data; diff --git a/api-tests/dev_apis/crypto/test_c044/test_c044.h b/api-tests/dev_apis/crypto/test_c044/test_c044.h index ac4a474c..caea58b1 100644 --- a/api-tests/dev_apis/crypto/test_c044/test_c044.h +++ b/api-tests/dev_apis/crypto/test_c044/test_c044.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c044_crypto_list[]; -int32_t psa_copy_key_test(security_t caller); +int32_t psa_copy_key_test(caller_security_t caller); #endif /* _TEST_C044_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.c b/api-tests/dev_apis/crypto/test_c045/test_c045.c index 99b04238..03e06f83 100644 --- a/api-tests/dev_apis/crypto/test_c045/test_c045.c +++ b/api-tests/dev_apis/crypto/test_c045/test_c045.c @@ -29,7 +29,7 @@ client_test_t test_c045_crypto_list[] = { static int g_test_count = 1; -int32_t psa_hash_clone_test(security_t caller) +int32_t psa_hash_clone_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c045/test_c045.h b/api-tests/dev_apis/crypto/test_c045/test_c045.h index 75f63da6..df92d964 100644 --- a/api-tests/dev_apis/crypto/test_c045/test_c045.h +++ b/api-tests/dev_apis/crypto/test_c045/test_c045.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c045_crypto_list[]; -int32_t psa_hash_clone_test(security_t caller); +int32_t psa_hash_clone_test(caller_security_t caller); #endif /* _TEST_C045_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.c b/api-tests/dev_apis/crypto/test_c046/test_c046.c index e7ba526d..0ed33fa3 100644 --- a/api-tests/dev_apis/crypto/test_c046/test_c046.c +++ b/api-tests/dev_apis/crypto/test_c046/test_c046.c @@ -30,7 +30,7 @@ client_test_t test_c046_crypto_list[] = { static int g_test_count = 1; static uint8_t data[BUFFER_SIZE]; -int32_t psa_mac_compute_test(security_t caller) +int32_t psa_mac_compute_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c046/test_c046.h b/api-tests/dev_apis/crypto/test_c046/test_c046.h index 3fbe0547..b0d994ec 100644 --- a/api-tests/dev_apis/crypto/test_c046/test_c046.h +++ b/api-tests/dev_apis/crypto/test_c046/test_c046.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c046_crypto_list[]; -int32_t psa_mac_compute_test(security_t caller); +int32_t psa_mac_compute_test(caller_security_t caller); #endif /* _TEST_C046_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.c b/api-tests/dev_apis/crypto/test_c047/test_c047.c index a28c9c6f..da4d2673 100644 --- a/api-tests/dev_apis/crypto/test_c047/test_c047.c +++ b/api-tests/dev_apis/crypto/test_c047/test_c047.c @@ -29,7 +29,7 @@ client_test_t test_c047_crypto_list[] = { static int g_test_count = 1; -int32_t psa_mac_verify_test(security_t caller) +int32_t psa_mac_verify_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c047/test_c047.h b/api-tests/dev_apis/crypto/test_c047/test_c047.h index 8c47a82d..7e36fd36 100644 --- a/api-tests/dev_apis/crypto/test_c047/test_c047.h +++ b/api-tests/dev_apis/crypto/test_c047/test_c047.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c047_crypto_list[]; -int32_t psa_mac_verify_test(security_t caller); +int32_t psa_mac_verify_test(caller_security_t caller); #endif /* _TEST_C047_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.c b/api-tests/dev_apis/crypto/test_c048/test_c048.c index 8ae030b6..8ad6cd0f 100644 --- a/api-tests/dev_apis/crypto/test_c048/test_c048.c +++ b/api-tests/dev_apis/crypto/test_c048/test_c048.c @@ -29,7 +29,7 @@ client_test_t test_c048_crypto_list[] = { static int g_test_count = 1; static uint8_t output[SIZE_32B]; -int32_t psa_cipher_encrypt_test(security_t caller) +int32_t psa_cipher_encrypt_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c048/test_c048.h b/api-tests/dev_apis/crypto/test_c048/test_c048.h index dbd289e6..d0ede7b3 100644 --- a/api-tests/dev_apis/crypto/test_c048/test_c048.h +++ b/api-tests/dev_apis/crypto/test_c048/test_c048.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c048_crypto_list[]; -int32_t psa_cipher_encrypt_test(security_t caller); +int32_t psa_cipher_encrypt_test(caller_security_t caller); #endif /* _TEST_C048_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.c b/api-tests/dev_apis/crypto/test_c049/test_c049.c index 024abd59..e9235828 100644 --- a/api-tests/dev_apis/crypto/test_c049/test_c049.c +++ b/api-tests/dev_apis/crypto/test_c049/test_c049.c @@ -29,7 +29,7 @@ client_test_t test_c049_crypto_list[] = { static int g_test_count = 1; static uint8_t output[SIZE_32B]; -int32_t psa_cipher_decrypt_test(security_t caller) +int32_t psa_cipher_decrypt_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); int32_t i, status; diff --git a/api-tests/dev_apis/crypto/test_c049/test_c049.h b/api-tests/dev_apis/crypto/test_c049/test_c049.h index 93eb0312..412a8ae3 100644 --- a/api-tests/dev_apis/crypto/test_c049/test_c049.h +++ b/api-tests/dev_apis/crypto/test_c049/test_c049.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c049_crypto_list[]; -int32_t psa_cipher_decrypt_test(security_t caller); +int32_t psa_cipher_decrypt_test(caller_security_t caller); #endif /* _TEST_C049_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c index 894670ac..6b7f1bcb 100644 --- a/api-tests/dev_apis/crypto/test_c050/test_c050.c +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c @@ -29,7 +29,7 @@ client_test_t test_c050_crypto_list[] = { static int g_test_count = 1; -int32_t psa_open_key_test(security_t caller) +int32_t psa_open_key_test(caller_security_t caller) { int32_t status, i = 0; uint8_t data[BUFFER_SIZE]; diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.h b/api-tests/dev_apis/crypto/test_c050/test_c050.h index 4680a0ac..76fc8c53 100644 --- a/api-tests/dev_apis/crypto/test_c050/test_c050.h +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c050_crypto_list[]; -int32_t psa_open_key_test(security_t caller); +int32_t psa_open_key_test(caller_security_t caller); #endif /* _TEST_C050_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.c b/api-tests/dev_apis/crypto/test_c051/test_c051.c index e87dd92b..e9d2bd79 100644 --- a/api-tests/dev_apis/crypto/test_c051/test_c051.c +++ b/api-tests/dev_apis/crypto/test_c051/test_c051.c @@ -28,7 +28,7 @@ client_test_t test_c051_crypto_list[] = { static int g_test_count = 1; -int32_t psa_close_key_test(security_t caller) +int32_t psa_close_key_test(caller_security_t caller) { int32_t i, status; const uint8_t *key_data; diff --git a/api-tests/dev_apis/crypto/test_c051/test_c051.h b/api-tests/dev_apis/crypto/test_c051/test_c051.h index 552d28ae..a539ecc7 100644 --- a/api-tests/dev_apis/crypto/test_c051/test_c051.h +++ b/api-tests/dev_apis/crypto/test_c051/test_c051.h @@ -26,5 +26,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c051_crypto_list[]; -int32_t psa_close_key_test(security_t caller); +int32_t psa_close_key_test(caller_security_t caller); #endif /* _TEST_C051_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.c b/api-tests/dev_apis/crypto/test_c052/test_c052.c index 8e8df069..61cd7bbf 100644 --- a/api-tests/dev_apis/crypto/test_c052/test_c052.c +++ b/api-tests/dev_apis/crypto/test_c052/test_c052.c @@ -28,7 +28,7 @@ client_test_t test_c052_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_encrypt_setup_test(security_t caller) +int32_t psa_aead_encrypt_setup_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c052/test_c052.h b/api-tests/dev_apis/crypto/test_c052/test_c052.h index 20fc7440..65e5c5fc 100644 --- a/api-tests/dev_apis/crypto/test_c052/test_c052.h +++ b/api-tests/dev_apis/crypto/test_c052/test_c052.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c052_crypto_list[]; -int32_t psa_aead_encrypt_setup_test(security_t caller); +int32_t psa_aead_encrypt_setup_test(caller_security_t caller); #endif /* _TEST_C052_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.c b/api-tests/dev_apis/crypto/test_c053/test_c053.c index c54b7830..8b215041 100644 --- a/api-tests/dev_apis/crypto/test_c053/test_c053.c +++ b/api-tests/dev_apis/crypto/test_c053/test_c053.c @@ -28,7 +28,7 @@ client_test_t test_c053_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_decrypt_setup_test(security_t caller) +int32_t psa_aead_decrypt_setup_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c053/test_c053.h b/api-tests/dev_apis/crypto/test_c053/test_c053.h index 23afbc1f..0f3dde79 100644 --- a/api-tests/dev_apis/crypto/test_c053/test_c053.h +++ b/api-tests/dev_apis/crypto/test_c053/test_c053.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c053_crypto_list[]; -int32_t psa_aead_decrypt_setup_test(security_t caller); +int32_t psa_aead_decrypt_setup_test(caller_security_t caller); #endif /* _TEST_C053_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.c b/api-tests/dev_apis/crypto/test_c054/test_c054.c index c95b2078..553e073e 100644 --- a/api-tests/dev_apis/crypto/test_c054/test_c054.c +++ b/api-tests/dev_apis/crypto/test_c054/test_c054.c @@ -28,7 +28,7 @@ client_test_t test_c054_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_generate_nonce_test(security_t caller) +int32_t psa_aead_generate_nonce_test(caller_security_t caller) { int32_t i, j, status, nonce_sum; uint8_t nonce[SIZE_32B]; diff --git a/api-tests/dev_apis/crypto/test_c054/test_c054.h b/api-tests/dev_apis/crypto/test_c054/test_c054.h index 11be08b2..65607163 100644 --- a/api-tests/dev_apis/crypto/test_c054/test_c054.h +++ b/api-tests/dev_apis/crypto/test_c054/test_c054.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c054_crypto_list[]; -int32_t psa_aead_generate_nonce_test(security_t caller); +int32_t psa_aead_generate_nonce_test(caller_security_t caller); #endif /* _TEST_C054_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.c b/api-tests/dev_apis/crypto/test_c055/test_c055.c index d67a219f..600eb1d2 100644 --- a/api-tests/dev_apis/crypto/test_c055/test_c055.c +++ b/api-tests/dev_apis/crypto/test_c055/test_c055.c @@ -28,7 +28,7 @@ client_test_t test_c055_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_set_nonce_test(security_t caller) +int32_t psa_aead_set_nonce_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.h b/api-tests/dev_apis/crypto/test_c055/test_c055.h index fc9c9b85..6e4ae3fa 100644 --- a/api-tests/dev_apis/crypto/test_c055/test_c055.h +++ b/api-tests/dev_apis/crypto/test_c055/test_c055.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c055_crypto_list[]; -int32_t psa_aead_set_nonce_test(security_t caller); +int32_t psa_aead_set_nonce_test(caller_security_t caller); #endif /* _TEST_C055_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.c b/api-tests/dev_apis/crypto/test_c056/test_c056.c index c4356c61..5b9f0c73 100644 --- a/api-tests/dev_apis/crypto/test_c056/test_c056.c +++ b/api-tests/dev_apis/crypto/test_c056/test_c056.c @@ -28,7 +28,7 @@ client_test_t test_c056_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_set_lengths_test(security_t caller) +int32_t psa_aead_set_lengths_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c056/test_c056.h b/api-tests/dev_apis/crypto/test_c056/test_c056.h index ed57bdcc..ba639f19 100644 --- a/api-tests/dev_apis/crypto/test_c056/test_c056.h +++ b/api-tests/dev_apis/crypto/test_c056/test_c056.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c056_crypto_list[]; -int32_t psa_aead_set_lengths_test(security_t caller); +int32_t psa_aead_set_lengths_test(caller_security_t caller); #endif /* _TEST_C056_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.c b/api-tests/dev_apis/crypto/test_c057/test_c057.c index 81cd91d6..95dd0f41 100644 --- a/api-tests/dev_apis/crypto/test_c057/test_c057.c +++ b/api-tests/dev_apis/crypto/test_c057/test_c057.c @@ -28,7 +28,7 @@ client_test_t test_c057_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_update_ad_test(security_t caller) +int32_t psa_aead_update_ad_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); diff --git a/api-tests/dev_apis/crypto/test_c057/test_c057.h b/api-tests/dev_apis/crypto/test_c057/test_c057.h index 7a26ad94..fcbfd89a 100644 --- a/api-tests/dev_apis/crypto/test_c057/test_c057.h +++ b/api-tests/dev_apis/crypto/test_c057/test_c057.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c057_crypto_list[]; -int32_t psa_aead_update_ad_test(security_t caller); +int32_t psa_aead_update_ad_test(caller_security_t caller); #endif /* _TEST_C057_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.c b/api-tests/dev_apis/crypto/test_c058/test_c058.c index 5ab48c91..5b6db96d 100644 --- a/api-tests/dev_apis/crypto/test_c058/test_c058.c +++ b/api-tests/dev_apis/crypto/test_c058/test_c058.c @@ -28,7 +28,7 @@ client_test_t test_c058_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_update_test(security_t caller) +int32_t psa_aead_update_test(caller_security_t caller) { int32_t i, status; uint8_t output[BUFFER_SIZE]; diff --git a/api-tests/dev_apis/crypto/test_c058/test_c058.h b/api-tests/dev_apis/crypto/test_c058/test_c058.h index 13f7b835..72129758 100644 --- a/api-tests/dev_apis/crypto/test_c058/test_c058.h +++ b/api-tests/dev_apis/crypto/test_c058/test_c058.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c058_crypto_list[]; -int32_t psa_aead_update_test(security_t caller); +int32_t psa_aead_update_test(caller_security_t caller); #endif /* _TEST_C058_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.c b/api-tests/dev_apis/crypto/test_c059/test_c059.c index 5fb910fd..ce94a95d 100644 --- a/api-tests/dev_apis/crypto/test_c059/test_c059.c +++ b/api-tests/dev_apis/crypto/test_c059/test_c059.c @@ -28,7 +28,7 @@ client_test_t test_c059_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_finish_test(security_t caller) +int32_t psa_aead_finish_test(caller_security_t caller) { int32_t i, status; uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.h b/api-tests/dev_apis/crypto/test_c059/test_c059.h index bc4dea78..ed18925f 100644 --- a/api-tests/dev_apis/crypto/test_c059/test_c059.h +++ b/api-tests/dev_apis/crypto/test_c059/test_c059.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c059_crypto_list[]; -int32_t psa_aead_finish_test(security_t caller); +int32_t psa_aead_finish_test(caller_security_t caller); #endif /* _TEST_C059_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.c b/api-tests/dev_apis/crypto/test_c060/test_c060.c index 354f3b8b..e924a9ea 100644 --- a/api-tests/dev_apis/crypto/test_c060/test_c060.c +++ b/api-tests/dev_apis/crypto/test_c060/test_c060.c @@ -29,7 +29,7 @@ client_test_t test_c060_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_abort_test(security_t caller) +int32_t psa_aead_abort_test(caller_security_t caller) { int32_t i, status; int num_checks = sizeof(check1)/sizeof(check1[0]); @@ -85,7 +85,7 @@ int32_t psa_aead_abort_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_aead_abort_init_test(security_t caller) +int32_t psa_aead_abort_init_test(caller_security_t caller) { int32_t i, status; psa_aead_operation_t operation[] = {PSA_AEAD_OPERATION_INIT, psa_aead_operation_init(), {0} }; diff --git a/api-tests/dev_apis/crypto/test_c060/test_c060.h b/api-tests/dev_apis/crypto/test_c060/test_c060.h index 856e1883..334d180e 100644 --- a/api-tests/dev_apis/crypto/test_c060/test_c060.h +++ b/api-tests/dev_apis/crypto/test_c060/test_c060.h @@ -26,7 +26,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c060_crypto_list[]; -int32_t psa_aead_abort_test(security_t caller); -int32_t psa_aead_abort_init_test(security_t caller); +int32_t psa_aead_abort_test(caller_security_t caller); +int32_t psa_aead_abort_init_test(caller_security_t caller); #endif /* _TEST_C060_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.c b/api-tests/dev_apis/crypto/test_c061/test_c061.c index 9becfed8..d1bbe398 100644 --- a/api-tests/dev_apis/crypto/test_c061/test_c061.c +++ b/api-tests/dev_apis/crypto/test_c061/test_c061.c @@ -28,7 +28,7 @@ client_test_t test_c061_crypto_list[] = { static int g_test_count = 1; -int32_t psa_aead_verify_test(security_t caller) +int32_t psa_aead_verify_test(caller_security_t caller) { int32_t i, status; uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.h b/api-tests/dev_apis/crypto/test_c061/test_c061.h index 7b52a258..9ce0ed2e 100644 --- a/api-tests/dev_apis/crypto/test_c061/test_c061.h +++ b/api-tests/dev_apis/crypto/test_c061/test_c061.h @@ -26,6 +26,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_c061_crypto_list[]; -int32_t psa_aead_verify_test(security_t caller); +int32_t psa_aead_verify_test(caller_security_t caller); #endif /* _TEST_C061_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c index 222cd67c..83124cc4 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c @@ -29,7 +29,7 @@ client_test_t test_a001_attestation_list[] = { static int g_test_count = 1; -int32_t psa_initial_attestation_get_token_test(security_t caller) +int32_t psa_initial_attestation_get_token_test(caller_security_t caller) { int num_checks = sizeof(check1)/sizeof(check1[0]); uint32_t i; @@ -77,7 +77,7 @@ int32_t psa_initial_attestation_get_token_test(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_initial_attestation_get_token_size_test(security_t caller) +int32_t psa_initial_attestation_get_token_size_test(caller_security_t caller) { int num_checks = sizeof(check2)/sizeof(check2[0]); uint32_t i; diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h index 29aae088..432b4312 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.h @@ -28,6 +28,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_a001_attestation_list[]; -int32_t psa_initial_attestation_get_token_test(security_t caller); -int32_t psa_initial_attestation_get_token_size_test(security_t caller); +int32_t psa_initial_attestation_get_token_test(caller_security_t caller); +int32_t psa_initial_attestation_get_token_size_test(caller_security_t caller); #endif /* _TEST_A001_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c index ed948b78..3459886c 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c @@ -145,7 +145,7 @@ static int32_t sst_remove_stray_uid(psa_storage_uid_t p_uid) return VAL_STATUS_SUCCESS; } -int32_t psa_sst_uid_not_found(security_t caller) +int32_t psa_sst_uid_not_found(caller_security_t caller) { int32_t test_status; psa_storage_uid_t uid = UID_BASE_VALUE + 6; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h index 608f92f5..eef582a0 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.h @@ -31,5 +31,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s001_sst_list[]; -int32_t psa_sst_uid_not_found(security_t caller); +int32_t psa_sst_uid_not_found(caller_security_t caller); #endif /* _TEST_S001_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c index ae731ae7..bd923dba 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c @@ -35,7 +35,7 @@ client_test_t test_s002_sst_list[] = { NULL, }; -int32_t psa_sst_update_write_once_flag_after_create(security_t caller) +int32_t psa_sst_update_write_once_flag_after_create(caller_security_t caller) { uint32_t status, p_data_length = 0; psa_storage_uid_t uid = UID_WRITE_ONCE_1; @@ -87,7 +87,7 @@ int32_t psa_sst_update_write_once_flag_after_create(security_t caller) } -int32_t psa_sst_create_with_write_once_flag(security_t caller) +int32_t psa_sst_create_with_write_once_flag(caller_security_t caller) { uint32_t status, p_data_length = 0; psa_storage_uid_t uid = UID_WRITE_ONCE_2; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h index b5711414..e4b339e4 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.h @@ -31,6 +31,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s002_sst_list[]; -int32_t psa_sst_update_write_once_flag_after_create(security_t caller); -int32_t psa_sst_create_with_write_once_flag(security_t caller); +int32_t psa_sst_update_write_once_flag_after_create(caller_security_t caller); +int32_t psa_sst_create_with_write_once_flag(caller_security_t caller); #endif /* _TEST_S002_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c index 1f7578e8..69f78937 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c @@ -39,7 +39,7 @@ static char test_desc[2][80] = { "Overload storage space\n", "Overload storage again to verify all previous UID removed\n"}; -int32_t psa_sst_insufficient_space(security_t caller) +int32_t psa_sst_insufficient_space(caller_security_t caller) { uint32_t status = PSA_SUCCESS; psa_storage_uid_t uid; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h index dc01392b..e022142f 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.h @@ -31,5 +31,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s003_sst_list[]; -int32_t psa_sst_insufficient_space(security_t caller); +int32_t psa_sst_insufficient_space(caller_security_t caller); #endif /* _TEST_S003_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c index 60e6b9c6..69ecf515 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c @@ -37,7 +37,7 @@ static uint8_t read_buff[TEST_BUFF_SIZE] = {0}; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x30, 0x50, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; -int32_t psa_sst_get_data_check(security_t caller) +int32_t psa_sst_get_data_check(caller_security_t caller) { uint32_t status, j, p_data_length = 0; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h index b518ec27..85e6c346 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.h @@ -31,5 +31,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s004_sst_list[]; -int32_t psa_sst_get_data_check(security_t caller); +int32_t psa_sst_get_data_check(caller_security_t caller); #endif /* _TEST_S004_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c index ae9ea742..51bf8a4b 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.c @@ -65,7 +65,7 @@ static int32_t psa_sst_apis_check(psa_storage_uid_t uid, uint32_t data_len, return VAL_STATUS_SUCCESS; } -int32_t psa_sst_apis_check_success_case(security_t caller) +int32_t psa_sst_apis_check_success_case(caller_security_t caller) { psa_storage_uid_t uid = UID_BASE_VALUE + 4; uint32_t data_len = 0, status = VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h index 9b472bff..453bb929 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_s005.h @@ -31,6 +31,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s005_sst_list[]; -int32_t psa_sst_apis_check_success_case(security_t caller); +int32_t psa_sst_apis_check_success_case(caller_security_t caller); #endif /* _TEST_S005_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c index 03850f7e..a45351aa 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c @@ -53,7 +53,7 @@ static int32_t psa_sst_remove_api(psa_storage_uid_t uid, uint32_t data_len, return VAL_STATUS_SUCCESS; } -int32_t psa_sst_flags_not_supported(security_t caller) +int32_t psa_sst_flags_not_supported(caller_security_t caller) { psa_storage_create_flags_t flag = 0x80000000; uint32_t status = VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h index 8f55affa..8b9b2bab 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.h @@ -31,6 +31,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s006_sst_list[]; -int32_t psa_sst_flags_not_supported(security_t caller); +int32_t psa_sst_flags_not_supported(caller_security_t caller); #endif /* _TEST_S006_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c index 6bcc2a31..8b03f69a 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c @@ -37,7 +37,7 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = { 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD, 0xCA, 0x0B, 0x3C, 0x0D, 0x2E}; static uint8_t read_buff[TEST_BUFF_SIZE]; -int32_t psa_sst_get_incorrect_size(security_t caller) +int32_t psa_sst_get_incorrect_size(caller_security_t caller) { psa_storage_uid_t uid = UID_BASE_VALUE + 5; uint32_t status = VAL_STATUS_SUCCESS, p_data_length = 0; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h index 3ecc4292..1fe0b5f8 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.h @@ -31,6 +31,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s007_sst_list[]; -int32_t psa_sst_get_incorrect_size(security_t caller); +int32_t psa_sst_get_incorrect_size(caller_security_t caller); #endif /* _TEST_S007_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c index df447052..9050b8a7 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c @@ -39,7 +39,7 @@ static uint8_t read_buff[TEST_BUFF_SIZE]; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; -int32_t psa_sst_invalid_offset_failure(security_t caller) +int32_t psa_sst_invalid_offset_failure(caller_security_t caller) { uint32_t status, j, p_data_length = 0; @@ -84,7 +84,7 @@ int32_t psa_sst_invalid_offset_failure(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t psa_sst_valid_offset_success(security_t caller) +int32_t psa_sst_valid_offset_success(caller_security_t caller) { uint32_t status, data_len, offset = TEST_BUFF_SIZE; uint32_t p_data_length = 0; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h index e9dee2c2..c4426d8d 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.h @@ -31,7 +31,7 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s008_sst_list[]; -int32_t psa_sst_valid_offset_success(security_t caller); -int32_t psa_sst_invalid_offset_failure(security_t caller); +int32_t psa_sst_valid_offset_success(caller_security_t caller); +int32_t psa_sst_invalid_offset_failure(caller_security_t caller); #endif /* _TEST_S008_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c index 8b089d55..f3e103cc 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.c @@ -36,7 +36,7 @@ static psa_storage_uid_t uid = UID_BASE_VALUE + 5; static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x02, 0x03, 0x04, 0x23, 0xF6, 0x07, 0x08, \ 0x0D, 0x70, 0xA1, 0xFF, 0xFF, 0x14, 0x73, 0x46, 0x97, 0xE8, 0xDD}; -int32_t psa_sst_zero_length_check(security_t caller) +int32_t psa_sst_zero_length_check(caller_security_t caller) { uint32_t status, p_data_length = 0; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h index 82f4ded9..f1c396a5 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_s009.h @@ -31,6 +31,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s009_sst_list[]; -int32_t psa_sst_zero_length_check(security_t caller); +int32_t psa_sst_zero_length_check(caller_security_t caller); #endif /* _TEST_S009_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c index 7c0ca607..5cff99c8 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.c @@ -34,7 +34,7 @@ client_test_t test_s010_sst_list[] = { static uint8_t write_buff[TEST_BUFF_SIZE] = {0xFF}; -int32_t psa_sst_uid_value_zero_check(security_t caller) +int32_t psa_sst_uid_value_zero_check(caller_security_t caller) { int32_t status; psa_storage_uid_t uid = 0; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h index 5bda12e6..ef4202ec 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_s010.h @@ -31,5 +31,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_s010_sst_list[]; -int32_t psa_sst_uid_value_zero_check(security_t caller); +int32_t psa_sst_uid_value_zero_check(caller_security_t caller); #endif /* _TEST_S010_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_p011.c b/api-tests/dev_apis/protected_storage/test_p011/test_p011.c index fb1b8444..83aa4103 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_p011.c +++ b/api-tests/dev_apis/protected_storage/test_p011/test_p011.c @@ -98,7 +98,7 @@ static int32_t psa_sst_uid_not_found() return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_uid_not_found(security_t caller) +int32_t psa_sst_optional_api_uid_not_found(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_p011.h b/api-tests/dev_apis/protected_storage/test_p011/test_p011.h index 2eec8001..73aba0d3 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_p011.h +++ b/api-tests/dev_apis/protected_storage/test_p011/test_p011.h @@ -25,5 +25,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p011_sst_list[]; -int32_t psa_sst_optional_api_uid_not_found(security_t caller); +int32_t psa_sst_optional_api_uid_not_found(caller_security_t caller); #endif /* _TEST_P011_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_p012.c b/api-tests/dev_apis/protected_storage/test_p012/test_p012.c index 195f6b21..93d786fb 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_p012.c +++ b/api-tests/dev_apis/protected_storage/test_p012/test_p012.c @@ -113,7 +113,7 @@ static int32_t psa_sst_bad_pointer() return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_offset_invalid(security_t caller) +int32_t psa_sst_optional_api_offset_invalid(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_p012.h b/api-tests/dev_apis/protected_storage/test_p012/test_p012.h index 548202db..7754a44f 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_p012.h +++ b/api-tests/dev_apis/protected_storage/test_p012/test_p012.h @@ -25,5 +25,5 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p012_sst_list[]; -int32_t psa_sst_optional_api_offset_invalid(security_t caller); +int32_t psa_sst_optional_api_offset_invalid(caller_security_t caller); #endif /* _TEST_P012_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c index 628ed724..a5ca6127 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c +++ b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c @@ -121,7 +121,7 @@ static int32_t psa_sst_set_extended_create_success() return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_success_check(security_t caller) +int32_t psa_sst_optional_api_success_check(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_p013.h b/api-tests/dev_apis/protected_storage/test_p013/test_p013.h index 839f2c24..73247768 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_p013.h +++ b/api-tests/dev_apis/protected_storage/test_p013/test_p013.h @@ -25,6 +25,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p013_sst_list[]; -int32_t psa_sst_optional_api_success_check(security_t caller); +int32_t psa_sst_optional_api_success_check(caller_security_t caller); #endif /* _TEST_P013_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_p014.c b/api-tests/dev_apis/protected_storage/test_p014/test_p014.c index 970e0389..d210c2ff 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_p014.c +++ b/api-tests/dev_apis/protected_storage/test_p014/test_p014.c @@ -71,7 +71,7 @@ static int32_t psa_sst_optional_api_not_supported() return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_not_supported_check(security_t caller) +int32_t psa_sst_optional_api_not_supported_check(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_p014.h b/api-tests/dev_apis/protected_storage/test_p014/test_p014.h index d97d8ad6..7b2b0f01 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_p014.h +++ b/api-tests/dev_apis/protected_storage/test_p014/test_p014.h @@ -25,6 +25,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p014_sst_list[]; -int32_t psa_sst_optional_api_not_supported_check(security_t caller); +int32_t psa_sst_optional_api_not_supported_check(caller_security_t caller); #endif /* _TEST_P014_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_p015.c b/api-tests/dev_apis/protected_storage/test_p015/test_p015.c index 4c14fbcb..54b45ceb 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_p015.c +++ b/api-tests/dev_apis/protected_storage/test_p015/test_p015.c @@ -30,7 +30,7 @@ client_test_t test_p015_sst_list[] = { static psa_storage_uid_t p_uid = UID_BASE_VALUE + 5; -int32_t psa_sst_create_api_write_once_flag_check(security_t caller) +int32_t psa_sst_create_api_write_once_flag_check(caller_security_t caller) { uint32_t status; diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_p015.h b/api-tests/dev_apis/protected_storage/test_p015/test_p015.h index 16c59b35..2f21d391 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_p015.h +++ b/api-tests/dev_apis/protected_storage/test_p015/test_p015.h @@ -25,6 +25,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p015_sst_list[]; -int32_t psa_sst_create_api_write_once_flag_check(security_t caller); +int32_t psa_sst_create_api_write_once_flag_check(caller_security_t caller); #endif /* _TEST_P015_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_p016.c b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c index eeaf6511..4b79931a 100644 --- a/api-tests/dev_apis/protected_storage/test_p016/test_p016.c +++ b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c @@ -93,7 +93,7 @@ static int32_t psa_sst_optional_api_sst_capacity(void) return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_sst_capacity_check(security_t caller) +int32_t psa_sst_optional_api_sst_capacity_check(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_p016.h b/api-tests/dev_apis/protected_storage/test_p016/test_p016.h index 06626d0d..6e1bf936 100644 --- a/api-tests/dev_apis/protected_storage/test_p016/test_p016.h +++ b/api-tests/dev_apis/protected_storage/test_p016/test_p016.h @@ -25,6 +25,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p016_sst_list[]; -int32_t psa_sst_optional_api_sst_capacity_check(security_t caller); +int32_t psa_sst_optional_api_sst_capacity_check(caller_security_t caller); #endif /* _TEST_P016_CLIENT_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_p017.c b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c index 5327f58e..54c7b6b2 100644 --- a/api-tests/dev_apis/protected_storage/test_p017/test_p017.c +++ b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c @@ -71,7 +71,7 @@ static int32_t psa_sst_optional_api_partial_write(void) return VAL_STATUS_SUCCESS; } -int32_t psa_sst_optional_api_partial_write_check(security_t caller) +int32_t psa_sst_optional_api_partial_write_check(caller_security_t caller) { uint32_t status; int32_t test_status; diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_p017.h b/api-tests/dev_apis/protected_storage/test_p017/test_p017.h index caa5cb08..61beae7f 100644 --- a/api-tests/dev_apis/protected_storage/test_p017/test_p017.h +++ b/api-tests/dev_apis/protected_storage/test_p017/test_p017.h @@ -25,6 +25,6 @@ extern val_api_t *val; extern psa_api_t *psa; extern client_test_t test_p017_sst_list[]; -int32_t psa_sst_optional_api_partial_write_check(security_t caller); +int32_t psa_sst_optional_api_partial_write_check(caller_security_t caller); #endif /* _TEST_P017_CLIENT_TESTS_H_ */ diff --git a/api-tests/docs/psa_ipc_testlist.md b/api-tests/docs/psa_ipc_testlist.md index 2313422c..fe0a1055 100644 --- a/api-tests/docs/psa_ipc_testlist.md +++ b/api-tests/docs/psa_ipc_testlist.md @@ -61,12 +61,12 @@ | test_i045 | The call to psa_write() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_write_with_invec_greater_than_max_iovec() | Call psa_write with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | | test_i046 | The call to psa_write() is PROGRAMMER ERROR if the call attempts to write data past the end of the client output vector | [client/server]_test_psa_write_with_size_overflow() | Call psa_write with a size input one byte bigger than allowed size and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | | test_i047 | The call to psa_get() is PROGRAMMER ERROR if The msg pointer provided is not a valid memory reference | [client/server]_test_psa_get_with_invalid_msg_pointer() | Call psa_get with invalid msg pointer and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid pointer is as below:
if (ISOLATION_LEVEL > 1)
// PSA RoT Pointer
psa_get(msg_pointer = driver_mmio_base);
else
psa_get(msg_pointer = NULL);
| Optional | Yes | -| test_i048 | The call to psa_call() is PROGRAMMER ERROR if address of in_vec is invalid for client | [client/server]_test_psa_call_with_invalid_invec_pointer | Call psa_call with invalid address for invec and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid invec pointer is as below:
if caller == NONSECURE
// PSA RoT pointer
invec_pointer = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invec_pointer = driver_mmio_base;
else
invec_pointer = NULL; | Optional | Yes | -| test_i049 | The call to psa_call() is PROGRAMMER ERROR if address of out_vec is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_pointer() | Call psa_call with invalid address for outvec and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid outvec pointer is as below:
if caller == NONSECURE
// PSA RoT pointer
outvec_pointer = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
outvec_pointer = driver_mmio_base;
else
outvec_pointer = NULL; | Optional | Yes | -| test_i050 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_base() | Call psa_call with invalid address for psa_invec.base and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid base is as below:
if caller == NONSECURE
// PSA RoT pointer
invalid_base = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invalid_base = driver_mmio_base;
else
invalid_base = NULL; | Optional | Yes | -| test_i051 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_base() | Call psa_call with invalid address for psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid base is as below:
if caller == NONSECURE
// PSA RoT pointer
invalid_base = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invalid_base = driver_mmio_base;
else
invalid_base = NULL; | Optional | Yes | -| test_i052 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base addr is valid but psa_invec.base+size address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_end_addr() | Call psa_call with valid address for psa_invec.base but (psa_invec.base + psa_invec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
Selection of base and size are as below:
if caller == NONSECURE
valid_base = nspe_mmio_region_base;
invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

else

if (ISOLATION_LEVEL > 1)
valid_base = server_mmio_region_base;
invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
| Optional | Yes | -| test_i053 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base addr is valid but psa_invec.base+sizeaddress is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_end_addr() | Call psa_call with valid address for psa_outvec.base but (psa_outvec.base + psa_outvec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
Selection of base and size are as below:
if caller == NONSECURE
valid_base = nspe_mmio_region_base;
invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

else

if (ISOLATION_LEVEL > 1)
valid_base = server_mmio_region_base;
invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
| Optional | Yes | +| test_i048 | The call to psa_call() is PROGRAMMER ERROR if address of in_vec is invalid for client | [client/server]_test_psa_call_with_invalid_invec_pointer | Call psa_call with invalid address for invec and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid invec pointer is as below:
if caller == CALLER_NONSECURE
// PSA RoT pointer
invec_pointer = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invec_pointer = driver_mmio_base;
else
invec_pointer = NULL; | Optional | Yes | +| test_i049 | The call to psa_call() is PROGRAMMER ERROR if address of out_vec is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_pointer() | Call psa_call with invalid address for outvec and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid outvec pointer is as below:
if caller == CALLER_NONSECURE
// PSA RoT pointer
outvec_pointer = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
outvec_pointer = driver_mmio_base;
else
outvec_pointer = NULL; | Optional | Yes | +| test_i050 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_base() | Call psa_call with invalid address for psa_invec.base and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid base is as below:
if caller == CALLER_NONSECURE
// PSA RoT pointer
invalid_base = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invalid_base = driver_mmio_base;
else
invalid_base = NULL; | Optional | Yes | +| test_i051 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_base() | Call psa_call with invalid address for psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call.
Selection of invalid base is as below:
if caller == CALLER_NONSECURE
// PSA RoT pointer
invalid_base = driver_mmio_base;

else

if (ISOLATION_LEVEL > 1)
invalid_base = driver_mmio_base;
else
invalid_base = NULL; | Optional | Yes | +| test_i052 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base addr is valid but psa_invec.base+size address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_end_addr() | Call psa_call with valid address for psa_invec.base but (psa_invec.base + psa_invec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
Selection of base and size are as below:
if caller == CALLER_NONSECURE
valid_base = nspe_mmio_region_base;
invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

else

if (ISOLATION_LEVEL > 1)
valid_base = server_mmio_region_base;
invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
| Optional | Yes | +| test_i053 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base addr is valid but psa_invec.base+sizeaddress is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_end_addr() | Call psa_call with valid address for psa_outvec.base but (psa_outvec.base + psa_outvec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
Selection of base and size are as below:
if caller == CALLER_NONSECURE
valid_base = nspe_mmio_region_base;
invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

else

if (ISOLATION_LEVEL > 1)
valid_base = server_mmio_region_base;
invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
| Optional | Yes | | test_i054 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base is not writable | [client/server]_test_psa_call_with_not_writable_outvec_base() | Call psa_call with not writable (code address) psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | | test_i055 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is invalid | [client/server]_test_psa_read_with_invalid_buffer_addr() | Call psa_read with invalid buffer addr and expect PROGRAMMER ERROR behaviour for API call.
Selection of buffer address is as below:
if (ISOLATION_LEVEL > 1)
buffer = driver_mmio_region_base;
else
buffer = NULL;
| Optional | Yes | | test_i056 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is not writable | [client/server]_test_psa_read_with_not_writable_buffer_addr() | Call psa_read with not writable address (function address- code memory) and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | diff --git a/api-tests/ff/ipc/test_i001/test_i001.c b/api-tests/ff/ipc/test_i001/test_i001.c index 80185ad5..2e30ff61 100644 --- a/api-tests/ff/ipc/test_i001/test_i001.c +++ b/api-tests/ff/ipc/test_i001/test_i001.c @@ -32,7 +32,7 @@ client_test_t test_i001_client_tests_list[] = { NULL, }; -int32_t client_test_psa_framework_version(security_t caller) +int32_t client_test_psa_framework_version(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; @@ -49,7 +49,7 @@ int32_t client_test_psa_framework_version(security_t caller) return status; } -int32_t client_test_psa_version(security_t caller) +int32_t client_test_psa_version(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; uint32_t version; @@ -71,8 +71,8 @@ int32_t client_test_psa_version(security_t caller) /* psa_version() check for implemented SID but allows only secure connection */ version = psa->version(SERVER_SECURE_CONNECT_ONLY_SID); - if (((caller == NONSECURE) && (version != PSA_VERSION_NONE)) - || ((caller == SECURE) && (version != 2))) + if (((caller == CALLER_NONSECURE) && (version != PSA_VERSION_NONE)) + || ((caller == CALLER_SECURE) && (version != 2))) { status = VAL_STATUS_VERSION_API_FAILED; val->print(PRINT_ERROR, diff --git a/api-tests/ff/ipc/test_i001/test_i001.h b/api-tests/ff/ipc/test_i001/test_i001.h index a42fd97e..1defb81b 100644 --- a/api-tests/ff/ipc/test_i001/test_i001.h +++ b/api-tests/ff/ipc/test_i001/test_i001.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i001_client_tests_list[]; -int32_t client_test_psa_framework_version(security_t); -int32_t client_test_psa_version(security_t); +int32_t client_test_psa_framework_version(caller_security_t); +int32_t client_test_psa_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i002/test_i002.c b/api-tests/ff/ipc/test_i002/test_i002.c index abd023f4..8bd48588 100644 --- a/api-tests/ff/ipc/test_i002/test_i002.c +++ b/api-tests/ff/ipc/test_i002/test_i002.c @@ -38,7 +38,7 @@ client_test_t test_i002_client_tests_list[] = { NULL, }; -int32_t client_test_connection_busy_and_reject(security_t caller) +int32_t client_test_connection_busy_and_reject(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -73,7 +73,7 @@ int32_t client_test_connection_busy_and_reject(security_t caller) return status; } -int32_t client_test_accept_and_close_connect(security_t caller) +int32_t client_test_accept_and_close_connect(caller_security_t caller) { psa_handle_t handle = 0; @@ -94,7 +94,7 @@ int32_t client_test_accept_and_close_connect(security_t caller) return VAL_STATUS_SUCCESS; } -int32_t client_test_connect_with_allowed_minor_version_policy(security_t caller) +int32_t client_test_connect_with_allowed_minor_version_policy(caller_security_t caller) { psa_handle_t handle = 0; uint32_t i = 0; @@ -153,7 +153,7 @@ int32_t psa_call_with_null_msg(int32_t expected_status) return status; } -int32_t client_test_psa_call_with_allowed_status_code(security_t caller) +int32_t client_test_psa_call_with_allowed_status_code(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_status_t expected_status_code[] = {PSA_SUCCESS, 1, 2, INT32_MAX, -1, -2, INT32_MIN+128}; @@ -175,7 +175,7 @@ int32_t client_test_psa_call_with_allowed_status_code(security_t caller) return status; } -int32_t client_test_identity(security_t caller) +int32_t client_test_identity(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -201,13 +201,13 @@ int32_t client_test_identity(security_t caller) status = VAL_STATUS_CALL_FAILED; } /* For NSPE access, identity should be < 0 */ - else if ((caller == NONSECURE) && ((id_at_connect != id_at_call) + else if ((caller == CALLER_NONSECURE) && ((id_at_connect != id_at_call) || (id_at_connect >=0) || (id_at_call >=0))) { status = VAL_STATUS_WRONG_IDENTITY; } /* For SPE access, identity should be > 0 */ - else if ((caller == SECURE) && ((id_at_connect != id_at_call) + else if ((caller == CALLER_SECURE) && ((id_at_connect != id_at_call) || (id_at_connect <=0) || (id_at_call <=0))) { status = VAL_STATUS_WRONG_IDENTITY; @@ -217,7 +217,7 @@ int32_t client_test_identity(security_t caller) return status; } -int32_t client_test_spm_concurrent_connect_limit(security_t caller) +int32_t client_test_spm_concurrent_connect_limit(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle[CONNECT_LIMIT] = {0}; @@ -276,13 +276,13 @@ int32_t client_test_psa_wait(void) return VAL_STATUS_SUCCESS; } -int32_t client_test_psa_block_behave(security_t caller) +int32_t client_test_psa_block_behave(caller_security_t caller) { val->print(PRINT_TEST, "[Check 7] Test PSA_BLOCK\n", 0); return (client_test_psa_wait()); } -int32_t client_test_psa_poll_behave(security_t caller) +int32_t client_test_psa_poll_behave(caller_security_t caller) { val->print(PRINT_TEST, "[Check 8] Test PSA_POLL\n", 0); return (client_test_psa_wait()); diff --git a/api-tests/ff/ipc/test_i002/test_i002.h b/api-tests/ff/ipc/test_i002/test_i002.h index a0767873..bce864cd 100644 --- a/api-tests/ff/ipc/test_i002/test_i002.h +++ b/api-tests/ff/ipc/test_i002/test_i002.h @@ -36,12 +36,12 @@ extern psa_api_t *psa; extern client_test_t test_i002_client_tests_list[]; -int32_t client_test_connection_busy_and_reject(security_t); -int32_t client_test_accept_and_close_connect(security_t); -int32_t client_test_connect_with_allowed_minor_version_policy(security_t); -int32_t client_test_psa_call_with_allowed_status_code(security_t); -int32_t client_test_identity(security_t); -int32_t client_test_spm_concurrent_connect_limit(security_t); -int32_t client_test_psa_block_behave(security_t); -int32_t client_test_psa_poll_behave(security_t); +int32_t client_test_connection_busy_and_reject(caller_security_t); +int32_t client_test_accept_and_close_connect(caller_security_t); +int32_t client_test_connect_with_allowed_minor_version_policy(caller_security_t); +int32_t client_test_psa_call_with_allowed_status_code(caller_security_t); +int32_t client_test_identity(caller_security_t); +int32_t client_test_spm_concurrent_connect_limit(caller_security_t); +int32_t client_test_psa_block_behave(caller_security_t); +int32_t client_test_psa_poll_behave(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i003/test_i003.c b/api-tests/ff/ipc/test_i003/test_i003.c index a6ac294c..a8e795de 100644 --- a/api-tests/ff/ipc/test_i003/test_i003.c +++ b/api-tests/ff/ipc/test_i003/test_i003.c @@ -37,7 +37,7 @@ client_test_t test_i003_client_tests_list[] = { NULL, }; -int32_t client_test_zero_length_invec(security_t caller) +int32_t client_test_zero_length_invec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -91,7 +91,7 @@ int32_t client_test_zero_length_invec(security_t caller) return status; } -int32_t client_test_zero_length_outvec(security_t caller) +int32_t client_test_zero_length_outvec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -147,7 +147,7 @@ int32_t client_test_zero_length_outvec(security_t caller) return status; } -int32_t client_test_call_read_and_skip(security_t caller) +int32_t client_test_call_read_and_skip(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; int data1[2] = {0xaa, 0xbb}; @@ -182,7 +182,7 @@ int32_t client_test_call_read_and_skip(security_t caller) return status; } -int32_t client_test_call_and_write(security_t caller) +int32_t client_test_call_and_write(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; int data[4] = {0}, expected_data[4] = {0xaa, 0xbb, 0xcc, 0xeedd}, i; @@ -242,7 +242,7 @@ int32_t client_test_call_and_write(security_t caller) return status; } -int32_t client_test_psa_set_rhandle(security_t caller) +int32_t client_test_psa_set_rhandle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -275,7 +275,7 @@ int32_t client_test_psa_set_rhandle(security_t caller) return status; } -int32_t client_test_overlapping_vectors(security_t caller) +int32_t client_test_overlapping_vectors(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i003/test_i003.h b/api-tests/ff/ipc/test_i003/test_i003.h index b83b219b..09e62cdf 100644 --- a/api-tests/ff/ipc/test_i003/test_i003.h +++ b/api-tests/ff/ipc/test_i003/test_i003.h @@ -33,10 +33,10 @@ extern psa_api_t *psa; extern client_test_t test_i003_client_tests_list[]; -int32_t client_test_psa_set_rhandle(security_t); -int32_t client_test_call_read_and_skip(security_t); -int32_t client_test_call_and_write(security_t); -int32_t client_test_zero_length_invec(security_t); -int32_t client_test_zero_length_outvec(security_t); -int32_t client_test_overlapping_vectors(security_t); +int32_t client_test_psa_set_rhandle(caller_security_t); +int32_t client_test_call_read_and_skip(caller_security_t); +int32_t client_test_call_and_write(caller_security_t); +int32_t client_test_zero_length_invec(caller_security_t); +int32_t client_test_zero_length_outvec(caller_security_t); +int32_t client_test_overlapping_vectors(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i004/test_i004.c b/api-tests/ff/ipc/test_i004/test_i004.c index 7f19bab2..49f05f11 100644 --- a/api-tests/ff/ipc/test_i004/test_i004.c +++ b/api-tests/ff/ipc/test_i004/test_i004.c @@ -31,7 +31,7 @@ client_test_t test_i004_client_tests_list[] = { NULL, }; -int32_t client_test_sid_does_not_exists(security_t caller) +int32_t client_test_sid_does_not_exists(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -61,7 +61,7 @@ int32_t client_test_sid_does_not_exists(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -76,7 +76,7 @@ int32_t client_test_sid_does_not_exists(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i004/test_i004.h b/api-tests/ff/ipc/test_i004/test_i004.h index fe07c10d..6d3aa1fa 100644 --- a/api-tests/ff/ipc/test_i004/test_i004.h +++ b/api-tests/ff/ipc/test_i004/test_i004.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i004_client_tests_list[]; -int32_t client_test_sid_does_not_exists(security_t); +int32_t client_test_sid_does_not_exists(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i005/test_i005.c b/api-tests/ff/ipc/test_i005/test_i005.c index 2b1d22f1..3c67a056 100644 --- a/api-tests/ff/ipc/test_i005/test_i005.c +++ b/api-tests/ff/ipc/test_i005/test_i005.c @@ -31,7 +31,7 @@ client_test_t test_i005_client_tests_list[] = { NULL, }; -int32_t client_test_strict_policy_higher_minor_version(security_t caller) +int32_t client_test_strict_policy_higher_minor_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -61,7 +61,7 @@ int32_t client_test_strict_policy_higher_minor_version(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -78,7 +78,7 @@ int32_t client_test_strict_policy_higher_minor_version(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i005/test_i005.h b/api-tests/ff/ipc/test_i005/test_i005.h index 59310490..2f398d04 100644 --- a/api-tests/ff/ipc/test_i005/test_i005.h +++ b/api-tests/ff/ipc/test_i005/test_i005.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i005_client_tests_list[]; -int32_t client_test_strict_policy_higher_minor_version(security_t); +int32_t client_test_strict_policy_higher_minor_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i006/test_i006.c b/api-tests/ff/ipc/test_i006/test_i006.c index 3f1f6eb8..452508d3 100644 --- a/api-tests/ff/ipc/test_i006/test_i006.c +++ b/api-tests/ff/ipc/test_i006/test_i006.c @@ -31,7 +31,7 @@ client_test_t test_i006_client_tests_list[] = { NULL, }; -int32_t client_test_strict_policy_lower_minor_version(security_t caller) +int32_t client_test_strict_policy_lower_minor_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -61,7 +61,7 @@ int32_t client_test_strict_policy_lower_minor_version(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -76,7 +76,7 @@ int32_t client_test_strict_policy_lower_minor_version(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i006/test_i006.h b/api-tests/ff/ipc/test_i006/test_i006.h index 62d5a4cb..e3cd3d1c 100644 --- a/api-tests/ff/ipc/test_i006/test_i006.h +++ b/api-tests/ff/ipc/test_i006/test_i006.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i006_client_tests_list[]; -int32_t client_test_strict_policy_lower_minor_version(security_t); +int32_t client_test_strict_policy_lower_minor_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i007/test_i007.c b/api-tests/ff/ipc/test_i007/test_i007.c index c90dffca..14a3d642 100644 --- a/api-tests/ff/ipc/test_i007/test_i007.c +++ b/api-tests/ff/ipc/test_i007/test_i007.c @@ -31,7 +31,7 @@ client_test_t test_i007_client_tests_list[] = { NULL, }; -int32_t client_test_relax_policy_higher_minor_version(security_t caller) +int32_t client_test_relax_policy_higher_minor_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -61,7 +61,7 @@ int32_t client_test_relax_policy_higher_minor_version(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -76,7 +76,7 @@ int32_t client_test_relax_policy_higher_minor_version(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i007/test_i007.h b/api-tests/ff/ipc/test_i007/test_i007.h index 26908fb8..9392229b 100644 --- a/api-tests/ff/ipc/test_i007/test_i007.h +++ b/api-tests/ff/ipc/test_i007/test_i007.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i007_client_tests_list[]; -int32_t client_test_relax_policy_higher_minor_version(security_t); +int32_t client_test_relax_policy_higher_minor_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i008/test_i008.c b/api-tests/ff/ipc/test_i008/test_i008.c index 785026e7..982d1d49 100644 --- a/api-tests/ff/ipc/test_i008/test_i008.c +++ b/api-tests/ff/ipc/test_i008/test_i008.c @@ -31,7 +31,7 @@ client_test_t test_i008_client_tests_list[] = { NULL, }; -int32_t client_test_secure_access_only_connection(security_t caller) +int32_t client_test_secure_access_only_connection(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -61,7 +61,7 @@ int32_t client_test_secure_access_only_connection(security_t caller) */ /* Setting boot.state before test check for NS */ - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) { status = val->set_boot_flag(BOOT_EXPECTED_NS); } @@ -77,7 +77,7 @@ int32_t client_test_secure_access_only_connection(security_t caller) */ handle = psa->connect(SERVER_SECURE_CONNECT_ONLY_SID, 1); - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) { /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i008/test_i008.h b/api-tests/ff/ipc/test_i008/test_i008.h index be6cc9f7..9eaaf02b 100644 --- a/api-tests/ff/ipc/test_i008/test_i008.h +++ b/api-tests/ff/ipc/test_i008/test_i008.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i008_client_tests_list[]; -int32_t client_test_secure_access_only_connection(security_t); +int32_t client_test_secure_access_only_connection(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i009/test_i009.c b/api-tests/ff/ipc/test_i009/test_i009.c index 9bb7c5b7..5fd1b62d 100644 --- a/api-tests/ff/ipc/test_i009/test_i009.c +++ b/api-tests/ff/ipc/test_i009/test_i009.c @@ -31,7 +31,7 @@ client_test_t test_i009_client_tests_list[] = { NULL, }; -int32_t client_test_unextern_sid_connection(security_t caller) +int32_t client_test_unextern_sid_connection(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i009/test_i009.h b/api-tests/ff/ipc/test_i009/test_i009.h index b8cbc538..661e7ca6 100644 --- a/api-tests/ff/ipc/test_i009/test_i009.h +++ b/api-tests/ff/ipc/test_i009/test_i009.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i009_client_tests_list[]; -int32_t client_test_unextern_sid_connection(security_t); +int32_t client_test_unextern_sid_connection(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i010/test_i010.c b/api-tests/ff/ipc/test_i010/test_i010.c index 65b06c10..7a2074bd 100644 --- a/api-tests/ff/ipc/test_i010/test_i010.c +++ b/api-tests/ff/ipc/test_i010/test_i010.c @@ -31,7 +31,7 @@ client_test_t test_i010_client_tests_list[] = { NULL, }; -int32_t client_test_unspecified_policy_with_higher_minor_ver(security_t caller) +int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -62,7 +62,7 @@ int32_t client_test_unspecified_policy_with_higher_minor_ver(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -81,7 +81,7 @@ int32_t client_test_unspecified_policy_with_higher_minor_ver(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i010/test_i010.h b/api-tests/ff/ipc/test_i010/test_i010.h index 7e0eb020..f299f981 100644 --- a/api-tests/ff/ipc/test_i010/test_i010.h +++ b/api-tests/ff/ipc/test_i010/test_i010.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i010_client_tests_list[]; -int32_t client_test_unspecified_policy_with_higher_minor_ver(security_t); +int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i011/test_i011.c b/api-tests/ff/ipc/test_i011/test_i011.c index 82c5e09a..536d04c0 100644 --- a/api-tests/ff/ipc/test_i011/test_i011.c +++ b/api-tests/ff/ipc/test_i011/test_i011.c @@ -31,7 +31,7 @@ client_test_t test_i011_client_tests_list[] = { NULL, }; -int32_t client_test_unspecified_policy_with_lower_minor_ver(security_t caller) +int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; @@ -62,7 +62,7 @@ int32_t client_test_unspecified_policy_with_lower_minor_ver(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -81,7 +81,7 @@ int32_t client_test_unspecified_policy_with_lower_minor_ver(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_CONNECTION_REFUSED. * For SPE caller, it must panic. */ - if (caller == NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) + if (caller == CALLER_NONSECURE && handle == PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i011/test_i011.h b/api-tests/ff/ipc/test_i011/test_i011.h index 8b6f7327..3e0b3347 100644 --- a/api-tests/ff/ipc/test_i011/test_i011.h +++ b/api-tests/ff/ipc/test_i011/test_i011.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i011_client_tests_list[]; -int32_t client_test_unspecified_policy_with_lower_minor_ver(security_t); +int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i012/test_i012.c b/api-tests/ff/ipc/test_i012/test_i012.c index 9ddb2fa0..0724cedb 100644 --- a/api-tests/ff/ipc/test_i012/test_i012.c +++ b/api-tests/ff/ipc/test_i012/test_i012.c @@ -31,7 +31,7 @@ client_test_t test_i012_client_tests_list[] = { NULL, }; -int32_t client_test_psa_close_with_invalid_handle(security_t caller) +int32_t client_test_psa_close_with_invalid_handle(caller_security_t caller) { boot_state_t boot_state; @@ -60,7 +60,7 @@ int32_t client_test_psa_close_with_invalid_handle(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -75,7 +75,7 @@ int32_t client_test_psa_close_with_invalid_handle(security_t caller) * a PROGRAMMER ERROR will panic or return with no effect. * For SPE caller, it must panic. */ - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i012/test_i012.h b/api-tests/ff/ipc/test_i012/test_i012.h index d7a2776c..fbdd20e1 100644 --- a/api-tests/ff/ipc/test_i012/test_i012.h +++ b/api-tests/ff/ipc/test_i012/test_i012.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i012_client_tests_list[]; -int32_t client_test_psa_close_with_invalid_handle(security_t); +int32_t client_test_psa_close_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i013/test_i013.c b/api-tests/ff/ipc/test_i013/test_i013.c index 5666c16a..9ac96fd4 100644 --- a/api-tests/ff/ipc/test_i013/test_i013.c +++ b/api-tests/ff/ipc/test_i013/test_i013.c @@ -31,7 +31,7 @@ client_test_t test_i013_client_tests_list[] = { NULL, }; -int32_t client_test_psa_get_with_more_than_one_signal(security_t caller) +int32_t client_test_psa_get_with_more_than_one_signal(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i013/test_i013.h b/api-tests/ff/ipc/test_i013/test_i013.h index 8721594f..99458c52 100644 --- a/api-tests/ff/ipc/test_i013/test_i013.h +++ b/api-tests/ff/ipc/test_i013/test_i013.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i013_client_tests_list[]; -int32_t client_test_psa_get_with_more_than_one_signal(security_t); +int32_t client_test_psa_get_with_more_than_one_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i014/test_i014.c b/api-tests/ff/ipc/test_i014/test_i014.c index 1590dd48..3da7d744 100644 --- a/api-tests/ff/ipc/test_i014/test_i014.c +++ b/api-tests/ff/ipc/test_i014/test_i014.c @@ -31,7 +31,7 @@ client_test_t test_i014_client_tests_list[] = { NULL, }; -int32_t client_test_psa_get_called_twice(security_t caller) +int32_t client_test_psa_get_called_twice(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i014/test_i014.h b/api-tests/ff/ipc/test_i014/test_i014.h index 939dc4d5..e92beb7b 100644 --- a/api-tests/ff/ipc/test_i014/test_i014.h +++ b/api-tests/ff/ipc/test_i014/test_i014.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i014_client_tests_list[]; -int32_t client_test_psa_get_called_twice(security_t); +int32_t client_test_psa_get_called_twice(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i015/test_i015.c b/api-tests/ff/ipc/test_i015/test_i015.c index f4868658..f1854f3a 100644 --- a/api-tests/ff/ipc/test_i015/test_i015.c +++ b/api-tests/ff/ipc/test_i015/test_i015.c @@ -31,7 +31,7 @@ client_test_t test_i015_client_tests_list[] = { NULL, }; -int32_t client_test_psa_get_with_non_rot_signal(security_t caller) +int32_t client_test_psa_get_with_non_rot_signal(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i015/test_i015.h b/api-tests/ff/ipc/test_i015/test_i015.h index f1d4bfb6..70b647c3 100644 --- a/api-tests/ff/ipc/test_i015/test_i015.h +++ b/api-tests/ff/ipc/test_i015/test_i015.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i015_client_tests_list[]; -int32_t client_test_psa_get_with_non_rot_signal(security_t); +int32_t client_test_psa_get_with_non_rot_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i016/test_i016.c b/api-tests/ff/ipc/test_i016/test_i016.c index 5cc7a362..781d3172 100644 --- a/api-tests/ff/ipc/test_i016/test_i016.c +++ b/api-tests/ff/ipc/test_i016/test_i016.c @@ -31,7 +31,7 @@ client_test_t test_i016_client_tests_list[] = { NULL, }; -int32_t client_test_psa_get_with_unasserted_signal(security_t caller) +int32_t client_test_psa_get_with_unasserted_signal(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i016/test_i016.h b/api-tests/ff/ipc/test_i016/test_i016.h index ffb78e1b..104803cc 100644 --- a/api-tests/ff/ipc/test_i016/test_i016.h +++ b/api-tests/ff/ipc/test_i016/test_i016.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i016_client_tests_list[]; -int32_t client_test_psa_get_with_unasserted_signal(security_t); +int32_t client_test_psa_get_with_unasserted_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i017/test_i017.c b/api-tests/ff/ipc/test_i017/test_i017.c index 2253d56d..00a9dc31 100644 --- a/api-tests/ff/ipc/test_i017/test_i017.c +++ b/api-tests/ff/ipc/test_i017/test_i017.c @@ -31,7 +31,7 @@ client_test_t test_i017_client_tests_list[] = { NULL, }; -int32_t client_test_partition_calling_its_own_rot_service(security_t caller) +int32_t client_test_partition_calling_its_own_rot_service(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i017/test_i017.h b/api-tests/ff/ipc/test_i017/test_i017.h index 60e4e876..e5ac1b97 100644 --- a/api-tests/ff/ipc/test_i017/test_i017.h +++ b/api-tests/ff/ipc/test_i017/test_i017.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i017_client_tests_list[]; -int32_t client_test_partition_calling_its_own_rot_service(security_t); +int32_t client_test_partition_calling_its_own_rot_service(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i018/test_i018.c b/api-tests/ff/ipc/test_i018/test_i018.c index 43521492..0825ddf3 100644 --- a/api-tests/ff/ipc/test_i018/test_i018.c +++ b/api-tests/ff/ipc/test_i018/test_i018.c @@ -31,7 +31,7 @@ client_test_t test_i018_client_tests_list[] = { NULL, }; -int32_t client_test_psa_set_rhandle_with_invalid_handle(security_t caller) +int32_t client_test_psa_set_rhandle_with_invalid_handle(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i018/test_i018.h b/api-tests/ff/ipc/test_i018/test_i018.h index f8eed0d8..14e05bcf 100644 --- a/api-tests/ff/ipc/test_i018/test_i018.h +++ b/api-tests/ff/ipc/test_i018/test_i018.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i018_client_tests_list[]; -int32_t client_test_psa_set_rhandle_with_invalid_handle(security_t); +int32_t client_test_psa_set_rhandle_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i019/test_i019.c b/api-tests/ff/ipc/test_i019/test_i019.c index 35ba8b93..a123bb25 100644 --- a/api-tests/ff/ipc/test_i019/test_i019.c +++ b/api-tests/ff/ipc/test_i019/test_i019.c @@ -31,7 +31,7 @@ client_test_t test_i019_client_tests_list[] = { NULL, }; -int32_t client_test_psa_set_rhandle_with_null_handle(security_t caller) +int32_t client_test_psa_set_rhandle_with_null_handle(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i019/test_i019.h b/api-tests/ff/ipc/test_i019/test_i019.h index 39c00653..c4bcfdcf 100644 --- a/api-tests/ff/ipc/test_i019/test_i019.h +++ b/api-tests/ff/ipc/test_i019/test_i019.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i019_client_tests_list[]; -int32_t client_test_psa_set_rhandle_with_null_handle(security_t); +int32_t client_test_psa_set_rhandle_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i020/test_i020.c b/api-tests/ff/ipc/test_i020/test_i020.c index c316e3d6..21d0ab56 100644 --- a/api-tests/ff/ipc/test_i020/test_i020.c +++ b/api-tests/ff/ipc/test_i020/test_i020.c @@ -31,7 +31,7 @@ client_test_t test_i020_client_tests_list[] = { NULL, }; -int32_t client_test_psa_reply_with_invalid_connect_status_code(security_t caller) +int32_t client_test_psa_reply_with_invalid_connect_status_code(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i020/test_i020.h b/api-tests/ff/ipc/test_i020/test_i020.h index 7b9c1ebc..ccad95b9 100644 --- a/api-tests/ff/ipc/test_i020/test_i020.h +++ b/api-tests/ff/ipc/test_i020/test_i020.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i020_client_tests_list[]; -int32_t client_test_psa_reply_with_invalid_connect_status_code(security_t); +int32_t client_test_psa_reply_with_invalid_connect_status_code(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i021/test_i021.c b/api-tests/ff/ipc/test_i021/test_i021.c index 8927b140..ca7f3ee5 100644 --- a/api-tests/ff/ipc/test_i021/test_i021.c +++ b/api-tests/ff/ipc/test_i021/test_i021.c @@ -31,7 +31,7 @@ client_test_t test_i021_client_tests_list[] = { NULL, }; -int32_t client_test_irq_routing(security_t caller) +int32_t client_test_irq_routing(caller_security_t caller) { psa_handle_t handle; driver_test_fn_id_t driver_test_fn_id = TEST_INTR_SERVICE; diff --git a/api-tests/ff/ipc/test_i021/test_i021.h b/api-tests/ff/ipc/test_i021/test_i021.h index cc76cafa..f532c7f2 100644 --- a/api-tests/ff/ipc/test_i021/test_i021.h +++ b/api-tests/ff/ipc/test_i021/test_i021.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i021_client_tests_list[]; -int32_t client_test_irq_routing(security_t); +int32_t client_test_irq_routing(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i022/test_i022.c b/api-tests/ff/ipc/test_i022/test_i022.c index 09548369..cad50be4 100644 --- a/api-tests/ff/ipc/test_i022/test_i022.c +++ b/api-tests/ff/ipc/test_i022/test_i022.c @@ -31,7 +31,7 @@ client_test_t test_i022_client_tests_list[] = { NULL, }; -int32_t client_test_psa_reply_with_invalid_handle(security_t caller) +int32_t client_test_psa_reply_with_invalid_handle(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i022/test_i022.h b/api-tests/ff/ipc/test_i022/test_i022.h index b67081f0..8c5b5e14 100644 --- a/api-tests/ff/ipc/test_i022/test_i022.h +++ b/api-tests/ff/ipc/test_i022/test_i022.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i022_client_tests_list[]; -int32_t client_test_psa_reply_with_invalid_handle(security_t); +int32_t client_test_psa_reply_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i023/test_i023.c b/api-tests/ff/ipc/test_i023/test_i023.c index 6c85db25..d81c2847 100644 --- a/api-tests/ff/ipc/test_i023/test_i023.c +++ b/api-tests/ff/ipc/test_i023/test_i023.c @@ -31,7 +31,7 @@ client_test_t test_i023_client_tests_list[] = { NULL, }; -int32_t client_test_psa_reply_with_null_handle(security_t caller) +int32_t client_test_psa_reply_with_null_handle(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i023/test_i023.h b/api-tests/ff/ipc/test_i023/test_i023.h index b0394f1d..9029a4b5 100644 --- a/api-tests/ff/ipc/test_i023/test_i023.h +++ b/api-tests/ff/ipc/test_i023/test_i023.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i023_client_tests_list[]; -int32_t client_test_psa_reply_with_null_handle(security_t); +int32_t client_test_psa_reply_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i024/test_i024.c b/api-tests/ff/ipc/test_i024/test_i024.c index d589c896..70aaf67f 100644 --- a/api-tests/ff/ipc/test_i024/test_i024.c +++ b/api-tests/ff/ipc/test_i024/test_i024.c @@ -31,7 +31,7 @@ client_test_t test_i024_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_handle(security_t caller) +int32_t client_test_psa_call_with_invalid_handle(caller_security_t caller) { psa_status_t status_of_call; boot_state_t boot_state; @@ -62,7 +62,7 @@ int32_t client_test_psa_call_with_invalid_handle(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_invalid_handle(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i024/test_i024.h b/api-tests/ff/ipc/test_i024/test_i024.h index 109ba862..701382e9 100644 --- a/api-tests/ff/ipc/test_i024/test_i024.h +++ b/api-tests/ff/ipc/test_i024/test_i024.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i024_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_handle(security_t); +int32_t client_test_psa_call_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i025/test_i025.c b/api-tests/ff/ipc/test_i025/test_i025.c index 66d69dd2..753d920d 100644 --- a/api-tests/ff/ipc/test_i025/test_i025.c +++ b/api-tests/ff/ipc/test_i025/test_i025.c @@ -31,7 +31,7 @@ client_test_t test_i025_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_null_handle(security_t caller) +int32_t client_test_psa_call_with_null_handle(caller_security_t caller) { psa_status_t status_of_call; boot_state_t boot_state; @@ -62,7 +62,7 @@ int32_t client_test_psa_call_with_null_handle(security_t caller) */ /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_null_handle(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i025/test_i025.h b/api-tests/ff/ipc/test_i025/test_i025.h index 2cc58ee7..570c5f33 100644 --- a/api-tests/ff/ipc/test_i025/test_i025.h +++ b/api-tests/ff/ipc/test_i025/test_i025.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i025_client_tests_list[]; -int32_t client_test_psa_call_with_null_handle(security_t); +int32_t client_test_psa_call_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i026/test_i026.c b/api-tests/ff/ipc/test_i026/test_i026.c index bafd8a91..8ead26d0 100644 --- a/api-tests/ff/ipc/test_i026/test_i026.c +++ b/api-tests/ff/ipc/test_i026/test_i026.c @@ -31,7 +31,7 @@ client_test_t test_i026_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_iovec_more_than_max_limit(security_t caller) +int32_t client_test_psa_call_with_iovec_more_than_max_limit(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -79,7 +79,7 @@ int32_t client_test_psa_call_with_iovec_more_than_max_limit(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -94,7 +94,7 @@ int32_t client_test_psa_call_with_iovec_more_than_max_limit(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i026/test_i026.h b/api-tests/ff/ipc/test_i026/test_i026.h index 183a060e..7c467126 100644 --- a/api-tests/ff/ipc/test_i026/test_i026.h +++ b/api-tests/ff/ipc/test_i026/test_i026.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i026_client_tests_list[]; -int32_t client_test_psa_call_with_iovec_more_than_max_limit(security_t); +int32_t client_test_psa_call_with_iovec_more_than_max_limit(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i027/test_i027.c b/api-tests/ff/ipc/test_i027/test_i027.c index 1f20adc4..f12f9404 100644 --- a/api-tests/ff/ipc/test_i027/test_i027.c +++ b/api-tests/ff/ipc/test_i027/test_i027.c @@ -31,7 +31,7 @@ client_test_t test_i027_client_tests_list[] = { NULL, }; -int32_t client_test_psa_drop_connection(security_t caller) +int32_t client_test_psa_drop_connection(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -71,7 +71,7 @@ int32_t client_test_psa_drop_connection(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -85,7 +85,7 @@ int32_t client_test_psa_drop_connection(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_NOT_EXPECTED)) diff --git a/api-tests/ff/ipc/test_i027/test_i027.h b/api-tests/ff/ipc/test_i027/test_i027.h index 2996167b..827196fa 100644 --- a/api-tests/ff/ipc/test_i027/test_i027.h +++ b/api-tests/ff/ipc/test_i027/test_i027.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i027_client_tests_list[]; -int32_t client_test_psa_drop_connection(security_t); +int32_t client_test_psa_drop_connection(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i028/test_i028.c b/api-tests/ff/ipc/test_i028/test_i028.c index a5be9d35..cc1d8e07 100644 --- a/api-tests/ff/ipc/test_i028/test_i028.c +++ b/api-tests/ff/ipc/test_i028/test_i028.c @@ -31,7 +31,7 @@ client_test_t test_i028_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_at_ipc_connect(security_t caller) +int32_t client_test_psa_read_at_ipc_connect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i028/test_i028.h b/api-tests/ff/ipc/test_i028/test_i028.h index 8368fa1b..41b207a0 100644 --- a/api-tests/ff/ipc/test_i028/test_i028.h +++ b/api-tests/ff/ipc/test_i028/test_i028.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i028_client_tests_list[]; -int32_t client_test_psa_read_at_ipc_connect(security_t); +int32_t client_test_psa_read_at_ipc_connect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i029/test_i029.c b/api-tests/ff/ipc/test_i029/test_i029.c index 51d199bd..7c997e41 100644 --- a/api-tests/ff/ipc/test_i029/test_i029.c +++ b/api-tests/ff/ipc/test_i029/test_i029.c @@ -31,7 +31,7 @@ client_test_t test_i029_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_at_ipc_disconnect(security_t caller) +int32_t client_test_psa_read_at_ipc_disconnect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i029/test_i029.h b/api-tests/ff/ipc/test_i029/test_i029.h index 14119bc8..48a1b759 100644 --- a/api-tests/ff/ipc/test_i029/test_i029.h +++ b/api-tests/ff/ipc/test_i029/test_i029.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i029_client_tests_list[]; -int32_t client_test_psa_read_at_ipc_disconnect(security_t); +int32_t client_test_psa_read_at_ipc_disconnect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i030/test_i030.c b/api-tests/ff/ipc/test_i030/test_i030.c index f6eef922..9b1351a7 100644 --- a/api-tests/ff/ipc/test_i030/test_i030.c +++ b/api-tests/ff/ipc/test_i030/test_i030.c @@ -31,7 +31,7 @@ client_test_t test_i030_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_null_handle(security_t caller) +int32_t client_test_psa_read_with_null_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i030/test_i030.h b/api-tests/ff/ipc/test_i030/test_i030.h index fafb2a8c..20af72f8 100644 --- a/api-tests/ff/ipc/test_i030/test_i030.h +++ b/api-tests/ff/ipc/test_i030/test_i030.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i030_client_tests_list[]; -int32_t client_test_psa_read_with_null_handle(security_t); +int32_t client_test_psa_read_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i031/test_i031.c b/api-tests/ff/ipc/test_i031/test_i031.c index dc221519..0751f063 100644 --- a/api-tests/ff/ipc/test_i031/test_i031.c +++ b/api-tests/ff/ipc/test_i031/test_i031.c @@ -31,7 +31,7 @@ client_test_t test_i031_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_invalid_handle(security_t caller) +int32_t client_test_psa_read_with_invalid_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i031/test_i031.h b/api-tests/ff/ipc/test_i031/test_i031.h index ceb16f87..6283b61a 100644 --- a/api-tests/ff/ipc/test_i031/test_i031.h +++ b/api-tests/ff/ipc/test_i031/test_i031.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i031_client_tests_list[]; -int32_t client_test_psa_read_with_invalid_handle(security_t); +int32_t client_test_psa_read_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i032/test_i032.c b/api-tests/ff/ipc/test_i032/test_i032.c index f0527833..be3f1f11 100644 --- a/api-tests/ff/ipc/test_i032/test_i032.c +++ b/api-tests/ff/ipc/test_i032/test_i032.c @@ -31,7 +31,7 @@ client_test_t test_i032_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_invec_equal_to_max_iovec(security_t caller) +int32_t client_test_psa_read_with_invec_equal_to_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i032/test_i032.h b/api-tests/ff/ipc/test_i032/test_i032.h index 8ea8bd4d..48e4d8a4 100644 --- a/api-tests/ff/ipc/test_i032/test_i032.h +++ b/api-tests/ff/ipc/test_i032/test_i032.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i032_client_tests_list[]; -int32_t client_test_psa_read_with_invec_equal_to_max_iovec(security_t); +int32_t client_test_psa_read_with_invec_equal_to_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i033/test_i033.c b/api-tests/ff/ipc/test_i033/test_i033.c index 1792dfa7..e8e803a3 100644 --- a/api-tests/ff/ipc/test_i033/test_i033.c +++ b/api-tests/ff/ipc/test_i033/test_i033.c @@ -31,7 +31,7 @@ client_test_t test_i033_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_invec_greater_than_max_iovec(security_t caller) +int32_t client_test_psa_read_with_invec_greater_than_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i033/test_i033.h b/api-tests/ff/ipc/test_i033/test_i033.h index 2c65273c..b4f74cca 100644 --- a/api-tests/ff/ipc/test_i033/test_i033.h +++ b/api-tests/ff/ipc/test_i033/test_i033.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i033_client_tests_list[]; -int32_t client_test_psa_read_with_invec_greater_than_max_iovec(security_t); +int32_t client_test_psa_read_with_invec_greater_than_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i034/test_i034.c b/api-tests/ff/ipc/test_i034/test_i034.c index 742c1aa0..f7f14fff 100644 --- a/api-tests/ff/ipc/test_i034/test_i034.c +++ b/api-tests/ff/ipc/test_i034/test_i034.c @@ -31,7 +31,7 @@ client_test_t test_i034_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_at_ipc_connect(security_t caller) +int32_t client_test_psa_skip_at_ipc_connect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i034/test_i034.h b/api-tests/ff/ipc/test_i034/test_i034.h index 2a7be62a..0f0d5b94 100644 --- a/api-tests/ff/ipc/test_i034/test_i034.h +++ b/api-tests/ff/ipc/test_i034/test_i034.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i034_client_tests_list[]; -int32_t client_test_psa_skip_at_ipc_connect(security_t); +int32_t client_test_psa_skip_at_ipc_connect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i035/test_i035.c b/api-tests/ff/ipc/test_i035/test_i035.c index ca89abef..1556e7ef 100644 --- a/api-tests/ff/ipc/test_i035/test_i035.c +++ b/api-tests/ff/ipc/test_i035/test_i035.c @@ -31,7 +31,7 @@ client_test_t test_i035_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_at_ipc_disconnect(security_t caller) +int32_t client_test_psa_skip_at_ipc_disconnect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i035/test_i035.h b/api-tests/ff/ipc/test_i035/test_i035.h index 48664634..13129738 100644 --- a/api-tests/ff/ipc/test_i035/test_i035.h +++ b/api-tests/ff/ipc/test_i035/test_i035.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i035_client_tests_list[]; -int32_t client_test_psa_skip_at_ipc_disconnect(security_t); +int32_t client_test_psa_skip_at_ipc_disconnect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i036/test_i036.c b/api-tests/ff/ipc/test_i036/test_i036.c index 75eea227..87f6f2a6 100644 --- a/api-tests/ff/ipc/test_i036/test_i036.c +++ b/api-tests/ff/ipc/test_i036/test_i036.c @@ -31,7 +31,7 @@ client_test_t test_i036_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_with_null_handle(security_t caller) +int32_t client_test_psa_skip_with_null_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i036/test_i036.h b/api-tests/ff/ipc/test_i036/test_i036.h index 6c18e609..7be6f54a 100644 --- a/api-tests/ff/ipc/test_i036/test_i036.h +++ b/api-tests/ff/ipc/test_i036/test_i036.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i036_client_tests_list[]; -int32_t client_test_psa_skip_with_null_handle(security_t); +int32_t client_test_psa_skip_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i037/test_i037.c b/api-tests/ff/ipc/test_i037/test_i037.c index c6765a2a..306990e8 100644 --- a/api-tests/ff/ipc/test_i037/test_i037.c +++ b/api-tests/ff/ipc/test_i037/test_i037.c @@ -31,7 +31,7 @@ client_test_t test_i037_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_with_invalid_handle(security_t caller) +int32_t client_test_psa_skip_with_invalid_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i037/test_i037.h b/api-tests/ff/ipc/test_i037/test_i037.h index 4dde872f..051565fc 100644 --- a/api-tests/ff/ipc/test_i037/test_i037.h +++ b/api-tests/ff/ipc/test_i037/test_i037.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i037_client_tests_list[]; -int32_t client_test_psa_skip_with_invalid_handle(security_t); +int32_t client_test_psa_skip_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i038/test_i038.c b/api-tests/ff/ipc/test_i038/test_i038.c index a2cf2b8e..2cb1f9f7 100644 --- a/api-tests/ff/ipc/test_i038/test_i038.c +++ b/api-tests/ff/ipc/test_i038/test_i038.c @@ -31,7 +31,7 @@ client_test_t test_i038_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_with_invec_equal_to_max_iovec(security_t caller) +int32_t client_test_psa_skip_with_invec_equal_to_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i038/test_i038.h b/api-tests/ff/ipc/test_i038/test_i038.h index 35798035..8da20a35 100644 --- a/api-tests/ff/ipc/test_i038/test_i038.h +++ b/api-tests/ff/ipc/test_i038/test_i038.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i038_client_tests_list[]; -int32_t client_test_psa_skip_with_invec_equal_to_max_iovec(security_t); +int32_t client_test_psa_skip_with_invec_equal_to_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i039/test_i039.c b/api-tests/ff/ipc/test_i039/test_i039.c index b028f365..2582094f 100644 --- a/api-tests/ff/ipc/test_i039/test_i039.c +++ b/api-tests/ff/ipc/test_i039/test_i039.c @@ -31,7 +31,7 @@ client_test_t test_i039_client_tests_list[] = { NULL, }; -int32_t client_test_psa_skip_with_invec_greater_than_max_iovec(security_t caller) +int32_t client_test_psa_skip_with_invec_greater_than_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i039/test_i039.h b/api-tests/ff/ipc/test_i039/test_i039.h index 853a11a4..e9862df6 100644 --- a/api-tests/ff/ipc/test_i039/test_i039.h +++ b/api-tests/ff/ipc/test_i039/test_i039.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i039_client_tests_list[]; -int32_t client_test_psa_skip_with_invec_greater_than_max_iovec(security_t); +int32_t client_test_psa_skip_with_invec_greater_than_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i040/test_i040.c b/api-tests/ff/ipc/test_i040/test_i040.c index c0746b1e..412f0bf3 100644 --- a/api-tests/ff/ipc/test_i040/test_i040.c +++ b/api-tests/ff/ipc/test_i040/test_i040.c @@ -31,7 +31,7 @@ client_test_t test_i040_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_at_ipc_connect(security_t caller) +int32_t client_test_psa_write_at_ipc_connect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i040/test_i040.h b/api-tests/ff/ipc/test_i040/test_i040.h index 6a341a43..de982eb7 100644 --- a/api-tests/ff/ipc/test_i040/test_i040.h +++ b/api-tests/ff/ipc/test_i040/test_i040.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i040_client_tests_list[]; -int32_t client_test_psa_write_at_ipc_connect(security_t); +int32_t client_test_psa_write_at_ipc_connect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i041/test_i041.c b/api-tests/ff/ipc/test_i041/test_i041.c index cead0f0f..bd5060de 100644 --- a/api-tests/ff/ipc/test_i041/test_i041.c +++ b/api-tests/ff/ipc/test_i041/test_i041.c @@ -31,7 +31,7 @@ client_test_t test_i041_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_at_ipc_disconnect(security_t caller) +int32_t client_test_psa_write_at_ipc_disconnect(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i041/test_i041.h b/api-tests/ff/ipc/test_i041/test_i041.h index 2dbd15fc..617639b3 100644 --- a/api-tests/ff/ipc/test_i041/test_i041.h +++ b/api-tests/ff/ipc/test_i041/test_i041.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i041_client_tests_list[]; -int32_t client_test_psa_write_at_ipc_disconnect(security_t); +int32_t client_test_psa_write_at_ipc_disconnect(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i042/test_i042.c b/api-tests/ff/ipc/test_i042/test_i042.c index 65dc1539..522f558d 100644 --- a/api-tests/ff/ipc/test_i042/test_i042.c +++ b/api-tests/ff/ipc/test_i042/test_i042.c @@ -31,7 +31,7 @@ client_test_t test_i042_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_null_handle(security_t caller) +int32_t client_test_psa_write_with_null_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i042/test_i042.h b/api-tests/ff/ipc/test_i042/test_i042.h index cbbffc4b..fd25e4b6 100644 --- a/api-tests/ff/ipc/test_i042/test_i042.h +++ b/api-tests/ff/ipc/test_i042/test_i042.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i042_client_tests_list[]; -int32_t client_test_psa_write_with_null_handle(security_t); +int32_t client_test_psa_write_with_null_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i043/test_i043.c b/api-tests/ff/ipc/test_i043/test_i043.c index ea38f4c2..aeeea43e 100644 --- a/api-tests/ff/ipc/test_i043/test_i043.c +++ b/api-tests/ff/ipc/test_i043/test_i043.c @@ -31,7 +31,7 @@ client_test_t test_i043_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_invalid_handle(security_t caller) +int32_t client_test_psa_write_with_invalid_handle(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i043/test_i043.h b/api-tests/ff/ipc/test_i043/test_i043.h index efa051e4..e618a3da 100644 --- a/api-tests/ff/ipc/test_i043/test_i043.h +++ b/api-tests/ff/ipc/test_i043/test_i043.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i043_client_tests_list[]; -int32_t client_test_psa_write_with_invalid_handle(security_t); +int32_t client_test_psa_write_with_invalid_handle(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i044/test_i044.c b/api-tests/ff/ipc/test_i044/test_i044.c index c22a18b8..339d84dd 100644 --- a/api-tests/ff/ipc/test_i044/test_i044.c +++ b/api-tests/ff/ipc/test_i044/test_i044.c @@ -31,7 +31,7 @@ client_test_t test_i044_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_invec_equal_to_max_iovec(security_t caller) +int32_t client_test_psa_write_with_invec_equal_to_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i044/test_i044.h b/api-tests/ff/ipc/test_i044/test_i044.h index af308529..423b9236 100644 --- a/api-tests/ff/ipc/test_i044/test_i044.h +++ b/api-tests/ff/ipc/test_i044/test_i044.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i044_client_tests_list[]; -int32_t client_test_psa_write_with_invec_equal_to_max_iovec(security_t); +int32_t client_test_psa_write_with_invec_equal_to_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i045/test_i045.c b/api-tests/ff/ipc/test_i045/test_i045.c index 6448b6de..a0461065 100644 --- a/api-tests/ff/ipc/test_i045/test_i045.c +++ b/api-tests/ff/ipc/test_i045/test_i045.c @@ -31,7 +31,7 @@ client_test_t test_i045_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_invec_greater_than_max_iovec(security_t caller) +int32_t client_test_psa_write_with_invec_greater_than_max_iovec(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i045/test_i045.h b/api-tests/ff/ipc/test_i045/test_i045.h index 452ab200..66221a87 100644 --- a/api-tests/ff/ipc/test_i045/test_i045.h +++ b/api-tests/ff/ipc/test_i045/test_i045.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i045_client_tests_list[]; -int32_t client_test_psa_write_with_invec_greater_than_max_iovec(security_t); +int32_t client_test_psa_write_with_invec_greater_than_max_iovec(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i046/test_i046.c b/api-tests/ff/ipc/test_i046/test_i046.c index f6270239..7281286d 100644 --- a/api-tests/ff/ipc/test_i046/test_i046.c +++ b/api-tests/ff/ipc/test_i046/test_i046.c @@ -31,7 +31,7 @@ client_test_t test_i046_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_size_overflow(security_t caller) +int32_t client_test_psa_write_with_size_overflow(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i046/test_i046.h b/api-tests/ff/ipc/test_i046/test_i046.h index 874be975..340bd124 100644 --- a/api-tests/ff/ipc/test_i046/test_i046.h +++ b/api-tests/ff/ipc/test_i046/test_i046.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i046_client_tests_list[]; -int32_t client_test_psa_write_with_size_overflow(security_t); +int32_t client_test_psa_write_with_size_overflow(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i047/test_i047.c b/api-tests/ff/ipc/test_i047/test_i047.c index ab98a951..3271b93e 100644 --- a/api-tests/ff/ipc/test_i047/test_i047.c +++ b/api-tests/ff/ipc/test_i047/test_i047.c @@ -31,7 +31,7 @@ client_test_t test_i047_client_tests_list[] = { NULL, }; -int32_t client_test_psa_get_with_invalid_msg_pointer(security_t caller) +int32_t client_test_psa_get_with_invalid_msg_pointer(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i047/test_i047.h b/api-tests/ff/ipc/test_i047/test_i047.h index a062df41..db30d764 100644 --- a/api-tests/ff/ipc/test_i047/test_i047.h +++ b/api-tests/ff/ipc/test_i047/test_i047.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i047_client_tests_list[]; -int32_t client_test_psa_get_with_invalid_msg_pointer(security_t); +int32_t client_test_psa_get_with_invalid_msg_pointer(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i048/test_i048.c b/api-tests/ff/ipc/test_i048/test_i048.c index 7e8bb6dc..13f6d79f 100644 --- a/api-tests/ff/ipc/test_i048/test_i048.c +++ b/api-tests/ff/ipc/test_i048/test_i048.c @@ -31,7 +31,7 @@ client_test_t test_i048_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_invec_pointer(security_t caller) +int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(security_t caller) /* * Selection of invalid invec pointer: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * // PSA RoT pointer * invec_pointer = driver_mmio_region_base; * else @@ -98,7 +98,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) invalid_invec = (psa_invec *) memory_desc->start; else { @@ -118,7 +118,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -133,7 +133,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i048/test_i048.h b/api-tests/ff/ipc/test_i048/test_i048.h index ee38e798..05101e20 100644 --- a/api-tests/ff/ipc/test_i048/test_i048.h +++ b/api-tests/ff/ipc/test_i048/test_i048.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i048_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_invec_pointer(security_t); +int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i049/test_i049.c b/api-tests/ff/ipc/test_i049/test_i049.c index f3f16646..db4b1f8f 100644 --- a/api-tests/ff/ipc/test_i049/test_i049.c +++ b/api-tests/ff/ipc/test_i049/test_i049.c @@ -31,7 +31,7 @@ client_test_t test_i049_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t caller) +int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t caller) /* * Selection of invalid outvec pointer: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * // PSA RoT pointer * outvec_pointer = driver_mmio_region_base; * else @@ -98,7 +98,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) invalid_outvec = (psa_outvec *) memory_desc->start; else { @@ -118,7 +118,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -133,7 +133,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i049/test_i049.h b/api-tests/ff/ipc/test_i049/test_i049.h index 8a1e8d04..90aa10b5 100644 --- a/api-tests/ff/ipc/test_i049/test_i049.h +++ b/api-tests/ff/ipc/test_i049/test_i049.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i049_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_outvec_pointer(security_t); +int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i050/test_i050.c b/api-tests/ff/ipc/test_i050/test_i050.c index 9f616b16..46f09b53 100644 --- a/api-tests/ff/ipc/test_i050/test_i050.c +++ b/api-tests/ff/ipc/test_i050/test_i050.c @@ -31,7 +31,7 @@ client_test_t test_i050_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_invec_base(security_t caller) +int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(security_t caller) /* * Selection of invalid invec pointer: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * // PSA RoT pointer * invalid_base = driver_mmio_region_base; * else @@ -98,7 +98,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) invalid_base = (addr_t *) memory_desc->start; else { @@ -118,7 +118,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -135,7 +135,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i050/test_i050.h b/api-tests/ff/ipc/test_i050/test_i050.h index c31a3491..0c3e1116 100644 --- a/api-tests/ff/ipc/test_i050/test_i050.h +++ b/api-tests/ff/ipc/test_i050/test_i050.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i050_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_invec_base(security_t); +int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i051/test_i051.c b/api-tests/ff/ipc/test_i051/test_i051.c index 6a1f875c..0183fc98 100644 --- a/api-tests/ff/ipc/test_i051/test_i051.c +++ b/api-tests/ff/ipc/test_i051/test_i051.c @@ -31,7 +31,7 @@ client_test_t test_i051_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_outvec_base(security_t caller) +int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -77,7 +77,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(security_t caller) /* * Selection of invalid outvec pointer: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * // PSA RoT pointer * invalid_base = driver_mmio_region_base; * else @@ -98,7 +98,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) invalid_base = (addr_t *) memory_desc->start; else { @@ -118,7 +118,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(security_t caller) } /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -135,7 +135,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i051/test_i051.h b/api-tests/ff/ipc/test_i051/test_i051.h index 38cbdd00..4f76c00b 100644 --- a/api-tests/ff/ipc/test_i051/test_i051.h +++ b/api-tests/ff/ipc/test_i051/test_i051.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i051_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_outvec_base(security_t); +int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i052/test_i052.c b/api-tests/ff/ipc/test_i052/test_i052.c index 5b14c373..f90a48f3 100644 --- a/api-tests/ff/ipc/test_i052/test_i052.c +++ b/api-tests/ff/ipc/test_i052/test_i052.c @@ -31,7 +31,7 @@ client_test_t test_i052_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t caller) +int32_t client_test_psa_call_with_invalid_invec_end_addr(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -78,7 +78,7 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t caller) /* * Selection of invalid size for psa_invec: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * valid_base = nspe_mmio_region_base; * invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1); * else @@ -97,7 +97,7 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) memory_cfg_id = MEMORY_NSPE_MMIO; else memory_cfg_id = MEMORY_SERVER_PARTITION_MMIO; @@ -116,7 +116,7 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t caller) invalid_size = (memory_desc_driver->start - memory_desc->start + 1); /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -133,7 +133,7 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i052/test_i052.h b/api-tests/ff/ipc/test_i052/test_i052.h index 62acbb83..32edabce 100644 --- a/api-tests/ff/ipc/test_i052/test_i052.h +++ b/api-tests/ff/ipc/test_i052/test_i052.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i052_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_invec_end_addr(security_t); +int32_t client_test_psa_call_with_invalid_invec_end_addr(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i053/test_i053.c b/api-tests/ff/ipc/test_i053/test_i053.c index 108c24b9..025f5cd7 100644 --- a/api-tests/ff/ipc/test_i053/test_i053.c +++ b/api-tests/ff/ipc/test_i053/test_i053.c @@ -31,7 +31,7 @@ client_test_t test_i053_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t caller) +int32_t client_test_psa_call_with_invalid_outvec_end_addr(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; @@ -78,7 +78,7 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t caller) /* * Selection of invalid size for psa_outvec: * - * if caller == NONSECURE + * if caller == CALLER_NONSECURE * valid_base = nspe_mmio_region_base; * invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1); * else @@ -97,7 +97,7 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t caller) return status; } - if (caller == NONSECURE) + if (caller == CALLER_NONSECURE) memory_cfg_id = MEMORY_NSPE_MMIO; else memory_cfg_id = MEMORY_SERVER_PARTITION_MMIO; @@ -116,7 +116,7 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t caller) invalid_size = (memory_desc_driver->start - memory_desc->start + 1); /* Setting boot.state before test check */ - boot_state = (caller == NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; if (val->set_boot_flag(boot_state)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); @@ -133,7 +133,7 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t caller) * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. * For SPE caller, it must panic. */ - if (caller == NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) { psa->close(handle); return VAL_STATUS_SUCCESS; diff --git a/api-tests/ff/ipc/test_i053/test_i053.h b/api-tests/ff/ipc/test_i053/test_i053.h index 25bfccca..d1780df4 100644 --- a/api-tests/ff/ipc/test_i053/test_i053.h +++ b/api-tests/ff/ipc/test_i053/test_i053.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i053_client_tests_list[]; -int32_t client_test_psa_call_with_invalid_outvec_end_addr(security_t); +int32_t client_test_psa_call_with_invalid_outvec_end_addr(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i054/test_i054.c b/api-tests/ff/ipc/test_i054/test_i054.c index 80160cae..8f6f25fd 100644 --- a/api-tests/ff/ipc/test_i054/test_i054.c +++ b/api-tests/ff/ipc/test_i054/test_i054.c @@ -31,7 +31,7 @@ client_test_t test_i054_client_tests_list[] = { NULL, }; -int32_t client_test_psa_call_with_not_writable_outvec_base(security_t caller) +int32_t client_test_psa_call_with_not_writable_outvec_base(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i054/test_i054.h b/api-tests/ff/ipc/test_i054/test_i054.h index a86d56aa..74d4f468 100644 --- a/api-tests/ff/ipc/test_i054/test_i054.h +++ b/api-tests/ff/ipc/test_i054/test_i054.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i054_client_tests_list[]; -int32_t client_test_psa_call_with_not_writable_outvec_base(security_t); +int32_t client_test_psa_call_with_not_writable_outvec_base(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i055/test_i055.c b/api-tests/ff/ipc/test_i055/test_i055.c index 033a99a2..c5d72a74 100644 --- a/api-tests/ff/ipc/test_i055/test_i055.c +++ b/api-tests/ff/ipc/test_i055/test_i055.c @@ -31,7 +31,7 @@ client_test_t test_i055_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_invalid_buffer_addr(security_t caller) +int32_t client_test_psa_read_with_invalid_buffer_addr(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; uint8_t data = 0x11; diff --git a/api-tests/ff/ipc/test_i055/test_i055.h b/api-tests/ff/ipc/test_i055/test_i055.h index 5d63951c..0bbd7d4b 100644 --- a/api-tests/ff/ipc/test_i055/test_i055.h +++ b/api-tests/ff/ipc/test_i055/test_i055.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i055_client_tests_list[]; -int32_t client_test_psa_read_with_invalid_buffer_addr(security_t); +int32_t client_test_psa_read_with_invalid_buffer_addr(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i056/test_i056.c b/api-tests/ff/ipc/test_i056/test_i056.c index 7547d33e..2b1bee3e 100644 --- a/api-tests/ff/ipc/test_i056/test_i056.c +++ b/api-tests/ff/ipc/test_i056/test_i056.c @@ -31,7 +31,7 @@ client_test_t test_i056_client_tests_list[] = { NULL, }; -int32_t client_test_psa_read_with_not_writable_buffer_addr(security_t caller) +int32_t client_test_psa_read_with_not_writable_buffer_addr(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; uint8_t data = 0x11; diff --git a/api-tests/ff/ipc/test_i056/test_i056.h b/api-tests/ff/ipc/test_i056/test_i056.h index 0cf6edc8..f93524e2 100644 --- a/api-tests/ff/ipc/test_i056/test_i056.h +++ b/api-tests/ff/ipc/test_i056/test_i056.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i056_client_tests_list[]; -int32_t client_test_psa_read_with_not_writable_buffer_addr(security_t); +int32_t client_test_psa_read_with_not_writable_buffer_addr(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i057/test_i057.c b/api-tests/ff/ipc/test_i057/test_i057.c index 05967d4e..ca43cb9b 100644 --- a/api-tests/ff/ipc/test_i057/test_i057.c +++ b/api-tests/ff/ipc/test_i057/test_i057.c @@ -31,7 +31,7 @@ client_test_t test_i057_client_tests_list[] = { NULL, }; -int32_t client_test_psa_write_with_invalid_buffer_addr(security_t caller) +int32_t client_test_psa_write_with_invalid_buffer_addr(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; uint8_t data = 0x11; diff --git a/api-tests/ff/ipc/test_i057/test_i057.h b/api-tests/ff/ipc/test_i057/test_i057.h index 8aba95eb..de59b550 100644 --- a/api-tests/ff/ipc/test_i057/test_i057.h +++ b/api-tests/ff/ipc/test_i057/test_i057.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i057_client_tests_list[]; -int32_t client_test_psa_write_with_invalid_buffer_addr(security_t); +int32_t client_test_psa_write_with_invalid_buffer_addr(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i058/test_i058.c b/api-tests/ff/ipc/test_i058/test_i058.c index 6639cd07..a9a242e1 100644 --- a/api-tests/ff/ipc/test_i058/test_i058.c +++ b/api-tests/ff/ipc/test_i058/test_i058.c @@ -31,7 +31,7 @@ client_test_t test_i058_client_tests_list[] = { NULL, }; -int32_t client_test_psa_doorbell_signal(security_t caller) +int32_t client_test_psa_doorbell_signal(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i058/test_i058.h b/api-tests/ff/ipc/test_i058/test_i058.h index 50ba73be..e08e5ae8 100644 --- a/api-tests/ff/ipc/test_i058/test_i058.h +++ b/api-tests/ff/ipc/test_i058/test_i058.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i058_client_tests_list[]; -int32_t client_test_psa_doorbell_signal(security_t); +int32_t client_test_psa_doorbell_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i059/test_i059.c b/api-tests/ff/ipc/test_i059/test_i059.c index 0f4c3b78..8a4dc771 100644 --- a/api-tests/ff/ipc/test_i059/test_i059.c +++ b/api-tests/ff/ipc/test_i059/test_i059.c @@ -31,7 +31,7 @@ client_test_t test_i059_client_tests_list[] = { NULL, }; -int32_t client_test_psa_notify_with_neg_part_id(security_t caller) +int32_t client_test_psa_notify_with_neg_part_id(caller_security_t caller) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i059/test_i059.h b/api-tests/ff/ipc/test_i059/test_i059.h index fd306c15..0fc6fddd 100644 --- a/api-tests/ff/ipc/test_i059/test_i059.h +++ b/api-tests/ff/ipc/test_i059/test_i059.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i059_client_tests_list[]; -int32_t client_test_psa_notify_with_neg_part_id(security_t); +int32_t client_test_psa_notify_with_neg_part_id(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i060/test_i060.c b/api-tests/ff/ipc/test_i060/test_i060.c index d2f17a41..d9521c42 100644 --- a/api-tests/ff/ipc/test_i060/test_i060.c +++ b/api-tests/ff/ipc/test_i060/test_i060.c @@ -31,7 +31,7 @@ client_test_t test_i060_client_tests_list[] = { NULL, }; -int32_t client_test_psa_notify_with_invalid_pos_part_id(security_t caller) +int32_t client_test_psa_notify_with_invalid_pos_part_id(caller_security_t caller) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i060/test_i060.h b/api-tests/ff/ipc/test_i060/test_i060.h index 88d1b1b6..f9813ed7 100644 --- a/api-tests/ff/ipc/test_i060/test_i060.h +++ b/api-tests/ff/ipc/test_i060/test_i060.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i060_client_tests_list[]; -int32_t client_test_psa_notify_with_invalid_pos_part_id(security_t); +int32_t client_test_psa_notify_with_invalid_pos_part_id(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i061/test_i061.c b/api-tests/ff/ipc/test_i061/test_i061.c index 4be21a69..c21fe561 100644 --- a/api-tests/ff/ipc/test_i061/test_i061.c +++ b/api-tests/ff/ipc/test_i061/test_i061.c @@ -31,7 +31,7 @@ client_test_t test_i061_client_tests_list[] = { NULL, }; -int32_t client_test_psa_clear_at_unasserted_doorbell_sig(security_t caller) +int32_t client_test_psa_clear_at_unasserted_doorbell_sig(caller_security_t caller) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i061/test_i061.h b/api-tests/ff/ipc/test_i061/test_i061.h index d7e50a64..efd59e52 100644 --- a/api-tests/ff/ipc/test_i061/test_i061.h +++ b/api-tests/ff/ipc/test_i061/test_i061.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i061_client_tests_list[]; -int32_t client_test_psa_clear_at_unasserted_doorbell_sig(security_t); +int32_t client_test_psa_clear_at_unasserted_doorbell_sig(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i062/test_i062.c b/api-tests/ff/ipc/test_i062/test_i062.c index f9ff4cb4..ca87dc51 100644 --- a/api-tests/ff/ipc/test_i062/test_i062.c +++ b/api-tests/ff/ipc/test_i062/test_i062.c @@ -31,7 +31,7 @@ client_test_t test_i062_client_tests_list[] = { NULL, }; -int32_t client_test_psa_wait_with_unassigned_signal(security_t caller) +int32_t client_test_psa_wait_with_unassigned_signal(caller_security_t caller) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_i062/test_i062.h b/api-tests/ff/ipc/test_i062/test_i062.h index fdceda8c..13555c7d 100644 --- a/api-tests/ff/ipc/test_i062/test_i062.h +++ b/api-tests/ff/ipc/test_i062/test_i062.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i062_client_tests_list[]; -int32_t client_test_psa_wait_with_unassigned_signal(security_t); +int32_t client_test_psa_wait_with_unassigned_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i063/test_i063.c b/api-tests/ff/ipc/test_i063/test_i063.c index 8853f3d0..1678877f 100644 --- a/api-tests/ff/ipc/test_i063/test_i063.c +++ b/api-tests/ff/ipc/test_i063/test_i063.c @@ -31,7 +31,7 @@ client_test_t test_i063_client_tests_list[] = { NULL, }; -int32_t client_test_psa_wait_signal_mask(security_t caller) +int32_t client_test_psa_wait_signal_mask(caller_security_t caller) { psa_handle_t handle = 0; diff --git a/api-tests/ff/ipc/test_i063/test_i063.h b/api-tests/ff/ipc/test_i063/test_i063.h index 2afe6827..867f1869 100644 --- a/api-tests/ff/ipc/test_i063/test_i063.h +++ b/api-tests/ff/ipc/test_i063/test_i063.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i063_client_tests_list[]; -int32_t client_test_psa_wait_signal_mask(security_t); +int32_t client_test_psa_wait_signal_mask(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i064/test_i064.c b/api-tests/ff/ipc/test_i064/test_i064.c index f037cfa3..9f8cbee0 100644 --- a/api-tests/ff/ipc/test_i064/test_i064.c +++ b/api-tests/ff/ipc/test_i064/test_i064.c @@ -31,7 +31,7 @@ client_test_t test_i064_client_tests_list[] = { NULL, }; -int32_t client_test_psa_eoi_with_non_intr_signal(security_t caller) +int32_t client_test_psa_eoi_with_non_intr_signal(caller_security_t caller) { psa_handle_t handle; driver_test_fn_id_t driver_test_fn_id = TEST_PSA_EOI_WITH_NON_INTR_SIGNAL; diff --git a/api-tests/ff/ipc/test_i064/test_i064.h b/api-tests/ff/ipc/test_i064/test_i064.h index 2f964f1e..d26010ea 100644 --- a/api-tests/ff/ipc/test_i064/test_i064.h +++ b/api-tests/ff/ipc/test_i064/test_i064.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i064_client_tests_list[]; -int32_t client_test_psa_eoi_with_non_intr_signal(security_t); +int32_t client_test_psa_eoi_with_non_intr_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i065/test_i065.c b/api-tests/ff/ipc/test_i065/test_i065.c index 15081fb2..dbc492d6 100644 --- a/api-tests/ff/ipc/test_i065/test_i065.c +++ b/api-tests/ff/ipc/test_i065/test_i065.c @@ -31,7 +31,7 @@ client_test_t test_i065_client_tests_list[] = { NULL, }; -int32_t client_test_psa_eoi_with_unasserted_signal(security_t caller) +int32_t client_test_psa_eoi_with_unasserted_signal(caller_security_t caller) { psa_handle_t handle; driver_test_fn_id_t driver_test_fn_id = TEST_PSA_EOI_WITH_UNASSERTED_SIGNAL; diff --git a/api-tests/ff/ipc/test_i065/test_i065.h b/api-tests/ff/ipc/test_i065/test_i065.h index 74289aca..7ea2eb07 100644 --- a/api-tests/ff/ipc/test_i065/test_i065.h +++ b/api-tests/ff/ipc/test_i065/test_i065.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i065_client_tests_list[]; -int32_t client_test_psa_eoi_with_unasserted_signal(security_t); +int32_t client_test_psa_eoi_with_unasserted_signal(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i066/test_i066.c b/api-tests/ff/ipc/test_i066/test_i066.c index c452dc0d..cb0c1ceb 100644 --- a/api-tests/ff/ipc/test_i066/test_i066.c +++ b/api-tests/ff/ipc/test_i066/test_i066.c @@ -31,7 +31,7 @@ client_test_t test_i066_client_tests_list[] = { NULL, }; -int32_t client_test_psa_eoi_with_multiple_signals(security_t caller) +int32_t client_test_psa_eoi_with_multiple_signals(caller_security_t caller) { psa_handle_t handle; driver_test_fn_id_t driver_test_fn_id = TEST_PSA_EOI_WITH_MULTIPLE_SIGNALS; diff --git a/api-tests/ff/ipc/test_i066/test_i066.h b/api-tests/ff/ipc/test_i066/test_i066.h index bc3b9cfa..ce908aeb 100644 --- a/api-tests/ff/ipc/test_i066/test_i066.h +++ b/api-tests/ff/ipc/test_i066/test_i066.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i066_client_tests_list[]; -int32_t client_test_psa_eoi_with_multiple_signals(security_t); +int32_t client_test_psa_eoi_with_multiple_signals(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i067/test_i067.c b/api-tests/ff/ipc/test_i067/test_i067.c index f1f22289..55af02ef 100644 --- a/api-tests/ff/ipc/test_i067/test_i067.c +++ b/api-tests/ff/ipc/test_i067/test_i067.c @@ -36,7 +36,7 @@ client_test_t test_i067_client_tests_list[] = { NULL, }; -int32_t client_test_dynamic_mem_alloc_fn(security_t caller) +int32_t client_test_dynamic_mem_alloc_fn(caller_security_t caller) { /* Check heap memory support available to secure partition */ #ifdef SP_HEAP_MEM_SUPP diff --git a/api-tests/ff/ipc/test_i067/test_i067.h b/api-tests/ff/ipc/test_i067/test_i067.h index f84da6e4..8e40820a 100644 --- a/api-tests/ff/ipc/test_i067/test_i067.h +++ b/api-tests/ff/ipc/test_i067/test_i067.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i067_client_tests_list[]; -int32_t client_test_dynamic_mem_alloc_fn(security_t); +int32_t client_test_dynamic_mem_alloc_fn(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i068/test_i068.c b/api-tests/ff/ipc/test_i068/test_i068.c index 18b3c87d..b5038ce1 100644 --- a/api-tests/ff/ipc/test_i068/test_i068.c +++ b/api-tests/ff/ipc/test_i068/test_i068.c @@ -55,7 +55,7 @@ void test_i068_dummy_func(void) { } -int32_t client_test_instr_exec_from_writable_mem(security_t caller) +int32_t client_test_instr_exec_from_writable_mem(caller_security_t caller) { val->print(PRINT_TEST, "[Check 1] Test Instr execution from writable memory\n", 0); diff --git a/api-tests/ff/ipc/test_i068/test_i068.h b/api-tests/ff/ipc/test_i068/test_i068.h index 4426f389..48935487 100644 --- a/api-tests/ff/ipc/test_i068/test_i068.h +++ b/api-tests/ff/ipc/test_i068/test_i068.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i068_client_tests_list[]; -int32_t client_test_instr_exec_from_writable_mem(security_t); +int32_t client_test_instr_exec_from_writable_mem(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i069/test_i069.c b/api-tests/ff/ipc/test_i069/test_i069.c index 1955b9d7..27706e6f 100644 --- a/api-tests/ff/ipc/test_i069/test_i069.c +++ b/api-tests/ff/ipc/test_i069/test_i069.c @@ -31,7 +31,7 @@ client_test_t test_i069_client_tests_list[] = { NULL, }; -int32_t client_test_write_to_code_space(security_t caller) +int32_t client_test_write_to_code_space(caller_security_t caller) { int32_t *p; diff --git a/api-tests/ff/ipc/test_i069/test_i069.h b/api-tests/ff/ipc/test_i069/test_i069.h index fbb3e50d..64d06b56 100644 --- a/api-tests/ff/ipc/test_i069/test_i069.h +++ b/api-tests/ff/ipc/test_i069/test_i069.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i069_client_tests_list[]; -int32_t client_test_write_to_code_space(security_t); +int32_t client_test_write_to_code_space(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i070/test_i070.c b/api-tests/ff/ipc/test_i070/test_i070.c index c9d5ac15..c5d9f94a 100644 --- a/api-tests/ff/ipc/test_i070/test_i070.c +++ b/api-tests/ff/ipc/test_i070/test_i070.c @@ -31,7 +31,7 @@ client_test_t test_i070_client_tests_list[] = { NULL, }; -int32_t client_test_write_to_const_data(security_t caller) +int32_t client_test_write_to_const_data(caller_security_t caller) { const char *string = "This text should be in RO space"; char *p; diff --git a/api-tests/ff/ipc/test_i070/test_i070.h b/api-tests/ff/ipc/test_i070/test_i070.h index 4189b898..5cc30463 100644 --- a/api-tests/ff/ipc/test_i070/test_i070.h +++ b/api-tests/ff/ipc/test_i070/test_i070.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i070_client_tests_list[]; -int32_t client_test_write_to_const_data(security_t); +int32_t client_test_write_to_const_data(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i071/test_i071.c b/api-tests/ff/ipc/test_i071/test_i071.c index 3e7774d0..130ebf04 100644 --- a/api-tests/ff/ipc/test_i071/test_i071.c +++ b/api-tests/ff/ipc/test_i071/test_i071.c @@ -33,7 +33,7 @@ client_test_t test_i071_client_tests_list[] = { NULL, }; -int32_t client_test_mem_manipulation_fn(security_t caller) +int32_t client_test_mem_manipulation_fn(caller_security_t caller) { uint8_t buffer[BUFF_SIZE] = {0}; uint8_t buffer1[BUFF_SIZE] = {0}; diff --git a/api-tests/ff/ipc/test_i071/test_i071.h b/api-tests/ff/ipc/test_i071/test_i071.h index bf1bacf6..a18001b4 100644 --- a/api-tests/ff/ipc/test_i071/test_i071.h +++ b/api-tests/ff/ipc/test_i071/test_i071.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i071_client_tests_list[]; -int32_t client_test_mem_manipulation_fn(security_t); +int32_t client_test_mem_manipulation_fn(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i072/test_i072.c b/api-tests/ff/ipc/test_i072/test_i072.c index aa586e70..41e2b1aa 100644 --- a/api-tests/ff/ipc/test_i072/test_i072.c +++ b/api-tests/ff/ipc/test_i072/test_i072.c @@ -55,7 +55,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_nspe_read_app_rot_variable(security_t caller) +int32_t client_test_nspe_read_app_rot_variable(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; @@ -93,7 +93,7 @@ int32_t client_test_nspe_read_app_rot_variable(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_app_rot_variable(security_t caller) +int32_t client_test_nspe_write_app_rot_variable(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; diff --git a/api-tests/ff/ipc/test_i072/test_i072.h b/api-tests/ff/ipc/test_i072/test_i072.h index 586f8e51..565aae77 100644 --- a/api-tests/ff/ipc/test_i072/test_i072.h +++ b/api-tests/ff/ipc/test_i072/test_i072.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i072_client_tests_list[]; -int32_t client_test_nspe_read_app_rot_variable(security_t); -int32_t client_test_nspe_write_app_rot_variable(security_t); +int32_t client_test_nspe_read_app_rot_variable(caller_security_t); +int32_t client_test_nspe_write_app_rot_variable(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i073/test_i073.c b/api-tests/ff/ipc/test_i073/test_i073.c index 9172ec48..01a0a2ac 100644 --- a/api-tests/ff/ipc/test_i073/test_i073.c +++ b/api-tests/ff/ipc/test_i073/test_i073.c @@ -55,7 +55,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_nspe_read_app_rot_stack(security_t caller) +int32_t client_test_nspe_read_app_rot_stack(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; @@ -93,7 +93,7 @@ int32_t client_test_nspe_read_app_rot_stack(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_app_rot_stack(security_t caller) +int32_t client_test_nspe_write_app_rot_stack(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; diff --git a/api-tests/ff/ipc/test_i073/test_i073.h b/api-tests/ff/ipc/test_i073/test_i073.h index 1badc212..8cfdbe57 100644 --- a/api-tests/ff/ipc/test_i073/test_i073.h +++ b/api-tests/ff/ipc/test_i073/test_i073.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i073_client_tests_list[]; -int32_t client_test_nspe_read_app_rot_stack(security_t); -int32_t client_test_nspe_write_app_rot_stack(security_t); +int32_t client_test_nspe_read_app_rot_stack(caller_security_t); +int32_t client_test_nspe_write_app_rot_stack(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i074/test_i074.c b/api-tests/ff/ipc/test_i074/test_i074.c index bc891524..210ab6a3 100644 --- a/api-tests/ff/ipc/test_i074/test_i074.c +++ b/api-tests/ff/ipc/test_i074/test_i074.c @@ -60,7 +60,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_nspe_read_app_rot_heap(security_t caller) +int32_t client_test_nspe_read_app_rot_heap(caller_security_t caller) { addr_t app_rot_addr; uint8_t data = DATA_VALUE; @@ -98,7 +98,7 @@ int32_t client_test_nspe_read_app_rot_heap(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_app_rot_heap(security_t caller) +int32_t client_test_nspe_write_app_rot_heap(caller_security_t caller) { addr_t app_rot_addr; uint8_t data = DATA_VALUE; @@ -129,14 +129,14 @@ int32_t client_test_nspe_write_app_rot_heap(security_t caller) return VAL_STATUS_SUCCESS; } #else -int32_t client_test_nspe_read_app_rot_heap(security_t caller) +int32_t client_test_nspe_read_app_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 1] Test NSPE reading APP-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); return RESULT_SKIP(VAL_STATUS_HEAP_NOT_AVAILABLE); } -int32_t client_test_nspe_write_app_rot_heap(security_t caller) +int32_t client_test_nspe_write_app_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 2] Test NSPE writing APP-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); diff --git a/api-tests/ff/ipc/test_i074/test_i074.h b/api-tests/ff/ipc/test_i074/test_i074.h index f6d1d8d5..ad09a7ff 100644 --- a/api-tests/ff/ipc/test_i074/test_i074.h +++ b/api-tests/ff/ipc/test_i074/test_i074.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i074_client_tests_list[]; -int32_t client_test_nspe_read_app_rot_heap(security_t); -int32_t client_test_nspe_write_app_rot_heap(security_t); +int32_t client_test_nspe_read_app_rot_heap(caller_security_t); +int32_t client_test_nspe_write_app_rot_heap(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i075/test_i075.c b/api-tests/ff/ipc/test_i075/test_i075.c index 62c7b6ab..2aed38a7 100644 --- a/api-tests/ff/ipc/test_i075/test_i075.c +++ b/api-tests/ff/ipc/test_i075/test_i075.c @@ -57,7 +57,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_nspe_read_app_rot_mmio(security_t caller) +int32_t client_test_nspe_read_app_rot_mmio(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = DATA_VALUE; @@ -95,7 +95,7 @@ int32_t client_test_nspe_read_app_rot_mmio(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_app_rot_mmio(security_t caller) +int32_t client_test_nspe_write_app_rot_mmio(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = DATA_VALUE; diff --git a/api-tests/ff/ipc/test_i075/test_i075.h b/api-tests/ff/ipc/test_i075/test_i075.h index 5cae303d..5fcb6244 100644 --- a/api-tests/ff/ipc/test_i075/test_i075.h +++ b/api-tests/ff/ipc/test_i075/test_i075.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i075_client_tests_list[]; -int32_t client_test_nspe_read_app_rot_mmio(security_t); -int32_t client_test_nspe_write_app_rot_mmio(security_t); +int32_t client_test_nspe_read_app_rot_mmio(caller_security_t); +int32_t client_test_nspe_write_app_rot_mmio(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i076/test_i076.c b/api-tests/ff/ipc/test_i076/test_i076.c index 3fc077ba..765e502e 100644 --- a/api-tests/ff/ipc/test_i076/test_i076.c +++ b/api-tests/ff/ipc/test_i076/test_i076.c @@ -71,7 +71,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_nspe_read_psa_rot_variable(security_t caller) +int32_t client_test_nspe_read_psa_rot_variable(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; @@ -114,7 +114,7 @@ int32_t client_test_nspe_read_psa_rot_variable(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_psa_rot_variable(security_t caller) +int32_t client_test_nspe_write_psa_rot_variable(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; diff --git a/api-tests/ff/ipc/test_i076/test_i076.h b/api-tests/ff/ipc/test_i076/test_i076.h index 1e5e11f5..2114ac56 100644 --- a/api-tests/ff/ipc/test_i076/test_i076.h +++ b/api-tests/ff/ipc/test_i076/test_i076.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i076_client_tests_list[]; -int32_t client_test_nspe_read_psa_rot_variable(security_t); -int32_t client_test_nspe_write_psa_rot_variable(security_t); +int32_t client_test_nspe_read_psa_rot_variable(caller_security_t); +int32_t client_test_nspe_write_psa_rot_variable(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i077/test_i077.c b/api-tests/ff/ipc/test_i077/test_i077.c index 5f4e4d74..4cbad88c 100644 --- a/api-tests/ff/ipc/test_i077/test_i077.c +++ b/api-tests/ff/ipc/test_i077/test_i077.c @@ -72,7 +72,7 @@ static void close_driver_fn(psa_handle_t *handle) } -int32_t client_test_nspe_read_psa_rot_stack(security_t caller) +int32_t client_test_nspe_read_psa_rot_stack(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; @@ -115,7 +115,7 @@ int32_t client_test_nspe_read_psa_rot_stack(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_psa_rot_stack(security_t caller) +int32_t client_test_nspe_write_psa_rot_stack(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; diff --git a/api-tests/ff/ipc/test_i077/test_i077.h b/api-tests/ff/ipc/test_i077/test_i077.h index 57a36a86..4a4133c9 100644 --- a/api-tests/ff/ipc/test_i077/test_i077.h +++ b/api-tests/ff/ipc/test_i077/test_i077.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i077_client_tests_list[]; -int32_t client_test_nspe_read_psa_rot_stack(security_t); -int32_t client_test_nspe_write_psa_rot_stack(security_t); +int32_t client_test_nspe_read_psa_rot_stack(caller_security_t); +int32_t client_test_nspe_write_psa_rot_stack(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i078/test_i078.c b/api-tests/ff/ipc/test_i078/test_i078.c index d46365cc..c600a9f3 100644 --- a/api-tests/ff/ipc/test_i078/test_i078.c +++ b/api-tests/ff/ipc/test_i078/test_i078.c @@ -74,7 +74,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_nspe_read_psa_rot_heap(security_t caller) +int32_t client_test_nspe_read_psa_rot_heap(caller_security_t caller) { addr_t psa_rot_addr; uint8_t data = DATA_VALUE; @@ -117,7 +117,7 @@ int32_t client_test_nspe_read_psa_rot_heap(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_psa_rot_heap(security_t caller) +int32_t client_test_nspe_write_psa_rot_heap(caller_security_t caller) { addr_t psa_rot_addr; uint8_t data = DATA_VALUE; @@ -146,14 +146,14 @@ int32_t client_test_nspe_write_psa_rot_heap(security_t caller) return VAL_STATUS_SUCCESS; } #else -int32_t client_test_nspe_read_psa_rot_heap(security_t caller) +int32_t client_test_nspe_read_psa_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 1] Test NSPE reading PSA-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); return RESULT_SKIP(VAL_STATUS_HEAP_NOT_AVAILABLE); } -int32_t client_test_nspe_write_psa_rot_heap(security_t caller) +int32_t client_test_nspe_write_psa_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 2] Test NSPE writing PSA-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); diff --git a/api-tests/ff/ipc/test_i078/test_i078.h b/api-tests/ff/ipc/test_i078/test_i078.h index 207f8d35..bc44b596 100644 --- a/api-tests/ff/ipc/test_i078/test_i078.h +++ b/api-tests/ff/ipc/test_i078/test_i078.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i078_client_tests_list[]; -int32_t client_test_nspe_read_psa_rot_heap(security_t); -int32_t client_test_nspe_write_psa_rot_heap(security_t); +int32_t client_test_nspe_read_psa_rot_heap(caller_security_t); +int32_t client_test_nspe_write_psa_rot_heap(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i079/test_i079.c b/api-tests/ff/ipc/test_i079/test_i079.c index 11c66f8f..323a5488 100644 --- a/api-tests/ff/ipc/test_i079/test_i079.c +++ b/api-tests/ff/ipc/test_i079/test_i079.c @@ -71,7 +71,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_nspe_read_psa_rot_mmio(security_t caller) +int32_t client_test_nspe_read_psa_rot_mmio(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE; @@ -114,7 +114,7 @@ int32_t client_test_nspe_read_psa_rot_mmio(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_nspe_write_psa_rot_mmio(security_t caller) +int32_t client_test_nspe_write_psa_rot_mmio(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE; diff --git a/api-tests/ff/ipc/test_i079/test_i079.h b/api-tests/ff/ipc/test_i079/test_i079.h index c5ab49cf..507d0cb2 100644 --- a/api-tests/ff/ipc/test_i079/test_i079.h +++ b/api-tests/ff/ipc/test_i079/test_i079.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i079_client_tests_list[]; -int32_t client_test_nspe_read_psa_rot_mmio(security_t); -int32_t client_test_nspe_write_psa_rot_mmio(security_t); +int32_t client_test_nspe_read_psa_rot_mmio(caller_security_t); +int32_t client_test_nspe_write_psa_rot_mmio(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i080/test_i080.c b/api-tests/ff/ipc/test_i080/test_i080.c index bd1bd368..4d4915c4 100644 --- a/api-tests/ff/ipc/test_i080/test_i080.c +++ b/api-tests/ff/ipc/test_i080/test_i080.c @@ -71,7 +71,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_app_rot_read_psa_rot_variable(security_t caller) +int32_t client_test_app_rot_read_psa_rot_variable(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; @@ -114,7 +114,7 @@ int32_t client_test_app_rot_read_psa_rot_variable(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_app_rot_write_psa_rot_variable(security_t caller) +int32_t client_test_app_rot_write_psa_rot_variable(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; diff --git a/api-tests/ff/ipc/test_i080/test_i080.h b/api-tests/ff/ipc/test_i080/test_i080.h index fdbe7e91..d45c93c6 100644 --- a/api-tests/ff/ipc/test_i080/test_i080.h +++ b/api-tests/ff/ipc/test_i080/test_i080.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i080_client_tests_list[]; -int32_t client_test_app_rot_read_psa_rot_variable(security_t); -int32_t client_test_app_rot_write_psa_rot_variable(security_t); +int32_t client_test_app_rot_read_psa_rot_variable(caller_security_t); +int32_t client_test_app_rot_write_psa_rot_variable(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i081/test_i081.c b/api-tests/ff/ipc/test_i081/test_i081.c index 42c07658..027f9ae3 100644 --- a/api-tests/ff/ipc/test_i081/test_i081.c +++ b/api-tests/ff/ipc/test_i081/test_i081.c @@ -72,7 +72,7 @@ static void close_driver_fn(psa_handle_t *handle) } -int32_t client_test_app_rot_read_psa_rot_stack(security_t caller) +int32_t client_test_app_rot_read_psa_rot_stack(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; @@ -115,7 +115,7 @@ int32_t client_test_app_rot_read_psa_rot_stack(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_app_rot_write_psa_rot_stack(security_t caller) +int32_t client_test_app_rot_write_psa_rot_stack(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE1; diff --git a/api-tests/ff/ipc/test_i081/test_i081.h b/api-tests/ff/ipc/test_i081/test_i081.h index c62a89bb..6410d70a 100644 --- a/api-tests/ff/ipc/test_i081/test_i081.h +++ b/api-tests/ff/ipc/test_i081/test_i081.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i081_client_tests_list[]; -int32_t client_test_app_rot_read_psa_rot_stack(security_t); -int32_t client_test_app_rot_write_psa_rot_stack(security_t); +int32_t client_test_app_rot_read_psa_rot_stack(caller_security_t); +int32_t client_test_app_rot_write_psa_rot_stack(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i082/test_i082.c b/api-tests/ff/ipc/test_i082/test_i082.c index 05e3f84a..cb8a0857 100644 --- a/api-tests/ff/ipc/test_i082/test_i082.c +++ b/api-tests/ff/ipc/test_i082/test_i082.c @@ -74,7 +74,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_app_rot_read_psa_rot_heap(security_t caller) +int32_t client_test_app_rot_read_psa_rot_heap(caller_security_t caller) { addr_t psa_rot_addr; uint8_t data = DATA_VALUE; @@ -117,7 +117,7 @@ int32_t client_test_app_rot_read_psa_rot_heap(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_app_rot_write_psa_rot_heap(security_t caller) +int32_t client_test_app_rot_write_psa_rot_heap(caller_security_t caller) { addr_t psa_rot_addr; uint8_t data = DATA_VALUE; @@ -146,14 +146,14 @@ int32_t client_test_app_rot_write_psa_rot_heap(security_t caller) return VAL_STATUS_SUCCESS; } #else -int32_t client_test_app_rot_read_psa_rot_heap(security_t caller) +int32_t client_test_app_rot_read_psa_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 1] Test APP-RoT reading PSA-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); return RESULT_SKIP(VAL_STATUS_HEAP_NOT_AVAILABLE); } -int32_t client_test_app_rot_write_psa_rot_heap(security_t caller) +int32_t client_test_app_rot_write_psa_rot_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 2] Test APP-RoT writing PSA-RoT heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); diff --git a/api-tests/ff/ipc/test_i082/test_i082.h b/api-tests/ff/ipc/test_i082/test_i082.h index accc73f5..57c13ab3 100644 --- a/api-tests/ff/ipc/test_i082/test_i082.h +++ b/api-tests/ff/ipc/test_i082/test_i082.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i082_client_tests_list[]; -int32_t client_test_app_rot_read_psa_rot_heap(security_t); -int32_t client_test_app_rot_write_psa_rot_heap(security_t); +int32_t client_test_app_rot_read_psa_rot_heap(caller_security_t); +int32_t client_test_app_rot_write_psa_rot_heap(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i083/test_i083.c b/api-tests/ff/ipc/test_i083/test_i083.c index 9899e3ee..dd85cab4 100644 --- a/api-tests/ff/ipc/test_i083/test_i083.c +++ b/api-tests/ff/ipc/test_i083/test_i083.c @@ -71,7 +71,7 @@ static void close_driver_fn(psa_handle_t *handle) psa->close(*handle); } -int32_t client_test_app_rot_read_psa_rot_mmio(security_t caller) +int32_t client_test_app_rot_read_psa_rot_mmio(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE; @@ -114,7 +114,7 @@ int32_t client_test_app_rot_read_psa_rot_mmio(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_app_rot_write_psa_rot_mmio(security_t caller) +int32_t client_test_app_rot_write_psa_rot_mmio(caller_security_t caller) { addr_t psa_rot_addr; uint32_t data = DATA_VALUE; diff --git a/api-tests/ff/ipc/test_i083/test_i083.h b/api-tests/ff/ipc/test_i083/test_i083.h index 99496a87..8f584f75 100644 --- a/api-tests/ff/ipc/test_i083/test_i083.h +++ b/api-tests/ff/ipc/test_i083/test_i083.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i083_client_tests_list[]; -int32_t client_test_app_rot_read_psa_rot_mmio(security_t); -int32_t client_test_app_rot_write_psa_rot_mmio(security_t); +int32_t client_test_app_rot_read_psa_rot_mmio(caller_security_t); +int32_t client_test_app_rot_write_psa_rot_mmio(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i084/test_i084.c b/api-tests/ff/ipc/test_i084/test_i084.c index 933312aa..e21acd29 100644 --- a/api-tests/ff/ipc/test_i084/test_i084.c +++ b/api-tests/ff/ipc/test_i084/test_i084.c @@ -55,7 +55,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_sp_read_other_sp_variable(security_t caller) +int32_t client_test_sp_read_other_sp_variable(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; @@ -93,7 +93,7 @@ int32_t client_test_sp_read_other_sp_variable(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_sp_write_other_sp_variable(security_t caller) +int32_t client_test_sp_write_other_sp_variable(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; diff --git a/api-tests/ff/ipc/test_i084/test_i084.h b/api-tests/ff/ipc/test_i084/test_i084.h index 0fa86afc..ed1150f3 100644 --- a/api-tests/ff/ipc/test_i084/test_i084.h +++ b/api-tests/ff/ipc/test_i084/test_i084.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i084_client_tests_list[]; -int32_t client_test_sp_read_other_sp_variable(security_t); -int32_t client_test_sp_write_other_sp_variable(security_t); +int32_t client_test_sp_read_other_sp_variable(caller_security_t); +int32_t client_test_sp_write_other_sp_variable(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i085/test_i085.c b/api-tests/ff/ipc/test_i085/test_i085.c index da19a245..f389f009 100644 --- a/api-tests/ff/ipc/test_i085/test_i085.c +++ b/api-tests/ff/ipc/test_i085/test_i085.c @@ -55,7 +55,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_sp_read_other_sp_stack(security_t caller) +int32_t client_test_sp_read_other_sp_stack(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; @@ -93,7 +93,7 @@ int32_t client_test_sp_read_other_sp_stack(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_sp_write_other_sp_stack(security_t caller) +int32_t client_test_sp_write_other_sp_stack(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = 0x1234; diff --git a/api-tests/ff/ipc/test_i085/test_i085.h b/api-tests/ff/ipc/test_i085/test_i085.h index 80d5bd6d..26795936 100644 --- a/api-tests/ff/ipc/test_i085/test_i085.h +++ b/api-tests/ff/ipc/test_i085/test_i085.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i085_client_tests_list[]; -int32_t client_test_sp_read_other_sp_stack(security_t); -int32_t client_test_sp_write_other_sp_stack(security_t); +int32_t client_test_sp_read_other_sp_stack(caller_security_t); +int32_t client_test_sp_write_other_sp_stack(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i086/test_i086.c b/api-tests/ff/ipc/test_i086/test_i086.c index 370e9358..605adb1f 100644 --- a/api-tests/ff/ipc/test_i086/test_i086.c +++ b/api-tests/ff/ipc/test_i086/test_i086.c @@ -60,7 +60,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_sp_read_other_sp_heap(security_t caller) +int32_t client_test_sp_read_other_sp_heap(caller_security_t caller) { addr_t app_rot_addr; uint8_t data = DATA_VALUE; @@ -98,7 +98,7 @@ int32_t client_test_sp_read_other_sp_heap(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_sp_write_other_sp_heap(security_t caller) +int32_t client_test_sp_write_other_sp_heap(caller_security_t caller) { addr_t app_rot_addr; uint8_t data = DATA_VALUE; @@ -129,14 +129,14 @@ int32_t client_test_sp_write_other_sp_heap(security_t caller) return VAL_STATUS_SUCCESS; } #else -int32_t client_test_sp_read_other_sp_heap(security_t caller) +int32_t client_test_sp_read_other_sp_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 1] Test SP reading other SP heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); return RESULT_SKIP(VAL_STATUS_HEAP_NOT_AVAILABLE); } -int32_t client_test_sp_write_other_sp_heap(security_t caller) +int32_t client_test_sp_write_other_sp_heap(caller_security_t caller) { val->print(PRINT_TEST, "[Check 2] Test SP writing other SP heap\n", 0); val->print(PRINT_ERROR, "\tSkipping test as heap memory not supported\n", 0); diff --git a/api-tests/ff/ipc/test_i086/test_i086.h b/api-tests/ff/ipc/test_i086/test_i086.h index eb64546d..2f729e69 100644 --- a/api-tests/ff/ipc/test_i086/test_i086.h +++ b/api-tests/ff/ipc/test_i086/test_i086.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i086_client_tests_list[]; -int32_t client_test_sp_read_other_sp_heap(security_t); -int32_t client_test_sp_write_other_sp_heap(security_t); +int32_t client_test_sp_read_other_sp_heap(caller_security_t); +int32_t client_test_sp_write_other_sp_heap(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i087/test_i087.c b/api-tests/ff/ipc/test_i087/test_i087.c index eb6cbf22..6514fab1 100644 --- a/api-tests/ff/ipc/test_i087/test_i087.c +++ b/api-tests/ff/ipc/test_i087/test_i087.c @@ -57,7 +57,7 @@ static int32_t get_secure_partition_address(addr_t *addr) return VAL_STATUS_SUCCESS; } -int32_t client_test_sp_read_other_sp_mmio(security_t caller) +int32_t client_test_sp_read_other_sp_mmio(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = DATA_VALUE; @@ -95,7 +95,7 @@ int32_t client_test_sp_read_other_sp_mmio(security_t caller) return VAL_STATUS_SPM_FAILED; } -int32_t client_test_sp_write_other_sp_mmio(security_t caller) +int32_t client_test_sp_write_other_sp_mmio(caller_security_t caller) { addr_t app_rot_addr; uint32_t data = DATA_VALUE; diff --git a/api-tests/ff/ipc/test_i087/test_i087.h b/api-tests/ff/ipc/test_i087/test_i087.h index 450427d2..7cf6a82f 100644 --- a/api-tests/ff/ipc/test_i087/test_i087.h +++ b/api-tests/ff/ipc/test_i087/test_i087.h @@ -33,6 +33,6 @@ extern psa_api_t *psa; extern client_test_t test_i087_client_tests_list[]; -int32_t client_test_sp_read_other_sp_mmio(security_t); -int32_t client_test_sp_write_other_sp_mmio(security_t); +int32_t client_test_sp_read_other_sp_mmio(caller_security_t); +int32_t client_test_sp_write_other_sp_mmio(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_l088/test_l088.c b/api-tests/ff/ipc/test_l088/test_l088.c index 612c9278..e4c1785a 100644 --- a/api-tests/ff/ipc/test_l088/test_l088.c +++ b/api-tests/ff/ipc/test_l088/test_l088.c @@ -31,7 +31,7 @@ client_test_t test_l088_client_tests_list[] = { NULL, }; -int32_t client_test_psa_rot_lifecycle_state(security_t caller) +int32_t client_test_psa_rot_lifecycle_state(caller_security_t caller) { return VAL_STATUS_SUCCESS; } diff --git a/api-tests/ff/ipc/test_l088/test_l088.h b/api-tests/ff/ipc/test_l088/test_l088.h index e27f8acf..618d6131 100644 --- a/api-tests/ff/ipc/test_l088/test_l088.h +++ b/api-tests/ff/ipc/test_l088/test_l088.h @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i088_client_tests_list[]; -int32_t client_test_psa_rot_lifecycle_state(security_t); +int32_t client_test_psa_rot_lifecycle_state(caller_security_t); #endif diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h index 3b1a7133..f2ccf7ab 100644 --- a/api-tests/val/common/val.h +++ b/api-tests/val/common/val.h @@ -167,9 +167,9 @@ /* enums */ typedef enum { - NONSECURE = 0x0, - SECURE = 0x1, -} security_t; + CALLER_NONSECURE = 0x0, + CALLER_SECURE = 0x1, +} caller_security_t; typedef enum { TEST_ISOLATION_L1 = 0x1, @@ -295,6 +295,6 @@ typedef struct { uint8_t status; } test_status_buffer_t; -typedef int32_t (*client_test_t)(security_t caller); +typedef int32_t (*client_test_t)(caller_security_t caller); typedef int32_t (*server_test_t)(void); #endif /* VAL_COMMON_H */ diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c index 19f83561..57cb0b6b 100644 --- a/api-tests/val/nspe/val_framework.c +++ b/api-tests/val/nspe/val_framework.c @@ -159,7 +159,7 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test } /* Execute client tests */ - test_status = tests_list[i](NONSECURE); + test_status = tests_list[i](CALLER_NONSECURE); if (server_hs == TRUE) { diff --git a/api-tests/val/spe/val_partition_common.h b/api-tests/val/spe/val_partition_common.h index 76b5c8c6..fe32baae 100644 --- a/api-tests/val/spe/val_partition_common.h +++ b/api-tests/val/spe/val_partition_common.h @@ -337,7 +337,7 @@ STATIC_DECLARE val_status_t val_execute_secure_tests(test_info_t test_info, clie } /* Execute client tests */ - test_status = tests_list[i](SECURE); + test_status = tests_list[i](CALLER_SECURE); /* Retrive Server test status */ status = val_get_secure_test_result(&handle); From 932eed00038ef42b963361ef84c90816eecdf4a6 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Thu, 22 Aug 2019 00:42:47 +0530 Subject: [PATCH 13/54] Adding CMake build support for tbsa-v8m. Tests logic reworked for bugfixes and enhancements. Signed-off-by: Vinay Kumar Kotegowder --- tbsa-v8m/CMakeLists.txt | 319 ++++++++++++++++++ tbsa-v8m/Makefile | 127 ------- tbsa-v8m/README.md | 66 ++-- tbsa-v8m/cmake/common/CMakeSettings.cmake | 24 ++ tbsa-v8m/cmake/common/Utils.cmake | 37 ++ tbsa-v8m/cmake/compiler/GNUARM.cmake | 84 +++++ .../Arm_TBSA-v8M_Arch_Test_Porting_Guide.md | 39 ++- ...m_TBSA-v8M_Arch_Test_Scenario_Document.pdf | Bin 416094 -> 546561 bytes ..._Validation_Methodology_and_User_Guide.pdf | Bin 469972 -> 0 bytes ..._Validation_Methodology_and_User_Guide.pdf | Bin 0 -> 434943 bytes tbsa-v8m/platform/board/fvp/Makefile | 82 ----- .../board/fvp/src/pal_baremetal_intf.c | 17 +- .../platform/board/fvp/src/pal_cmsis_intf.c | 17 +- tbsa-v8m/platform/board/fvp/target.cmake | 83 +++++ tbsa-v8m/tbsa_app/tbsa.h | 4 +- tbsa-v8m/test_pool/Makefile | 44 --- tbsa-v8m/test_pool/base/Makefile | 77 ----- .../test_pool/base/test_b001/non_secure.c | 37 +- tbsa-v8m/test_pool/base/test_b001/secure.c | 25 +- .../test_pool/base/test_b002/non_secure.c | 14 +- tbsa-v8m/test_pool/base/test_b002/secure.c | 13 +- .../test_pool/base/test_b005/non_secure.c | 39 ++- tbsa-v8m/test_pool/base/test_b005/secure.c | 4 +- .../test_pool/base/test_b006/non_secure.c | 25 +- tbsa-v8m/test_pool/base/test_b006/secure.c | 4 +- .../test_pool/base/test_b008/non_secure.c | 40 +++ tbsa-v8m/test_pool/base/test_b008/secure.c | 125 +++++++ tbsa-v8m/test_pool/boot/Makefile | 77 ----- tbsa-v8m/test_pool/crypto/Makefile | 76 ----- tbsa-v8m/test_pool/crypto/test_c001/secure.c | 14 +- tbsa-v8m/test_pool/crypto/test_c002/secure.c | 61 ++-- .../test_pool/crypto/test_c003/non_secure.c | 108 ++++-- tbsa-v8m/test_pool/crypto/test_c003/secure.c | 91 +++-- tbsa-v8m/test_pool/crypto/test_c004/secure.c | 72 ++-- .../test_pool/crypto/test_c005/non_secure.c | 3 +- tbsa-v8m/test_pool/crypto/test_c005/secure.c | 30 +- .../test_pool/crypto/test_c006/non_secure.c | 181 +++++++++- tbsa-v8m/test_pool/crypto/test_c006/secure.c | 222 +++++++++++- .../test_pool/crypto/test_c007/non_secure.c | 4 +- tbsa-v8m/test_pool/crypto/test_c007/secure.c | 10 +- tbsa-v8m/test_pool/crypto/test_c008/secure.c | 18 +- .../test_pool/crypto/test_c009/non_secure.c | 4 +- tbsa-v8m/test_pool/crypto/test_c009/secure.c | 19 +- tbsa-v8m/test_pool/crypto/test_c010/secure.c | 43 +-- tbsa-v8m/test_pool/crypto/test_c011/secure.c | 45 +-- tbsa-v8m/test_pool/debug/Makefile | 77 ----- tbsa-v8m/test_pool/debug/test_d001/secure.c | 53 +-- .../test_pool/debug/test_d002/non_secure.c | 66 ++-- tbsa-v8m/test_pool/debug/test_d003/secure.c | 145 ++++---- tbsa-v8m/test_pool/debug/test_d004/secure.c | 32 +- tbsa-v8m/test_pool/debug/test_d005/secure.c | 6 +- tbsa-v8m/test_pool/debug/test_d006/secure.c | 12 +- tbsa-v8m/test_pool/interrupts/Makefile | 77 ----- tbsa-v8m/test_pool/mem/Makefile | 77 ----- tbsa-v8m/test_pool/mem/test_m001/non_secure.c | 49 ++- tbsa-v8m/test_pool/mem/test_m001/secure.c | 65 ++-- tbsa-v8m/test_pool/peripherals/Makefile | 77 ----- .../peripherals/test_p001/non_secure.c | 15 +- .../test_pool/peripherals/test_p001/secure.c | 20 +- tbsa-v8m/test_pool/tbsa_elf_combine.pl | 120 ------- tbsa-v8m/test_pool/timer/Makefile | 77 ----- .../test_pool/timer/test_t001/non_secure.c | 4 +- tbsa-v8m/test_pool/timer/test_t001/secure.c | 31 +- .../test_pool/timer/test_t002/non_secure.c | 37 +- tbsa-v8m/test_pool/timer/test_t002/secure.c | 44 +-- .../test_pool/timer/test_t003/non_secure.c | 59 +++- tbsa-v8m/test_pool/timer/test_t003/secure.c | 4 +- tbsa-v8m/test_pool/version_counters/Makefile | 77 ----- .../version_counters/test_v001/non_secure.c | 114 ++++--- .../version_counters/test_v001/secure.c | 26 +- tbsa-v8m/tools/debug/debugger_script.ini | 255 ++++++++++++++ .../gen_linker_scripts/gen_linker_scripts.py | 53 +-- .../linker_address_length.py | 4 +- .../gen_linker_scripts/tbsa.linker.template | 3 +- .../gen_linker_scripts/test.linker.template | 10 +- tbsa-v8m/tools/test_elf_combine.py | 141 ++++++++ tbsa-v8m/tools/tgt_cfg_parser/CMakeLists.txt | 75 ++++ .../tools/tgt_cfg_parser/targetConfigGen.pl | 249 -------------- .../tools/tgt_cfg_parser/targetConfigGen.py | 183 ++++++++++ tbsa-v8m/val/include/pal_interfaces.h | 29 +- tbsa-v8m/val/include/val_common.h | 4 +- tbsa-v8m/val/include/val_debug.h | 37 +- tbsa-v8m/val/include/val_infra.h | 11 +- tbsa-v8m/val/include/val_interfaces.h | 6 +- tbsa-v8m/val/include/val_target.h | 44 ++- tbsa-v8m/val/include/val_test_common.h | 6 +- tbsa-v8m/val/src/val_debug.c | 51 +-- tbsa-v8m/val/src/val_infra.c | 12 +- tbsa-v8m/val/src/val_ns_callable.c | 4 +- tbsa-v8m/val/src/val_test.c | 52 +-- tbsa-v8m/val/val.cmake | 41 +++ 91 files changed, 2870 insertions(+), 2188 deletions(-) create mode 100644 tbsa-v8m/CMakeLists.txt delete mode 100644 tbsa-v8m/Makefile create mode 100644 tbsa-v8m/cmake/common/CMakeSettings.cmake create mode 100644 tbsa-v8m/cmake/common/Utils.cmake create mode 100644 tbsa-v8m/cmake/compiler/GNUARM.cmake delete mode 100644 tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Validation_Methodology_and_User_Guide.pdf create mode 100755 tbsa-v8m/docs/Arm_TBSAv8-M_Validation_Methodology_and_User_Guide.pdf delete mode 100644 tbsa-v8m/platform/board/fvp/Makefile create mode 100644 tbsa-v8m/platform/board/fvp/target.cmake delete mode 100644 tbsa-v8m/test_pool/Makefile delete mode 100644 tbsa-v8m/test_pool/base/Makefile create mode 100644 tbsa-v8m/test_pool/base/test_b008/non_secure.c create mode 100644 tbsa-v8m/test_pool/base/test_b008/secure.c delete mode 100644 tbsa-v8m/test_pool/boot/Makefile delete mode 100644 tbsa-v8m/test_pool/crypto/Makefile delete mode 100644 tbsa-v8m/test_pool/debug/Makefile delete mode 100644 tbsa-v8m/test_pool/interrupts/Makefile delete mode 100644 tbsa-v8m/test_pool/mem/Makefile delete mode 100644 tbsa-v8m/test_pool/peripherals/Makefile delete mode 100755 tbsa-v8m/test_pool/tbsa_elf_combine.pl delete mode 100644 tbsa-v8m/test_pool/timer/Makefile delete mode 100644 tbsa-v8m/test_pool/version_counters/Makefile create mode 100755 tbsa-v8m/tools/debug/debugger_script.ini create mode 100644 tbsa-v8m/tools/test_elf_combine.py create mode 100644 tbsa-v8m/tools/tgt_cfg_parser/CMakeLists.txt delete mode 100755 tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.pl create mode 100644 tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.py create mode 100644 tbsa-v8m/val/val.cmake diff --git a/tbsa-v8m/CMakeLists.txt b/tbsa-v8m/CMakeLists.txt new file mode 100644 index 00000000..ab74d676 --- /dev/null +++ b/tbsa-v8m/CMakeLists.txt @@ -0,0 +1,319 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Set the minimum required version of CMake for the project +cmake_minimum_required(VERSION 3.10) + +# cmake_policy +cmake_policy(SET CMP0057 NEW) + +# Find python interpreter version 3 or greater +find_package(PythonInterp 3 REQUIRED) +# Find Git package +find_package(Git REQUIRED) + +get_filename_component(TBSA_ROOT_DIR . ABSOLUTE) + +list(APPEND CMAKE_MODULE_PATH ${TBSA_ROOT_DIR}/cmake) +include("common/Utils") +include(${TBSA_ROOT_DIR}/cmake/common/CMakeSettings.cmake) + +# Check for TARGET command line argument +_check_arguments("TARGET") + +# Check for COMPILER command line argument +if(NOT DEFINED COMPILER) + set(COMPILER "GNUARM" CACHE INTERNAL "Compiler used" FORCE) + message(STATUS "[TBSA] : Defaulting compiler to ${COMPILER}") +endif() + +# Check for ARCH command line argument +if(NOT DEFINED ARCH) + message(STATUS "[TBSA] : Defaulting architecture to armv8-m.main") + set(ARCH "main") +endif() + +# Check for CMSIS command line argument which drives platform driver selection +if(NOT DEFINED CMSIS_DRIVER) + set(CMSIS_DRIVER OFF CACHE INTERNAL "CMSIS Driver selection" FORCE) +endif() + +# Check for SUITE command line argument +if(NOT DEFINED SUITE) + set(SUITE "ALL" CACHE INTERNAL "Test Component selection" FORCE) +endif() + +# Supported architectures +list(APPEND ARCHITECTURE_SUPPORT + main + base +) + +# Supported toolchains +list(APPEND TOOLCHAIN_SUPPORT + GNUARM +) + +# Variables of the project +set(TBSA_PROJECT_NAME tbsa) +set(TARGET_CONFIGURATION_FILE ${TBSA_ROOT_DIR}/platform/board/${TARGET}/tbsa_tgt.cfg) +set(TBSA_MAIN_APP_ENTRY tbsa_entry) +set(TBSA_TEST_APP_ENTRY tbsa_test_info) +set(TBSA_TARGET_GENERATE_DATABASE generate_database) +set(TBSA_TARGET_GENERATE_DATABASE_POST generate_database_cleanup) +set(TBSA_TARGET_CMSIS cmsis_setup) +set(TBSA_TARGET_GENERATE_LINKER_SCRIPTS generate_linker_scripts) +set(TBSA_TARGET_TEST_ELF_COMBINE test_elf_combine) +set(TBSA_TARGET_VAL_LIB tbsa_val) +set(TBSA_TARGET_PAL_LIB tbsa_pal) +set(TBSA_CMSIS_GIT_REPO_LINK https://github.com/ARM-software/CMSIS_5.git CACHE INTERNAL "CMSIS Git Repo path" FORCE) +set(TBSA_CMSIS_GIT_REPO_TAG 49ac527aa7406cecbba46d4d3bdbc7f60c6c6d42 CACHE INTERNAL "CMSIS Git Repo Tag Id" FORCE) +set(TBSA_TARGET_CONFIG_HEADER_GENERATOR ${TBSA_ROOT_DIR}/tools/tgt_cfg_parser/targetConfigGen.py) +set(TBSA_LINKER_SCRIPT_GENERATOR ${TBSA_ROOT_DIR}/tools/gen_linker_scripts/gen_linker_scripts.py) +set(TBSA_TEST_ELF_COMBINE_GENERATOR ${TBSA_ROOT_DIR}/tools/test_elf_combine.py) +set(TEST_COMBINED_BINARY_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/tbsa_test_combined.bin CACHE INTERNAL "TBSA Test Binary Name" FORCE) +set(TGT_CONFIG_SOURCE_C ${CMAKE_CURRENT_BINARY_DIR}/targetConfigGen.c) +set(OUTPUT_HEADER pal_database.h) +set(DATABASE_TABLE_NAME database) +set(DATABASE_TABLE_SECTION_NAME .ns_target_database) +set(TBSA_MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TBSA_PROJECT_NAME}.map) +set(TBSA_EXECUTABLE_SUFFIX ".elf" CACHE INTERNAL "Executable suffix" FORCE) + +if(NOT DEFINED CMSIS_REPO_PATH) + get_filename_component(CMSIS_5_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/${TBSA_TARGET_CMSIS} ABSOLUTE) +else() + set(CMSIS_5_DIR ${CMSIS_REPO_PATH}) +endif() + +function(validate_target_directory) + # Get the list of available directories under platform/board + _get_sub_dir_list(BOARD_LIST ${TBSA_ROOT_DIR}/platform/board) + # Removing include directory which is not a target + list(REMOVE_ITEM BOARD_LIST include) + if(${TARGET} IN_LIST BOARD_LIST) + message(STATUS "[TBSA] : Working on target '${TARGET}'") + else() + message(FATAL_ERROR "[TBSA] : Specified target directory '${TARGET}' not found!") + endif() +endfunction() + +function(validate_suite_directory) + # Get the list of available directories under test_pool + _get_sub_dir_list(SUITE_LIST ${TBSA_ROOT_DIR}/test_pool) + if(${SUITE} IN_LIST SUITE_LIST) + message(STATUS "[TBSA] : Testing '${SUITE}' suite") + else() + message(FATAL_ERROR "[TBSA] : Specified suite directory '${SUITE}' not found!") + endif() +endfunction() + +# test pool source directory +set(TEST_POOL_SOURCE_DIR ${TBSA_ROOT_DIR}/test_pool) +if(SUITE STREQUAL "ALL") + # Get all the test pool components + _get_sub_dir_list(TEST_POOL_COMP_LIST ${TEST_POOL_SOURCE_DIR}) +else() + validate_suite_directory() + set(TEST_POOL_COMP_LIST ${SUITE}) +endif() + +# Project starts +project(${TBSA_PROJECT_NAME} C ASM) + +# Name of final executable +set(EXE_NAME ${TBSA_PROJECT_NAME}) + +message(STATUS "[TBSA] : CMake is running on '${CMAKE_HOST_SYSTEM_NAME}'") +validate_target_directory() + +# Check for supported architectues +if(NOT ${ARCH} IN_LIST ARCHITECTURE_SUPPORT) + message(FATAL_ERROR "[TBSA] : armv8-m.${ARCH} architecture support not available") +endif() + +# Check for supported toolchain/s +if(${COMPILER} IN_LIST TOOLCHAIN_SUPPORT) + include(${TBSA_ROOT_DIR}/cmake/compiler/${COMPILER}.cmake) +else() + message(FATAL_ERROR "[TBSA] : ${COMPILER} toolchain support not available") +endif() + +# Files to clean +list(APPEND TBSA_CLEAN_LIST + ${TEST_COMBINED_BINARY_FILE_NAME} + ${TBSA_MAP_FILE} + ${TGT_CONFIG_SOURCE_C} + ${TBSA_LINKER_SCRIPT} + ${TBSA_TEST_S_LINKER_SCRIPT} + ${TBSA_TEST_NS_LINKER_SCRIPT} + ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER} +) + +# Adding files to clean for incremental build +_get_sub_dir_list(TEST_POOL_CLEAN_LIST ${TEST_POOL_SOURCE_DIR}) +foreach(test_comp ${TEST_POOL_CLEAN_LIST}) + # Set source directory + set(TEST_COMP_SOURCE_DIR ${TEST_POOL_SOURCE_DIR}/${test_comp}) + # Get all the test folders from a given test component + _get_sub_dir_list(COMP_TEST_LIST ${TEST_COMP_SOURCE_DIR}) + foreach(test ${COMP_TEST_LIST}) + set(TEST_S_EXE_NAME "${test}.secure${TBSA_EXECUTABLE_SUFFIX}") + set(TEST_NS_EXE_NAME "${test}.non_secure${TBSA_EXECUTABLE_SUFFIX}") + list(APPEND TBSA_CLEAN_LIST + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_S_EXE_NAME} + ${CMAKE_CURRENT_BINARY_DIR}/${test}.secure.map) + list(APPEND TBSA_CLEAN_LIST + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NS_EXE_NAME} + ${CMAKE_CURRENT_BINARY_DIR}/${test}.non_secure.map) + endforeach() +endforeach() + +# Target configuration parsing +include(ExternalProject) +ExternalProject_Add( + ${TBSA_TARGET_GENERATE_DATABASE} + PREFIX ${CMAKE_CURRENT_BINARY_DIR} + DOWNLOAD_COMMAND "" + UPDATE_COMMAND "" + PATCH_COMMAND "" + BUILD_COMMAND "" + SOURCE_DIR "${TBSA_ROOT_DIR}/tools/tgt_cfg_parser" + CMAKE_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DOUT_DIR=${CMAKE_CURRENT_BINARY_DIR} + -DTARGET=${TARGET} + -DGENERATOR_FILE=${TBSA_TARGET_CONFIG_HEADER_GENERATOR} + -DINCLUDE_DIR=${TBSA_ROOT_DIR}/val/include + -DTARGET_CONFIGURATION_FILE=${TARGET_CONFIGURATION_FILE} + -DTGT_CONFIG_SOURCE_C=${TGT_CONFIG_SOURCE_C} + -DOUTPUT_HEADER=${OUTPUT_HEADER} + -DDATABASE_TABLE_NAME=${DATABASE_TABLE_NAME} + -DDATABASE_TABLE_SECTION_NAME=${DATABASE_TABLE_SECTION_NAME} + TEST_COMMAND "" +) + +# Add custom target to clean generated files of the external project +add_custom_target( + ${TBSA_TARGET_GENERATE_DATABASE_POST} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src/${TBSA_TARGET_GENERATE_DATABASE}-build/ -- clean +) + +if(NOT DEFINED CMSIS_REPO_PATH) +# Cloning CMSIS_5 repo +ExternalProject_Add( + ${TBSA_TARGET_CMSIS} + PREFIX ${CMAKE_CURRENT_BINARY_DIR} + GIT_REPOSITORY ${TBSA_CMSIS_GIT_REPO_LINK} + GIT_TAG ${TBSA_CMSIS_GIT_REPO_TAG} + CONFIGURE_COMMAND "" + UPDATE_COMMAND "" + PATCH_COMMAND "" + BUILD_COMMAND "" + TEST_COMMAND "" + INSTALL_COMMAND "" +) +endif() + +# Linker scripts generation +add_custom_target( + ${TBSA_TARGET_GENERATE_LINKER_SCRIPTS} + COMMENT "[TBSA] : Generating linker scripts for the target" + COMMAND ${PYTHON_EXECUTABLE} ${TBSA_LINKER_SCRIPT_GENERATOR} + ${TARGET_CONFIGURATION_FILE} + ${TBSA_LINKER_TEMPLATE} + ${TBSA_TEST_LINKER_TEMPLATE} + ${TBSA_LINKER_SCRIPT} + ${TBSA_TEST_S_LINKER_SCRIPT} + ${TBSA_TEST_NS_LINKER_SCRIPT} +) + +#Combine test ELFs into binary file +add_custom_target( + ${TBSA_TARGET_TEST_ELF_COMBINE} + COMMENT "[TBSA] : Combining TEST ELFs" + COMMAND ${PYTHON_EXECUTABLE} ${TBSA_TEST_ELF_COMBINE_GENERATOR} + ${CMAKE_CURRENT_BINARY_DIR} + ${TEST_COMBINED_BINARY_FILE_NAME} +) + + +# Generate VAL LIB +include(${TBSA_ROOT_DIR}/val/val.cmake) +# Generate PAL LIB +include(${TBSA_ROOT_DIR}/platform/board/${TARGET}/target.cmake) + +# Final executable of the build process +add_executable(${EXE_NAME} ${TBSA_ROOT_DIR}/tbsa_app/tbsa_main.c) + +target_link_libraries(${EXE_NAME} ${TBSA_TARGET_VAL_LIB} ${TBSA_TARGET_PAL_LIB}) +set_target_properties(${EXE_NAME} PROPERTIES SUFFIX ${TBSA_EXECUTABLE_SUFFIX}) +compiler_set_linker_options(TARGET_NAME ${EXE_NAME} + ENTRY_FUNCTION ${TBSA_MAIN_APP_ENTRY} + LINKER_SCRIPT ${TBSA_LINKER_SCRIPT} + MAP_FILE ${TBSA_MAP_FILE}) +target_include_directories(${EXE_NAME} PRIVATE ${TBSA_ROOT_DIR}/tbsa_app) + +# Dependency chain +add_dependencies(${TBSA_TARGET_GENERATE_DATABASE_POST} ${TBSA_TARGET_GENERATE_DATABASE}) +if(NOT DEFINED CMSIS_REPO_PATH) + add_dependencies(${TBSA_TARGET_CMSIS} ${TBSA_TARGET_GENERATE_DATABASE_POST}) + add_dependencies(${TBSA_TARGET_GENERATE_LINKER_SCRIPTS} ${TBSA_TARGET_CMSIS}) +else() + add_dependencies(${TBSA_TARGET_GENERATE_LINKER_SCRIPTS} ${TBSA_TARGET_GENERATE_DATABASE_POST}) +endif() +add_dependencies(${TBSA_TARGET_PAL_LIB} ${TBSA_TARGET_GENERATE_LINKER_SCRIPTS}) +add_dependencies(${TBSA_TARGET_VAL_LIB} ${TBSA_TARGET_PAL_LIB}) +add_dependencies(${TBSA_TARGET_TEST_ELF_COMBINE} ${TBSA_TARGET_VAL_LIB}) +add_dependencies(${EXE_NAME} ${TBSA_TARGET_TEST_ELF_COMBINE}) + +# Generate test ELFs for all the relevant components +foreach(test_comp ${TEST_POOL_COMP_LIST}) + # Set source directory + set(TEST_COMP_SOURCE_DIR ${TEST_POOL_SOURCE_DIR}/${test_comp}) + # Get all the test folders from a given test component + _get_sub_dir_list(COMP_TEST_LIST ${TEST_COMP_SOURCE_DIR}) + foreach(test ${COMP_TEST_LIST}) + set(TEST_S_EXE_NAME "${test}.secure") + set(TEST_NS_EXE_NAME "${test}.non_secure") + set(TEST_S_SRC_C "${TEST_POOL_SOURCE_DIR}/${test_comp}/${test}/secure.c") + set(TEST_NS_SRC_C "${TEST_POOL_SOURCE_DIR}/${test_comp}/${test}/non_secure.c") + # Secure Test ELF + add_executable(${TEST_S_EXE_NAME} ${TEST_S_SRC_C}) + target_link_libraries(${TEST_S_EXE_NAME} ${TBSA_TARGET_VAL_LIB} ${TBSA_TARGET_PAL_LIB}) + set_target_properties(${TEST_S_EXE_NAME} PROPERTIES SUFFIX ${TBSA_EXECUTABLE_SUFFIX}) + compiler_set_linker_options(TARGET_NAME ${TEST_S_EXE_NAME} + ENTRY_FUNCTION ${TBSA_TEST_APP_ENTRY} + LINKER_SCRIPT ${TBSA_TEST_S_LINKER_SCRIPT} + MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/${test}.secure.map) + add_dependencies(${EXE_NAME} ${TEST_S_EXE_NAME}) + add_dependencies(${TBSA_TARGET_TEST_ELF_COMBINE} ${TEST_S_EXE_NAME}) + # Non secure Test ELF + add_executable(${TEST_NS_EXE_NAME} ${TEST_NS_SRC_C}) + target_link_libraries(${TEST_NS_EXE_NAME} ${TBSA_TARGET_VAL_LIB} ${TBSA_TARGET_PAL_LIB}) + set_target_properties(${TEST_NS_EXE_NAME} PROPERTIES SUFFIX ${TBSA_EXECUTABLE_SUFFIX}) + compiler_set_linker_options(TARGET_NAME ${TEST_NS_EXE_NAME} + ENTRY_FUNCTION ${TBSA_TEST_APP_ENTRY} + LINKER_SCRIPT ${TBSA_TEST_NS_LINKER_SCRIPT} + MAP_FILE ${CMAKE_CURRENT_BINARY_DIR}/${test}.non_secure.map) + add_dependencies(${EXE_NAME} ${TEST_NS_EXE_NAME}) + add_dependencies(${TBSA_TARGET_TEST_ELF_COMBINE} ${TEST_NS_EXE_NAME}) + endforeach() +endforeach() + +# Include the files for make clean +foreach(clean_item ${TBSA_CLEAN_LIST}) + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item}) +endforeach() diff --git a/tbsa-v8m/Makefile b/tbsa-v8m/Makefile deleted file mode 100644 index 85b32ec8..00000000 --- a/tbsa-v8m/Makefile +++ /dev/null @@ -1,127 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump -AS:=$(PREFIX)as - -# Root folder -ROOT_DIR:=. - -# Test specific macros -OUT_DIR :=./out/$(TARGET) -VLIB :=tbsa_val.a -PLIB :=tbsa_pal.a -CLEAN_DIR:= $(dir $(wildcard $(ROOT_DIR)/platform/board/*/)) -CLEAN_DIR:= $(filter-out ./, $(CLEAN_DIR)) - -SUITE := - -.PHONY: all clean - -all: check_target check_arch clean gen_database gen_linker setup_cmsis build - -check_target: -ifeq ($(TARGET),) - @echo "TARGET not specified" - @exit 1 -endif - @if [ ! -d "./platform/board/$(TARGET)/" ]; then { echo "Target Not Found!!!"; exit 1; } fi - -check_arch: -ifeq ($(ARCH),) -ARCH := main -endif - -VALINCDIR :=val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mcmse -mthumb -Wall -Werror -O0 -fdata-sections -ffunction-sections -I$(VALINCDIR) -ASFLAGS :=-march=armv8-m.$(ARCH) -mthumb -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 \ - -Xlinker -Map=tbsa.map - -SYSLIBS :=$(OUT_DIR)/$(VLIB) $(OUT_DIR)/$(PLIB) -lgcc -lc -lnosys - -gen_database: - @echo "" - @echo "Reading target configuration file ..." - mkdir -p platform/board/$(TARGET)/include - ./tools/tgt_cfg_parser/targetConfigGen.pl ./platform/board/$(TARGET)/tbsa_tgt.cfg platform/board/$(TARGET)/include/pal_database - gcc -m32 targetConfigGen.c -w -o targetConfigGen -I$(VALINCDIR) - ./targetConfigGen - rm -f ./targetConfigGen - rm -f ./targetConfigGen.c - -gen_linker: - @echo "" - @echo "Generating target specific linker scripts ..." - cd tools/gen_linker_scripts/ && python gen_linker_scripts.py $(TARGET) - @echo "" - -setup_cmsis: - @if [ ! -d "./platform/CMSIS_5" ]; then\ - cd platform && git clone https://github.com/ARM-software/CMSIS_5.git && cd -;\ - cd platform/CMSIS_5 && git checkout 49ac527aa7406cecbba46d4d3bdbc7f60c6c6d42;\ - else echo "CMSIS already cloned"; echo "";\ - fi - -build: output pal_lib $(VLIB) tbsa.bin - -tbsa_val_src :=$(wildcard val/src/*.c) -tbsa_val_src_s :=$(wildcard val/src/asm/val_secure_$(ARCH).s) -tbsa_val_src_s +=$(wildcard val/src/asm/val_pe_support.s) - -tbsa_val_obj :=$(tbsa_val_src:.c=.o) -tbsa_val_obj +=$(tbsa_val_src_s:.s=.o) - -output: - mkdir -p $(OUT_DIR) - -pal_lib: - cd platform/board/$(TARGET) && make ODIR=$(OUT_DIR) LIBNAME=$(PLIB) ENV=$(ENV) ARCH=$(ARCH) - -$(VLIB): $(tbsa_val_obj) - $(AR) -rc $(OUT_DIR)/$@ $^ - find $(ROOT_DIR) -iname '*.o' -delete - -clean: - rm -rf $(OUT_DIR) - find $(ROOT_DIR) -iname '*.o' -delete - cd test_pool && make clean - echo $(CLEAN_DIR) - $(foreach d, $(CLEAN_DIR), rm -rf $dinclude/;) - $(foreach d, $(CLEAN_DIR), rm -rf $dlinker/;) - -tbsa.bin:tbsa.elf - $(OBJCOPY) $< -O binary $@ - mv tbsa.asm $(OUT_DIR) - mv tbsa.bin $(OUT_DIR) - mv tbsa.elf $(OUT_DIR) - mv tbsa.hex $(OUT_DIR) - mv tbsa.map $(OUT_DIR) - cd test_pool && make VLIB=$(OUT_DIR)/$(VLIB) PLIB=$(OUT_DIR)/$(PLIB) ARCH=$(ARCH) - -tbsa.elf:tbsa_app/tbsa_main.c - $(CC) $(CFLAGS) -Tplatform/board/$(TARGET)/linker/tbsa.linker $(LDFLAGS) -o $@ tbsa_app/tbsa_main.c $(SYSLIBS) - $(OBJDUMP) -d $@ > tbsa.asm - hexdump -v -e ' 1/4 "%08X" "\n"' tbsa.elf > tbsa.hex diff --git a/tbsa-v8m/README.md b/tbsa-v8m/README.md index e0af77b8..688f50e6 100755 --- a/tbsa-v8m/README.md +++ b/tbsa-v8m/README.md @@ -21,7 +21,7 @@ The tests are available as open source. The tests and the corresponding abstract ## Release details - - Release Version - 0.7 + - Release Version - 0.9 - Code Quality: Beta
The suite is in development. This indicates that the suite contains tests which have not been validated on any platform. Please use this opportunity to suggest enhancements and point out errors. @@ -61,10 +61,10 @@ See User guide document to get details on the steps involved in Porting the test Before starting the test suite build, ensure that the following requirements are met: -- Host Operating System : Ubuntu 16.04.4 -- Scripting tools : Perl 5.22.1 -- Other open-source tools : GCC 6.3.1 - +- Host Operating System : Ubuntu 16.04.4, Windows 10 +- Scripting tools : Python3 3 +- Other open-source tools : GNUARM 6.3.1, GCC 5.4.0 32-Bit (Linux Host), mingw 6.3.0 32-Bit (Windows Host) + CMake 3.10 ## Download source @@ -81,29 +81,45 @@ Refer to the [User Guide](docs/Arm_TBSA-v8M_Arch_Test_Validation_Methodology_and ## Build steps To build TBSA-v8M test suite for a given platform, execute the following commands:
- 1. cd tbsa-v8m
- 2. make TARGET= ARCH=


- Example: make TARGET=fvp ARCH=main - -To build only certain test for a given platform, execute the following commands:
- 1. cd tbsa-v8m
- 2. make TARGET= ARCH=
SUITE=
- Example: make TARGET=fvp ARCH=main SUITE=boot,crypto,mem - -To build for CMSIS environment, execute the following commands:
- 1. cd tbsa-v8m
- 2. make TARGET= ARCH=
SUITE= ENV=
- Example: make TARGET=fvp ARCH=main SUITE=boot,crypto,mem ENV=cmsis
- Note: Default environment is baremetal - -
where is the same as the name of the target specific directory created in the platform/board directory. - + cd psa-arch-tests/tbsa-v8m
+ mkdir cmake_build
+ cd cmake_build
+ cmake ../ -G -DTARGET= -DCOMPILER= -DSUITE= -DCMSIS_REPO_PATH= -DCMAKE_VERBOSE_MAKEFILE=OFF -DCMSIS_DRIVER=OFF
+ where:
+ : "Unix Makefiles" - to generate Makefiles for Linux and Cygwin
+ "MinGW Makefiles" - to generate Makefiles for cmd.exe on Windows
+ : target to build, as created in the platform/board directory
+ : GNUARM
+ Defaults to GNUARM if not specified
+ : ALL - builds all test_pool components
+ "::..:" - for selective component build or
+ \:\:..\: - for selective component build or
+ Defaults to ALL if not specified
+ : Absolute CMSIS repo path
+ If not specified CMake clones the CMSIS for itself
+ : ON - To get detailed build log on console
+ OFF - To get minimalistic log on console
+ Defaults to OFF
+ : ON - Build takes CMSIS drivers as specified in target specific target.cmake
+ OFF - Build takes non CMSIS drivers as specified in target specific target.cmake
+ Defaults to OFF
+ To build project
+ cmake --build .
+ To clean
+ cmake --build . -- clean
+ +~~~ +Note: + It is recommended to build each different build configurations in separate + directories. +~~~ ### Build output -TBSA build generates two output binaries: +TBSA build outputs are available under build directory: cmake_build - as created. - - tbsa.elf + - tbsa.elf, tbsa.map - tbsa_test_combined.bin + - test specific executables and Map files ## Test Suite Execution The following steps describe the execution flow prior to the start of test execution. @@ -126,4 +142,4 @@ Arm TBSA-v8M Architecture test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* diff --git a/tbsa-v8m/cmake/common/CMakeSettings.cmake b/tbsa-v8m/cmake/common/CMakeSettings.cmake new file mode 100644 index 00000000..eb812a9f --- /dev/null +++ b/tbsa-v8m/cmake/common/CMakeSettings.cmake @@ -0,0 +1,24 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +#Stop built in CMakeDetermine.cmake scripts to run. +set (CMAKE_C_COMPILER_ID_RUN 1) +#Stop cmake run compiler tests. +set (CMAKE_C_COMPILER_FORCED true) + +set(CMAKE_STATIC_LIBRARY_PREFIX "") +set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") diff --git a/tbsa-v8m/cmake/common/Utils.cmake b/tbsa-v8m/cmake/common/Utils.cmake new file mode 100644 index 00000000..ad082ebd --- /dev/null +++ b/tbsa-v8m/cmake/common/Utils.cmake @@ -0,0 +1,37 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Function to CMake arguments +function(_check_arguments) + foreach(_ARG IN LISTS ARGV) + if(NOT DEFINED ${_ARG}) + message(FATAL_ERROR "[TBSA] : ${_ARG} is not passed! Please specify -D${_ARG}=<...> to CMake.") + endif() + endforeach() +endfunction(_check_arguments) + +# Function to get all the folders inside given parent directory +function(_get_sub_dir_list result parent_dir) + file(GLOB parent_dir_items RELATIVE ${parent_dir} ${parent_dir}/*) + set(dir_list "") + foreach(item ${parent_dir_items}) + if(IS_DIRECTORY ${parent_dir}/${item}) + list(APPEND dir_list ${item}) + endif() + endforeach() + set(${result} ${dir_list} PARENT_SCOPE) +endfunction(_get_sub_dir_list) diff --git a/tbsa-v8m/cmake/compiler/GNUARM.cmake b/tbsa-v8m/cmake/compiler/GNUARM.cmake new file mode 100644 index 00000000..b6a57f59 --- /dev/null +++ b/tbsa-v8m/cmake/compiler/GNUARM.cmake @@ -0,0 +1,84 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +set(CMAKE_SYSTEM_NAME Generic) +set(CMKE_SYSTEM_PROCESSOR ARM) + +set(_C_TOOLCHAIN_NAME arm-none-eabi-gcc) + +if (WIN32) + if (NOT DEFINED GNUARM_PATH) + set(GNUARM_PATH "C:" CACHE PATH "Install directory for GNUARM Compiler") + endif() +else (WIN32) + if (NOT DEFINED GNUARM_PATH) + set(GNUARM_PATH "/" CACHE PATH "Install directory for GNUARM Compiler") + endif() +endif (WIN32) + +find_program( + _C_TOOLCHAIN_PATH + ${_C_TOOLCHAIN_NAME} + PATHS env PATH + HINTS ${GNUARM_PATH} + HINTS bin +) + +if (_C_TOOLCHAIN_PATH STREQUAL "_C_TOOLCHAIN_PATH-NOTFOUND") + message(FATAL_ERROR "[TBSA] : Couldn't find ${_C_TOOLCHAIN_NAME}." + " Either put ${_C_TOOLCHAIN_NAME} on the PATH or set GNUARM_PATH set properly.") +endif() + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +foreach(_LNG IN ITEMS "C" "ASM") + set(CMAKE_${_LNG}_COMPILER ${_C_TOOLCHAIN_PATH}) + message(STATUS "[TBSA] : ${_LNG} compiler used '${CMAKE_${_LNG}_COMPILER}'") +endforeach() + +set(CMAKE_C_FLAGS "-march=armv8-m.${ARCH} -mcmse -mthumb -Wall -Werror -O0 -nostartfiles -fdata-sections -ffunction-sections") +set(CMAKE_ASM_FLAGS "-march=armv8-m.${ARCH} -mthumb") +set(CMAKE_EXE_LINKER_FLAGS "-Xlinker --fatal-warnings -Xlinker --gc-sections -z max-page-size=0x400 -lgcc -lc -lnosys") + +set(TBSA_LINKER_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/tools/gen_linker_scripts/tbsa.linker.template) +set(TBSA_TEST_LINKER_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/tools/gen_linker_scripts/test.linker.template) +set(TBSA_LINKER_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/tbsa.linker) +set(TBSA_TEST_S_LINKER_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/test_s.linker) +set(TBSA_TEST_NS_LINKER_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/test_ns.linker) + +function(compiler_set_linker_options) + set(options) + set(oneValueArgs TARGET_NAME ENTRY_FUNCTION LINKER_SCRIPT MAP_FILE) #Single option arguments. + set(multiValueArgs) #List arguments + cmake_parse_arguments(_MY_PARAMS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # Check passed arguments + if(NOT _MY_PARAMS_TARGET_NAME) + message(FATAL_ERROR "[TBSA] : compiler_set_linker_options: mandatory parameter 'TARGET_NAME' is missing!") + endif() + if(NOT _MY_PARAMS_ENTRY_FUNCTION) + message(FATAL_ERROR "[TBSA] : compiler_set_linker_options: mandatory parameter 'ENTRY_FUNCTION' is missing!") + endif() + if(NOT _MY_PARAMS_LINKER_SCRIPT) + message(FATAL_ERROR "[TBSA] : compiler_set_linker_options: mandatory parameter 'LINKER_SCRIPT' is missing!") + endif() + if(NOT _MY_PARAMS_MAP_FILE) + message(FATAL_ERROR "[TBSA] : compiler_set_linker_options: mandatory parameter 'MAP_FILE' is missing!") + endif() + + set_property(TARGET ${_MY_PARAMS_TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS "--entry=${_MY_PARAMS_ENTRY_FUNCTION} -T${_MY_PARAMS_LINKER_SCRIPT} -Xlinker -Map=${_MY_PARAMS_MAP_FILE}") +endfunction(compiler_set_linker_options) diff --git a/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Porting_Guide.md b/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Porting_Guide.md index e63e86ba..1dfa30ea 100644 --- a/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Porting_Guide.md +++ b/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Porting_Guide.md @@ -100,27 +100,30 @@ The NVIC functions are CMSIS compliant. The CMSIS repository on Github is cloned | 35 | void pal_system_cold_reset(void); | Generates system cold reset | void
| | 36 | int pal_is_cold_reset(void); | Reports whether the last reset is cold reset | void
| | 37 | int pal_is_warm_reset(void); | Reports whether the last reset is warm reset | void
| -| 38 | int pal_dpm_set_access_ns_only(uint32_t index, bool_t access_ns); | This function will set the debug permission based on the input arg | index : DPM index
access_ns : TRUE - allow debug access only for non-secure address
FALSE - allow debug access to both secure and non-secure addresses
| -| 39 | int pal_mpc_configure_mem_region(addr_t mpc, addr_t start_addr,addr_t end_addr, uint32_t attr); | Allow a memory region to be configured as per attribute specified | mpc : MPC address
start_addr : Start of memory address to be configured by MPC
end_addr : End of memory address to be configured by MPC
attr : 0 - Secure, 1 - Non-secure, 2 - NSC, 3 - Configurable
| -| 40 | int pal_fuse_read(addr_t addr, uint32_t *data, uint32_t size); | Read the value of given fuse address | addr : Address of the fuse
data : Buffer to store the data
size : Number of words to be read
| -| 41 | int pal_fuse_write(addr_t addr, uint32_t *data, uint32_t size); | Write the value in given fuse address | addr : Address of the fuse
data : Data to be written
size : Number of words to write
| -| 42 | int pal_fuse_count_zeros_in_rotpk(uint32_t *zero_cnt); | Count the number of Zeros in ROTPK | zero_cnt : Buffer to store the zero count
| -| 43 | void pal_fuse_count_zeros(uint32_t value, uint32_t *zero_cnt); | Count the number of Zeros in the given value | value : Number of zeros to be determined
zero_cnt : Buffer to store the zero count
| -| 44 | int pal_fuse_get_lcs(uint32_t *pLcs); | Reads the LCS register | pLcs : Buffer to store the LCS value
| -| 45 | int pal_crypto_validate_certificate(addr_t certificate_base_addr, addr_t public_key_addr, uint32_t certificate_size, uint32_t public_key_size); | Validates the certificate using public key | certificate_base_addr : Base address of the certificate where it is stored in memory
public_key_addr : Base address of the public key where it is stored in memory
certificate_size : Certificate memory size
public_key_size : Public key memory size
| -| 46 | int pal_crypto_get_uniqueID_from_certificate(addr_t certificate_base_addr, addr_t public_key_addr, uint32_t certificate_size, uint32_t public_key_size);| Get unique ID from valid certificate using public key | certificate_base_addr : Base address of the certificate where it is stored in memory
public_key_addr : Base address of the public key where it is stored in memory
certificate_size : Certificate memory size
public_key_size : Public key memory size
| -| 47 | int pal_rtc_init(addr_t addr); | Initialize RTC | addr : Address of peripheral
| -| 48 | int pal_is_rtc_trustable(addr_t addr); | RTC validity mechanism to indicate RTC is Trusted/Non-trusted | addr : Address of peripheral
| -| 49 | int pal_is_rtc_synced_to_server(addr_t addr); | RTC validity mechanism to indicate RTC is synced with server or not | addr : Address of peripheral
| -| 50 | int pal_crypto_get_dpm_from_key(addr_t public_key_addr, uint32_t public_key_size, uint32_t *dpm_field); | Get DPM field from public key | public_key_addr : Base address of the public key where it is stored in memory
public_key_size : Public key memory size
dpm_field : Buffer to store DPM number
| -| 51 | int pal_crypto_get_dpm_from_certificate(addr_t certificate_base_addr, uint32_t certificate_size, uint32_t *dpm_field); | Get DPM field from certificate | certificate_base_addr : Base address of the certificate where it is stored in memory
certificate_size : certificate memory size
dpm_field : Buffer to store DPM number
| -| 52 | int pal_firmware_version_update(uint32_t instance, uint32_t firmware_version_type, uint32_t fw_ver_cnt); | Update the firmware version | instance : Instance of the firmware
firmware_version_type : 0 - Trusted, 1 - Non-trusted
fw_ver_cnt : Version of the firmware
| -| 53 | int pal_firmware_version_read(uint32_t instance, uint32_t firmware_version_type); | Read the firmware version | instance : Instance wf the firmware
firmware_version_type : 0 - Trusted, 1 - Non-trusted
| -| 54 | int pal_crypto_revoke_key(uint32_t index, addr_t addr, uint32_t size); | Revoke the given key | index : Index of the key
addr : Address of the key
size : Size of the key
| +| 38 | int pal_is_wdog_reset(void); | Reports whether the last reset is watch dog reset | void
| +| 39 | int pal_dpm_set_access_ns_only(uint32_t index, bool_t access_ns); | This function will set the debug permission based on the input arg | index : DPM index
access_ns : TRUE - allow debug access only for non-secure address
FALSE - allow debug access to both secure and non-secure addresses
| +| 40 | int pal_mpc_configure_mem_region(addr_t mpc, addr_t start_addr,addr_t end_addr, uint32_t attr); | Allow a memory region to be configured as per attribute specified | mpc : MPC address
start_addr : Start of memory address to be configured by MPC
end_addr : End of memory address to be configured by MPC
attr : 0 - Secure, 1 - Non-secure, 2 - NSC, 3 - Configurable
| +| 41 | int pal_fuse_read(addr_t addr, uint32_t *data, uint32_t size); | Read the value of given fuse address | addr : Address of the fuse
data : Buffer to store the data
size : Number of words to be read
| +| 42 | int pal_fuse_write(addr_t addr, uint32_t *data, uint32_t size); | Write the value in given fuse address | addr : Address of the fuse
data : Data to be written
size : Number of words to write
| +| 43 | int pal_fuse_count_zeros_in_rotpk(uint32_t *zero_cnt); | Count the number of Zeros in ROTPK | zero_cnt : Buffer to store the zero count
| +| 44 | void pal_fuse_count_zeros(uint32_t value, uint32_t *zero_cnt); | Count the number of Zeros in the given value | value : Number of zeros to be determined
zero_cnt : Buffer to store the zero count
| +| 45 | int pal_fuse_get_lcs(uint32_t *pLcs); | Reads the LCS register | pLcs : Buffer to store the LCS value
| +| 46 | int pal_crypto_validate_certificate(addr_t certificate_base_addr, addr_t public_key_addr, uint32_t certificate_size, uint32_t public_key_size); | Validates the certificate using public key | certificate_base_addr : Base address of the certificate where it is stored in memory
public_key_addr : Base address of the public key where it is stored in memory
certificate_size : Certificate memory size
public_key_size : Public key memory size
| +| 47 | int pal_crypto_get_uniqueID_from_certificate(addr_t certificate_base_addr, addr_t public_key_addr, uint32_t certificate_size, uint32_t public_key_size);| Get unique ID from valid certificate using public key | certificate_base_addr : Base address of the certificate where it is stored in memory
public_key_addr : Base address of the public key where it is stored in memory
certificate_size : Certificate memory size
public_key_size : Public key memory size
| +| 48 | int pal_rtc_init(addr_t addr); | Initialize RTC | addr : Address of peripheral
| +| 49 | int pal_is_rtc_trustable(addr_t addr); | RTC validity mechanism to indicate RTC is Trusted/Non-trusted | addr : Address of peripheral
| +| 50 | int pal_is_rtc_synced_to_server(addr_t addr); | RTC validity mechanism to indicate RTC is synced with server or not | addr : Address of peripheral
| +| 51 | int pal_crypto_get_dpm_from_key(addr_t public_key_addr, uint32_t public_key_size, uint32_t *dpm_field); | Get DPM field from public key | public_key_addr : Base address of the public key where it is stored in memory
public_key_size : Public key memory size
dpm_field : Buffer to store DPM number
| +| 52 | int pal_crypto_get_dpm_from_certificate(addr_t certificate_base_addr, uint32_t certificate_size, uint32_t *dpm_field); | Get DPM field from certificate | certificate_base_addr : Base address of the certificate where it is stored in memory
certificate_size : certificate memory size
dpm_field : Buffer to store DPM number
| +| 53 | int pal_firmware_version_update(uint32_t instance, uint32_t firmware_version_type, uint32_t fw_ver_cnt); | Update the firmware version | instance : Instance of the firmware
firmware_version_type : 0 - Trusted, 1 - Non-trusted
fw_ver_cnt : Version of the firmware
| +| 54 | int pal_firmware_version_read(uint32_t instance, uint32_t firmware_version_type); | Read the firmware version | instance : Instance wf the firmware
firmware_version_type : 0 - Trusted, 1 - Non-trusted
| +| 55 | int pal_crypto_revoke_key(uint32_t index, addr_t addr, uint32_t size); | Revoke the given key | index : Index of the key
addr : Address of the key
size : Size of the key
| +| 56 | int pal_dpm_set_state(uint32_t index, uint32_t dpm_status, uint32_t unlock_token, void *token); | This function will set the DPM state | index : DPM index
dpm_status : DPM status as per TBSA spec, can returned as logical OR of in relevant cases
DPM_LOCK_IMPLEMENTED/DPM_LOCK_VALUE
DPM_EN_IMPLEMENTED/DPM_EN_VALUE
unlock_token : unlock token in case of unlocking the DPM state
token : Pointer to passowrd or certificate or challenge response
| +| 57 | int pal_dpm_get_state(uint32_t index, uint32_t *dpm_status); | This function will get the DPM state | index : DPM index
dpm_status : DPM status as per TBSA spec, defined in dpm_status_t
| ## License Arm TBSA-v8M Architecture test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* diff --git a/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Scenario_Document.pdf b/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Scenario_Document.pdf index e26bd9f201a2ba6cd64601f40d61c28fb323c5d1..c6828e6224a7dc0a9058cb9721c9b3bd61e927cf 100755 GIT binary patch literal 546561 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%0A4G*{Xw^sjC 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
    39=6>>3>>MK;uMpOk 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
    Xr%C<*bn4kunKW$qTm`ki%6{N0ri-F0 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%0ALN|(mtw=&RbgFV^$t>H(K+lTG5KD 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 z
    *3Z_nCKBuHb_9>RtsjThOYQF1qzNmJQc#Ces8^#acrsdKgw8ulM^WGE&ZHg@o z{^MXx@pE*Ncfnac-j5(>H8@YAwk-!62j8RGiMxB*Tb>&NC1|u<7q5v~e7!arHI>@B zlncU#cj#2iX$-h}87V2yCfaN~R(F%$V|)`PzPz^OD-ssrBm*bDTHqHyD4DuJez zLt-uK<^DvzNOQdv7Pbs45o+b*P*<3NKcDIhSnCS$r&KC)VmFgf?os9ykM3sLHVhdN zEypCq`8RK$Y%RU1?wz#Y+GNeD<-~5MeMKaYOnZA08>EzSn9Hm=oHysm8QpQcU|QVZ zp;MV;P@(NiFb>ep7oI!8VMy#3GzHmDNy(adCN_mK(b%ZHhF$U9v*T^-Q;o*Oq?7q0 zEPHGM&3q9f^lKx2ry!{joAWo7nDmkyzW9F$Cl_FNEEA4^jDJB>KfecQ74tZ6spmEa5ey+!sLQNX{t2W zF8w61mfO7@m2kocy(b{Sk*Ac8Ci%=BH|hM+2o0TQ%CjWQNb&ai1Kb)+(kPan$0n)J zI>__gLo7;4Su+>cT$40QdOQ3d+RcVsnB^V4jmo>`3lGxsso>l{;@oJIABv@DVGCKl z!C!DO&rI51{tAuOdEiSmxJoKO1fM`w(+=9S_X-@b)a%+@L~>ps7GL$movLK3SM}As zIgo=hSN$vMso&ADHqiUxbag%m->`dqG75H<*MffqyA(lmT-AM#F#f5-y$}I?!Uopf zXxfi%Us}iaX_3jk;kB41@t>kX=bC&NMC%K`3}-|0S>b5y z?L9U6+q3^4U+1(W3Kt~nwr$(CZQI?uZQHhO+qP}nwr$RTaU#ym#Jt0*RTWj4UxL6^ z2kJK?4Nw8(BWPjqGm#o;2nltGZs^wj_$1@d-4S5`YT9kFodp=rN71x%On#?mptwh< zxCwXXf5|#QO~HpwuUdRxi9P1shw!2n*6|seRSqc`UC9cy0AC%OJ@0IS7!n6DCfWRn zaB6^X-0Cgac!}7N4r>V+=?9vZ#BD;nYLwpNB+@(d5fi%tkk=7|$=bx+!3tF<0q5=R zvTWGFwy23rx3s%YeFN(XRSp4tDOJ)i3sWB&TV25G%*cO2q}*5(U|&U9nt&tN=@vi! zr;a(87Jy~Fs{Q3Ul-2qG8W?FuTFD{%EBl-{O{-md;eY*n&4jrGn;U9Mvrca`#(KFj z@X^CSU}kT_yma(9G=j4Q*?IJ@xar=^_r`i{v<_T%Fwpi_0LlrWRMG zlmg#`%Vb|KXmeWirtf@JFAZrGYkB}I>8v!AHQgy@xhN8E$e#x*)&tc!z;vxVThXtp zJelF03>iWcg~aTTEi5H@6SDO4pKd-*nrGhfm_#vkKJ7Ox|? zV6x9vso4{w%WC^nv|noZp3V6R)KgNY}>>@*-NC#Ix|D` zsD(G>Au$R~00F+Vtbfy(x?`mOjuYvt4t>+5aO)>!emLHlk9QbSz!i~@jkAXje3>Ks zINAdYujm4nI*|c=&2dti3vnTr$sL^!mrleQXJEqztIEvi|0@&+0m}+pY9${ksMuE% zMTc>3RU9IdZQ&dm@moNHoMJ;Xs`;q)^mCS7wx^<{2F`I__Mgwv?b0IQ^8HyGPm*bx zf_*t_h#G*4!9Un2nXsfp<_xM%E#o5bx}l2-ihLvu*iFO`y|X^3A2V#(J=F^BHabC;!+7f)kHA{9X0!4!VpOXZA8N-mUGB4fj;7#adDget4YXO2*pI zDBY#{7`${M81saGQrYh7BJ27D9n(KnMVaPzmwk=()%42g?4Yb55oOe_S?I76a!&g% zKx|BWn)^pE1#9X&T>**h@qF+vcAYFwLN&in9}#iWxD9GCmj%eF_BLRD<$nlTx z$hTUYwl+@a`aI%qGXwp(8b(a}JlPPlN!Tj`a!7T9(@mR4y)m3>ZM8^c$xiZ;e2 z&Xs)myYjfIUS**EFpo2A>{44-CxAw0sIUT0p)lu|!+jfpMMPktIf%9_r=w`wb~U+muuuQ(absjFTyd}Sk_Ft|uuaG8!pOR$I@#sR(i zcp6@4tPq;1rWL@*{yR#FtTrh~i=NZVlUr(V^u1dl>%& zI<+a<^y6tjyz{!(GvUIJ-~rkj{@u{qZMZ^~K_T2tfOgD-z3M1l=|ziRB1N}Bbar?^ zQRS>{3t+)e%mAFiE~8b*(Yhw-U5NXAYPa>s!0O9ai!3CaTTWet7U~2~mc;>$HC({1 z_Qs>YaI}L-5;+g4-Lm8AJeLxnFFvmhqkx7=?nPfpzGIr=){mc*TukHpy0Ky8vCE%2 zK8)TGyk%hsn>^|47!K7SO`+*$0QN`rj(*(N0T2WE(HaSh$);VlU)M?c)e!ztnrLkz zme{qRNwNKRD(@)EbCoSoO9Z>Y*|pM~xNn6bYIf?ZEe(u0*7OjfP?)-7(r$Ej7v*R7>9Ro?8+wAeE{I+9V0VEv;QGkG(Sq zLSNCG77Gu_{mw7yp%_eT0~OG;ATeT0KP4o2%1$y&l*v%%Z2&}fydeWl6?6|h>Hx1) zKWB(#XAWmD4W&#D^HA4FF|u}`(|ywZhZkz}ARh$im<#@*7zoCE(iK{P4@?y?;I zGO`Eui_jh#D?T{Oj70JmmoRp@?$SFC-O`E0{941tdNX$8+(wfh(yHDx-Xg5Q*fvLN zXq2=Eo1Vj*p8cU|Uv);FyN>RXHve0jw(ewVt9pG~WW0@8<&b!0^L4<2q!B)}zOPJg zzkn_8C=FLH7X7kbVZWBnYb@8*a6WPmKU8ipPLOeLv%F-ELA#)cj|BP@FV2&^S-Y4o zd9*N(RUML=AGuntj8kQ{lkf=mSkWc5LcPPNXD&n22ecgMLnB>f!pBe6b?A^7KFEJe zen>jX-N6?7&-U*I?Dpmw6uq;m4WlCjs04^zO0;K?t%8n@o}%!3Z|-~U$)tMnEN`+Q zpRF-5hOavGs#_*>BWus}A~5OEI8>KC>TmGqJ<176)@gI{wWArSLWXCNw+Jw%GlHra z2cgOM&V4%s$J}Ih=8{;8`83ih5s3Xu)E^z#{hEpb6!#Ea6`&Pb_AKwR$&=6Q3D=hg z`9l(?q^1P(IW1SfZ2ZN<3hl83jtcjlw?uMyI;c7(Fz(#Iq`~)eXXd#3j|m!90|~xY zhjk5a^BQ(5f;v6mmbNkO;-`g871uH{=pR41Lo)b!qA$+LPn_D}ERcq>N?iQzUMDd-AVF;On0mpW$ zCgZJ>X5ZA*gbD@xb=SM=(S+nPKq5K+s(vn3dpv5x*su?U`1eELlD4g1bG?R0Kml`sCR$*r zs>xf0o+AKXMipyAk^kfJ1ug$T-fE?Y$7Le(*Lsh8n60?c;RgolNn7A@9)O#@HA)CPBo5kV~S?v`g`BYRu

    gTlxGdjC9EjlJqf0ON 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 ../out/$(TARGET)/tbsa_test_combined.hex - -check: -ifneq ($(SUITE), ) -DIRECTORY := $(subst $(comma), , $(SUITE)) -endif - -build: - $(foreach d, $(DIRECTORY), cd $d && $(MAKE) TARGET=$(TARGET) ARCH=$(ARCH) && cd ..;) - -clean: - $(foreach d, $(CLEAN_DIRECTORY), cd $d && $(MAKE) clean && cd ..;) diff --git a/tbsa-v8m/test_pool/base/Makefile b/tbsa-v8m/test_pool/base/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/base/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/base/test_b001/non_secure.c b/tbsa-v8m/test_pool/base/test_b001/non_secure.c index cea89dd5..a8b74193 100644 --- a/tbsa-v8m/test_pool/base/test_b001/non_secure.c +++ b/tbsa-v8m/test_pool/base/test_b001/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,7 @@ /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 1), CREATE_TEST_TITLE("Check Trusted and Non-trusted world asset access"), - CREATE_REF_TAG("R010/R020_TBSA_BASE-R010/R020/R030/R220_TBSA_INFRA-R040_TBSA_EIP"), + CREATE_REF_TAG("R010/R020_TBSA_BASE-R010/R020/R030/R170/R220_TBSA_INFRA-R040_TBSA_EIP"), entry_hook, test_payload, exit_hook); @@ -71,7 +71,7 @@ void test_payload(tbsa_val_api_t *val) /* Perform read access on all address regions, and a write access only when the region is marked as normal read-write */ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), @@ -95,7 +95,7 @@ void test_payload(tbsa_val_api_t *val) /* Check the status updated by handler in case a securefault occurs */ if (IS_TEST_FAIL(val->get_status())) { - val->print(PRINT_ERROR, "\n Securefault occured on reads at address 0x%x", (uint32_t)(memory_desc->start)); + val->print(PRINT_ERROR, "\n\r\tSecurefault occured on reads at address 0x%x", (uint32_t)(memory_desc->start)); return; } if (memory_desc->mem_type == TYPE_NORMAL_READ_WRITE) { @@ -103,7 +103,7 @@ void test_payload(tbsa_val_api_t *val) /* Check the status updated by handler in case a securefault occurs */ if (IS_TEST_FAIL(val->get_status())) { - val->print(PRINT_ERROR, "\n Securefault occured on writes at address 0x%x", (uint32_t)(memory_desc->start)); + val->print(PRINT_ERROR, "\n\r\tSecurefault occured on writes at address 0x%x", (uint32_t)(memory_desc->start)); return; } } @@ -111,20 +111,20 @@ void test_payload(tbsa_val_api_t *val) instance++; } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += (GET_NUM_INSTANCE(memory_desc) - 1); + if (status != TBSA_STATUS_NOT_FOUND) { + region_num += GET_NUM_INSTANCE(memory_desc); + } } status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, 0, 0), (uint8_t **)&soc_peripheral_hdr, (uint32_t *)sizeof(soc_peripheral_hdr_t)); - if (val->err_check_set(TEST_CHECKPOINT_A, status)) + if (val->err_check_set(TEST_CHECKPOINT_A, status)) { return; + } minor_id = 1; - for (per_num = 0; per_num < soc_peripheral_hdr->num; per_num++) { + for (per_num = 0; per_num < soc_peripheral_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, minor_id, instance), @@ -146,16 +146,15 @@ void test_payload(tbsa_val_api_t *val) /* Check the status updated by handler in case a securefault occurs */ if (IS_TEST_FAIL(val->get_status())) { - val->print(PRINT_ERROR, "\n Securefault occured at peripheral address 0x%x", (uint32_t)(soc_peripheral_desc->base)); + val->print(PRINT_ERROR, "\n\r\tSecurefault occured at peripheral address 0x%x", (uint32_t)(soc_peripheral_desc->base)); return; } instance++; } while (instance < GET_NUM_INSTANCE(soc_peripheral_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - per_num -= 1; - else - per_num += (GET_NUM_INSTANCE(soc_peripheral_desc)- 1); + if (status != TBSA_STATUS_NOT_FOUND) { + per_num += GET_NUM_INSTANCE(soc_peripheral_desc); + } } val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); @@ -171,6 +170,8 @@ void exit_hook(tbsa_val_api_t *val) return; } - val->interrupt_restore_handler(EXCP_NUM_HF); + status = val->interrupt_restore_handler(EXCP_NUM_HF); + if (val->err_check_set(TEST_CHECKPOINT_D, status)) { + return; + } } - diff --git a/tbsa-v8m/test_pool/base/test_b001/secure.c b/tbsa-v8m/test_pool/base/test_b001/secure.c index 5c38f8b1..7c2dad4a 100644 --- a/tbsa-v8m/test_pool/base/test_b001/secure.c +++ b/tbsa-v8m/test_pool/base/test_b001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 1), CREATE_TEST_TITLE("Check Trusted and Non-trusted world asset access"), - CREATE_REF_TAG("R010/R020_TBSA_BASE-R010/R020/R030/R220_TBSA_INFRA-R040_TBSA_EIP"), + CREATE_REF_TAG("R010/R020_TBSA_BASE-R010/R020/R030/R170/R220_TBSA_INFRA-R040_TBSA_EIP"), entry_hook, test_payload, exit_hook); @@ -89,7 +89,7 @@ void test_payload(tbsa_val_api_t *val) /* Perform read access on all address regions, and a write access only when the region is marked as normal read-write */ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), @@ -112,20 +112,20 @@ void test_payload(tbsa_val_api_t *val) instance++; } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += (GET_NUM_INSTANCE(memory_desc) - 1); + if (status != TBSA_STATUS_NOT_FOUND) { + region_num += GET_NUM_INSTANCE(memory_desc); + } } status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, 0, 0), (uint8_t **)&soc_peripheral_hdr, (uint32_t *)sizeof(soc_peripheral_hdr_t)); - if (val->err_check_set(TEST_CHECKPOINT_3, status)) + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; + } minor_id = 1; - for (per_num = 0; per_num < soc_peripheral_hdr->num; per_num++) { + for (per_num = 0; per_num < soc_peripheral_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, minor_id, instance), @@ -141,10 +141,9 @@ void test_payload(tbsa_val_api_t *val) instance++; } while (instance < GET_NUM_INSTANCE(soc_peripheral_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - per_num -= 1; - else - per_num += (GET_NUM_INSTANCE(soc_peripheral_desc) - 1); + if(status != TBSA_STATUS_NOT_FOUND) { + per_num += GET_NUM_INSTANCE(soc_peripheral_desc); + } } status = setup_ns_env(); diff --git a/tbsa-v8m/test_pool/base/test_b002/non_secure.c b/tbsa-v8m/test_pool/base/test_b002/non_secure.c index 4749c19c..974df69c 100644 --- a/tbsa-v8m/test_pool/base/test_b002/non_secure.c +++ b/tbsa-v8m/test_pool/base/test_b002/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,24 +22,20 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 2), CREATE_TEST_TITLE("Check Arm v8M security extensions and MPU implemented"), - CREATE_REF_TAG("R030_TBSA_BASE"), + CREATE_REF_TAG("R001/R002/R030_TBSA_BASE"), entry_hook, test_payload, exit_hook); -void -entry_hook(tbsa_val_api_t *val) +void entry_hook(tbsa_val_api_t *val) { val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } -void -test_payload(tbsa_val_api_t *val) +void test_payload(tbsa_val_api_t *val) { - val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } -void -exit_hook(tbsa_val_api_t *val) +void exit_hook(tbsa_val_api_t *val) { } diff --git a/tbsa-v8m/test_pool/base/test_b002/secure.c b/tbsa-v8m/test_pool/base/test_b002/secure.c index 3df4df8e..2b12e56a 100644 --- a/tbsa-v8m/test_pool/base/test_b002/secure.c +++ b/tbsa-v8m/test_pool/base/test_b002/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,19 +22,17 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 2), CREATE_TEST_TITLE("Check Arm v8M security extensions and MPU implemented"), - CREATE_REF_TAG("R030_TBSA_BASE"), + CREATE_REF_TAG("R001/R002/R030_TBSA_BASE"), entry_hook, test_payload, exit_hook); -void -entry_hook(tbsa_val_api_t *val) +void entry_hook(tbsa_val_api_t *val) { val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } -void -test_payload(tbsa_val_api_t *val) +void test_payload(tbsa_val_api_t *val) { uint32_t read_val; cpuid_t cpuid; @@ -91,7 +89,6 @@ test_payload(tbsa_val_api_t *val) } } -void -exit_hook(tbsa_val_api_t *val) +void exit_hook(tbsa_val_api_t *val) { } diff --git a/tbsa-v8m/test_pool/base/test_b005/non_secure.c b/tbsa-v8m/test_pool/base/test_b005/non_secure.c index 31559227..0da69b89 100644 --- a/tbsa-v8m/test_pool/base/test_b005/non_secure.c +++ b/tbsa-v8m/test_pool/base/test_b005/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,8 @@ #include "val_test_common.h" +#define TIMEOUT (0xFFFFFFFFUL) + /** Publish these functions to the external world as associated to this test ID **/ @@ -28,6 +30,7 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 5), exit_hook); protection_units_desc_t *prot_units_desc; +uint32_t shcsr; void entry_hook(tbsa_val_api_t *val) { @@ -40,9 +43,9 @@ void test_payload(tbsa_val_api_t *val) uint32_t data; uint32_t ppc_instance = 0UL; uint32_t mpc_instance = 0UL; + uint32_t timeout = TIMEOUT; bool_t ppc_block_found = FALSE; bool_t mpc_block_found = FALSE; - uint32_t shcsr = 0UL; /* Disabling SecureFault, UsageFault, BusFault, MemFault temporarily */ status = val->mem_reg_read(SHCSR, &shcsr); @@ -73,8 +76,15 @@ void test_payload(tbsa_val_api_t *val) /* Trying to read the device base address of a given PPC, expect fault? */ val_mem_read_wide((uint32_t *)prot_units_desc->device_base, &data); - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing PPC 0x%X from NT world!", (uint32_t)(prot_units_desc->device_base)); + val->err_check_set(TEST_CHECKPOINT_4, TBSA_STATUS_TIMEOUT); + return; + } + timeout = TIMEOUT; } while(TRUE); do { @@ -95,15 +105,16 @@ void test_payload(tbsa_val_api_t *val) /* Trying to read the device base address of a given MPC, expect fault? */ val_mem_read_wide((uint32_t *)prot_units_desc->device_base, &data); - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); - } while(TRUE); + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing MPC 0x%X from NT world!", (uint32_t)(prot_units_desc->device_base)); + val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_TIMEOUT); + return; + } - /* Restoring faults */ - status = val->mem_reg_write(SHCSR, shcsr); - if (val->err_check_set(TEST_CHECKPOINT_4, status)) { - return; - } + timeout = TIMEOUT; + } while(TRUE); if (!ppc_block_found && !mpc_block_found) { val->set_status(RESULT_SKIP(status)); @@ -116,9 +127,15 @@ void exit_hook(tbsa_val_api_t *val) { tbsa_status_t status; + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + return; + } + /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); - if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } } diff --git a/tbsa-v8m/test_pool/base/test_b005/secure.c b/tbsa-v8m/test_pool/base/test_b005/secure.c index 51e76b76..fac6b8a7 100644 --- a/tbsa-v8m/test_pool/base/test_b005/secure.c +++ b/tbsa-v8m/test_pool/base/test_b005/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,8 +33,6 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ diff --git a/tbsa-v8m/test_pool/base/test_b006/non_secure.c b/tbsa-v8m/test_pool/base/test_b006/non_secure.c index 3cb63893..ac621eea 100644 --- a/tbsa-v8m/test_pool/base/test_b006/non_secure.c +++ b/tbsa-v8m/test_pool/base/test_b006/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,8 @@ #include "val_test_common.h" +#define TIMEOUT (0xFFFFFFFFUL) + /** Publish these functions to the external world as associated to this test ID **/ @@ -48,8 +50,9 @@ void test_payload(tbsa_val_api_t *val) uint32_t data, shcsr = 0, index = 0; bool_t intrcnt_remap_found = FALSE; uint32_t intrcnt_num_inst = 0; + uint32_t timeout = TIMEOUT; - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, SOC_PERIPHERAL_INTRCNT, 0), + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, 0, 0), (uint8_t **)&soc_peripheral_hdr, (uint32_t *)sizeof(soc_peripheral_hdr_t)); if (val->err_check_set(TEST_CHECKPOINT_1, status)) { @@ -81,19 +84,27 @@ void test_payload(tbsa_val_api_t *val) index++; intrcnt_remap_found = TRUE; - val->set_status(RESULT_PENDING(1)); + val->set_status(RESULT_PENDING(status)); /* Trying to read the remap logic register in the interconnect */ val_mem_read_wide((uint32_t *)soc_peripheral_desc->base, &data); - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing Interconnect 0x%X from NT world!", \ + (uint32_t)(soc_peripheral_desc->base)); + val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_TIMEOUT); + return; + } + timeout = TIMEOUT; } restore: - /* Restoring faults */ + /* Restoring faults */ status = val->mem_reg_write(SHCSR, shcsr); - if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + if (val->err_check_set(TEST_CHECKPOINT_6, status)) { return; } @@ -110,7 +121,7 @@ void exit_hook(tbsa_val_api_t *val) /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); - if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } } diff --git a/tbsa-v8m/test_pool/base/test_b006/secure.c b/tbsa-v8m/test_pool/base/test_b006/secure.c index 277921db..1ed5a45a 100644 --- a/tbsa-v8m/test_pool/base/test_b006/secure.c +++ b/tbsa-v8m/test_pool/base/test_b006/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,8 +33,6 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ diff --git a/tbsa-v8m/test_pool/base/test_b008/non_secure.c b/tbsa-v8m/test_pool/base/test_b008/non_secure.c new file mode 100644 index 00000000..87da230e --- /dev/null +++ b/tbsa-v8m/test_pool/base/test_b008/non_secure.c @@ -0,0 +1,40 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_test_common.h" + +/** + Publish these functions to the external world as associated to this test ID +**/ +TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 8), + CREATE_TEST_TITLE("Check from default T target for IRQ originating from TW operation"), + CREATE_REF_TAG("R120_TBSA_INFRA"), + entry_hook, + test_payload, + exit_hook); + +void entry_hook(tbsa_val_api_t *val) +{ +} + +void test_payload(tbsa_val_api_t *val) +{ +} + +void exit_hook(tbsa_val_api_t *val) +{ +} diff --git a/tbsa-v8m/test_pool/base/test_b008/secure.c b/tbsa-v8m/test_pool/base/test_b008/secure.c new file mode 100644 index 00000000..d96b3b68 --- /dev/null +++ b/tbsa-v8m/test_pool/base/test_b008/secure.c @@ -0,0 +1,125 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_test_common.h" + +#define TIMEOUT (0xFFFFFFFFUL) + +/** + Publish these functions to the external world as associated to this test ID +**/ +TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_BASE_BASE, 8), + CREATE_TEST_TITLE("Check from default T target for IRQ originating from TW operation"), + CREATE_REF_TAG("R120_TBSA_INFRA"), + entry_hook, + test_payload, + exit_hook); + +tbsa_val_api_t *g_val; +soc_peripheral_hdr_t *per_hdr; +soc_peripheral_desc_t *per_desc; + +void trusted_target (void) +{ + if (IS_TEST_PENDING(g_val->get_status())) { + g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); + } + + g_val->print(PRINT_DEBUG, "\n\r\tIn Trusted target for IRQ 0x%X", per_desc->intr_id); +} + +void entry_hook(tbsa_val_api_t *val) +{ + g_val = val; + + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); +} + +void test_payload(tbsa_val_api_t *val) +{ + tbsa_status_t status; + uint32_t instance; + uint32_t per_num; + uint32_t timeout = TIMEOUT; + uint32_t minor_id = 0x1; + + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, 0, 0), + (uint8_t **)&per_hdr, + (uint32_t *)sizeof(soc_peripheral_hdr_t)); + if (val->err_check_set(TEST_CHECKPOINT_1, status)) { + return; + } + + for(per_num = 0; per_num < per_hdr->num;) { + instance = 0; + do { + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, minor_id, instance), + (uint8_t **)&per_desc, + (uint32_t *)sizeof(soc_peripheral_desc_t)); + if (val->err_check_set(TEST_CHECKPOINT_2, status)) { + return; + } + + if (per_desc->attribute == SECURE_PROGRAMMABLE) { + + /* Installing Trusted Handler */ + status = val->interrupt_setup_handler(EXCP_NUM_EXT_INT(per_desc->intr_id), 0, trusted_target); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; + } + + /* Write control bit */ + val->set_status(RESULT_PENDING(status)); + + /* SET pending bit for a given trusted timer IRQ(trusted mode) */ + status = val->interrupt_set_pending(EXCP_NUM_EXT_INT(per_desc->intr_id)); + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + return; + } + + /* stay here till trsuted target entered or timeout occurs, whichever comes early */ + while (IS_TEST_PENDING(val->get_status()) && (--timeout)); + + /* Restoring default Handler */ + status = val->interrupt_restore_handler(EXCP_NUM_EXT_INT(per_desc->intr_id)); + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + return; + } + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tInterrupt did not reach Trusted target in its default state for IRQ : 0x%X", per_desc->intr_id); + val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_TIMEOUT); + return; + } + + timeout = TIMEOUT; + } + + instance++; + } while (instance < GET_NUM_INSTANCE(per_desc)); + minor_id++; + if (status != TBSA_STATUS_NOT_FOUND) { + per_num += GET_NUM_INSTANCE(per_desc); + } + } + + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); +} + +void exit_hook(tbsa_val_api_t *val) +{ +} diff --git a/tbsa-v8m/test_pool/boot/Makefile b/tbsa-v8m/test_pool/boot/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/boot/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/crypto/Makefile b/tbsa-v8m/test_pool/crypto/Makefile deleted file mode 100644 index 5879537f..00000000 --- a/tbsa-v8m/test_pool/crypto/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/crypto/test_c001/secure.c b/tbsa-v8m/test_pool/crypto/test_c001/secure.c index 9ec5444c..eb611eab 100644 --- a/tbsa-v8m/test_pool/crypto/test_c001/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,7 +23,7 @@ tbsa_val_api_t *g_val; uint8_t g_key[KEY_SIZE] = {0}, g_key_save[KEY_SIZE] = {0}; soc_peripheral_hdr_t *soc_peripheral_hdr; -soc_peripheral_desc_t *soc_peripheral_desc; +soc_peripheral_desc_t *soc_peripheral_desc = NULL; bool_t s_timer_present = 0; int g_exception_taken = 0, g_reinit_taken = 0; clocks_desc_t *clocks_desc; @@ -201,7 +201,7 @@ void test_payload(tbsa_val_api_t *val) } else { val->set_status(RESULT_SKIP(1)); - val->print(PRINT_ERROR, "\nUnable to receive any interrupts", 0); + val->print(PRINT_ERROR, "\n\r\tUnable to receive any interrupts", 0); return; } } @@ -211,7 +211,7 @@ void test_payload(tbsa_val_api_t *val) for(i=0; ierr_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nKey generation from secure state was interrupted", 0); + val->print(PRINT_ERROR, "\n\r\tKey generation from secure state was interrupted", 0); return; } else { val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); @@ -223,6 +223,8 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { - val->interrupt_disable(EXCP_NUM_EXT_INT(soc_peripheral_desc->intr_id)); - val->timer_disable(soc_peripheral_desc->base); + if (soc_peripheral_desc != NULL) { + val->interrupt_disable(EXCP_NUM_EXT_INT(soc_peripheral_desc->intr_id)); + val->timer_disable(soc_peripheral_desc->base); + } } diff --git a/tbsa-v8m/test_pool/crypto/test_c002/secure.c b/tbsa-v8m/test_pool/crypto/test_c002/secure.c index 565a2444..b3690aa4 100644 --- a/tbsa-v8m/test_pool/crypto/test_c002/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c002/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -65,12 +65,12 @@ void test_payload(tbsa_val_api_t *val) case ECC: if (key_desc->size >= TBSA_ROTPK_ECC_SIZE) { - status = val->fuse_ops(FUSE_READ, key_desc->addr, key, key_desc->size); + status = val->fuse_ops(FUSE_READ, key_desc->addr, key, MIN(TBSA_ROTPK_RSA_SIZE, key_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; } - status = val->crypto_validate_public_key(ECC, key, key_desc->size, key_desc->addr, &key_valid); + status = val->crypto_validate_public_key(ECC, key, MIN(TBSA_ROTPK_RSA_SIZE, key_desc->size), key_desc->addr, &key_valid); if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; } @@ -80,8 +80,9 @@ void test_payload(tbsa_val_api_t *val) else val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_ZERO_COUNT_ERROR); - } else + } else { val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_INCORRECT_KEY_SIZE); + } break; case RSA: if (key_desc->size >= TBSA_ROTPK_RSA_SIZE) { @@ -105,38 +106,33 @@ void test_payload(tbsa_val_api_t *val) break; default: switch (key_desc->type & SYM_MSK) { - case HASH: - status = val->fuse_ops(FUSE_READ, key_desc->addr, data1, key_desc->size); - if (val->err_check_set(TEST_CHECKPOINT_B, status)) { - return; - } - - /*Try corrupting the hash by writing some random data.*/ - status = val->fuse_ops(FUSE_WRITE, key_desc->addr, data2, key_desc->size); - if (val->err_check_set(TEST_CHECKPOINT_C, status)) { - val->print(PRINT_ERROR, "\n Write Failed", 0); - return; - } + case HASH: + status = val->fuse_ops(FUSE_READ, key_desc->addr, data1, MIN(MAX_HASH_SIZE, key_desc->size)); + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + return; + } - status = val->fuse_ops(FUSE_READ, key_desc->addr, data2, key_desc->size); - if (val->err_check_set(TEST_CHECKPOINT_D, status)) { - val->print(PRINT_ERROR, "\n Read Failed", 0); - return; - } + /* Try corrupting the hash by writing some random data.*/ + val->fuse_ops(FUSE_WRITE, key_desc->addr, data2, MIN(MAX_HASH_SIZE, key_desc->size)); - for(i=0; isize; i++) { - if(data1[i] != data2[i]) { - val->err_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\n HASH of ROTPK was not immutable", 0); + status = val->fuse_ops(FUSE_READ, key_desc->addr, data2, MIN(MAX_HASH_SIZE, key_desc->size)); + if (val->err_check_set(TEST_CHECKPOINT_C, status)) { return; - } else { - val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } - } - break; - default: - val->print(PRINT_ERROR, "\n No ROTPK was found in the system", 0); - val->err_check_set(TEST_CHECKPOINT_F, TBSA_STATUS_NOT_FOUND); + + for(i=0; i< MIN(MAX_HASH_SIZE, key_desc->size); i++) { + if(data1[i] != data2[i]) { + val->err_check_set(TEST_CHECKPOINT_D, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tHASH of ROTPK was not immutable", 0); + return; + } else { + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); + } + } + break; + default: + val->print(PRINT_ERROR, "\n\r\tNo ROTPK was found in the system", 0); + val->err_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_NOT_FOUND); } } return; @@ -145,4 +141,3 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { } - diff --git a/tbsa-v8m/test_pool/crypto/test_c003/non_secure.c b/tbsa-v8m/test_pool/crypto/test_c003/non_secure.c index 8409ec89..8ac3c52f 100644 --- a/tbsa-v8m/test_pool/crypto/test_c003/non_secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c003/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +18,7 @@ #include "val_test_common.h" #define KEY_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 3), CREATE_TEST_TITLE("HUK should be in Confidential-Lockable-Bulk fuses, accessible only to TW"), @@ -26,7 +27,8 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 3), test_payload, exit_hook); -uint32_t shcsr; +memory_desc_t *nvram_desc; +uint32_t shcsr; void entry_hook(tbsa_val_api_t *val) { @@ -56,61 +58,95 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t i, instance = 0; - uint32_t key[KEY_SIZE] = {0}, key_ns[KEY_SIZE] = {0}; key_desc_t *key_info_huk; + boot_t boot; + uint32_t instance = 0; + uint32_t key[KEY_SIZE]; - status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); if (val->err_check_set(TEST_CHECKPOINT_A, status)) { - goto exit; + return; } - status = val->crypto_get_key_info((key_desc_t **)&key_info_huk, HUK, &instance); + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); if (val->err_check_set(TEST_CHECKPOINT_B, status)) { - goto exit; + return; } - if ((key_info_huk->state & FUSE_OPEN) == FUSE_OPEN) { - status = val->fuse_ops(FUSE_READ, key_info_huk->addr, key, key_info_huk->size); + if (boot.wb != WARM_BOOT_REQUESTED) { + + boot.wb = WARM_BOOT_REQUESTED; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); if (val->err_check_set(TEST_CHECKPOINT_C, status)) { - goto exit; + return; } - val_crypto_set_base_addr(NONSECURE_PROGRAMMABLE); - - /* Setup secure fault handler is setup, in secure version of the test to recover from - exception caused by accessing Trusted only accessible key.*/ - status = val_fuse_ops(FUSE_READ, key_info_huk->addr, key_ns, key_info_huk->size); + status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); if (val->err_check_set(TEST_CHECKPOINT_D, status)) { - goto exit; + return; } - for(i = 0; i < key_info_huk->size; i++) { - if (key[i] == key_ns[i]) { - val->print(PRINT_ERROR, "\n HUK was accessible by non-Trusted code", 0); - val->err_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_ERROR); - goto exit; - } + status = val->crypto_get_key_info((key_desc_t **)&key_info_huk, HUK, &instance); + if (val->err_check_set(TEST_CHECKPOINT_E, status)) { + return; } - } else { - val->print(PRINT_INFO, "\n HUK is not open", 0); - val->set_status(RESULT_SKIP(1)); - goto exit; + + /* Setup secure fault handler is setup, in secure version of the test to recover from + exception caused by accessing Trusted only accessible key.*/ + status = val_fuse_ops(FUSE_READ, key_info_huk->addr, key, MIN(KEY_SIZE, key_info_huk->size)); + + /* Shouldn't come here */ + val->print(PRINT_ERROR, "\n\r\tFault didn't occur when HUK accessed from Non-secure world!", 0); + asm volatile ("DSB"); + asm volatile ("ISB"); + val->system_reset(WARM_RESET); } +} - val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); +void exit_hook(tbsa_val_api_t *val) +{ + tbsa_status_t status; + boot_t boot; + uint32_t active_test; -exit: - /* Restoring faults */ - status = val->mem_reg_write(SHCSR, shcsr); + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); if (val->err_check_set(TEST_CHECKPOINT_F, status)) { return; } -} + active_test = 0xFFFFFFFFUL; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_10, status)) { + return; + } -void exit_hook(tbsa_val_api_t *val) -{ - val->interrupt_restore_handler(EXCP_NUM_HF); -} + boot.wb = BOOT_UNKNOWN; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_11, status)) { + return; + } + if (IS_TEST_PASS(val->get_status())) + { + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); + if (val->err_check_set(TEST_CHECKPOINT_12, status)) { + return; + } + + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_13, status)) { + return; + } + } + + /* Restoring default Handler */ + status = val->interrupt_restore_handler(EXCP_NUM_HF); + if (val->err_check_set(TEST_CHECKPOINT_14, status)) { + return; + } +} diff --git a/tbsa-v8m/test_pool/crypto/test_c003/secure.c b/tbsa-v8m/test_pool/crypto/test_c003/secure.c index 52f0660c..213004f0 100644 --- a/tbsa-v8m/test_pool/crypto/test_c003/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c003/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +18,7 @@ #include "val_test_common.h" #define KEY_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 3), CREATE_TEST_TITLE("HUK should be in Confidential-Lockable-Bulk fuses, accessible only to TW"), @@ -28,6 +29,7 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 3), tbsa_val_api_t *g_val; +memory_desc_t *nvram_desc; void entry_hook(tbsa_val_api_t *val) { @@ -43,11 +45,15 @@ void entry_hook(tbsa_val_api_t *val) void hard_fault_esr (unsigned long *sf_args) { - g_val->print(PRINT_INFO, "\nHardFault triggered when HUK was accessed from" + g_val->print(PRINT_DEBUG, "\n\r\tHardFault triggered when HUK was accessed from" "non-Trusted world", 0); - /* Updating the return address in the stack frame in order to avoid periodic fault */ - sf_args[6] = sf_args[6] + 4; + asm volatile("DSB"); + asm volatile("ISB"); + + g_val->system_reset(WARM_RESET); + + while(1); } __attribute__((naked)) @@ -65,59 +71,83 @@ void HF_Handler(void) "b hard_fault_esr \n"); } -tbsa_status_t setup_ns_env(void) -{ - return g_val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); -} - void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t expected_fuse_type, i, instance = 0; - uint32_t key[KEY_SIZE]; key_desc_t *key_info_huk; + uint32_t expected_fuse_type, instance = 0; + uint32_t key[KEY_SIZE]; + uint32_t active_test; + uint32_t key_mask; + uint32_t result; + uint32_t i; g_val = val; - status = setup_ns_env(); - if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); + if (val->err_check_set(TEST_CHECKPOINT_1, status)) { return; } - status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); if (val->err_check_set(TEST_CHECKPOINT_1, status)) { return; } - status = val->crypto_get_key_info(&key_info_huk, HUK, &instance); + if (active_test == TBSA_NS_TEST_ACTIVE) { + /* Non-secure is active - so skipping Secure test */ + return; + } + + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); if (val->err_check_set(TEST_CHECKPOINT_2, status)) { return; } + status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; + } + + status = val->crypto_get_key_info(&key_info_huk, HUK, &instance); + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + return; + } + expected_fuse_type = FUSE_CONFIDENTIAL | FUSE_BULK | FUSE_LOCKABLE; if ((key_info_huk->type & expected_fuse_type) != expected_fuse_type) { - val->print(PRINT_ERROR, "\n Fuse type in which HUK stored is non-compliant", 0); - val->print(PRINT_ERROR, "\n Fuse type %x", key_info_huk->type); - val->print(PRINT_ERROR, "\n Expected Fuse type %x", expected_fuse_type); - val->err_check_set(TEST_CHECKPOINT_3, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tFuse type in which HUK stored is non-compliant", 0); + val->print(PRINT_ERROR, "\n\r\tFuse type %x", key_info_huk->type); + val->print(PRINT_ERROR, "\n\r\tExpected Fuse type %x", expected_fuse_type); + val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_ERROR); return; } if ((key_info_huk->state & FUSE_OPEN) == FUSE_OPEN) { - status = val->fuse_ops(FUSE_READ, key_info_huk->addr, key, key_info_huk->size); - if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + status = val->fuse_ops(FUSE_READ, key_info_huk->addr, key, MIN(KEY_SIZE, key_info_huk->size)); + if (val->err_check_set(TEST_CHECKPOINT_6, status)) { return; } - for (i = 0; i < key_info_huk->size; i++) { + result = 0; + key_mask = 0; + /* check whether key holds the default value, if so warn ! */ + for (i = 0; i < MIN(KEY_SIZE, key_info_huk->size); i++) { if (key[i] == key_info_huk->def_val) { - val->print(PRINT_ERROR, "\n Incorrect HUK", 0); - val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_ERROR); - return; + result |= (1U << i); } + key_mask |= (1U << i); + } + + if (result == key_mask) { + val->print(PRINT_ALWAYS, "\n\r\tHUK having the default value : %X", key_info_huk->def_val); } + } else { - val->print(PRINT_ERROR, "\n HUK is not open", 0); + val->print(PRINT_ALWAYS, "\n\r\tHUK is not open", 0); val->set_status(RESULT_SKIP(1)); return; } @@ -127,5 +157,12 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { -} + tbsa_status_t status; + uint32_t active_test; + active_test = TBSA_NS_TEST_ACTIVE; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + return; + } +} diff --git a/tbsa-v8m/test_pool/crypto/test_c004/secure.c b/tbsa-v8m/test_pool/crypto/test_c004/secure.c index 935bb8c0..be9c5c46 100644 --- a/tbsa-v8m/test_pool/crypto/test_c004/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c004/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,9 +44,10 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t data, expected_fuse_type, i, instance = 0; + uint32_t expected_fuse_type, i, instance = 0; uint32_t key[KEY_SIZE]; - uint32_t rd_data[KEY_SIZE], wr_data[KEY_SIZE] = {0xFFFFFFFF}; + uint32_t rd_data[KEY_SIZE], wr_data[KEY_SIZE]; + uint32_t key_mask, result; key_desc_t *key_info_static; bool_t key_present = FALSE; @@ -55,10 +56,13 @@ void test_payload(tbsa_val_api_t *val) return; } + val->memset(wr_data, 0xFF, sizeof(wr_data)/sizeof(uint32_t)); + do { status = val->crypto_get_key_info(&key_info_static, STATIC, &instance); if (status != TBSA_STATUS_SUCCESS && key_present == FALSE) { - val->err_check_set(TEST_CHECKPOINT_2, status); + val->print(PRINT_ALWAYS, "\n\r\tStatic key is not available to check", 0); + val->set_status(RESULT_SKIP(status)); return; } @@ -69,61 +73,53 @@ void test_payload(tbsa_val_api_t *val) key_present = TRUE; expected_fuse_type = FUSE_BULK | FUSE_LOCKABLE; if ((key_info_static->type & expected_fuse_type) != expected_fuse_type) { - val->print(PRINT_ERROR, "\n Fuse type in which static key stored is non-compliant", 0); - val->print(PRINT_ERROR, "\n Fuse type %x", key_info_static->type); - val->print(PRINT_ERROR, "\n Expected Fuse type %x", expected_fuse_type); - val->err_check_set(TEST_CHECKPOINT_3, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tFuse type in which static key stored is non-compliant", 0); + val->print(PRINT_ERROR, "\n\r\tFuse type %x", key_info_static->type); + val->print(PRINT_ERROR, "\n\r\tExpected Fuse type %x", expected_fuse_type); + val->err_check_set(TEST_CHECKPOINT_2, TBSA_STATUS_ERROR); return; } if ((key_info_static->state & FUSE_OPEN) == FUSE_OPEN) { - status = val->fuse_ops(FUSE_READ, key_info_static->addr, key, key_info_static->size); - if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + status = val->fuse_ops(FUSE_READ, key_info_static->addr, key, MIN(KEY_SIZE, key_info_static->size)); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; } - if (key_info_static->def_val == 0) { - data = 0; - /* Check that the static key is non-zero*/ - for(i = 0; i < key_info_static->size; i++) - data += key[i]; - - if (!data) { - val->print(PRINT_ERROR, "\n Incorrect Static Key", 0); - val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_ERROR); - return; - } - } else { - for (i = 0; i < key_info_static->size; i++) { - wr_data[i] = 0; - /* Check that the static key is not equal to default value */ - if (key[i] == key_info_static->def_val) { - val->print(PRINT_ERROR, "\n Incorrect HUK", 0); - val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_ERROR); - return; - } + result = 0; + key_mask = 0; + /* check whether key holds the default value, if so warn ! */ + for (i = 0; i < MIN(KEY_SIZE, key_info_static->size); i++) { + if (key[i] == key_info_static->def_val) { + result |= (1U << i); } + key_mask |= (1U << i); + } + + if (result == key_mask) { + val->print(PRINT_ALWAYS, "\n\r\tStatic key having the default value : %X", key_info_static->def_val); } - status = val->fuse_ops(FUSE_WRITE, key_info_static->addr, wr_data, key_info_static->size); - if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + status = val->fuse_ops(FUSE_WRITE, key_info_static->addr, wr_data, MIN(KEY_SIZE, key_info_static->size)); + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; } - status = val->fuse_ops(FUSE_READ, key_info_static->addr, rd_data, key_info_static->size); - if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + status = val->fuse_ops(FUSE_READ, key_info_static->addr, rd_data, MIN(KEY_SIZE, key_info_static->size)); + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } - for (i = 0; i < key_info_static->size; i++) { + for (i = 0; i < MIN(KEY_SIZE, key_info_static->size); i++) { if (key[i] != rd_data[i]) { - val->print(PRINT_ERROR, "\n Able to modify static key", 0); - val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tAble to modify static key", 0); + val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_ERROR); return; } } } else { - val->print(PRINT_INFO, "\n Static key is not open", 0); + val->set_status(RESULT_SKIP(status)); + val->print(PRINT_ALWAYS, "\n\r\tStatic key %d is not open", instance); } instance++; diff --git a/tbsa-v8m/test_pool/crypto/test_c005/non_secure.c b/tbsa-v8m/test_pool/crypto/test_c005/non_secure.c index 24922dad..55d8bb01 100644 --- a/tbsa-v8m/test_pool/crypto/test_c005/non_secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c005/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,4 +36,3 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { } - diff --git a/tbsa-v8m/test_pool/crypto/test_c005/secure.c b/tbsa-v8m/test_pool/crypto/test_c005/secure.c index 9369d586..1aad5b53 100644 --- a/tbsa-v8m/test_pool/crypto/test_c005/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c005/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +17,7 @@ #include "val_test_common.h" -#define KEY_SIZE 32 +#define KEY_SIZE 32 /* 32*32 = 1024 bits = 1K */ /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 5), @@ -45,8 +45,13 @@ void test_payload(tbsa_val_api_t *val) tbsa_status_t status; fuse_desc_t *fuse_desc; uint32_t i; - uint32_t rd_data1[KEY_SIZE] = {0}, rd_data2[KEY_SIZE] = {0}; - uint32_t wr_data1[KEY_SIZE] = {0}, wr_data2[KEY_SIZE] = {0xF0F0F0F0}; + uint32_t rd_data1[KEY_SIZE], rd_data2[KEY_SIZE]; + uint32_t wr_data1[KEY_SIZE], wr_data2[KEY_SIZE]; + + val->memset(rd_data1, 0x0, sizeof(rd_data1)/sizeof(uint32_t)); + val->memset(rd_data2, 0x0, sizeof(rd_data2)/sizeof(uint32_t)); + val->memset(wr_data1, 0x0, sizeof(wr_data1)/sizeof(uint32_t)); + val->memset(wr_data2, 0xF0, sizeof(wr_data2)/sizeof(uint32_t)); status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); if (val->err_check_set(TEST_CHECKPOINT_1, status)) { @@ -59,41 +64,41 @@ void test_payload(tbsa_val_api_t *val) } if (fuse_desc->def_val == 0) { - for (i = 0; i < fuse_desc->size; i++) + for (i = 0; i < MIN(KEY_SIZE, fuse_desc->size); i++) wr_data1[i] = 0xFFFFFFFF; } - status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data1, fuse_desc->size); + status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data1, MIN(KEY_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data1, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data1, MIN(KEY_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(KEY_SIZE, fuse_desc->size); i++) { if (rd_data1[i] != wr_data1[i]) { val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_WRITE_ERROR); return; } } - status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data2, fuse_desc->size); + status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data2, MIN(KEY_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_6, status)) { return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data2, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data2, MIN(KEY_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(KEY_SIZE, fuse_desc->size); i++) { if (rd_data2[i] != rd_data1[i]) { - val->print(PRINT_ERROR, "\n Able to modify programmable bits", 0); + val->print(PRINT_ERROR, "\n\r\tAble to modify programmed bits", 0); val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_ERROR); return; } @@ -105,4 +110,3 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { } - diff --git a/tbsa-v8m/test_pool/crypto/test_c006/non_secure.c b/tbsa-v8m/test_pool/crypto/test_c006/non_secure.c index 0e7e4e5c..e29faf5b 100644 --- a/tbsa-v8m/test_pool/crypto/test_c006/non_secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c006/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,8 @@ #include "val_test_common.h" +#define KEY_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 6), CREATE_TEST_TITLE("A Trusted HK must not be directly accessible by any software."), @@ -25,15 +27,190 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 6), test_payload, exit_hook); +memory_desc_t *nvram_desc; + void entry_hook(tbsa_val_api_t *val) { + tbsa_test_init_t init = { + .bss_start = &__tbsa_test_bss_start__, + .bss_end = &__tbsa_test_bss_end__ + }; + + val->test_initialize(&init); + + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } void test_payload(tbsa_val_api_t *val) { + tbsa_status_t status; + key_desc_t *key_info_trust; + boot_t boot; + uint32_t key[KEY_SIZE]; + uint32_t instance; + uint32_t trusted_hw_key_found; + uint32_t shcsr; + + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); + if (val->err_check_set(TEST_CHECKPOINT_1, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_2, status)) { + return; + } + + if (boot.wb != WARM_BOOT_REQUESTED) { + + instance = 0x0; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; + } + + trusted_hw_key_found = 0x0; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + return; + } + } + + status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + return; + } + + status = val->crypto_get_key_info((key_desc_t **)&key_info_trust, TRUST, &instance); + if ((status != TBSA_STATUS_SUCCESS) && (!trusted_hw_key_found)) { + val->err_check_set(TEST_CHECKPOINT_8, status); + return; + } + if (status != TBSA_STATUS_SUCCESS) { + return; + } + + /* Writing next instance value into nvram */ + ++instance; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_9, status)) { + return; + } + + status = val->mem_reg_read(SHCSR, &shcsr); + if (val->err_check_set(TEST_CHECKPOINT_A, status)) { + return; + } + + if (boot.wb != WARM_BOOT_REQUESTED) { + /* Write WARM_BOOT_REQUESTED only for the first instance found */ + boot.wb = WARM_BOOT_REQUESTED; + /* Saving the boot state */ + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + return; + } + + trusted_hw_key_found = 0x1; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_C, status)) { + return; + } + + + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); + if (val->err_check_set(TEST_CHECKPOINT_D, status)) { + return; + } + } + + /* Disabling SecureFault, UsageFault, BusFault, MemFault temporarily */ + status = val->mem_reg_write(SHCSR, (shcsr & ~0xF0000)); + if (val->err_check_set(TEST_CHECKPOINT_E, status)) { + return; + } + + /* Read key in Non-secure mode - exepct fault ? */ + status = val_fuse_ops(FUSE_READ, key_info_trust->addr, key, MIN(KEY_SIZE, key_info_trust->size)); + if (val->err_check_set(TEST_CHECKPOINT_F, status)) { + return; + } + + /* Control shouldn't come here */ + val->print(PRINT_ERROR, "\n\r\tFault didn't occur when Trusted HW Key accessed from Non-secure world!", 0); + asm volatile ("DSB"); + asm volatile ("ISB"); + val->system_reset(WARM_RESET); } void exit_hook(tbsa_val_api_t *val) { -} + tbsa_status_t status; + boot_t boot; + uint32_t active_test; + uint32_t default_val; + uint32_t shcsr; + + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); + if (val->err_check_set(TEST_CHECKPOINT_10, status)) { + return; + } + active_test = 0xFFFFFFFFUL; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_11, status)) { + return; + } + + /* Restoring the state */ + boot.wb = BOOT_UNKNOWN; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_12, status)) { + return; + } + + if (IS_TEST_PASS(val->get_status())) + { + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); + if (val->err_check_set(TEST_CHECKPOINT_13, status)) { + return; + } + + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_14, status)) { + return; + } + } + + /* Restoring default Handler */ + status = val->interrupt_restore_handler(EXCP_NUM_HF); + if (val->err_check_set(TEST_CHECKPOINT_15, status)) { + return; + } + + default_val = 0xFFFFFFFFUL; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &default_val, sizeof(default_val)); + if (val->err_check_set(TEST_CHECKPOINT_16, status)) { + return; + } + + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &default_val, sizeof(default_val)); + if (val->err_check_set(TEST_CHECKPOINT_17, status)) { + return; + } +} diff --git a/tbsa-v8m/test_pool/crypto/test_c006/secure.c b/tbsa-v8m/test_pool/crypto/test_c006/secure.c index e90f52f8..28060e57 100644 --- a/tbsa-v8m/test_pool/crypto/test_c006/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c006/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,6 +27,36 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 6), test_payload, exit_hook); +tbsa_val_api_t *g_val; +memory_desc_t *nvram_desc; + +void hard_fault_esr (unsigned long *sf_args) +{ + /* check agianst case 3 */ + g_val->print(PRINT_ALWAYS, "\n\r\tHardFault triggered when HUK was accessed from software", 0); + + /* Issue system warm reset */ + g_val->system_reset(WARM_RESET); + + /* Shouldn't come here */ + while(1); +} + +__attribute__((naked)) +void HF_Handler(void) +{ + asm volatile("mrs r0, control_ns \n" + "mov r1, #0x2 \n" + "and r0, r1 \n" + "cmp r0, r1 \n" + "beq _psp_ns \n" + "mrs r0, msp_ns \n" + "b hard_fault_esr \n" + "_psp_ns: \n" + "mrs r0, psp_ns \n" + "b hard_fault_esr \n"); +} + void entry_hook(tbsa_val_api_t *val) { tbsa_test_init_t init = { @@ -34,6 +64,8 @@ void entry_hook(tbsa_val_api_t *val) .bss_end = &__tbsa_test_bss_end__ }; + g_val = val; + val->test_initialize(&init); val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); @@ -43,47 +75,203 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; + key_desc_t *key_info_trust; uint32_t i, instance = 0; uint32_t key[KEY_SIZE]; - key_desc_t *key_info_trust; - bool_t key_present = FALSE; + uint32_t shcsr; + uint32_t trusted_hw_key_found; + uint32_t active_test; + boot_t boot; + bool_t check_done = FALSE; - status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), + (uint8_t **)&nvram_desc, + (uint32_t *)sizeof(memory_desc_t)); if (val->err_check_set(TEST_CHECKPOINT_1, status)) { return; } do { + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_2, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; + } + + if (active_test == TBSA_NS_TEST_ACTIVE) { + /* Non-secure is active - so skipping Secure test */ + return; + } + + if (boot.wb != WARM_BOOT_REQUESTED) { + instance = 0x0; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + return; + } + + trusted_hw_key_found = 0x0; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + return; + } + + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); + if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + return; + } + + active_test = TBSA_S_TEST_ACTIVE; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + return; + } + } + + status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); + if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_9, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_A, status)) { + return; + } + status = val->crypto_get_key_info((key_desc_t **)&key_info_trust, TRUST, &instance); - if (status != TBSA_STATUS_SUCCESS && key_present == FALSE) { - val->err_check_set(TEST_CHECKPOINT_2, status); + if ((status != TBSA_STATUS_SUCCESS) && (!trusted_hw_key_found)) { + val->print(PRINT_ALWAYS, "\n\r\tTrusted HW Key is not available to check", 0); + val->set_status(RESULT_SKIP(status)); + return; + } + if (status != TBSA_STATUS_SUCCESS) { return; } - if (status != TBSA_STATUS_SUCCESS) + /* Writing next instance value into nvram */ + ++instance; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { return; + } - key_present = TRUE; - status = val->fuse_ops(FUSE_READ, key_info_trust->addr, key, key_info_trust->size); - if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + status = val->mem_reg_read(SHCSR, &shcsr); + if (val->err_check_set(TEST_CHECKPOINT_C, status)) { return; } - for (i = 0; i < key_info_trust->size; i++) { - if (key[i] != key_info_trust->def_val) { - val->print(PRINT_ERROR, "\n Trusted key is accessible", 0); - val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_ERROR); + if (boot.wb != WARM_BOOT_REQUESTED) { + /* Write WARM_BOOT_REQUESTED only for the first instance found */ + boot.wb = WARM_BOOT_REQUESTED; + /* Saving the boot state */ + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_D, status)) { return; } + + trusted_hw_key_found = 0x1; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD2), &trusted_hw_key_found, sizeof(trusted_hw_key_found)); + if (val->err_check_set(TEST_CHECKPOINT_E, status)) { + return; + } + + + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); + if (val->err_check_set(TEST_CHECKPOINT_F, status)) { + return; + } + } + + /* Disabling SecureFault, UsageFault, BusFault, MemFault temporarily */ + status = val->mem_reg_write(SHCSR, (shcsr & ~0xF0000)); + if (val->err_check_set(TEST_CHECKPOINT_10, status)) { + return; + } + + + /* Initializing the key buffer with known value - zero */ + val->memset((void*)key, 0x0, MIN(KEY_SIZE, key_info_trust->size)); + + /* Three things can happen: + * 1. Returns error status + * 2. Reads the key + * 3. Fault may occur + */ + status = val->fuse_ops(FUSE_READ, key_info_trust->addr, key, MIN(KEY_SIZE, key_info_trust->size)); + if (status != TBSA_STATUS_SUCCESS) { + for (i=0; i < MIN(KEY_SIZE, key_info_trust->size); i++) { + if(key[i] != 0) { + /* Checks against case 1 */ + val->print(PRINT_ERROR, "\n\r\tTrusted key is accessible", 0); + val->err_check_set(TEST_CHECKPOINT_11, TBSA_STATUS_ERROR); + return; + } + } + check_done = TRUE; + val->print(PRINT_DEBUG, "\n\r\tfuse_read returned error status without updating the key buffer", 0); } - instance++; - } while (instance < GET_NUM_INSTANCE(key_info_trust)); + if(!check_done) { + for (i = 0; i < MIN(KEY_SIZE, key_info_trust->size); i++) { + if (key[i] != 0x0) { + /* Checks against case 2 */ + val->print(PRINT_ERROR, "\n\r\tTrusted key is accessible", 0); + val->err_check_set(TEST_CHECKPOINT_12, TBSA_STATUS_ERROR); + return; + } + } + val->print(PRINT_DEBUG, "\n\r\tfuse_read returned success status and key buffer is zero", 0); + } + }while(instance < GET_NUM_INSTANCE(key_info_trust)); val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } void exit_hook(tbsa_val_api_t *val) { -} + tbsa_status_t status; + uint32_t shcsr = 0UL; + uint32_t active_test; + boot_t boot; + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_13, status)) { + return; + } + + if (active_test == TBSA_S_TEST_ACTIVE) { + + active_test = TBSA_NS_TEST_ACTIVE; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if (val->err_check_set(TEST_CHECKPOINT_14, status)) { + return; + } + /* Restoring the state */ + boot.wb = BOOT_UNKNOWN; + status = val->nvram_write(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); + if (val->err_check_set(TEST_CHECKPOINT_15, status)) { + return; + } + + status = val->nvram_read(nvram_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); + if (val->err_check_set(TEST_CHECKPOINT_16, status)) { + return; + } + + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_17, status)) { + return; + } + } +} diff --git a/tbsa-v8m/test_pool/crypto/test_c007/non_secure.c b/tbsa-v8m/test_pool/crypto/test_c007/non_secure.c index d63db46a..9a1caff8 100644 --- a/tbsa-v8m/test_pool/crypto/test_c007/non_secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c007/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 7), CREATE_TEST_TITLE("A confidential hardware IP fuse must not be readable by any software"), - CREATE_REF_TAG("R080/R090_TBSA_KEY"), + CREATE_REF_TAG("R080/R090_TBSA_FUSE"), entry_hook, test_payload, exit_hook); diff --git a/tbsa-v8m/test_pool/crypto/test_c007/secure.c b/tbsa-v8m/test_pool/crypto/test_c007/secure.c index ddb7f52b..9a39b69c 100644 --- a/tbsa-v8m/test_pool/crypto/test_c007/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c007/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -68,6 +68,8 @@ void test_payload(tbsa_val_api_t *val) boot_t boot; uint32_t shcsr = 0UL; + val->memset(key, 0x0, sizeof(key)/sizeof(uint32_t)); + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); @@ -113,14 +115,14 @@ void test_payload(tbsa_val_api_t *val) return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, key, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, key, MIN(KEY_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_A, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(KEY_SIZE, fuse_desc->size); i++) { if (key[i] != fuse_desc->def_val) { - val->print(PRINT_ERROR, "\n Able to read the confidential fuse", 0); + val->print(PRINT_ERROR, "\n\r\tAble to read the confidential fuse", 0); val->err_check_set(TEST_CHECKPOINT_C, TBSA_STATUS_ERROR); return; } diff --git a/tbsa-v8m/test_pool/crypto/test_c008/secure.c b/tbsa-v8m/test_pool/crypto/test_c008/secure.c index 134826e3..f1ea5af6 100644 --- a/tbsa-v8m/test_pool/crypto/test_c008/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c008/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -63,7 +63,7 @@ void test_payload(tbsa_val_api_t *val) return; key_present = TRUE; - status = val->fuse_ops(FUSE_READ, key_info_rev->addr, key, key_info_rev->size); + status = val->fuse_ops(FUSE_READ, key_info_rev->addr, key, MIN(KEY_SIZE, key_info_rev->size)); if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; } @@ -71,18 +71,18 @@ void test_payload(tbsa_val_api_t *val) if (key_info_rev->def_val == 0) { data = 0; /* Check that if Key is non-zero*/ - for(i = 0; i < key_info_rev->size; i++) + for(i = 0; i < MIN(KEY_SIZE, key_info_rev->size); i++) data += key[i]; if (!data) { - val->print(PRINT_ERROR, "\n Incorrect key", 0); + val->print(PRINT_ERROR, "\n\r\tIncorrect key - all bits are zero", 0); val->err_check_set(TEST_CHECKPOINT_4, TBSA_STATUS_INCORRECT_VALUE); return; } } else { - for (i = 0; i < key_info_rev->size; i++) { + for (i = 0; i < MIN(KEY_SIZE, key_info_rev->size); i++) { if (key[i] == key_info_rev->def_val) { - val->print(PRINT_ERROR, "\n Incorrect key", 0); + val->print(PRINT_ERROR, "\n\r\tIncorrect key - insufficient entropy/unprogrammed word", 0); val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_INCORRECT_VALUE); return; } @@ -94,15 +94,15 @@ void test_payload(tbsa_val_api_t *val) return; } - status = val->fuse_ops(FUSE_READ, key_info_rev->addr, rev_key, key_info_rev->size); + status = val->fuse_ops(FUSE_READ, key_info_rev->addr, rev_key, MIN(KEY_SIZE, key_info_rev->size)); if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } /* Check that if Key is not same after it is revoked*/ - for(i = 0; i < key_info_rev->size; i++) { + for(i = 0; i < MIN(KEY_SIZE, key_info_rev->size); i++) { if(key[i] == rev_key[i]) { - val->print(PRINT_ERROR, "\n Key is not revoked", 0); + val->print(PRINT_ERROR, "\n\r\tKey is not revoked", 0); val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_ERROR); return; } diff --git a/tbsa-v8m/test_pool/crypto/test_c009/non_secure.c b/tbsa-v8m/test_pool/crypto/test_c009/non_secure.c index 86b098c3..6bf93367 100644 --- a/tbsa-v8m/test_pool/crypto/test_c009/non_secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c009/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 9), CREATE_TEST_TITLE("Check if a lockable fuse is fixed in its current state"), - CREATE_REF_TAG("R120/R140_TBSA_KEY"), + CREATE_REF_TAG("R120/R140_TBSA_FUSE"), entry_hook, test_payload, exit_hook); diff --git a/tbsa-v8m/test_pool/crypto/test_c009/secure.c b/tbsa-v8m/test_pool/crypto/test_c009/secure.c index 5d8e6854..97a6bde9 100644 --- a/tbsa-v8m/test_pool/crypto/test_c009/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c009/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,9 +18,10 @@ #include "val_test_common.h" #define FUSE_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 9), - CREATE_TEST_TITLE("Check if a lockable fuse is fixed in its current state"), + CREATE_TEST_TITLE("Check if a lockable fuse is fixed in its current state"), CREATE_REF_TAG("R120/R140_TBSA_FUSE"), entry_hook, test_payload, @@ -58,32 +59,32 @@ void test_payload(tbsa_val_api_t *val) } if (fuse_desc->def_val == 0) { - for (i = 0; i < fuse_desc->size; i++) + for (i = 0; i < MIN(FUSE_SIZE, fuse_desc->size); i++) wr_data[i] = 0xFFFFFFFF; } else { - for (i = 0; i < fuse_desc->size; i++) + for (i = 0; i < MIN(FUSE_SIZE, fuse_desc->size); i++) wr_data[i] = 0; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, fuse_data, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, fuse_data, MIN(FUSE_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_3, status)) { return; } - status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data, fuse_desc->size); + status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data, MIN(FUSE_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, MIN(FUSE_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } /* Check that the fuse is not modified */ - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(FUSE_SIZE, fuse_desc->size); i++) { if (fuse_data[i] != rd_data[i]) { - val->print(PRINT_ERROR, "\n Able to modify locked fuse", 0); + val->print(PRINT_ERROR, "\n\r\tAble to modify locked fuse", 0); val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_ERROR); return; } diff --git a/tbsa-v8m/test_pool/crypto/test_c010/secure.c b/tbsa-v8m/test_pool/crypto/test_c010/secure.c index 28e65855..de4e6af3 100644 --- a/tbsa-v8m/test_pool/crypto/test_c010/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c010/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +18,7 @@ #include "val_test_common.h" #define FUSE_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 10), CREATE_TEST_TITLE("Check blowing fuses when the device has left the manufacturing facility."), @@ -40,13 +41,16 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { - tbsa_status_t status; - uint32_t crypto_lcs; - uint32_t i, index = 0; - crypto_hdr_t *crypto_hdr; - crypto_desc_t *crypto_desc; - fuse_desc_t *fuse_desc; - uint32_t rd_data[FUSE_SIZE], wr_data[FUSE_SIZE] = {0xFFFFFFFF}; + tbsa_status_t status; + uint32_t crypto_lcs; + uint32_t i, index = 0; + crypto_hdr_t *crypto_hdr; + crypto_desc_t *crypto_desc; + fuse_desc_t *fuse_desc; + uint32_t rd_data[FUSE_SIZE], wr_data[FUSE_SIZE]; + bool_t secure_crypto_found = FALSE; + + val->memset(wr_data, 0xFF, sizeof(wr_data)/sizeof(uint32_t)); status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); if (val->err_check_set(TEST_CHECKPOINT_1, status)) { @@ -80,11 +84,13 @@ void test_payload(tbsa_val_api_t *val) continue; } + secure_crypto_found = TRUE; + break; } - if (!(crypto_desc->lcs == LCS_SEC_ENABLED || crypto_lcs == LCS_SEC_ENABLED)) { - val->print(PRINT_ERROR, "\n Device has not left the manufacturing facility", 0); + if (secure_crypto_found && (!(crypto_desc->lcs == LCS_SEC_ENABLED || crypto_lcs == LCS_SEC_ENABLED))) { + val->print(PRINT_ERROR, "\n\r\tDevice has not left the manufacturing facility", 0); val->set_status(RESULT_SKIP(1)); return; } @@ -94,42 +100,41 @@ void test_payload(tbsa_val_api_t *val) return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, MIN(FUSE_READ, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_6, status)) { return; } if (fuse_desc->def_val != 0) { - for (i = 0; i < fuse_desc->size; i++) + for (i = 0; i < MIN(FUSE_READ, fuse_desc->size); i++) wr_data[i] = 0; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(FUSE_READ, fuse_desc->size); i++) { if (rd_data[i] != fuse_desc->def_val) { - val->print(PRINT_ERROR, "\n Given fuse is not empty", 0); + val->print(PRINT_ERROR, "\n\r\tGiven fuse is not empty", 0); val->err_check_set(TEST_CHECKPOINT_7, TBSA_STATUS_INVALID); return; } } - status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data, fuse_desc->size); + status = val->fuse_ops(FUSE_WRITE, fuse_desc->addr, wr_data, MIN(FUSE_READ, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_8, status)) { return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, rd_data, MIN(FUSE_READ, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_9, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(FUSE_READ, fuse_desc->size); i++) { if (rd_data[i] != wr_data[i]) { - val->print(PRINT_ERROR, "\n Not able to program the fuse", 0); + val->print(PRINT_ERROR, "\n\r\tNot able to program the fuse", 0); val->err_check_set(TEST_CHECKPOINT_A, status); return; } } - } void exit_hook(tbsa_val_api_t *val) diff --git a/tbsa-v8m/test_pool/crypto/test_c011/secure.c b/tbsa-v8m/test_pool/crypto/test_c011/secure.c index 87756a2d..ef5ddfbe 100644 --- a/tbsa-v8m/test_pool/crypto/test_c011/secure.c +++ b/tbsa-v8m/test_pool/crypto/test_c011/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +18,7 @@ #include "val_test_common.h" #define FUSE_SIZE 32 + /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_CRYPTO_BASE, 11), CREATE_TEST_TITLE("Check a confidential SW receipient fuse is readable by privileged software."), @@ -55,11 +56,13 @@ void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; fuse_desc_t *fuse_desc; - uint32_t data[FUSE_SIZE], data1[FUSE_SIZE] = {0}; + uint32_t data[FUSE_SIZE], data1[FUSE_SIZE]; boot_t boot; uint32_t shcsr = 0UL; uint32_t control, i; + val->memset(data1, 0x0, sizeof(data1)/sizeof(uint32_t)); + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); @@ -72,13 +75,13 @@ void test_payload(tbsa_val_api_t *val) return; } - status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - if(val->err_check_set(TEST_CHECKPOINT_3, status)) { - return; - } - if (boot.wb != WARM_BOOT_REQUESTED) { + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; + } + status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; @@ -113,14 +116,14 @@ void test_payload(tbsa_val_api_t *val) return; } - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, data, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, data, MIN(FUSE_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_A, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(FUSE_SIZE, fuse_desc->size); i++) { if (data[i] == fuse_desc->def_val) { - val->print(PRINT_ERROR, "\n The given fuse is empty", 0); + val->print(PRINT_ERROR, "\n\r\tThe given fuse is empty", 0); val->err_check_set(TEST_CHECKPOINT_B, TBSA_STATUS_ERROR); return; } @@ -132,20 +135,29 @@ void test_payload(tbsa_val_api_t *val) asm volatile ("MSR control, %0" : : "r" (control) : "memory"); /* Performing unprivilege access to Confidential fuse */ - status = val->fuse_ops(FUSE_READ, fuse_desc->addr, data1, fuse_desc->size); + status = val->fuse_ops(FUSE_READ, fuse_desc->addr, data1, MIN(FUSE_SIZE, fuse_desc->size)); if (val->err_check_set(TEST_CHECKPOINT_C, status)) { return; } - for (i = 0; i < fuse_desc->size; i++) { + for (i = 0; i < MIN(FUSE_SIZE, fuse_desc->size); i++) { if (data1[i] == data[i]) { - val->print(PRINT_ERROR, "\n Able to access confidential fuse in unprivilege mode", 0); + val->print(PRINT_ERROR, "\n\r\tAble to access confidential fuse in unprivilege mode", 0); val->err_check_set(TEST_CHECKPOINT_D, TBSA_STATUS_ERROR); return; } } } + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); +} + +void exit_hook(tbsa_val_api_t *val) +{ + tbsa_status_t status; + boot_t boot; + uint32_t shcsr = 0UL; + /* Restoring the state */ boot.wb = BOOT_UNKNOWN; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); @@ -164,13 +176,6 @@ void test_payload(tbsa_val_api_t *val) return; } - val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); -} - -void exit_hook(tbsa_val_api_t *val) -{ - tbsa_status_t status; - /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); if (val->err_check_set(TEST_CHECKPOINT_11, status)) { diff --git a/tbsa-v8m/test_pool/debug/Makefile b/tbsa-v8m/test_pool/debug/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/debug/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/debug/test_d001/secure.c b/tbsa-v8m/test_pool/debug/test_d001/secure.c index e2ed2dc1..c7d316f0 100644 --- a/tbsa-v8m/test_pool/debug/test_d001/secure.c +++ b/tbsa-v8m/test_pool/debug/test_d001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +17,8 @@ #include "val_test_common.h" -#define TEST_DATA 0x12DEED21 +#define TEST_DATA 0x12DEED21 + tbsa_val_api_t *g_val; dpm_desc_t *dpm_desc; @@ -80,8 +81,8 @@ tbsa_status_t test_dbg_seq_read(uint32_t *addr, dbg_seq_status_t seq_status) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t data, dpm_instance, s_addr=0, ns_addr=0; - uint32_t region_num = 0, instance = 0, minor_id = 1, region_num_inst; + uint32_t data, dpm_instance; + uint32_t region_num = 0, instance = 0, minor_id = MEMORY_SRAM; dpm_hdr_t *dpm_hdr; memory_hdr_t *memory_hdr; memory_desc_t *memory_desc; @@ -94,7 +95,7 @@ void test_payload(tbsa_val_api_t *val) /* Check if DPM is present.*/ if (!dpm_hdr->num) { - val->print(PRINT_ERROR, "\nNo DPM present in the platform", 0); + val->print(PRINT_ERROR, "\n\r\tNo DPM present in the platform", 0); val->err_check_set(TEST_CHECKPOINT_2, TBSA_STATUS_NOT_FOUND); return; } @@ -115,7 +116,7 @@ void test_payload(tbsa_val_api_t *val) } /* Set the DPM state to Open.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); + status = val->dpm_set_state(dpm_desc, DPM_OPEN_STATE); if (val->err_check_set(TEST_CHECKPOINT_5, status)) { goto clean_up; } @@ -126,23 +127,16 @@ void test_payload(tbsa_val_api_t *val) goto clean_up; } /*Check for R/W address controlled by DPM under check, and access*/ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (status == TBSA_STATUS_NOT_FOUND) { - break; - } else if (val->err_check_set(TEST_CHECKPOINT_7, status)) { + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { goto clean_up; } - region_num_inst = GET_NUM_INSTANCE(memory_desc); if ((memory_desc->dpm_index == dpm_desc->index) && (memory_desc->mem_type == TYPE_NORMAL_READ_WRITE)) { - if (memory_desc->attribute == MEM_NONSECURE) - ns_addr++; - else - s_addr++; /*Initialize the memory with known data*/ val->mem_write((uint32_t *)memory_desc->start, WORD, TEST_DATA); @@ -156,7 +150,7 @@ void test_payload(tbsa_val_api_t *val) if (data != TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nIncorrect data returned by debugger, actual = 0x%x", data); + val->print(PRINT_ERROR, "\n\r\tIncorrect data returned by debugger, actual = 0x%x", data); val->print(PRINT_ERROR, " expected = 0x%x", TEST_DATA); goto clean_up; } @@ -164,42 +158,30 @@ void test_payload(tbsa_val_api_t *val) /*Initialize the memory with known data*/ val->mem_write((uint32_t *)memory_desc->start, WORD, ~TEST_DATA); - if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_OPEN_STATE_WRITE)) - goto clean_up; - - if (test_dbg_seq_write(TEST_DATA, SEQ_OPEN_STATE_WRITE)) + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_OPEN_STATE_WRITE)) { goto clean_up; + } - /* Read the data returned by debugger and compare to get the results.*/ - if(test_dbg_seq_read(&data, SEQ_OPEN_STATE_WRITE)) + if (test_dbg_seq_write(TEST_DATA, SEQ_OPEN_STATE_WRITE)) { goto clean_up; + } val->mem_read((uint32_t *)memory_desc->start, WORD, &data); if (data != TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nIncorrect data returned by debugger, actual = 0x%x", data); + val->print(PRINT_ERROR, "\n\r\tIncorrect data returned by debugger, actual = 0x%x", data); val->print(PRINT_ERROR, " expected = 0x%x", TEST_DATA); goto clean_up; } } instance++; - } while (instance < region_num_inst); + } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += region_num_inst - 1; + region_num += GET_NUM_INSTANCE(memory_desc); } } - if (!ns_addr) { - val->print(PRINT_WARN, "\n No non-secure address were accessed", 0); - } - if (!s_addr) { - val->print(PRINT_WARN, "\n No secure address were accessed", 0); - } - /*Signal the debugger that the test is complete*/ status = val->debug_set_status(DBG_INIT, SEQ_NEXT_TEST); if (val->err_check_set(TEST_CHECKPOINT_A, status)) { @@ -214,7 +196,6 @@ void test_payload(tbsa_val_api_t *val) if (val->err_check_set(TEST_CHECKPOINT_B, status)) { return; } - } void exit_hook(tbsa_val_api_t *val) diff --git a/tbsa-v8m/test_pool/debug/test_d002/non_secure.c b/tbsa-v8m/test_pool/debug/test_d002/non_secure.c index 7c0c163b..8bd3dc57 100644 --- a/tbsa-v8m/test_pool/debug/test_d002/non_secure.c +++ b/tbsa-v8m/test_pool/debug/test_d002/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -111,8 +111,8 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t data, dpm_instance, s_addr=0, ns_addr=0; - uint32_t region_num = 0, instance = 0, minor_id = 1, region_num_inst; + uint32_t data, dpm_instance; + uint32_t region_num = 0, instance = 0, minor_id = MEMORY_SRAM; memory_hdr_t *memory_hdr; memory_desc_t *memory_desc; @@ -124,7 +124,7 @@ void test_payload(tbsa_val_api_t *val) /* Check if DPM is present.*/ if (!dpm_hdr->num) { - val->print(PRINT_ERROR, "\nNo DPM present in the platform", 0); + val->print(PRINT_ERROR, "\n\r\tNo DPM present in the platform", 0); val->err_check_set(TEST_CHECKPOINT_2, TBSA_STATUS_NOT_FOUND); return; } @@ -145,7 +145,7 @@ void test_payload(tbsa_val_api_t *val) } /* Set the DPM state to Open.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); + status = val->dpm_set_state(dpm_desc, DPM_OPEN_STATE); if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } @@ -162,23 +162,16 @@ void test_payload(tbsa_val_api_t *val) goto clean_up; } /*Check for R/W address controlled by DPM under check, and access*/ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (status == TBSA_STATUS_NOT_FOUND) { - break; - } else if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + if (val->err_check_set(TEST_CHECKPOINT_8, status)) { goto clean_up; } - region_num_inst = GET_NUM_INSTANCE(memory_desc); if ((memory_desc->dpm_index == dpm_desc->index) && (memory_desc->mem_type == TYPE_NORMAL_READ_WRITE)) { - if (memory_desc->attribute == MEM_NONSECURE) - ns_addr++; - else - s_addr++; /*Initialize the memory with known data*/ val->mem_write((uint32_t *)memory_desc->start, WORD, TEST_DATA); @@ -193,47 +186,45 @@ void test_payload(tbsa_val_api_t *val) if (memory_desc->attribute == MEM_NONSECURE) { if (data != TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nIncorrect data returned by debugger, actual = 0x%x", data); + val->print(PRINT_ERROR, "\n\r\tIncorrect data returned by debugger, actual = 0x%x", data); val->print(PRINT_ERROR, " expected = 0x%x", TEST_DATA); goto clean_up; } } else { if (data == TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_A, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nDPM could not restrict access to Trusted assets", 0); - val->print(PRINT_ERROR, "\nDebugger read the actual data = 0x%x", TEST_DATA); + val->print(PRINT_ERROR, "\n\r\tDPM could not restrict access to Trusted assets", 0); + val->print(PRINT_ERROR, "\n\r\tDebugger read the actual data = 0x%x", TEST_DATA); val->print(PRINT_ERROR, " at address = 0x%x", (uint32_t)(memory_desc->start)); goto clean_up; } } - /*Initialize the memory with known data*/ + /* Initialize the memory with known data */ val->mem_write((uint32_t *)memory_desc->start, WORD, ~TEST_DATA); - if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_OPEN_STATE_WRITE)) + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_OPEN_STATE_WRITE)) { goto clean_up; + } - if (test_dbg_seq_write(TEST_DATA, SEQ_OPEN_STATE_WRITE)) - goto clean_up; - - /* Read the data returned by debugger and compare to get the results.*/ - if(test_dbg_seq_read(&data, SEQ_OPEN_STATE_WRITE)) + if (test_dbg_seq_write(TEST_DATA, SEQ_OPEN_STATE_WRITE)) { goto clean_up; + } val->mem_read((uint32_t *)memory_desc->start, WORD, &data); if (memory_desc->attribute == MEM_NONSECURE) { if (data != TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_B, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nIncorrect data returned by debugger, actual = 0x%x", data); + val->print(PRINT_ERROR, "\n\r\tIncorrect data returned by debugger, actual = 0x%x", data); val->print(PRINT_ERROR, " expected = 0x%x", TEST_DATA); goto clean_up; } } else { if (data != ~TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_C, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nDPM could not restrict access to Trusted assets", 0); - val->print(PRINT_ERROR, "\nDebugger read the actual data = 0x%x", TEST_DATA); + val->print(PRINT_ERROR, "\n\r\tDPM could not restrict access to Trusted assets", 0); + val->print(PRINT_ERROR, "\n\r\tDebugger read the actual data = 0x%x", TEST_DATA); val->print(PRINT_ERROR, " at address = 0x%x", (uint32_t)(memory_desc->start)); goto clean_up; } @@ -241,22 +232,12 @@ void test_payload(tbsa_val_api_t *val) } instance++; - } while (instance < region_num_inst); + } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += region_num_inst - 1; + region_num += GET_NUM_INSTANCE(memory_desc);; } } - if (!ns_addr) { - val->print(PRINT_WARN, "\n No non-secure address were accessed", 0); - } - if (!s_addr) { - val->print(PRINT_WARN, "\n No secure address were accessed", 0); - } - if (test_env_reset()) return; @@ -271,5 +252,10 @@ void test_payload(tbsa_val_api_t *val) void exit_hook(tbsa_val_api_t *val) { -} + tbsa_status_t status; + status = val->debug_set_status(DBG_INIT, SEQ_NEXT_TEST); + if (val->err_check_set(TEST_CHECKPOINT_14, status)) { + return; + } +} diff --git a/tbsa-v8m/test_pool/debug/test_d003/secure.c b/tbsa-v8m/test_pool/debug/test_d003/secure.c index f8036ad9..7d06acb5 100644 --- a/tbsa-v8m/test_pool/debug/test_d003/secure.c +++ b/tbsa-v8m/test_pool/debug/test_d003/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,7 +24,8 @@ tbsa_val_api_t *g_val; dpm_desc_t *dpm_desc; -#define TEST_DATA 0x12DEED21 +#define TEST_DATA 0x12DEED21 +#define TEST_TIMEOUT 0xFFFFFF /* Publish these functions to the external world as associated to this test ID */ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_DEBUG_BASE, 3), @@ -34,6 +35,14 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_DEBUG_BASE, 3), test_payload, exit_hook); +void delay (uint32_t delay_cnt) +{ + while(delay_cnt--) + { + asm volatile("NOP"); + } +} + void entry_hook(tbsa_val_api_t *val) { tbsa_test_init_t init = { @@ -56,7 +65,7 @@ tbsa_status_t test_env_reset(void) if (g_val->err_check_set(TEST_CHECKPOINT_F, status)) { return status; } - return TBSA_STATUS_SUCCESS; + return TBSA_STATUS_SUCCESS; } tbsa_status_t test_dbg_seq_write(uint32_t addr, dbg_seq_status_t seq_status) @@ -96,8 +105,14 @@ tbsa_status_t test_dbg_seq_read(uint32_t *addr, dbg_seq_status_t seq_status) void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; - uint32_t data, dpm_instance, timeout, dpm_lock, dpm_enable, dpm_status; - uint32_t region_num = 0, instance = 0, minor_id = 1, region_num_inst, s_addr=0, ns_addr=0; + uint32_t data; + uint32_t dpm_instance; + uint32_t dpm_lock; + uint32_t dpm_enable; + uint32_t dpm_status; + uint32_t region_num = 0; + uint32_t instance = 0; + uint32_t minor_id = MEMORY_SRAM; memory_hdr_t *memory_hdr; memory_desc_t *memory_desc; dpm_hdr_t *dpm_hdr; @@ -110,7 +125,7 @@ void test_payload(tbsa_val_api_t *val) /* Check if DPM is present.*/ if (!dpm_hdr->num) { - val->print(PRINT_ERROR, "\nNo DPM present in the platform", 0); + val->print(PRINT_ERROR, "\n\r\tNo DPM present in the platform", 0); val->err_check_set(TEST_CHECKPOINT_2, TBSA_STATUS_NOT_FOUND); return; } @@ -137,14 +152,16 @@ void test_payload(tbsa_val_api_t *val) goto clean_up; } - dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_VALUE; - dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_VALUE; + dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_STATE; + dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_STATE; - if ((dpm_status & dpm_lock) == dpm_lock) + if ((dpm_status & dpm_lock) == dpm_lock) { + val->print(PRINT_ALWAYS, "\n\r\tDPM with index %x is in locked state", dpm_desc->index); continue; + } else if ((dpm_status & dpm_enable) == dpm_enable) { /* Set the DPM state to Open.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); + status = val->dpm_set_state(dpm_desc, DPM_OPEN_STATE); if (val->err_check_set(TEST_CHECKPOINT_6, status)) { goto clean_up; } @@ -156,107 +173,115 @@ void test_payload(tbsa_val_api_t *val) goto clean_up; } /*Check for R/W address controlled by DPM under check, and access*/ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (status == TBSA_STATUS_NOT_FOUND) { - break; - } else if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + if (val->err_check_set(TEST_CHECKPOINT_8, status)) { goto clean_up; } - region_num_inst = GET_NUM_INSTANCE(memory_desc); if ((memory_desc->dpm_index == dpm_desc->index) && (memory_desc->mem_type == TYPE_NORMAL_READ_WRITE)) { - if (memory_desc->attribute == MEM_NONSECURE) - ns_addr++; - else - s_addr++; + /*Initialize the memory with known data*/ val->mem_write((uint32_t *)memory_desc->start, WORD, TEST_DATA); - if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_READ)) + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_READ)) { goto clean_up; + } - /* Set the DPM state to Closed.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_CLOSED_STATE, 0); + /* Set the DPM to CLOSED state */ + status = val->dpm_set_state(dpm_desc, DPM_CLOSED_STATE); if (val->err_check_set(TEST_CHECKPOINT_9, status)) { goto clean_up; } - /* Wait until debugger has completed the access whilst DPM is in Closed state.*/ - timeout = 0x1000000; - while(--timeout); + asm volatile("DSB"); + asm volatile("ISB"); - /* Set the DPM state to Open.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); - if (val->err_check_set(TEST_CHECKPOINT_A, status)) { + /* Indicate the debugger about the transition to CLOSED state */ + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_READ)) { goto clean_up; } + + /* We don not read TEST_DATA at dpm_desc->data_addr if OPEN to CLOSED state transition is successful */ + /* Wait until debugger has completed the access whilst DPM is in CLOSED state */ + delay(TEST_TIMEOUT); + + /* Read the data returned by debugger and compare to get the results.*/ - if(test_dbg_seq_read(&data, SEQ_CLOSED_STATE_READ)) - goto clean_up; + data = 0; + val->mem_read((uint32_t *)dpm_desc->data_addr, WORD, &data); if (data == TEST_DATA) { - val->err_check_set(TEST_CHECKPOINT_B, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nDPM could not restrict access in Closed State", 0); - val->print(PRINT_ERROR, "\nDebugger read the actual data = 0x%x", TEST_DATA); + val->err_check_set(TEST_CHECKPOINT_A, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tDPM could not restrict access in Closed State", 0); + val->print(PRINT_ERROR, "\n\r\tDebugger read the actual data = 0x%x", TEST_DATA); val->print(PRINT_ERROR, " at address = 0x%x", (uint32_t)(memory_desc->start)); goto clean_up; } + + /* Set the DPM state to Open.*/ + status = val->dpm_set_state(dpm_desc, DPM_OPEN_STATE); + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + goto clean_up; + } + asm volatile("DSB"); + asm volatile("ISB"); + /*Initialize the memory with known data*/ val->mem_write((uint32_t *)memory_desc->start, WORD, ~TEST_DATA); - if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_WRITE)) + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_WRITE)) { goto clean_up; + } - if (test_dbg_seq_write(TEST_DATA, SEQ_CLOSED_STATE_WRITE)) + if (test_dbg_seq_write(TEST_DATA, SEQ_CLOSED_STATE_WRITE)) { goto clean_up; + } /* Set the DPM state to Closed.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_CLOSED_STATE, 0); + status = val->dpm_set_state(dpm_desc, DPM_CLOSED_STATE); if (val->err_check_set(TEST_CHECKPOINT_C, status)) { goto clean_up; } - /* Wait until debugger has completed the access whilst DPM is in Closed state.*/ - timeout = 0x1000000; - while(--timeout); + asm volatile("DSB"); + asm volatile("ISB"); - /* Set the DPM state to Open.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); - if (val->err_check_set(TEST_CHECKPOINT_D, status)) { + /* Indicate the debugger about the transition to CLOSED state */ + if (test_dbg_seq_write((uint32_t)(memory_desc->start), SEQ_CLOSED_STATE_WRITE)) { goto clean_up; } - /* Read the data returned by debugger and compare to get the results.*/ - if(test_dbg_seq_read(&data, SEQ_CLOSED_STATE_WRITE)) - goto clean_up; + /* Wait until debugger has completed the access whilst DPM is in Closed state.*/ + delay(TEST_TIMEOUT); + + /* Read the data returned by debugger and compare to get the results.*/ + data = 0; val->mem_read((uint32_t *)memory_desc->start, WORD, &data); if (data != ~TEST_DATA) { - val->err_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nDPM could not restrict access in Closed State", 0); - val->print(PRINT_ERROR, "\nDebugger updated the data at address = 0x%x", (uint32_t)(memory_desc->start)); + val->err_check_set(TEST_CHECKPOINT_D, TBSA_STATUS_ERROR); + val->print(PRINT_ERROR, "\n\r\tDPM could not restrict access in Closed State", 0); + val->print(PRINT_ERROR, "\n\r\tDebugger updated the data at address = 0x%x", (uint32_t)(memory_desc->start)); goto clean_up; } + + /* Set the DPM state to Open.*/ + status = val->dpm_set_state(dpm_desc, DPM_OPEN_STATE); + if (val->err_check_set(TEST_CHECKPOINT_E, status)) { + goto clean_up; + } + asm volatile("DSB"); + asm volatile("ISB"); } instance++; - } while (instance < region_num_inst); + } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += region_num_inst - 1; + region_num += GET_NUM_INSTANCE(memory_desc); } } - if (!ns_addr) { - val->print(PRINT_WARN, "\n No non-secure address were accessed", 0); - } - if (!s_addr) { - val->print(PRINT_WARN, "\n No secure address were accessed", 0); - } - if (test_env_reset()) return; diff --git a/tbsa-v8m/test_pool/debug/test_d004/secure.c b/tbsa-v8m/test_pool/debug/test_d004/secure.c index f44f31b2..46c24b03 100644 --- a/tbsa-v8m/test_pool/debug/test_d004/secure.c +++ b/tbsa-v8m/test_pool/debug/test_d004/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -60,7 +60,7 @@ tbsa_status_t test_env_reset(void) if (g_val->err_check_set(TEST_CHECKPOINT_18, status)) { return status; } - return TBSA_STATUS_SUCCESS; + return TBSA_STATUS_SUCCESS; } tbsa_status_t test_dbg_seq_write(uint32_t addr, dbg_seq_status_t seq_status) @@ -114,7 +114,7 @@ void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; uint32_t data, dpm_instance, timeout, dpm_lock, reset_done=0, dpm_status; - uint32_t region_num = 0, instance = 0, minor_id = 1, region_num_inst; + uint32_t region_num = 0, instance = 0, minor_id = MEMORY_SRAM, region_num_inst; dpm_hdr_t *dpm_hdr; memory_hdr_t *memory_hdr; memory_desc_t *memory_desc; @@ -144,7 +144,7 @@ void test_payload(tbsa_val_api_t *val) if (!reset_done) { /* Check if DPM is present.*/ if (!dpm_hdr->num) { - val->print(PRINT_ERROR, "\nNo DPM present in the platform", 0); + val->print(PRINT_ERROR, "\n\t\rNo DPM present in the platform", 0); val->err_check_set(TEST_CHECKPOINT_4, TBSA_STATUS_NOT_FOUND); return; } @@ -189,10 +189,10 @@ void test_payload(tbsa_val_api_t *val) lock implemented. */ dpm_not_locked = FALSE; - dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_VALUE; + dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_STATE; if ((dpm_status & dpm_lock) == dpm_lock) { if (dpm_hdr->num == 1) { - val->print(PRINT_WARN, "\n The only DPM in the system is in locked state, cannot check access.", 0); + val->print(PRINT_WARN, "\n\t\rThe only DPM in the system is in locked state, cannot check access.", 0); val->set_status(RESULT_SKIP(1)); goto clean_up; } @@ -207,7 +207,7 @@ void test_payload(tbsa_val_api_t *val) goto clean_up; } /*Check for R/W address controlled by DPM under check, and access*/ - for (region_num = 0; region_num < memory_hdr->num; region_num++) { + for (region_num = 0; region_num < memory_hdr->num;) { instance = 0; /* If reset was done then over-write loop variables from stored NV RAM*/ if(reset_done) { @@ -221,9 +221,7 @@ void test_payload(tbsa_val_api_t *val) do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, minor_id, instance), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (status == TBSA_STATUS_NOT_FOUND) { - break; - } else if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { goto clean_up; } if(!reset_done) @@ -240,7 +238,7 @@ void test_payload(tbsa_val_api_t *val) /* Reset will only be triggered in case if DPM was not locked at reset*/ if (dpm_not_locked) { /* Set the DPM state to Locked.*/ - status = val->dpm_set_state(dpm_desc->index, DPM_LOCKED_STATE, 0); + status = val->dpm_set_state(dpm_desc, DPM_LOCKED_STATE); if (val->err_check_set(TEST_CHECKPOINT_C, status)) { goto clean_up; } @@ -280,24 +278,20 @@ void test_payload(tbsa_val_api_t *val) if (data == TEST_DATA) { val->err_check_set(TEST_CHECKPOINT_11, TBSA_STATUS_ERROR); - val->print(PRINT_ERROR, "\nDPM could not restrict access in Locked State", 0); - val->print(PRINT_ERROR, "\nDebugger read the actual data = 0x%x", TEST_DATA); + val->print(PRINT_ERROR, "\n\t\rDPM could not restrict access in Locked State", 0); + val->print(PRINT_ERROR, "\n\t\rDebugger read the actual data = 0x%x", TEST_DATA); val->print(PRINT_ERROR, " at address = 0x%x", (uint32_t)(memory_desc->start)); goto clean_up; } } instance++; - } while (instance < region_num_inst); + } while (instance < GET_NUM_INSTANCE(memory_desc)); minor_id++; - if (status == TBSA_STATUS_NOT_FOUND) - region_num -= 1; - else - region_num += region_num_inst - 1; + region_num += GET_NUM_INSTANCE(memory_desc); } reset_done = 0; } - if (test_env_reset()) return; diff --git a/tbsa-v8m/test_pool/debug/test_d005/secure.c b/tbsa-v8m/test_pool/debug/test_d005/secure.c index 31f36c87..add91f07 100644 --- a/tbsa-v8m/test_pool/debug/test_d005/secure.c +++ b/tbsa-v8m/test_pool/debug/test_d005/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -82,8 +82,8 @@ void test_payload(tbsa_val_api_t *val) val->set_status(RESULT_FAIL(TBSA_STATUS_ERROR)); return; } - dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_VALUE; - if (((dpm_status & DPM_LOCK_VALUE) != DPM_LOCK_VALUE) || ((dpm_status & dpm_enable) != dpm_enable)) { + dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_STATE; + if (((dpm_status & DPM_LOCK_STATE) != DPM_LOCK_STATE) || ((dpm_status & dpm_enable) != dpm_enable)) { val->print(PRINT_ERROR, "\n DPM default state is not closed or locked for DPM %d", dpm_desc->index); val->set_status(RESULT_FAIL(TBSA_STATUS_ERROR)); return; diff --git a/tbsa-v8m/test_pool/debug/test_d006/secure.c b/tbsa-v8m/test_pool/debug/test_d006/secure.c index 0f14f8b1..a83778e4 100644 --- a/tbsa-v8m/test_pool/debug/test_d006/secure.c +++ b/tbsa-v8m/test_pool/debug/test_d006/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -76,7 +76,7 @@ void test_payload(tbsa_val_api_t *val) return; } if (dpm_hdr->num == 1) { - val->print(PRINT_DEBUG, "\n\r\tUnique password unlock token since only one DPM is present", 0); + val->print(PRINT_ALWAYS, "\n\r\tUnique password unlock token since only one DPM is present", 0); val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); return; } @@ -95,8 +95,8 @@ void test_payload(tbsa_val_api_t *val) if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } - dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_VALUE; - dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_VALUE; + dpm_enable = DPM_EN_IMPLEMENTED|DPM_EN_STATE; + dpm_lock = DPM_LOCK_IMPLEMENTED|DPM_LOCK_STATE; /* If the DPM state is locked then continue with other DPMs*/ if ((dpm_status & dpm_lock) == dpm_lock) @@ -104,14 +104,14 @@ void test_payload(tbsa_val_api_t *val) else if ((dpm_status & dpm_enable) != dpm_enable) { /* Set the DPM state to Closed, to check if the unlocking can be done by using other DPM's password.*/ - status = val->dpm_set_state(target_dpm_desc->index, DPM_CLOSED_STATE, 0); + status = val->dpm_set_state(target_dpm_desc, DPM_CLOSED_STATE); if (val->err_check_set(TEST_CHECKPOINT_6, status)) { return; } } /* Try to unlock DPM using other DPM's password.*/ - status = val->dpm_set_state(target_dpm_desc->index, DPM_OPEN_STATE, dpm_desc->unlock_token); + status = val->dpm_set_state(target_dpm_desc, DPM_OPEN_STATE); if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } diff --git a/tbsa-v8m/test_pool/interrupts/Makefile b/tbsa-v8m/test_pool/interrupts/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/interrupts/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/mem/Makefile b/tbsa-v8m/test_pool/mem/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/mem/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/mem/test_m001/non_secure.c b/tbsa-v8m/test_pool/mem/test_m001/non_secure.c index 9d3f48c0..1c022e97 100644 --- a/tbsa-v8m/test_pool/mem/test_m001/non_secure.c +++ b/tbsa-v8m/test_pool/mem/test_m001/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,7 +24,7 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_SECURE_RAM_BASE, 1), CREATE_TEST_TITLE("Secure RAM access from Trusted world only"), - CREATE_REF_TAG("R160/R170/R180_TBSA_INFRA"), + CREATE_REF_TAG("R160/R180_TBSA_INFRA"), entry_hook, test_payload, exit_hook); @@ -65,9 +65,8 @@ void test_payload(tbsa_val_api_t *val) uint32_t instance = 0; protection_units_desc_t *prot_unit_desc; tbsa_status_t status; - uint32_t timeout = TIMEOUT_VALUE; + uint32_t timeout = TIMEOUT_VALUE; bool_t mpc_found = FALSE; - bool_t timeout_flag = FALSE; do { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_PROTECTION_UNITS, PROTECTION_UNITS_MPC, instance), @@ -79,47 +78,45 @@ void test_payload(tbsa_val_api_t *val) mpc_found = TRUE; - val->set_status(RESULT_PENDING(status)); + val->set_status(RESULT_PENDING(status)); - /* Try to access MPC from Non-Secure */ - val_mem_read_wide((uint32_t *)prot_unit_desc->device_base, &data); + /* Try to access MPC from Non-Secure */ + val_mem_read_wide((uint32_t *)prot_unit_desc->device_base, &data); /* Wait here till pending status is cleared by secure fault or timeout occurs, whichever comes early */ while (IS_TEST_PENDING(val->get_status()) && (--timeout)); if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing MPC 0x%X from NT world!", (uint32_t)(prot_unit_desc->device_base)); val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_TIMEOUT); - timeout_flag = TRUE; + return; } } instance++; + timeout = TIMEOUT_VALUE; } while(instance < GET_NUM_INSTANCE(prot_unit_desc)); - /* Restoring default Handler */ - status = val->interrupt_restore_handler(EXCP_NUM_HF); - if (val->err_check_set(TEST_CHECKPOINT_9, status)) { - return; - } - - /* Restoring faults */ - status = val->mem_reg_write(SHCSR, shcsr); - if (val->err_check_set(TEST_CHECKPOINT_A, status)) { - return; - } - - if (timeout_flag == TRUE) { - val->err_check_set(TEST_CHECKPOINT_B, TBSA_STATUS_TIMEOUT); - return; - } - if (mpc_found) { val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } else { - val->err_check_set(TEST_CHECKPOINT_C, TBSA_STATUS_NOT_FOUND); + val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_NOT_FOUND); return; } } void exit_hook(tbsa_val_api_t *val) { + tbsa_status_t status; + + /* Restoring default Handler */ + status = val->interrupt_restore_handler(EXCP_NUM_HF); + if (val->err_check_set(TEST_CHECKPOINT_A, status)) { + return; + } + + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + return; + } } diff --git a/tbsa-v8m/test_pool/mem/test_m001/secure.c b/tbsa-v8m/test_pool/mem/test_m001/secure.c index 65d17312..61f24fa8 100644 --- a/tbsa-v8m/test_pool/mem/test_m001/secure.c +++ b/tbsa-v8m/test_pool/mem/test_m001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,7 +24,7 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_SECURE_RAM_BASE, 1), CREATE_TEST_TITLE("Secure RAM access from Trusted world only"), - CREATE_REF_TAG("R160/R170/R180_TBSA_INFRA"), + CREATE_REF_TAG("R160/R180_TBSA_INFRA"), entry_hook, test_payload, exit_hook); @@ -37,8 +37,6 @@ void hard_fault_esr (unsigned long *sf_args) if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ @@ -60,13 +58,17 @@ void HF_Handler(void) "b hard_fault_esr \n"); } -void setup_ns_env(void) +tbsa_status_t setup_ns_env(void) { tbsa_status_t status; /* Installing Trusted Fault Handler for NS test */ status = g_val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - g_val->err_check_set(TEST_CHECKPOINT_5, status); + if(g_val->err_check_set(TEST_CHECKPOINT_4, status)) { + return status; + } + + return TBSA_STATUS_SUCCESS; } @@ -87,50 +89,39 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { uint32_t instance = 0; - uint32_t mem_num; - uint32_t minor_id = MEMORY_SRAM; - memory_hdr_t *mem; memory_desc_t *mem_desc; tbsa_status_t status; secure_range_found = FALSE; /* Read all the memory ranges given to us and ensure at least 1 range is secure */ - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, 0, 0), - (uint8_t **)&mem, (uint32_t *)sizeof(memory_hdr_t)); - if (val->err_check_set(TEST_CHECKPOINT_1, status)) - return; - - for (mem_num = 0; mem_num < mem->num;) - { - instance = 0; - do { - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_SRAM, instance), - (uint8_t **)&mem_desc, (uint32_t *)sizeof(memory_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_2, status)) { + do { + status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_SRAM, instance), + (uint8_t **)&mem_desc, (uint32_t *)sizeof(memory_desc_t)); + if (val->err_check_set(TEST_CHECKPOINT_1, status)) { + return; + } + + if (mem_desc->attribute == MEM_SECURE) { + if (val->is_secure_address(mem_desc->start)) { + secure_range_found = TRUE; + break; + } else { + val->err_check_set(TEST_CHECKPOINT_2, TBSA_STATUS_ERROR); return; } - - if (mem_desc->attribute == MEM_SECURE) { - if (val->is_secure_address(mem_desc->start)) { - secure_range_found = TRUE; - } else { - val->err_check_set(TEST_CHECKPOINT_3, TBSA_STATUS_ERROR); - return; - } - } - instance++; - }while (instance < GET_NUM_INSTANCE(mem_desc)); - minor_id++; - mem_num += GET_NUM_INSTANCE(mem_desc); - } + } + instance++; + }while (instance < GET_NUM_INSTANCE(mem_desc)); if (secure_range_found != TRUE) { - val->err_check_set(TEST_CHECKPOINT_4, TBSA_STATUS_NOT_FOUND); + val->err_check_set(TEST_CHECKPOINT_3, TBSA_STATUS_NOT_FOUND); return; } - setup_ns_env(); + if(setup_ns_env()) { + return; + } val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } diff --git a/tbsa-v8m/test_pool/peripherals/Makefile b/tbsa-v8m/test_pool/peripherals/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/peripherals/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/peripherals/test_p001/non_secure.c b/tbsa-v8m/test_pool/peripherals/test_p001/non_secure.c index ca3ffd10..110a0149 100644 --- a/tbsa-v8m/test_pool/peripherals/test_p001/non_secure.c +++ b/tbsa-v8m/test_pool/peripherals/test_p001/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,8 @@ #include "val_test_common.h" +#define TIMEOUT (0xFFFFFFFFUL) + /** Publish these functions to the external world as associated to this test ID **/ @@ -59,6 +61,7 @@ void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; uint32_t data; + uint32_t timeout = TIMEOUT; status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_CLOCKS, CLOCKS_SYS_FREQ, 0), (uint8_t **)&clocks_desc, @@ -73,13 +76,21 @@ void test_payload(tbsa_val_api_t *val) val_mem_read_wide((uint32_t *)(clocks_desc->pll_base + clocks_desc->offset), &data); /* wait here till pending status is cleared by secure fault */ - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing clock source from NT world!", (uint32_t)(clocks_desc->pll_base + clocks_desc->offset)); + val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_TIMEOUT); + return; + } + + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } void exit_hook(tbsa_val_api_t *val) diff --git a/tbsa-v8m/test_pool/peripherals/test_p001/secure.c b/tbsa-v8m/test_pool/peripherals/test_p001/secure.c index 262d98c4..fa190fec 100644 --- a/tbsa-v8m/test_pool/peripherals/test_p001/secure.c +++ b/tbsa-v8m/test_pool/peripherals/test_p001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,8 +33,6 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ @@ -56,15 +54,6 @@ void HF_Handler(void) "b hard_fault_esr \n"); } -void setup_ns_env(void) -{ - tbsa_status_t status; - - /* Installing Trusted Fault Handler for NS test */ - status = g_val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - g_val->err_check_set(TEST_CHECKPOINT_1, status); -} - void entry_hook(tbsa_val_api_t *val) { tbsa_test_init_t init = { @@ -79,8 +68,13 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { + tbsa_status_t status; + /* setup environment for NS test */ - setup_ns_env(); + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); + if(val->err_check_set(TEST_CHECKPOINT_1, status)) { + return; + } val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } diff --git a/tbsa-v8m/test_pool/tbsa_elf_combine.pl b/tbsa-v8m/test_pool/tbsa_elf_combine.pl deleted file mode 100755 index 8a28c622..00000000 --- a/tbsa-v8m/test_pool/tbsa_elf_combine.pl +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/perl -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - - -use File::Find; -use File::Basename; - -$test_pool_path = $ARGV[0]; -$output_elf = 'tbsa_test_combined.bin'; -my @all_elf_paths; - -sub uniq { - my %seen; - grep !$seen{$_}++, @_; -} - -print "Combining test ELFs\n"; - -# Final output elf file -open(OUT, '>:raw', $output_elf) or die "Unable to open: $!"; - -# Collecting all elf file paths -find sub { - return if -d; - if($File::Find::name =~ /\.c\.(elf)$/) { - # Store directory of elf for each test - push @all_elf_paths, dirname($File::Find::name); - } -}, $test_pool_path; - -# Remove duplicate elf folders since they were loaded twice for NS & S -@all_elf_paths = uniq(@all_elf_paths); - -@all_elf_paths = sort @all_elf_paths; - -foreach $thispath(@all_elf_paths) { - # Clear array consisting of ELFs for this test - undef @this_test_elfs; - - # Find ELFs for this test - find sub { - return if -d; - if($File::Find::name =~ /.(elf)$/) { - push @this_test_elfs, $File::Find::name; - } - }, $thispath; - - # Segregate NS and S ELFs - foreach $thiself(@this_test_elfs) { - if($thiself =~ /non_secure(\S+)elf/) { - $this_ns_elf = $thiself; - } - else { - $this_s_elf = $thiself; - } - } - - # Find elf sizes - $this_ns_elf_size = -s $this_ns_elf; - $this_s_elf_size = -s $this_s_elf; - - # Get readelf program header info from either elf and process it - $out = `readelf -l $this_ns_elf`; - if($out =~ /LOAD(\s+)(0[xX][0-9a-fA-F]+)/) { - $program_ns_header = hex($2); - } - $out = `readelf -l $this_s_elf`; - if($out =~ /LOAD(\s+)(0[xX][0-9a-fA-F]+)/) { - $program_s_header = hex($2); - } - - # Determining test_id from elf at location pointed by program header - open(TEST_NS_ID, '<:raw', $this_ns_elf) or die "Unable to open: $!"; - seek(TEST_NS_ID, $program_ns_header, 0); - read TEST_NS_ID, $test_id_ns_raw, 4; - open(TEST_S_ID, '<:raw', $this_s_elf) or die "Unable to open: $!"; - seek(TEST_S_ID, $program_s_header, 0); - read TEST_S_ID, $test_id_s_raw, 4; - - if($test_id_s_raw ne $test_id_ns_raw) { - die "\nTest ID creation is not same in $this_s_elf and $this_ns_elf!!!\n\n"; - } else { - $test_id = unpack('L<', $test_id_s_raw); - close TEST_S_ID; - close TEST_NS_ID; - } - - printf("test_id\t%4d : ", $test_id); - print "$this_s_elf\t$this_s_elf_size\t: $this_ns_elf\t$this_ns_elf_size\n"; - - # 'L' unsigned-32 ; '<' Little endian - print OUT pack('L<', 0xFACEFACE); - print OUT pack('L<', $test_id); - print OUT pack('L<', $this_s_elf_size); - print OUT pack('L<', $this_ns_elf_size); - - # Temporarily closing final ELF to concatenate ELFs - close OUT; - system("cat $this_s_elf >> $output_elf"); - system("cat $this_ns_elf >> $output_elf"); - # Open final ELF again - open(OUT, '>>:raw', $output_elf) or die "Unable to open: $!"; -} -print OUT pack('L<', 0xC3C3C3C3); -close OUT; diff --git a/tbsa-v8m/test_pool/timer/Makefile b/tbsa-v8m/test_pool/timer/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/timer/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/timer/test_t001/non_secure.c b/tbsa-v8m/test_pool/timer/test_t001/non_secure.c index 8224bd4c..30ce2b25 100644 --- a/tbsa-v8m/test_pool/timer/test_t001/non_secure.c +++ b/tbsa-v8m/test_pool/timer/test_t001/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,7 +22,7 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_TRUSTED_TIMERS_BASE, 1), CREATE_TEST_TITLE("Trusted and Non-trusted world operation to trusted timer"), - CREATE_REF_TAG("R030/R040/R050_TBSA_TIME-R120_TBSA_INFRA"), + CREATE_REF_TAG("R030/R040/R050_TBSA_TIME"), entry_hook, test_payload, exit_hook); diff --git a/tbsa-v8m/test_pool/timer/test_t001/secure.c b/tbsa-v8m/test_pool/timer/test_t001/secure.c index 71dec14d..abd8fe90 100644 --- a/tbsa-v8m/test_pool/timer/test_t001/secure.c +++ b/tbsa-v8m/test_pool/timer/test_t001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,7 +24,7 @@ **/ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_TRUSTED_TIMERS_BASE, 1), CREATE_TEST_TITLE("Trusted and Non-trusted world operation to trusted timer"), - CREATE_REF_TAG("R030/R040/R050_TBSA_TIME-R120_TBSA_INFRA"), + CREATE_REF_TAG("R030/R040/R050_TBSA_TIME"), entry_hook, test_payload, exit_hook); @@ -39,8 +39,6 @@ void timer_isr (void) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Disable Timer */ @@ -51,8 +49,6 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ @@ -126,7 +122,7 @@ void test_payload(tbsa_val_api_t *val) /* Initialise the timer */ status = val->timer_init(timer_desc->base, TIMER_VALUE_US, ((clocks_desc->sys_freq)/1000000)); - // Timeout value assignment - a better strategy needed? + /* Timeout value assignment */ timeout = 4 * TIMER_VALUE_US * ((clocks_desc->sys_freq)/1000000); /* Enable Timer */ @@ -136,14 +132,15 @@ void test_payload(tbsa_val_api_t *val) /* stay here till timer isr entered or timeout occurs, whichever comes early */ while (IS_TEST_PENDING(val->get_status()) && (--timeout)); - if(!timeout) { - val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_TIMEOUT); - timeout_flag = TRUE; - } - /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_EXT_INT(timer_desc->intr_id)); - if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + return; + } + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tInterrupt not reached target for Timer 0x%X!", (uint32_t)(timer_desc->base)); + val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_TIMEOUT); return; } } @@ -151,17 +148,13 @@ void test_payload(tbsa_val_api_t *val) } while(instance < GET_NUM_INSTANCE(timer_desc)); if (trusted_timer_found) { - if (timeout_flag) { - val->err_check_set(TEST_CHECKPOINT_7, TBSA_STATUS_TIMEOUT); - return; - } /* Installing Trusted Fault Handler for NS test */ status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } } else { - val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_NOT_FOUND); + val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_NOT_FOUND); return; } diff --git a/tbsa-v8m/test_pool/timer/test_t002/non_secure.c b/tbsa-v8m/test_pool/timer/test_t002/non_secure.c index 79bb84d1..5b52b4a1 100644 --- a/tbsa-v8m/test_pool/timer/test_t002/non_secure.c +++ b/tbsa-v8m/test_pool/timer/test_t002/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +17,7 @@ #include "val_test_common.h" -#define TIMEOUT_VALUE 0xFFFFFFFF +#define TIMEOUT_VALUE (0xFFFFFFFFUL) /** Publish these functions to the external world as associated to this test ID @@ -48,12 +48,12 @@ void entry_hook(tbsa_val_api_t *val) /* Disabling SecureFault, UsageFault, BusFault, MemFault temporarily */ status = val->mem_reg_read(SHCSR, &shcsr); - if (val->err_check_set(TEST_CHECKPOINT_B, status)) { + if (val->err_check_set(TEST_CHECKPOINT_A, status)) { return; } status = val->mem_reg_write(SHCSR, (shcsr & ~0xF0000)); - if (val->err_check_set(TEST_CHECKPOINT_C, status)) { + if (val->err_check_set(TEST_CHECKPOINT_B, status)) { return; } @@ -73,10 +73,12 @@ void test_payload(tbsa_val_api_t *val) status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, 0, 0), (uint8_t **)&soc_per, (uint32_t *)sizeof(soc_peripheral_hdr_t)); - if (val->err_check_set(TEST_CHECKPOINT_D, status)) { + if (val->err_check_set(TEST_CHECKPOINT_C, status)) { return; } + trusted_wd_timer_found = FALSE; + /* Check we have at least one trusted watch dog timer */ while (per_num < soc_per->num) { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, SOC_PERIPHERAL_WATCHDOG, instance), @@ -86,7 +88,7 @@ void test_payload(tbsa_val_api_t *val) break; } - if (val->err_check_set(TEST_CHECKPOINT_E, status)) { + if (status == TBSA_STATUS_NOT_FOUND) { return; } @@ -109,23 +111,38 @@ void test_payload(tbsa_val_api_t *val) /* Wait here till pending status is cleared by secure fault or timeout occurs, whichever comes early */ while (IS_TEST_PENDING(val->get_status()) && (--timeout)); + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing Secure WDOG 0x%X from NT world!", (uint32_t)(soc_per_desc->base)); + val->err_check_set(TEST_CHECKPOINT_D, TBSA_STATUS_TIMEOUT); + return; + } + trusted_wd_timer_found = TRUE; val->set_status(RESULT_PENDING(status)); + timeout = TIMEOUT_VALUE; /* Trying to read the clock source base address for a given trusted wd timer, expect secure fault? */ val_mem_read_wide((uint32_t *)soc_per_desc->clk_src, &data); /* wait here till pending status is cleared by secure fault */ - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing clock source for Secure WDOG 0x%X from NT world!", (uint32_t)(soc_per_desc->base)); + val->err_check_set(TEST_CHECKPOINT_E, TBSA_STATUS_TIMEOUT); + return; + } /* moving to next watchdog instance */ instance++; + timeout = TIMEOUT_VALUE; } if (!trusted_wd_timer_found) { /* We did not find any trusted watch dog */ - val->set_status(RESULT_FAIL(status)); + val->err_check_set(TEST_CHECKPOINT_F, TBSA_STATUS_TIMEOUT); + return; } } @@ -135,13 +152,13 @@ void exit_hook(tbsa_val_api_t *val) /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); - if (val->err_check_set(TEST_CHECKPOINT_F, status)) { + if (val->err_check_set(TEST_CHECKPOINT_10, status)) { return; } /* Restoring faults */ status = val->mem_reg_write(SHCSR, shcsr); - if (val->err_check_set(TEST_CHECKPOINT_10, status)) { + if (val->err_check_set(TEST_CHECKPOINT_11, status)) { return; } } diff --git a/tbsa-v8m/test_pool/timer/test_t002/secure.c b/tbsa-v8m/test_pool/timer/test_t002/secure.c index 5486573c..d7cdad50 100644 --- a/tbsa-v8m/test_pool/timer/test_t002/secure.c +++ b/tbsa-v8m/test_pool/timer/test_t002/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -41,10 +41,10 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } + g_val->print(PRINT_DEBUG, "\n\r\tFault triggered while accessing S WDOG from NS world!", 0); + /* Updating the return address in the stack frame in order to avoid periodic fault */ sf_args[6] = sf_args[6] + 4; } @@ -64,15 +64,6 @@ void HF_Handler(void) "b hard_fault_esr \n"); } -void setup_ns_env(void) -{ - tbsa_status_t status; - - /* Installing Trusted Fault Handler for NS test */ - status = g_val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - g_val->err_check_set(TEST_CHECKPOINT_9, status); -} - void entry_hook(tbsa_val_api_t *val) { tbsa_test_init_t init = { @@ -110,9 +101,20 @@ void test_payload(tbsa_val_api_t *val) } if (boot.wdogb == WDOG_BOOT_REQUESTED) { + + if (val->system_reset_type(WDOG_RESET) == FALSE) { + val->err_check_set(TEST_CHECKPOINT_B, status); + return; + } /* There was watchdog reset previously */ + + /* Installing Trusted Fault Handler for NS test */ + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); + if (val->err_check_set(TEST_CHECKPOINT_C, status)) { + return; + } + val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - setup_ns_env(); } else { /* * Ensure there exist at least one trusted watchdog timer @@ -133,8 +135,8 @@ void test_payload(tbsa_val_api_t *val) break; } - if (val->err_check_set(TEST_CHECKPOINT_4, status)) { - return; + if (status == TBSA_STATUS_NOT_FOUND) { + break; } if (soc_per_desc->attribute != SECURE_PROGRAMMABLE) { @@ -150,14 +152,14 @@ void test_payload(tbsa_val_api_t *val) */ /* Check whether trusted watchdog timer is enabled ? */ status = val->is_wd_timer_enabled(soc_per_desc->base); - if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { val->print(PRINT_ERROR, "\n\r\tWatchdog not enabled when control reached tbsa_entry()", 0); return; } /* Disable the watchdog now */ status = val->wd_timer_disable(soc_per_desc->base); - if (val->err_check_set(TEST_CHECKPOINT_6, status)) { + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } @@ -167,7 +169,7 @@ void test_payload(tbsa_val_api_t *val) if (!trusted_wd_timer_found) { /* We did not find any trusted watchdog */ - val->err_check_set(TEST_CHECKPOINT_7, status); + val->err_check_set(TEST_CHECKPOINT_6, status); val->set_status(RESULT_FAIL(status)); return; } @@ -183,7 +185,7 @@ void test_payload(tbsa_val_api_t *val) status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_CLOCKS, CLOCKS_SYS_FREQ, 0), (uint8_t **)&clocks_desc, (uint32_t *)sizeof(clocks_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_8, status)) { + if (val->err_check_set(TEST_CHECKPOINT_7, status)) { return; } @@ -192,7 +194,7 @@ void test_payload(tbsa_val_api_t *val) while (per_num < soc_per->num) { boot.wdogb = WDOG_BOOT_REQUESTED; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); - if (val->err_check_set(TEST_CHECKPOINT_9, status)) { + if (val->err_check_set(TEST_CHECKPOINT_8, status)) { return; } @@ -229,7 +231,7 @@ void exit_hook(tbsa_val_api_t *val) boot.wdogb = BOOT_UNKNOWN; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); - if (val->err_check_set(TEST_CHECKPOINT_A, status)) { + if (val->err_check_set(TEST_CHECKPOINT_9, status)) { return; } } diff --git a/tbsa-v8m/test_pool/timer/test_t003/non_secure.c b/tbsa-v8m/test_pool/timer/test_t003/non_secure.c index e222349c..3589113a 100644 --- a/tbsa-v8m/test_pool/timer/test_t003/non_secure.c +++ b/tbsa-v8m/test_pool/timer/test_t003/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,8 @@ #include "val_test_common.h" +#define TIMEOUT (0xFFFFFFFFUL) + /** Publish these functions to the external world as associated to this test ID **/ @@ -30,6 +32,7 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_TRUSTED_TIMERS_BASE, 3), soc_peripheral_hdr_t *soc_per; soc_peripheral_desc_t *soc_per_desc; memory_desc_t *memory_desc; +uint32_t shcsr; void entry_hook(tbsa_val_api_t *val) { @@ -46,9 +49,9 @@ void test_payload(tbsa_val_api_t *val) tbsa_status_t status; uint32_t instance; uint32_t data; - bool_t trtc_found = FALSE; + bool_t trtc_found = FALSE; boot_t boot; - uint32_t shcsr; + uint32_t timeout = TIMEOUT; status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), (uint8_t **)&memory_desc, @@ -64,13 +67,13 @@ void test_payload(tbsa_val_api_t *val) if (boot.cb != COLD_BOOT_REQUESTED) { instance = 0UL; - status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD), &instance, sizeof(instance)); + status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); if (val->err_check_set(TEST_CHECKPOINT_4, status)) { return; } } else { /* Getting instance value from NVRAM */ - status = val->nvram_read(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD), &instance, sizeof(instance)); + status = val->nvram_read(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); if (val->err_check_set(TEST_CHECKPOINT_5, status)) { return; } @@ -93,14 +96,14 @@ void test_payload(tbsa_val_api_t *val) return; } /* Writing instance value into NVRAM so that we go to next instance of TRTC in next run after reset */ - status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD), &instance, sizeof(instance)); + status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &instance, sizeof(instance)); if (val->err_check_set(TEST_CHECKPOINT_8, status)) { return; } /* Issuing cold boot request */ val->system_reset(COLD_RESET); /* Shouldn't come here */ - val->print(PRINT_ERROR, "\n\t Shouldn't comer here", 0); + val->print(PRINT_ERROR, "\n\r\tShouldn't comer here", 0); val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_ERROR); return; } @@ -127,6 +130,7 @@ void test_payload(tbsa_val_api_t *val) } break; } + val->print(PRINT_DEBUG, "\n\r\tRTC is not trustable - not synced with server!", 0); } /* Indicates TRTC is not Trusted when there is outage of power to TRTC */ boot.cb = COLD_BOOT_COMPLETED; @@ -166,25 +170,33 @@ void test_payload(tbsa_val_api_t *val) val_mem_read_wide((uint32_t *)(soc_per_desc->base + soc_per_desc->offset), &data); /* wait here till pending status is cleared by secure fault */ - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing TRTC address 0x%X from NT world!", (uint32_t)(soc_per_desc->base)); + val->err_check_set(TEST_CHECKPOINT_11, TBSA_STATUS_TIMEOUT); + return; + } val->set_status(RESULT_PENDING(status)); + timeout = TIMEOUT; /* Trying to read the clock source base address for a given TRTC, expect secure fault? */ val_mem_read_wide((uint32_t *)soc_per_desc->clk_src, &data); /* wait here till pending status is cleared by secure fault */ - while (IS_TEST_PENDING(val->get_status())); + while (IS_TEST_PENDING(val->get_status()) && --timeout); + + if(!timeout) { + val->print(PRINT_ERROR, "\n\r\tNo fault occurred when accessing clock source for TRTC 0x%X from NT world!", (uint32_t)(soc_per_desc->base)); + val->err_check_set(TEST_CHECKPOINT_12, TBSA_STATUS_TIMEOUT); + return; + } } instance++; + timeout = TIMEOUT; } while(instance < GET_NUM_INSTANCE(soc_per_desc)); - /* Restoring faults */ - status = val->mem_reg_write(SHCSR, shcsr); - if (val->err_check_set(TEST_CHECKPOINT_11, status)) { - return; - } - val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } @@ -192,16 +204,29 @@ void exit_hook(tbsa_val_api_t *val) { tbsa_status_t status; boot_t boot; + uint32_t default_val; + + /* Restoring faults */ + status = val->mem_reg_write(SHCSR, shcsr); + if (val->err_check_set(TEST_CHECKPOINT_13, status)) { + return; + } /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); - if (val->err_check_set(TEST_CHECKPOINT_12, status)) { + if (val->err_check_set(TEST_CHECKPOINT_14, status)) { return; } boot.cb = BOOT_UNKNOWN; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot)); - if (val->err_check_set(TEST_CHECKPOINT_13, status)) { + if (val->err_check_set(TEST_CHECKPOINT_15, status)) { + return; + } + + default_val = 0xFFFFFFFFUL; + status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SPAD1), &default_val, sizeof(default_val)); + if (val->err_check_set(TEST_CHECKPOINT_16, status)) { return; } } diff --git a/tbsa-v8m/test_pool/timer/test_t003/secure.c b/tbsa-v8m/test_pool/timer/test_t003/secure.c index 901ae313..d40e8500 100644 --- a/tbsa-v8m/test_pool/timer/test_t003/secure.c +++ b/tbsa-v8m/test_pool/timer/test_t003/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,8 +35,6 @@ void hard_fault_esr (unsigned long *sf_args) { if (IS_TEST_PENDING(g_val->get_status())) { g_val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); - } else { - g_val->set_status(RESULT_FAIL(TBSA_STATUS_INVALID)); } /* Updating the return address in the stack frame in order to avoid periodic fault */ diff --git a/tbsa-v8m/test_pool/version_counters/Makefile b/tbsa-v8m/test_pool/version_counters/Makefile deleted file mode 100644 index 7cfe1de7..00000000 --- a/tbsa-v8m/test_pool/version_counters/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# Toolchain -PREFIX:=arm-none-eabi- -CC:=$(PREFIX)gcc -CXX:=$(PREFIX)g++ -AS:=$(PREFIX)as -OBJCOPY:=$(PREFIX)objcopy -OBJDUMP:=$(PREFIX)objdump - -# Test specific macros -OUT_DIR:=./out - -# Root folder -ROOT_DIR:=. - -.PHONY: all clean - -VAL_LIB :=../../out/$(TARGET)/tbsa_val.a -PAL_LIB :=../../out/$(TARGET)/tbsa_pal.a -SYSLIBS :=$(VAL_LIB) $(PAL_LIB) -lgcc -lc -lnosys -INCDIR := ../../val/include/ -CFLAGS :=-march=armv8-m.$(ARCH) -mthumb -Wall -Werror -O0 -I$(INCDIR) -SBUILD :=-mcmse - -LDFLAGS :=\ - -Xlinker --fatal-warnings \ - -Xlinker --gc-sections \ - -z max-page-size=0x400 - -SFLAGS :=\ - $(CFLAGS) \ - $(SBUILD) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_s.linker \ - $(LDFLAGS) - -NSFLAGS :=\ - $(CFLAGS) \ - -nostartfiles \ - -T../../platform/board/${TARGET}/linker/test_ns.linker \ - $(LDFLAGS) - -s_src :=secure.c -ns_src :=non_secure.c - -DIR :=$(dir $(wildcard $(ROOT_DIR)/*/)) -DIR :=$(filter-out ./, $(DIR)) - -all: build - -build: - $(foreach d, $(DIR), mkdir -p $(d)$(OUT_DIR); \ - $(CC) $(SFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(s_src).map -o $(d)$(OUT_DIR)/$(s_src).elf $(d)$(s_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(s_src).elf -O binary $(d)$(OUT_DIR)/$(s_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(s_src).elf > $(d)$(OUT_DIR)/$(s_src).asm; \ - $(CC) $(NSFLAGS) -Xlinker -Map=$(d)$(OUT_DIR)/$(ns_src).map -o $(d)$(OUT_DIR)/$(ns_src).elf $(d)$(ns_src) $(SYSLIBS); \ - $(OBJCOPY) $(d)$(OUT_DIR)/$(ns_src).elf -O binary $(d)$(OUT_DIR)/$(ns_src).bin; \ - $(OBJDUMP) -d $(d)$(OUT_DIR)/$(ns_src).elf > $(d)$(OUT_DIR)/$(ns_src).asm;) - -clean: - $(foreach d, $(DIR), rm -rf $(d)$(OUT_DIR)) diff --git a/tbsa-v8m/test_pool/version_counters/test_v001/non_secure.c b/tbsa-v8m/test_pool/version_counters/test_v001/non_secure.c index 76ac7ca4..e3c73cf7 100644 --- a/tbsa-v8m/test_pool/version_counters/test_v001/non_secure.c +++ b/tbsa-v8m/test_pool/version_counters/test_v001/non_secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,6 +19,7 @@ #define TF_MIN_VER_CNT 64 #define NTF_MIN_VER_CNT 256 + /** Publish these functions to the external world as associated to this test ID **/ @@ -49,25 +50,25 @@ void test_payload(tbsa_val_api_t *val) { tbsa_status_t status; uint32_t instance = 0; - uint32_t fw_ver_count; + uint32_t fw_ver_count, fused_ver_count = 0; boot_t boot; uint32_t shcsr = 0; status = val->crypto_set_base_addr(SECURE_PROGRAMMABLE); - if (val->err_check_set(TEST_CHECKPOINT_1, status)) { + if (val->err_check_set(TEST_CHECKPOINT_2, status)) { return; } status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_2, status)) { - goto cleanup; + if (val->err_check_set(TEST_CHECKPOINT_3, status)) { + return; } status = val->nvram_read(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); - if (val->err_check_set(TEST_CHECKPOINT_3, status)) { - goto cleanup; + if (val->err_check_set(TEST_CHECKPOINT_4, status)) { + return; } if (boot.cb != COLD_BOOT_REQUESTED) { @@ -75,23 +76,23 @@ void test_payload(tbsa_val_api_t *val) status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, MISCELLANEOUS_VER_COUNT, instance), (uint8_t **)&misc_desc, (uint32_t *)sizeof(miscellaneous_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_4, status)) { - goto cleanup; + if (val->err_check_set(TEST_CHECKPOINT_5, status)) { + return; } /* Checking for on-chip non-volatile version counter range */ if ((misc_desc->fw_ver_type == TRUSTED) || (misc_desc->fw_ver_type == NON_TRUSTED)) { if (misc_desc->fw_ver_type == TRUSTED) { if (misc_desc->fw_ver_cnt_max < TF_MIN_VER_CNT) { - val->print(PRINT_DEBUG, "\nTrusted firmware version counter max should be >= %d", TF_MIN_VER_CNT); - val->err_check_set(TEST_CHECKPOINT_5, TBSA_STATUS_INCORRECT_VALUE); - goto cleanup; + val->print(PRINT_DEBUG, "\n\r\tTrusted firmware version counter max should be >= %d", TF_MIN_VER_CNT); + val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_INCORRECT_VALUE); + return; } } else { if (misc_desc->fw_ver_cnt_max < NTF_MIN_VER_CNT) { - val->print(PRINT_DEBUG, "\nNon-trusted firmware version counter max should be >= %d", NTF_MIN_VER_CNT); - val->err_check_set(TEST_CHECKPOINT_6, TBSA_STATUS_INCORRECT_VALUE); - goto cleanup; + val->print(PRINT_DEBUG, "\n\r\tNon-trusted firmware version counter max should be >= %d", NTF_MIN_VER_CNT); + val->err_check_set(TEST_CHECKPOINT_7, TBSA_STATUS_INCORRECT_VALUE); + return; } } } @@ -99,40 +100,48 @@ void test_payload(tbsa_val_api_t *val) /* Reading the current firmware version counter */ fw_ver_count = val->firmware_version_read(instance, misc_desc->fw_ver_type); - /* Updating the firmware version count(trusted mode) */ - status = val->firmware_version_update(instance, misc_desc->fw_ver_type, ++fw_ver_count); - if (val->err_check_set(TEST_CHECKPOINT_7, status)) { - goto cleanup; + /* Skip the test if max version was already fused */ + if (fw_ver_count == misc_desc->fw_ver_cnt_max) { + val->set_status(RESULT_SKIP(status)); + return; } - /* Updating firmware version(lower than previous counter), expecting failure ! */ - status = val->firmware_version_update(instance, misc_desc->fw_ver_type, --fw_ver_count); - if (status == TBSA_STATUS_SUCCESS) { + /* Updating the firmware version count(trusted mode) */ + val->firmware_version_update(instance, misc_desc->fw_ver_type, ++fw_ver_count); + + /* Check if the versoin is incremented */ + fused_ver_count = val->firmware_version_read(instance, misc_desc->fw_ver_type); + if (fused_ver_count != (fw_ver_count)) { val->err_check_set(TEST_CHECKPOINT_8, TBSA_STATUS_INVALID); - goto cleanup; + return; } - /* which confirms we cannot decrement firmware version counter */ - - /* When a version counter reaches its maximum value, it must not roll over, - * and no further changes must be possible + /* Updating firmware version(lower than previous counter) + * which confirms we cannot decrement firmware version counter */ - status = val->firmware_version_update(instance, misc_desc->fw_ver_type, misc_desc->fw_ver_cnt_max); - if (status != TBSA_STATUS_SUCCESS) { - val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_INVALID); - goto cleanup; + val->firmware_version_update(instance, misc_desc->fw_ver_type, --fw_ver_count); + fused_ver_count = val->firmware_version_read(instance, misc_desc->fw_ver_type); + if (fused_ver_count != (++fw_ver_count)) { + val->err_check_set(TEST_CHECKPOINT_9, TBSA_STATUS_INVALID); + return; } - status = val->firmware_version_update(instance, misc_desc->fw_ver_type, (misc_desc->fw_ver_cnt_max + 1)); - if (status == TBSA_STATUS_SUCCESS) { + /* Updating the firmware version count to max */ + val->firmware_version_update(instance, misc_desc->fw_ver_type, misc_desc->fw_ver_cnt_max); + fused_ver_count = val->firmware_version_read(instance, misc_desc->fw_ver_type); + if (fused_ver_count != misc_desc->fw_ver_cnt_max) { val->err_check_set(TEST_CHECKPOINT_A, TBSA_STATUS_INVALID); - goto cleanup; + return; } - /* Reading trusted firmware version counter */ - if(misc_desc->fw_ver_cnt_max != val->firmware_version_read(instance, misc_desc->fw_ver_type)) { + /* When a version counter reaches its maximum value, it must not roll over, + * and no further changes must be possible + */ + status = val->firmware_version_update(instance, misc_desc->fw_ver_type, (misc_desc->fw_ver_cnt_max + 1)); + fused_ver_count = val->firmware_version_read(instance, misc_desc->fw_ver_type); + if (misc_desc->fw_ver_cnt_max != fused_ver_count) { val->err_check_set(TEST_CHECKPOINT_B, TBSA_STATUS_INVALID); - goto cleanup; + return; } /* Updating the firmware version count(non-trusted mode) */ @@ -140,7 +149,7 @@ void test_payload(tbsa_val_api_t *val) boot.cb = COLD_BOOT_REQUESTED; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); if (val->err_check_set(TEST_CHECKPOINT_C, status)) { - goto cleanup; + return; } /* Disabling SecureFault, UsageFault, BusFault, MemFault temporarily */ @@ -159,13 +168,15 @@ void test_payload(tbsa_val_api_t *val) return; } + val_crypto_set_base_addr(SECURE_PROGRAMMABLE); + /* Updating the firmware version count(non-trusted mode), secure-fault is expected! */ - val_firmware_version_update(instance, misc_desc->fw_ver_type, fw_ver_count); + val_firmware_version_update(instance, misc_desc->fw_ver_type, ++fw_ver_count); /* Test shouldn't come here */ - val->print(PRINT_ERROR, "\n\t Error: able to update the version counter from NTW", 0); + val->print(PRINT_ERROR, "\n\r\t Error: able to update the version counter from NTW", 0); val->err_check_set(TEST_CHECKPOINT_10, TBSA_STATUS_ERROR); - goto cleanup; + return; } /* confirms roll over didn't happen */ @@ -176,18 +187,18 @@ void test_payload(tbsa_val_api_t *val) boot.cb = BOOT_UNKNOWN; status = val->nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_BOOT), &boot, sizeof(boot_t)); if (val->err_check_set(TEST_CHECKPOINT_11, status)) { - goto cleanup; + return; } status = val->nvram_read(memory_desc->start, TBSA_NVRAM_OFFSET(NV_SHCSR), &shcsr, sizeof(shcsr)); if (val->err_check_set(TEST_CHECKPOINT_12, status)) { - goto cleanup; + return; } /* Restoring faults */ status = val->mem_reg_write(SHCSR, shcsr); if (val->err_check_set(TEST_CHECKPOINT_13, status)) { - goto cleanup; + return; } do { @@ -195,29 +206,28 @@ void test_payload(tbsa_val_api_t *val) (uint8_t **)&misc_desc, (uint32_t *)sizeof(miscellaneous_desc_t)); if (val->err_check_set(TEST_CHECKPOINT_14, status)) { - goto cleanup; + return; } /* Check if version is preserved across reset */ if(misc_desc->fw_ver_cnt_max != val->firmware_version_read(instance, misc_desc->fw_ver_type)) { val->err_check_set(TEST_CHECKPOINT_15, TBSA_STATUS_INVALID); - goto cleanup; + return; } instance++; } while (instance < GET_NUM_INSTANCE(misc_desc)); - } val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); +} + +void exit_hook(tbsa_val_api_t *val) +{ + tbsa_status_t status; -cleanup: /* Restoring default Handler */ status = val->interrupt_restore_handler(EXCP_NUM_HF); if (val->err_check_set(TEST_CHECKPOINT_16, status)) { return; } } - -void exit_hook(tbsa_val_api_t *val) -{ -} diff --git a/tbsa-v8m/test_pool/version_counters/test_v001/secure.c b/tbsa-v8m/test_pool/version_counters/test_v001/secure.c index 132a26e1..021f6281 100644 --- a/tbsa-v8m/test_pool/version_counters/test_v001/secure.c +++ b/tbsa-v8m/test_pool/version_counters/test_v001/secure.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,8 +29,7 @@ TBSA_TEST_PUBLISH(CREATE_TEST_ID(TBSA_VERSION_COUNTERS_BASE, 1), tbsa_val_api_t *g_val; -void -hard_fault_esr (unsigned long *sf_args) +void hard_fault_esr (unsigned long *sf_args) { /* Issue system warm reset */ g_val->system_reset(COLD_RESET); @@ -40,8 +39,7 @@ hard_fault_esr (unsigned long *sf_args) } __attribute__((naked)) -void -HF_Handler(void) +void HF_Handler(void) { asm volatile("mrs r0, control_ns \n" "mov r1, #0x2 \n" @@ -55,16 +53,6 @@ HF_Handler(void) "b hard_fault_esr \n"); } -void -setup_ns_env(void) -{ - tbsa_status_t status; - - /* Installing Trusted Fault Handler for NS test */ - status = g_val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); - g_val->err_check_set(TEST_CHECKPOINT_1, status); -} - void entry_hook(tbsa_val_api_t *val) { tbsa_test_init_t init = { @@ -79,8 +67,14 @@ void entry_hook(tbsa_val_api_t *val) void test_payload(tbsa_val_api_t *val) { + tbsa_status_t status; + /* setup environment for NS test */ - setup_ns_env(); + /* Installing Trusted Fault Handler for NS test */ + status = val->interrupt_setup_handler(EXCP_NUM_HF, 0, HF_Handler); + if (val->err_check_set(TEST_CHECKPOINT_1, status)) { + return; + } val->set_status(RESULT_PASS(TBSA_STATUS_SUCCESS)); } diff --git a/tbsa-v8m/tools/debug/debugger_script.ini b/tbsa-v8m/tools/debug/debugger_script.ini new file mode 100755 index 00000000..9187c668 --- /dev/null +++ b/tbsa-v8m/tools/debug/debugger_script.ini @@ -0,0 +1,255 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +/* + DPM debugger script + + SEQ_TEST_END 0 + SEQ_OPEN_STATE_READ 1 + SEQ_OPEN_STATE_WRITE 2 + SEQ_CLOSED_STATE_READ 3 + SEQ_CLOSED_STATE_WRITE 4 + SEQ_LOCKED_STATE_READ 5 + SEQ_NEXT_TEST 6 + + +*/ + + + +FUNC void f1 (void) +{ + unsigned int flagAddr; + unsigned int dataAddr; + int flag_register; + int data; + int run_status; + int output; + int addr; + int debug; + unsigned int debugAddr; + int i; + +/* #defines for sequences to be executed */ + int SEQ_OPEN_STATE_READ; + int SEQ_OPEN_STATE_WRITE; + int SEQ_CLOSED_STATE_READ; + int SEQ_CLOSED_STATE_WRITE; + int SEQ_LOCKED_STATE_READ; +//#SEQ_LOCKED_STATE_WRITE = 0x60 + int SEQ_NEXT_TEST; + int SEQ_TEST_END; + +//#defines for indicating signature to PE + unsigned int DBG_INIT_SIGNATURE; + unsigned int DBG_NEXT_SIGNATURE; + +//#defines for status handshake between core and debugger + int DBG_FLAG_TXFULL; + int DBG_FLAG_RXFULL; + int DBG_FLAG_READY; + +/* #defines for sequences to be executed */ + SEQ_OPEN_STATE_READ=0x10; + SEQ_OPEN_STATE_WRITE=0x20; + SEQ_CLOSED_STATE_READ=0x30; + SEQ_CLOSED_STATE_WRITE=0x40; + SEQ_LOCKED_STATE_READ=0x50; +//#SEQ_LOCKED_STATE_WRITE = 0x60 + SEQ_NEXT_TEST = 0xE0; + SEQ_TEST_END = 0xF0; + +//#defines for indicating signature to PE + DBG_INIT_SIGNATURE = 0xDEED007; + DBG_NEXT_SIGNATURE = 0xDEED008; + +//#defines for status handshake between core and debugger + DBG_FLAG_TXFULL = 0x1; + DBG_FLAG_RXFULL = 0x2; + DBG_FLAG_READY = 0x4; + + flagAddr = 0x30017FF0;//flagAddr = &gFlag; + dataAddr = 0x30017FF4;//dataAddr = &gData; + + printf("0x%08x 0x%08x\n", flagAddr, dataAddr); + + _WDWORD(dataAddr,DBG_INIT_SIGNATURE); + _WDWORD(flagAddr,DBG_FLAG_READY); + printf("0x%08x 0x%08x\n", _RDWORD(flagAddr), _RDWORD(dataAddr)); + + _break_ = 0; + + run_status = 0; + while(run_status != SEQ_TEST_END) + { + flag_register = _RDWORD(flagAddr); + run_status = flag_register & 0xf0; + + if((flag_register & 0xff) == 0x0) + { + _WDWORD(flagAddr,DBG_FLAG_READY); + _sleep_(100); + _break_=0; + exec("g"); + continue; + } + + if(run_status == SEQ_OPEN_STATE_READ) + { + //printf("SEQ_OPEN_STATE_READ : 0x%x\n", _RDWORD(flagAddr)); + _WDWORD(flagAddr,0); + data = _RDWORD(dataAddr); + output = _RDWORD(data); + _WDWORD(dataAddr,output); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + //printf("SEQ_OPEN_STATE_READ is finished\n"); + exec("g"); + } + else if(run_status == SEQ_OPEN_STATE_WRITE) + { + //printf("SEQ_OPEN_STATE_WRITE : 0x%x\n", _RDWORD(flagAddr)); + _WDWORD(flagAddr,0); + addr = _RDWORD(dataAddr); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_ = 0; + exec("g"); + + //while(!_break_); + while((_RDWORD(flagAddr) & DBG_FLAG_TXFULL) == 0x0); + + _WDWORD(flagAddr,0); + data = _RDWORD(dataAddr); + _WDWORD(addr, data); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + //printf("SEQ_OPEN_STATE_WRITE is finished\n"); + exec("g"); + } + else if(run_status == SEQ_CLOSED_STATE_READ) + { + //printf("SEQ_CLOSED_STATE_READ : 0x%x\n", _RDWORD(flagAddr)); + // DPM in OPEN state + _WDWORD(flagAddr,0); + data = _RDWORD(dataAddr); + printf("SEQ_CLOSED_STATE_READ = %X\n", data); + _WDWORD(flagAddr, DBG_FLAG_READY); + + _sleep_(10); + _break_=0; + exec("g"); + + // DPM shall move to CLOSED state + while((_RDWORD(flagAddr) & 0xf0) != SEQ_CLOSED_STATE_READ); + _WDWORD(flagAddr, 0); + output = _RDWORD(data); + printf("SEQ_CLOSED_STATE_READ = %X\n", output); + + _WDWORD(dataAddr,output); + printf("SEQ_CLOSED_STATE_READ = %X\n", _RDWORD(dataAddr)); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + printf("SEQ_CLOSED_STATE_READ finished\n"); + exec("g"); + + } + //# Add the code : check if still getting DAP error, to ensure that read access happened in closed state + else if(run_status == SEQ_CLOSED_STATE_WRITE) + { + //printf("SEQ_CLOSED_STATE_WRITE : 0x%x\n", _RDWORD(flagAddr)); + _WDWORD(flagAddr,0); + addr = _RDWORD(dataAddr); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + exec("g"); + + while((_RDWORD(flagAddr) & DBG_FLAG_TXFULL) == 0x0); + + _WDWORD(flagAddr,0); + data = _RDWORD(dataAddr); + _WDWORD(addr, data); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + //printf("SEQ_CLOSED_STATE_WRITE finished\n"); + exec("g"); + } + //# Add the code : check if still getting DAP error, to ensure that read access happened in closed state + else if(run_status == SEQ_LOCKED_STATE_READ) + { + _WDWORD(flagAddr,0); + data = _RDWORD(dataAddr); + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + exec("g"); + + //# Add the code : wait for DAP error + //output = ec.getMemoryService().readMemory32(data) # this read must happen while still getting DAP error. + output = _RDWORD(data); + + //# Add the code : check if still getting DAP error, to ensure that read access happened in closed state + while(!_break_); + + _WDWORD(flagAddr,0); + _WDWORD(dataAddr,output); + + //#Set flag register appropriately so that CPU can proceed. + _WDWORD(flagAddr,DBG_FLAG_READY|DBG_FLAG_RXFULL); + + _sleep_(10); + _break_=0; + exec("g"); + } + //# This seq is to indicate to proceed to next test. + else if(run_status == SEQ_NEXT_TEST) + { + _WDWORD(dataAddr,DBG_NEXT_SIGNATURE); + printf("SEQ_NEXT_TEST dataAddr = %x", _RDWORD(dataAddr)); + printf("proceed to next debug test\n"); + _WDWORD(flagAddr,DBG_FLAG_READY); + + _sleep_(100); + _break_=0; + exec("g"); + } + } + printf("Debugger script Done!\n"); +} + + +g,main + +bs WRITE 0x30017FF0, 1, "_break_=1" +_sleep_(1000) +g + +f1() + diff --git a/tbsa-v8m/tools/gen_linker_scripts/gen_linker_scripts.py b/tbsa-v8m/tools/gen_linker_scripts/gen_linker_scripts.py index 67f16e8e..f79bd4a4 100644 --- a/tbsa-v8m/tools/gen_linker_scripts/gen_linker_scripts.py +++ b/tbsa-v8m/tools/gen_linker_scripts/gen_linker_scripts.py @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,17 +22,23 @@ from linker_address_length import * num_args = len(sys.argv) -if (num_args != 2): - print("\nTarget string is required as second argument!") + +if (num_args != 7): + print("\nPkease provide following inputs") + print("\narg1 : <.../tbsa_tgt.cfg>") + print("\narg2 : <.../Linker script template for tbsa.elf>") + print("\narg3 : <.../Linker script template for test ELF>") + print("\narg4 : <.../tbsa.linker>") + print("\narg5 : <.../test_s.linker>") + print("\narg6 : <.../test_ns.linker>") sys.exit(1) -tbsa_linker_path = "../../platform/board/" + sys.argv[1] + "/linker" -tbsa_tgt_cfg_file = "../../platform/board/" + sys.argv[1] + "/tbsa_tgt.cfg" -src_tbsa_template = "./tbsa.linker.template" -src_test_template = "./test.linker.template" -dst_tbsa_linker = tbsa_linker_path + "/tbsa.linker" -dst_test_s_linker = tbsa_linker_path + "/test_s.linker" -dst_test_ns_linker= tbsa_linker_path + "/test_ns.linker" +tbsa_tgt_cfg_file = sys.argv[1] +src_tbsa_template = sys.argv[2] +src_test_template = sys.argv[3] +dst_tbsa_linker = sys.argv[4] +dst_test_s_linker = sys.argv[5] +dst_test_ns_linker= sys.argv[6] s_addr = "" ns_addr = "" @@ -48,11 +54,6 @@ print("The Target Configuration File is not preset for a given target!!!") sys.exit(1) -# Create linker directory in the appropriate target path -if os.path.exists(tbsa_linker_path): - shutil.rmtree(tbsa_linker_path) -os.makedirs(tbsa_linker_path) - # Subroutine which search and replaces the input strings in a given file def update_addr(file_handle, replace_from, replace_to): # Read the file @@ -105,25 +106,25 @@ def update_addr(file_handle, replace_from, replace_to): update_addr(dst_tbsa_linker, "TBSA_TEXT_START", \ s_addr) update_addr(dst_tbsa_linker, "TBSA_TEXT_LENGTH", \ - TBSA_TEXT_LENGTH) + hex(int(TBSA_TEXT_LENGTH[:TBSA_TEXT_LENGTH.find("K")]) * 1024)) update_addr(dst_tbsa_linker, "TBSA_DATA_START", \ hex(int(s_addr, 16) + \ (int(TBSA_TEXT_LENGTH[:TBSA_TEXT_LENGTH.find("K")]) * 1024))) update_addr(dst_tbsa_linker, "TBSA_DATA_LENGTH", \ - TBSA_DATA_LENGTH) + hex(int(TBSA_DATA_LENGTH[:TBSA_DATA_LENGTH.find("K")]) * 1024)) update_addr(dst_tbsa_linker, "TBSA_NS_DATA_START", \ ns_addr) update_addr(dst_tbsa_linker, "TBSA_NS_DATA_LENGTH", \ - TBSA_NS_DATA_LENGTH) + hex(int(TBSA_NS_DATA_LENGTH[:TBSA_NS_DATA_LENGTH.find("K")]) * 1024)) update_addr(dst_tbsa_linker, "TBSA_NS_TEXT_START", \ hex(int(ns_addr, 16) + \ (int(TBSA_NS_DATA_LENGTH[:TBSA_NS_DATA_LENGTH.find("K")]) * 1024))) update_addr(dst_tbsa_linker, "TBSA_NS_TEXT_LENGTH", \ - TBSA_NS_TEXT_LENGTH) + hex(int(TBSA_NS_TEXT_LENGTH[:TBSA_NS_TEXT_LENGTH.find("K")]) * 1024)) update_addr(dst_tbsa_linker, "TBSA_NSC_TEXT_START", \ nsc_addr) update_addr(dst_tbsa_linker, "TBSA_NSC_TEXT_LENGTH", \ - TBSA_NSC_TEXT_LENGTH) + hex(int(TBSA_NSC_TEXT_LENGTH[:TBSA_NSC_TEXT_LENGTH.find("K")]) * 1024)) update_addr(dst_tbsa_linker, "TBSA_TEST_S_START", \ s_test_addr) update_addr(dst_tbsa_linker, "TBSA_TEST_S_END", \ @@ -143,32 +144,32 @@ def update_addr(file_handle, replace_from, replace_to): update_addr(dst_test_s_linker, "TBSA_TEST_INFO_START", \ s_test_addr) update_addr(dst_test_s_linker, "TBSA_TEST_INFO_LENGTH", \ - TBSA_TEST_INFO_LENGTH) + hex(int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024)) update_addr(dst_test_s_linker, "TBSA_TEST_TEXT_START", \ hex(int(s_test_addr,16) + \ (int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024))) update_addr(dst_test_s_linker, "TBSA_TEST_TEXT_LENGTH", \ - TBSA_TEST_TEXT_LENGTH) + hex(int(TBSA_TEST_TEXT_LENGTH[:TBSA_TEST_TEXT_LENGTH.find("K")]) * 1024)) update_addr(dst_test_s_linker, "TBSA_TEST_DATA_START", \ hex(int(s_test_addr, 16) + \ (int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024) + \ (int(TBSA_TEST_TEXT_LENGTH[:TBSA_TEST_TEXT_LENGTH.find("K")]) * 1024))) update_addr(dst_test_s_linker, "TBSA_TEST_DATA_LENGTH", \ - TBSA_TEST_DATA_LENGTH) + hex(int(TBSA_TEST_DATA_LENGTH[:TBSA_TEST_DATA_LENGTH.find("K")]) * 1024)) # Updating NS test linker script with address from target configuration file update_addr(dst_test_ns_linker, "TBSA_TEST_INFO_START", \ ns_test_addr) update_addr(dst_test_ns_linker, "TBSA_TEST_INFO_LENGTH", \ - TBSA_TEST_INFO_LENGTH) + hex(int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024)) update_addr(dst_test_ns_linker, "TBSA_TEST_TEXT_START", \ hex(int(ns_test_addr,16) + \ (int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024))) update_addr(dst_test_ns_linker, "TBSA_TEST_TEXT_LENGTH", \ - TBSA_TEST_TEXT_LENGTH) + hex(int(TBSA_TEST_TEXT_LENGTH[:TBSA_TEST_TEXT_LENGTH.find("K")]) * 1024)) update_addr(dst_test_ns_linker, "TBSA_TEST_DATA_START", \ hex(int(ns_test_addr, 16) + \ (int(TBSA_TEST_INFO_LENGTH[:TBSA_TEST_INFO_LENGTH.find("K")]) * 1024) + \ (int(TBSA_TEST_TEXT_LENGTH[:TBSA_TEST_TEXT_LENGTH.find("K")]) * 1024))) update_addr(dst_test_ns_linker, "TBSA_TEST_DATA_LENGTH", \ - TBSA_TEST_DATA_LENGTH) + hex(int(TBSA_TEST_DATA_LENGTH[:TBSA_TEST_DATA_LENGTH.find("K")]) * 1024)) diff --git a/tbsa-v8m/tools/gen_linker_scripts/linker_address_length.py b/tbsa-v8m/tools/gen_linker_scripts/linker_address_length.py index 452cadf1..65fed597 100644 --- a/tbsa-v8m/tools/gen_linker_scripts/linker_address_length.py +++ b/tbsa-v8m/tools/gen_linker_scripts/linker_address_length.py @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,7 +15,7 @@ # * limitations under the License. #**/ -TBSA_TEXT_LENGTH = "60K" +TBSA_TEXT_LENGTH = "32K" TBSA_DATA_LENGTH = "3K" TBSA_NS_DATA_LENGTH = "6K" TBSA_NS_TEXT_LENGTH = "2K" diff --git a/tbsa-v8m/tools/gen_linker_scripts/tbsa.linker.template b/tbsa-v8m/tools/gen_linker_scripts/tbsa.linker.template index 549f5444..82980cfb 100644 --- a/tbsa-v8m/tools/gen_linker_scripts/tbsa.linker.template +++ b/tbsa-v8m/tools/gen_linker_scripts/tbsa.linker.template @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -88,6 +88,7 @@ SECTIONS *(.text*) *(.rodata) *(.rodata*) + KEEP(*(.tbsa_ns_text)) __tbsa_ns_text_end__ = .; } > TBSA_NS_TEXT diff --git a/tbsa-v8m/tools/gen_linker_scripts/test.linker.template b/tbsa-v8m/tools/gen_linker_scripts/test.linker.template index eb25e9f8..6f9c438d 100644 --- a/tbsa-v8m/tools/gen_linker_scripts/test.linker.template +++ b/tbsa-v8m/tools/gen_linker_scripts/test.linker.template @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,9 +25,9 @@ MEMORY SECTIONS { - .tbsa_info : + .tbsa_test_info : { - KEEP(*(.tbsa_info)) + KEEP(*(.tbsa_test_info)) } > TBSA_TEST_INFO .text : @@ -36,10 +36,6 @@ SECTIONS *(.text*) *(.rodata) *(.rodata*) - } > TBSA_TEST_TEXT - - .ns_target_database : - { . = ALIGN(4); KEEP(*(.ns_target_database)) . = ALIGN(4); diff --git a/tbsa-v8m/tools/test_elf_combine.py b/tbsa-v8m/tools/test_elf_combine.py new file mode 100644 index 00000000..5d540c29 --- /dev/null +++ b/tbsa-v8m/tools/test_elf_combine.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +import sys +import os +from fnmatch import fnmatch +import shutil +import binascii + +if (len(sys.argv) != 3): + print("\nPlease provide following inputs") + print("\narg1 : ") + print("\narg2 : ") + sys.exit(1) + +test_elfs_path = sys.argv[1] +output_file = sys.argv[2] +file_extension = "*secure.elf" +test_elfs = [] +offset = 1024 + +# Gell the list of all test elfs +for path, subdirs, files in os.walk(test_elfs_path): + for name in files: + if fnmatch(name, file_extension): + test_elfs.append(os.path.join(path, name)) + +# Sort the list as per the components in alphabetical order +if (len(test_elfs) == 0): + print("[TBSA] Error: No test ELFs found at %s" % (test_elfs_path)) + sys.exit(1) + +test_elfs = sorted(test_elfs) + +def test_elf_combine(): + """ + This function goes through the list of available test ELFs + Creates output binary file + + """ + elf_num = 0 + while elf_num < len(test_elfs): + test_id_s = '' + test_id_ns = '' + + cur_elf = test_elfs[elf_num] + # extract test_id from Non-secure file + with open(cur_elf, mode='rb') as f: + f.seek(offset) + test_id_ns = ord(f.read(1)) + + cur_elf = test_elfs[elf_num+1] + # extract test_id from Secure file + with open(cur_elf, mode='rb') as f: + f.seek(offset) + test_id_s = ord(f.read(1)) + + # Check for test_id mismatch between Secure and Non-secure file + if (test_id_ns != test_id_s): + print("Mismatch in test_id configuration between Secure and Non-secure file respectively for %s and %s" % (test_elfs[elf_num+1], test_elfs[elf_num])) + sys.exit(1) + + """ + Create output binary file with the below format + + +---------------+ +----------------+ + | TEST#0 header |-----------> | START MARKER | + | | |----------------| + | Test#0 S ELF | | Test#n ID | + | | |----------------| + | Test#0 NS ELF | | Test#n S size | + +---------------+ |----------------| + | TEST#1 header | | Test#n NS size | + | | +----------------+ + | Test#1 S ELF | + | | + | Test#1 NS ELF | + +---------------+ + | + . + | + . + +---------------+ + | TEST#n header | + | | + | Test#n S ELF | + | | + | Test#n NS ELF | + +---------------+ + | END MARKER | + +---------------+ + + """ + with open(output_file, "ab") as write_file: + # Print details to console + print("test_id %04d : %s\t%05d : %s\t%05d" \ + %(test_id_s, test_elfs[elf_num+1], os.path.getsize(test_elfs[elf_num+1]), test_elfs[elf_num], os.path.getsize(test_elfs[elf_num]))) + # Writing START_MARKER + start_marker = "FACEFACE" + start_marker = "".join(reversed([start_marker[i:i+2] for i in range(0, len(start_marker), 2)])) + write_file.write(binascii.a2b_hex(start_marker)) + # Writing TEST ID + test_id = "{:08x}".format(test_id_s) + test_id = "".join(reversed([test_id[i:i+2] for i in range(0, len(test_id), 2)])) + write_file.write(binascii.a2b_hex(test_id)) + # Writing Secure Test ELF Size + s_file_size = "{:08x}".format(os.path.getsize(test_elfs[elf_num+1])) + s_file_size = "".join(reversed([s_file_size[i:i+2] for i in range(0, len(s_file_size), 2)])) + write_file.write(binascii.a2b_hex(s_file_size)) + # Writing Non-secure Test ELF Size + ns_file_size = "{:08x}".format(os.path.getsize(test_elfs[elf_num])) + ns_file_size = "".join(reversed([ns_file_size[i:i+2] for i in range(0, len(ns_file_size), 2)])) + write_file.write(binascii.a2b_hex(ns_file_size)) + with open(test_elfs[elf_num+1], "rb") as read_file: + shutil.copyfileobj(read_file, write_file) + with open(test_elfs[elf_num], "rb") as read_file: + shutil.copyfileobj(read_file, write_file) + + elf_num = elf_num + 2 + + with open(output_file, "ab") as write_file: + end_marker = "C3C3C3C3" + write_file.write(binascii.a2b_hex(end_marker)) + +# Calling elf_combine method to generate final combined binary of all the available test ELFs +test_elf_combine() diff --git a/tbsa-v8m/tools/tgt_cfg_parser/CMakeLists.txt b/tbsa-v8m/tools/tgt_cfg_parser/CMakeLists.txt new file mode 100644 index 00000000..5b60e49a --- /dev/null +++ b/tbsa-v8m/tools/tgt_cfg_parser/CMakeLists.txt @@ -0,0 +1,75 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Set the minimum required version of CMake for the project +cmake_minimum_required(VERSION 3.10) + +# cmake_policy +cmake_policy(SET CMP0057 NEW) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake) +include("common/CMakeSettings") +include("common/Utils") + +# Let the CMake look for C compiler +project(TargetConfigGen LANGUAGES C) + +# Check whether required arguments are passed to CMake +_check_arguments("OUT_DIR" + "TARGET" + "GENERATOR_FILE" + "INCLUDE_DIR" + "TARGET_CONFIGURATION_FILE" + "TGT_CONFIG_SOURCE_C" + "OUTPUT_HEADER" + "DATABASE_TABLE_NAME" + "DATABASE_TABLE_SECTION_NAME" +) + +# add_custom_command to generate intermediate source file +add_custom_command( + OUTPUT + ${TGT_CONFIG_SOURCE_C} + COMMENT "[TBSA] : Creating generator source ${TGT_CONFIG_SOURCE_C}" + COMMAND ${PYTHON_EXECUTABLE} ${GENERATOR_FILE} ${TARGET} ${INCLUDE_DIR}/val_target.h ${TARGET_CONFIGURATION_FILE} ${TGT_CONFIG_SOURCE_C} ${OUTPUT_HEADER} ${DATABASE_TABLE_NAME} ${DATABASE_TABLE_SECTION_NAME} +) + +# Adding command to execute the generator +add_custom_command( + OUTPUT + ${OUTPUT_HEADER} + COMMENT "[TBSA] : Creating output header ${OUTPUT_HEADER}" + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} + DEPENDS ${TGT_CONFIG_SOURCE_C} +) + +# Adding executable +add_executable(${PROJECT_NAME} ${TGT_CONFIG_SOURCE_C}) +target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDE_DIR}) +set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "-m32 -w") +set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-m32") + +# Adding target to tell we want OUTPUT_HEADER +add_custom_target( + run_generator_output ALL + SOURCES ${OUTPUT_HEADER} + DEPENDS ${PROJECT_NAME} +) + +# install target to put the OUTPUT_HEADER to it's final location +get_filename_component(INSTALL_DST "${OUT_DIR}" ABSOLUTE) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER} DESTINATION ${INSTALL_DST}) diff --git a/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.pl b/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.pl deleted file mode 100755 index 0f499992..00000000 --- a/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.pl +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/perl -#/** @file -# * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ -#--------------------------------------------------------------------- -# USAGE: -# 1) perl -# 2) gcc -o -# 3) ./ -# 4) Resulting output file is target.hex -#--------------------------------------------------------------------- -# THIS SCRIPT : -# 1) Reads the targetConfig.cfg file written in pre-defined format. -# 2) * Generates a C file based on targetConfig, complete with all -# variable declarations and C syntax formatting. -# * It will #include val_target.h header file which contains -# template info about each device described in targetConfig. -# * This header file is also used by test code to unpack the -# resulting hex file. -# 3) The autogenerated C file will then be compiled and the resulting -# executable run to generate target.hex file: which is the packed -# output of the targetConfig.cfg parameters. -#--------------------------------------------------------------------- -# NOTE: Only C-style single line commenting is permitted inside targetConfig.cfg -#--------------------------------------------------------------------- - -$targetConfigPath = $ARGV[0]; -$final_output = $ARGV[1]; -$output_c = 'targetConfigGen.c'; -$input_h = 'val/include/val_target.h'; - -$final_output_file = undef; -if($final_output =~ /([0-9a-zA-Z_]+)$/) { - $final_output_file = $1; -} - -@unique_devices = undef; - -sub uniq { - my %seen; - grep !$seen{$_}++, @_; -} - -open(IN, $targetConfigPath) or die "Unable to open $targetConfigPath $!"; -open(OUT, '>', $output_c) or die "Unable to open: $!"; - -#--------------------------------------------------------------------- -# Open header file and go through enum definition to find group of -# each component; rather than making partner do it. Store in a hash. -#--------------------------------------------------------------------- -open(IN0, $input_h) or die "Unable to open: $!"; -my %comp_groups; -while() { - if($_ =~ /COMPONENT_GROUPING/) { - while($nextline !~ /\}/) { - $nextline = ; - #print "$nextline"; - if($nextline =~ /(\S+)(\s*)\=(\s*)GROUP_([0-9a-zA-Z_]+)(,*)/) { - $comp_groups{$1} = $4; - } - } - } -} -close IN0; -#print keys %comp_groups, "\n"; -#print values %comp_groups, "\n"; -#--------------------------------------------------------------------- - -print OUT '#include ',"\n\n"; -print OUT '#include "val_target.h"',"\n"; - -print OUT "int main\(void\) \{\n"; - -while() { - if($_ !~ /^\//) {# exclude commented lines - - if($_ =~ /(\S+)\.num(\s*)\=(\s*)(\d+)(\s*)\;/) { - print OUT lc($comp_groups{uc($1)}),"_desc_t $1\[$4\] = {0};\n"; - print OUT "int $1","_num_instances \= $4\;\n"; - - # For each instance of this device - for ($count = 0; $count < $4; $count++) { - print OUT "$1\[$count\]\.cfg_type\.cfg_id \= \(GROUP_",$comp_groups{uc($1)}," << 24\) \+ \(",$comp_groups{uc($1)},"_",uc($1)," << 16\) \+ $count\;\n"; - print OUT "$1\[$count\]\.cfg_type\.size \= sizeof\($1\)\/$1","_num_instances\;\n"; - print OUT "$1\[$count\]\.cfg_type\.size \|\= $1","_num_instances << 24\;\n"; - } - - push(@unique_devices, $1); - push(@unique_groups, $comp_groups{uc($1)}); - } - #elsif($_ =~ /(\S+)\.(\d+)\.(\S+)(\s*)\=(\s*)(\S+)(\s*)\;/) { - elsif($_ =~ /(\S+)\.(\d+)\.(\S+)(\s*)\=(\s*)(.+)\;/) { - print OUT "$1\[$2\]\.$3 \= $6\;\n"; - } - else { - print OUT $_; - } - - } -} - -# Remove empty elements from array -@unique_devices = grep { $_ ne '' } @unique_devices; -# Remove duplicate groups -@unique_groups = uniq @unique_groups; -@unique_groups = grep { $_ ne '' } @unique_groups; - -#print "@unique_devices\n"; -#print "@unique_groups\n\n"; - -foreach $thisgroup (@unique_groups) { - print "\nGROUP $thisgroup \n"; - print OUT lc($thisgroup),"_hdr_t group_",lc($thisgroup),"\;\n"; - print OUT "int group_",lc($thisgroup),"_size \= sizeof(group_",lc($thisgroup),"\)\;\n"; - print OUT "int group_",lc($thisgroup),"_count \= 0\;\n"; - - print OUT "group_",lc($thisgroup),"\.cfg_type\.cfg_id \= \(GROUP_",$thisgroup," << 24\)\;\n"; - - foreach $thisdevice (@unique_devices) { - if($comp_groups{uc($thisdevice)} eq $thisgroup) { - print "DEVICE $thisdevice \n"; - print OUT "group_",lc($thisgroup),"_size \= group_",lc($thisgroup),"_size \+ sizeof\($thisdevice\)\;\n"; - print OUT "group_",lc($thisgroup),"_count \= group_",lc($thisgroup),"_count \+ $thisdevice","_num_instances\;\n"; - - } - } - print OUT "group_",lc($thisgroup),"\.cfg_type\.size \= group_",lc($thisgroup),"_size\;\n"; - print OUT "group_",lc($thisgroup),"\.num \= group_",lc($thisgroup),"_count\;\n"; - - print OUT "\n"; -} - -print OUT "\n"; -print OUT "uint32_t\* word_ptr\;\n"; -print OUT "int byte_no \= 0\;\n"; -#print OUT "int instance_no \= 0\;\n"; -#print OUT "int instance_size \= 0\;\n"; -#print OUT "device_type_t device_id\;\n"; -print OUT "FILE \* fp\;\n"; -print OUT "fp \= fopen\(\"",$final_output,"\.h\"\, \"w\"\)\;\n\n"; - -# Printing out main header inside hex file -#print OUT "fprintf\(fp\, \"#include \\\"pal_fvp_config\.h\\\"\\n\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"#ifndef ",uc($final_output_file),"\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"#define ",uc($final_output_file),"\\n\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"__attribute__\(\(section\(\\\"\.ns_target_database\\\"\)\)\)\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"const uint32_t\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"database[] \= \{\\n\"\)\;\n"; - -# print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, \"TBSA\"\)\;\n"; -# print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, \"_CFG\"\)\;\n"; -# print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, \" FVP\"\)\;\n"; -# print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, \"_CFG\"\)\;\n"; -# TBSA_CFG header -print OUT "fprintf\(fp\, \"0x\%x\"\, \'T\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'B\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'S\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\,\\n\"\, \'A\'\)\;\n"; -print OUT "fprintf\(fp\, \"0x\%x\"\, \'_\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'C\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'F\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\,\\n\"\, \'G\'\)\;\n"; -# FVP_CFG header -print OUT "fprintf\(fp\, \"0x\%x\"\, \' \'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'F\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'V\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\,\\n\"\, \'P\'\)\;\n"; -print OUT "fprintf\(fp\, \"0x\%x\"\, \'_\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'C\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\"\, \'F\'\)\;\n"; -print OUT "fprintf\(fp\, \"\%x\,\\n\"\, \'G\'\)\;\n"; - -print OUT "uint32_t version \= 1\;\n"; -print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, version\)\;\n"; -#print OUT "fwrite\(\&version\, 4\, 1\, fp\)\;\n"; -print OUT "uint32_t total_size \= 0\;\n"; - -foreach $thisgroup (@unique_groups) { - print OUT "total_size \= total_size \+ group_",lc($thisgroup),"_size\;\n"; -} -# foreach $thisdevice (@unique_devices) { -# print OUT "total_size \= total_size \+ sizeof\($thisdevice\) \+ \(8\* $thisdevice","_num_instances\)\;\n"; -# } -# Add main header size -print OUT "total_size \= total_size \+8 \+8 \+4 \+4 \+4\;\n"; -#print OUT "fwrite\(\&total_size\, 4\, 1\, fp\)\;\n\n"; -print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, total_size\)\;\n"; - - -foreach $thisgroup (@unique_groups) { - print OUT "word_ptr \= \(uint32_t \*\)\&group_",lc($thisgroup),"\;\n"; - print OUT "for\(byte_no\=0\; byte_no\<\sizeof\(group_",lc($thisgroup),"\)\; byte_no\=byte_no\+4\)\{\n"; - #print OUT "fwrite\(word_ptr\, 4\, 1\, fp\)\;\n"; - #print OUT "printf\(\"\%08x\,\\n\"\, \*word_ptr\)\;\n"; - print OUT "fprintf\(fp\, \"0x\%08x\,\\n\"\, \*word_ptr\)\;\n"; - print OUT "word_ptr\+\+\;\n"; - print OUT "\}\n"; - - foreach $thisdevice (@unique_devices) { - if($comp_groups{uc($thisdevice)} eq $thisgroup) { - print OUT "\tword_ptr \= \(uint32_t \*\)\&","$thisdevice","\[0\]\;\n"; - print OUT "\tfor\(byte_no\=0\; byte_no\<\sizeof\($thisdevice\)\; byte_no\=byte_no\+4\)\{\n"; - #print OUT "\tfwrite\(word_ptr\, 4\, 1\, fp\)\;\n"; - #print OUT "\tprintf\(\"\%08x\,\\n\"\, \*word_ptr\)\;\n"; - print OUT "\tfprintf\(fp\, \"0x\%08x\,\\n\"\, \*word_ptr\)\;\n"; - print OUT "\tword_ptr\+\+\;\n"; - print OUT "\t\}\n"; - } - } -} -print OUT "fprintf\(fp\, \"0x\%08x\\n\"\, 0xffffffff\)\;\n"; -print OUT "fprintf\(fp\, \"\}\;\\n\\n\"\)\;\n"; -print OUT "fprintf\(fp\, \"#endif \\n\"\)\;\n"; -print OUT "return 0\;\n"; - - -# foreach $thisdevice (@unique_devices) { -# print OUT "device_id \= DEVICE_ID_", uc $thisdevice, "\;\n"; -# #print OUT "printf\(\"Size of $thisdevice \%lx\\n\"\, sizeof\($thisdevice\)\)\;\n"; -# print OUT "word_ptr \= \&$thisdevice\[0\]\;\n"; -# print OUT "instance_size \= \(sizeof\($thisdevice\)\/$thisdevice","_num_instances\) +4 +4\;\n"; -# print OUT "for\(instance_no\=0\; instance_no\<","$thisdevice","_num_instances\; instance_no\+\+\)\{\n"; -# print OUT "\tprintf\(\"\%x\\n\"\,device_id\)\;\n"; -# print OUT "\tfwrite\(\&device_id\, 4\, 1\, fp\)\;\n"; -# print OUT "\tprintf\(\"\%x\\n\"\,instance_size\)\;\n"; -# print OUT "\tfwrite\(\&instance_size\, 4\, 1\, fp\)\;\n"; -# print OUT "\tfor\(byte_no\=0\; byte_no\<\(sizeof\($thisdevice\)\/$thisdevice","_num_instances\)\; byte_no\=byte_no\+4\)\{\n"; -# print OUT "\t\tprintf\(\"\%x\\n\"\,\*word_ptr\)\;\n"; -# print OUT "\t\tfwrite\(word_ptr\, 4\, 1\, fp\)\;\n"; -# print OUT "\t\tword_ptr\+\+\;\n"; -# print OUT "\t\}\n"; -# print OUT "\}\n\n"; - -# } - -print OUT "\n\}\/\/void main"; diff --git a/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.py b/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.py new file mode 100644 index 00000000..6442f74d --- /dev/null +++ b/tbsa-v8m/tools/tgt_cfg_parser/targetConfigGen.py @@ -0,0 +1,183 @@ +#!/usr/bin/python +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +import sys + +if (len(sys.argv) != 8): + print("\nPlease provide following inputs") + print("\narg1 : target name") + print("\narg2 : val_target.h") + print("\narg3 : tbsa_tgt.cfg") + print("\narg4 : intermediate source file") + print("\narg5 : output database file\n") + print("\narg6 : name for table\n") + print("\narg7 : section name for database table\n") + sys.exit(1) + +target = sys.argv[1] +in_val_tgt = sys.argv[2] +in_tbsa_tgt = sys.argv[3] +out_source = sys.argv[4] +out_database = sys.argv[5] +table_name = sys.argv[6] +section_name = sys.argv[7] + +minor_major_map = {} +unique_major_groups = [] +unique_minor_components = [] + +def get_minor_major_map(): + """ This method populates the dictionary which maps between every available minor component to their major group """ + try: + with open(in_val_tgt, mode="r") as f: + for line in f: + if "GROUP_" in line: + temp_list = line.split() + if "=" in temp_list[1] and "GROUP_" in temp_list[2]: + minor_major_map.update({temp_list[0]:temp_list[2][6:temp_list[2].find(',')]}) + if minor_major_map[temp_list[0]] not in unique_major_groups: + unique_major_groups.append(minor_major_map[temp_list[0]]) + except: + print("Cannot open %s" %in_val_tgt) + +def generate_source(): + """" This method generates the source file which gets compiled on host machine. + The compiled output then generates the database file for a given target """ + try: + with open(out_source, mode="a") as o_f: + o_f.write("#include \n") + o_f.write("#include \"val_target.h\"\n\n") + o_f.write("int main (void)\n") + o_f.write("{\n") + try: + with open(in_tbsa_tgt, mode="r") as i_f: + num = '' + for line in i_f: + if "/" in line[0:1]: + """ Ignoring the commented lines """ + pass + elif (".num" in line) and (line[line.find('.')+1:line.find('.')+4] == "num"): + """ Pick the lines which tells the total instances of a component """ + minor_comp = line[:line.find('.')] + num = "".join(line[line.find('=')+1:line.find(';')].replace(" ","")) + if (int(num)) != 0: + o_f.write("\t%s_desc_t %s[%s] = {0};\n" %(minor_major_map[minor_comp.upper()].lower(), minor_comp, num)) + o_f.write("\tint %s_num_instances = %s;\n" %(minor_comp, num)) + num = int(num) + for instance in range(num): + o_f.write("\t%s[%d].cfg_type.cfg_id = ((GROUP_%s << 24) + (%s_%s << 16) + %d);\n" \ + %(minor_comp, instance, minor_major_map[minor_comp.upper()],\ + minor_major_map[minor_comp.upper()], minor_comp.upper(), instance)) + o_f.write("\t%s[%d].cfg_type.size = sizeof(%s)/%s_num_instances;\n" %(minor_comp, instance, minor_comp, minor_comp)) + o_f.write("\t%s[%d].cfg_type.size |= (%s_num_instances << 24);\n" %(minor_comp, instance, minor_comp)) + unique_minor_components.append(minor_comp.upper()) + elif ("=" in line) and (";" in line) and (int(num) != 0): + """ Pick the lines which tells the component details """ + period_1 = line.find('.') + period_2 = period_1 + line[period_1+1:].find('.') + 1 + o_f.write("\t%s[%s].%s;\n" %(line[:period_1], line[period_1+1:period_2], line[period_2+1:line.find(';')])) + else: + o_f.write("\n") + o_f.write("\n") + except: + print("Cannot open input file %s" %in_tbsa_tgt) + + """ Populate major structure details """ + for group in unique_major_groups: + o_f.write("\t%s_hdr_t group_%s = {0};\n" %(group.lower(), group.lower())) + o_f.write("\tgroup_%s.cfg_type.cfg_id = (GROUP_%s << 24);\n" %(group.lower(), group)) + o_f.write("\tgroup_%s.cfg_type.size += sizeof(group_%s);\n" %(group.lower(), group.lower())) + for minor in unique_minor_components: + if group == minor_major_map[minor]: + o_f.write("\tgroup_%s.cfg_type.size += sizeof(%s);\n" %(group.lower(), minor.lower())) + o_f.write("\tgroup_%s.num += %s_num_instances;\n" %(group.lower(), minor.lower())) + o_f.write("\n") + + """ Start pushing fprintf into the source resposible for generating the database table """ + o_f.write("\tuint32_t *word_ptr;\n") + o_f.write("\tint byte_no = 0;\n") + o_f.write("\tFILE *fp;\n\n") + o_f.write("\tfp = fopen(\"%s\", \"w\");\n\n" %(out_database)) + temp_out_file = out_database + while '/' in temp_out_file: + temp_out_file = "".join(temp_out_file[temp_out_file.find('/')+1:]) + o_f.write("\tfprintf(fp, \"#ifndef _%s_H_\\n\");\n" %(temp_out_file[:temp_out_file.find('.')].upper())) + o_f.write("\tfprintf(fp, \"#define _%s_H_\\n\");\n\n" %(temp_out_file[:temp_out_file.find('.')].upper())) + if section_name: + o_f.write("\tfprintf(fp, \"__attribute__((section(\\\"%s\\\")))\\n\");\n" %(section_name)) + o_f.write("\tfprintf(fp, \"const uint32_t static %s[] = {\\n\");\n" %(table_name)) + o_f.write("\tfprintf(fp, \"0x%x\", \'T\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'B\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'S\');\n") + o_f.write("\tfprintf(fp, \"%x,\\n\", \'A\');\n") + o_f.write("\tfprintf(fp, \"0x%x\", \'_\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'C\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'F\');\n") + o_f.write("\tfprintf(fp, \"%x,\\n\", \'G\');\n") + required_target_name_len = 4 + new_target = target + if (len(target) < required_target_name_len): + while(required_target_name_len - len(target)): + new_target += " " + required_target_name_len -= 1 + o_f.write("\tfprintf(fp, \"0x%x\", ") + o_f.write("\'%c\');\n" %(new_target[0:1])) + o_f.write("\tfprintf(fp, \"%x\", ") + o_f.write("\'%c\');\n" %(new_target[1:2])) + o_f.write("\tfprintf(fp, \"%x\", ") + o_f.write("\'%c\');\n" %(new_target[2:3])) + o_f.write("\tfprintf(fp, \"%x,\\n\", ") + o_f.write("\'%c\');\n" %(new_target[3:4])) + o_f.write("\tfprintf(fp, \"0x%x\", \'_\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'C\');\n") + o_f.write("\tfprintf(fp, \"%x\", \'F\');\n") + o_f.write("\tfprintf(fp, \"%x,\\n\", \'G\');\n") + o_f.write("\tuint32_t version = 1;\n") + o_f.write("\tfprintf(fp, \"0x%08x,\\n\", version);\n") + o_f.write("\tuint32_t total_size = 0;\n") + for group in unique_major_groups: + o_f.write("\ttotal_size += group_%s.cfg_type.size;\n" %(group.lower())) + o_f.write("\ttotal_size += (8 + 8 + 4 + 4);\n") + o_f.write("\tfprintf(fp, \"0x%08x,\\n\", total_size);\n") + + """ Start writing component values to database file """ + for group in unique_major_groups: + o_f.write("\t/* Writing major group details to the file */\n") + o_f.write("\tword_ptr = (uint32_t *)&group_%s;\n" %(group.lower())) + o_f.write("\tfor(byte_no=0; byte_nodata_addr) { - val_print(PRINT_WARN, "\n Skipping the test as External Debugger is not present", 0); - val_print(PRINT_DEBUG, "\n Data present in the handshake address 0x%x", *(uint32_t *)dpm_desc->data_addr); + val_print(PRINT_WARN, "\n\r\tSkipping the test as External Debugger is not present", 0); + val_print(PRINT_DEBUG, "\n\r\tData present in the handshake address 0x%x", *(uint32_t *)dpm_desc->data_addr); return TBSA_STATUS_SKIP; } g_debug_test_start++; - val_print(PRINT_INFO, "\n External Debugger initial handshake successful", 0); + val_print(PRINT_INFO, "\n\r\tExternal Debugger initial handshake successful", 0); } else { if (DBG_NEXT_SIGNATURE != *(uint32_t *)dpm_desc->data_addr) { - val_print(PRINT_WARN, "\n Skipping the test as previous test corrupted handshake data", 0); - val_print(PRINT_DEBUG, "\n Data present in the handshake address 0x%x", *(uint32_t *)dpm_desc->data_addr); + val_print(PRINT_WARN, "\n\r\tSkipping the test as previous test corrupted handshake data", 0); + val_print(PRINT_DEBUG, "\n\r\tData present in the handshake address 0x%x", *(uint32_t *)dpm_desc->data_addr); return TBSA_STATUS_SKIP; } - val_print(PRINT_INFO, "\n External Debugger handshake successful", 0); + val_print(PRINT_INFO, "\n\r\tExternal Debugger handshake successful", 0); } break; case DBG_WRITE: while (((DBG_FLAG_READY & *(uint32_t *)dpm_desc->flag_addr) != DBG_FLAG_READY) && (--timeout)); if (!timeout) { - val_print(PRINT_ERROR, "\n Timeout: External Debugger is not ready", 0); + val_print(PRINT_ERROR, "\n\r\tTimeout: External Debugger is not ready", 0); return TBSA_STATUS_TIMEOUT; } timeout = DBG_TIMEOUT; /* Poll for Txfull to be '0' before writing to the data register*/ while (((DBG_FLAG_TXFULL & *(uint32_t *)dpm_desc->flag_addr) == DBG_FLAG_TXFULL) && (--timeout)); if (!timeout) { - val_print(PRINT_ERROR, "\n Timeout while polling for TxFull=0", 0); + val_print(PRINT_ERROR, "\n\r\tTimeout while polling for TxFull=0", 0); return TBSA_STATUS_TIMEOUT; } break; case DBG_READ: while (((DBG_FLAG_READY & *(uint32_t *)dpm_desc->flag_addr) != DBG_FLAG_READY) && (--timeout)); if (!timeout) { - val_print(PRINT_ERROR, "\n Timeout: External Debugger is not ready", 0); + val_print(PRINT_ERROR, "\n\r\tTimeout: External Debugger is not ready", 0); return TBSA_STATUS_TIMEOUT; } timeout = DBG_TIMEOUT; /* Poll for Rxfull to be '1' before reading the data updated by debugger*/ while (((DBG_FLAG_RXFULL & *(uint32_t *)dpm_desc->flag_addr) != DBG_FLAG_RXFULL) && (--timeout)); if (!timeout) { - val_print(PRINT_ERROR, "\n Timeout while polling for RxFull=1", 0); + val_print(PRINT_ERROR, "\n\r\tTimeout while polling for RxFull=1", 0); return TBSA_STATUS_TIMEOUT; } break; @@ -114,16 +114,20 @@ tbsa_status_t val_debug_set_status(dbg_access_t dbg_access, dbg_seq_status_t dbg case DBG_INIT: while (((DBG_FLAG_READY & *(uint32_t *)dpm_desc->flag_addr) != DBG_FLAG_READY) && (--timeout)); if (!timeout) { - val_print(PRINT_ERROR, "\n Timeout: External Debugger is not ready", 0); + val_print(PRINT_ERROR, "\n\r\tTimeout: External Debugger is not ready", 0); return TBSA_STATUS_TIMEOUT; } *(uint32_t *)dpm_desc->flag_addr = dbg_status; + asm volatile("DSB"); + asm volatile("ISB"); break; case DBG_WRITE: *(uint32_t *)dpm_desc->flag_addr = dbg_status | DBG_FLAG_TXFULL; break; case DBG_READ: - *(uint32_t *)dpm_desc->flag_addr = 0; + *(uint32_t *)dpm_desc->flag_addr &= ~DBG_FLAG_RXFULL; + asm volatile("DSB"); + asm volatile("ISB"); break; default: return TBSA_STATUS_INCORRECT_VALUE; @@ -134,27 +138,34 @@ tbsa_status_t val_debug_set_status(dbg_access_t dbg_access, dbg_seq_status_t dbg /** @brief - This function will set the DPM state - @param - index : DPM index - - dpm_status : DPM status as per TBSA spec, defined in dpm_status_t - - unlock_token : unlock token in case of unlocking the DPM state + @param - dpm_desc : dpm_desc_t + dpm_status : DPM status as per TBSA spec, defined in dpm_status_t @return - error status **/ -tbsa_status_t val_dpm_set_state(uint32_t index, dpm_status_t dpm_status, unlock_token_t unlock_token) +tbsa_status_t val_dpm_set_state(dpm_desc_t *dpm_desc, dpm_status_t dpm_status) { - return TBSA_STATUS_SUCCESS; + switch(dpm_desc->unlock_token) + { + case TOKEN_PASSWD: + return pal_dpm_set_state(dpm_desc->index, dpm_status, dpm_desc->unlock_token, (void *)(dpm_desc->passwd)); + case TOKEN_CERTIFICATE: + return pal_dpm_set_state(dpm_desc->index, dpm_status, dpm_desc->unlock_token, (void *)(dpm_desc->certificate_addr)); + default: + return TBSA_STATUS_INVALID_ARGS; + } } /** @brief - This function will set the DPM state @param - index : DPM index - - dpm_status : DPM status as per TBSA spec, can returned as logical OR of in relevant cases + dpm_status : DPM status as per TBSA spec, can returned as logical OR of in relevant cases DPM_LOCK_IMPLEMENTED/DPM_LOCK_VALUE DPM_EN_IMPLEMENTED/DPM_EN_VALUE @return - error status **/ tbsa_status_t val_dpm_get_state(uint32_t index, uint32_t *dpm_status) { - return TBSA_STATUS_SUCCESS; + return pal_dpm_get_state(index, dpm_status); } /** diff --git a/tbsa-v8m/val/src/val_infra.c b/tbsa-v8m/val/src/val_infra.c index 2fb8cdf5..e1918f33 100644 --- a/tbsa-v8m/val/src/val_infra.c +++ b/tbsa-v8m/val/src/val_infra.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -239,6 +239,7 @@ tbsa_status_t val_nvram_init (void) tbsa_status_t status = TBSA_STATUS_SUCCESS; memory_desc_t *memory_desc; test_id_t test_id; + uint32_t active_test; boot_t boot; status = val_target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_NVRAM, 0), @@ -269,6 +270,12 @@ tbsa_status_t val_nvram_init (void) if(status != TBSA_STATUS_SUCCESS) { return status; } + + active_test = 0xFFFFFFFFUL; + status = val_nvram_write(memory_desc->start, TBSA_NVRAM_OFFSET(NV_ACT_TST), &active_test, sizeof(active_test)); + if(status != TBSA_STATUS_SUCCESS) { + return status; + } } return status; @@ -332,7 +339,6 @@ tbsa_status_t val_infra_init(test_id_t *test_id) val_mem_reg_write(SYST_CSR, 0x0); val_mem_reg_write(SYST_CSR_NS, 0x0); - /* It is assumed that UART instance 0 is used for flushing print messages */ do{ status = val_target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_SOC_PERIPHERAL, SOC_PERIPHERAL_UART, instance), (uint8_t **)&uart_desc, @@ -577,6 +583,8 @@ bool_t val_system_reset_type(system_reset_t reset_type) return pal_is_cold_reset(); case WARM_RESET: return pal_is_warm_reset(); + case WDOG_RESET: + return pal_is_wdog_reset(); default: return UNKNOWN_RESET; } diff --git a/tbsa-v8m/val/src/val_ns_callable.c b/tbsa-v8m/val/src/val_ns_callable.c index ae2468df..8b1adfa4 100644 --- a/tbsa-v8m/val/src/val_ns_callable.c +++ b/tbsa-v8m/val/src/val_ns_callable.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -81,7 +81,7 @@ TRANSITION_NS_TO_S(tbsa_status_t, val_fuse_ops, fuse_ops_t fuse_ops, addr_t addr TRANSITION_NS_TO_S(tbsa_status_t, val_get_fuse_info, fuse_desc_t **fuse_info_desc, fuse_type_t fuse_type, uint32_t instance); TRANSITION_NS_TO_S(tbsa_status_t, val_debug_get_status, dbg_access_t dbg_access); TRANSITION_NS_TO_S(tbsa_status_t, val_debug_set_status, dbg_access_t dbg_access, dbg_seq_status_t dbg_status); -TRANSITION_NS_TO_S(tbsa_status_t, val_dpm_set_state, uint32_t index, dpm_status_t dpm_status, unlock_token_t unlock_token); +TRANSITION_NS_TO_S(tbsa_status_t, val_dpm_set_state, dpm_desc_t *dpm_desc, dpm_status_t dpm_status); TRANSITION_NS_TO_S(tbsa_status_t, val_dpm_get_state, uint32_t index, uint32_t *dpm_status); TRANSITION_NS_TO_S(tbsa_status_t, val_dpm_set_access_ns_only, uint32_t index, bool_t access_ns); TRANSITION_NS_TO_S(tbsa_status_t, val_mpc_configure_security_attribute, addr_t mpc, addr_t start_addr,addr_t end_addr, mem_tgt_attr_t sec_attr); diff --git a/tbsa-v8m/val/src/val_test.c b/tbsa-v8m/val/src/val_test.c index 10198119..817c1e24 100644 --- a/tbsa-v8m/val/src/val_test.c +++ b/tbsa-v8m/val/src/val_test.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -109,29 +109,35 @@ tbsa_status_t val_test_load(test_id_t *test_id, test_id_t test_id_prev) addr_t sflash_addr = g_test_binary_src_addr; /* - * The combined Test ELF binary: - * - * ------------------------ - * |TBSA_TEST_START_MARKER| - * ------------------------ - * | Custom Test Header* | - * ------------------------ - * | Secure Image | - * |----------------------| - * | Non-Secure Image | - * ------------------------ - * | Custom Test Header* | - * ------------------------ - * | Secure Image | - * |----------------------| - * | Non-Secure Image | - * : - * : - * ------------------------ - * | TBSA_TEST_END_MARKER | - * ------------------------ - * + The combined Test ELF binary: + +---------------+ +----------------+ + | TEST#0 header |-----------> | START MARKER | + | | |----------------| + | Test#0 S ELF | | Test#n ID | + | | |----------------| + | Test#0 NS ELF | | Test#n S size | + +---------------+ |----------------| + | TEST#1 header | | Test#n NS size | + | | +----------------+ + | Test#1 S ELF | + | | + | Test#1 NS ELF | + +---------------+ + | + . + | + . + +---------------+ + | TEST#n header | + | | + | Test#n S ELF | + | | + | Test#n NS ELF | + +---------------+ + | END MARKER | + +---------------+ */ + if (test_id_prev != TBSA_TEST_INVALID) { /* Reading TBSA header */ do diff --git a/tbsa-v8m/val/val.cmake b/tbsa-v8m/val/val.cmake new file mode 100644 index 00000000..25ec818a --- /dev/null +++ b/tbsa-v8m/val/val.cmake @@ -0,0 +1,41 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# Collecting all the required sources from val +list(APPEND VAL_SRC_C + "${TBSA_ROOT_DIR}/val/src/val_crypto.c" + "${TBSA_ROOT_DIR}/val/src/val_debug.c" + "${TBSA_ROOT_DIR}/val/src/val_dispatcher.c" + "${TBSA_ROOT_DIR}/val/src/val_fuse.c" + "${TBSA_ROOT_DIR}/val/src/val_infra.c" + "${TBSA_ROOT_DIR}/val/src/val_interfaces.c" + "${TBSA_ROOT_DIR}/val/src/val_interrupt.c" + "${TBSA_ROOT_DIR}/val/src/val_ns_callable.c" + "${TBSA_ROOT_DIR}/val/src/val_pe.c" + "${TBSA_ROOT_DIR}/val/src/val_peripherals.c" + "${TBSA_ROOT_DIR}/val/src/val_test.c" + ) + +list(APPEND VAL_SRC_ASM_S + "${TBSA_ROOT_DIR}/val/src/asm/val_secure_${ARCH}.s" + "${TBSA_ROOT_DIR}/val/src/asm/val_pe_support.s" + ) + +# Create VAL static library +add_library(${TBSA_TARGET_VAL_LIB} STATIC ${VAL_SRC_C} ${VAL_SRC_ASM_S}) + +target_include_directories(${TBSA_TARGET_VAL_LIB} PUBLIC ${TBSA_ROOT_DIR}/val/include) From dcbf02575014e8e2bf2e07cab44485076c644d83 Mon Sep 17 00:00:00 2001 From: Prasanth Pulla Date: Mon, 26 Aug 2019 11:16:00 +0530 Subject: [PATCH 14/54] Update README.md --- api-tests/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api-tests/README.md b/api-tests/README.md index 2b652a93..f0bee670 100644 --- a/api-tests/README.md +++ b/api-tests/README.md @@ -26,10 +26,10 @@ The test suite for this specification is located in the **dev_apis** directory o | Test Category | Specification Version | |--------------------------|--------------------------------------| -| Crypto | [PSA Crypto API 1.0-Beta1](../api-specs/crypto/v1.0-beta1/) | -| Protected Storage | [PSA Protected Storage API 1.0-Beta2](../api-specs/storage/v1.0-beta2/) | -| Internal Trusted Storage | [PSA Internal Trusted Storage API 1.0-Beta2](../api-specs/storage/v1.0-beta2/) | -| Initial Attestation | [PSA Initial Attestation API 1.0-Beta0](../api-specs/attestation/v1.0-beta0/) | +| Crypto | [PSA Crypto API 1.0-Beta3](../api-specs/crypto/v1.0-beta3/doc/) | +| Protected Storage | [PSA Protected Storage API 1.0.0](../api-specs/storage/v1.0/doc/) | +| Internal Trusted Storage | [PSA Internal Trusted Storage API 1.0.0](../api-specs/storage/v1.0/doc/) | +| Initial Attestation | [PSA Initial Attestation API 1.0.0](../api-specs/attestation/v1.0/doc/) | 2. PSA-FF tests that are written for version 1.0-Beta1 of the PSA FF specification. From b9db7cfa403bed6af48a1d049c92c5818f651478 Mon Sep 17 00:00:00 2001 From: Prasanth Pulla Date: Wed, 28 Aug 2019 09:56:00 +0530 Subject: [PATCH 15/54] Update README.md Update the link to TBSA-M specification. --- tbsa-v8m/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tbsa-v8m/README.md b/tbsa-v8m/README.md index 688f50e6..d27c48a3 100755 --- a/tbsa-v8m/README.md +++ b/tbsa-v8m/README.md @@ -25,7 +25,7 @@ The tests are available as open source. The tests and the corresponding abstract - Code Quality: Beta
    The suite is in development. This indicates that the suite contains tests which have not been validated on any platform. Please use this opportunity to suggest enhancements and point out errors. - - The TBSA-v8M tests are written for version 1.1 of the TBSA-v8M specification. + - The TBSA-v8M tests are written for version 1.0 Beta 1 of the [TBSA-M specification](https://developer.arm.com/-/media/Files/pdf/PlatformSecurityArchitecture/Architect/DEN0083-PSA_TBSA-M_1.0-bet1.pdf?revision=804e230c-34b6-457d-9801-9608c1609015&la=en). - This test suite is not a substitute for design verification. - To review the test logs, Arm licensees can contact Arm directly through their partner managers. From 6457be5e633b4f7b1b1ae7b4585892d079def56c Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Fri, 13 Sep 2019 11:14:08 +0530 Subject: [PATCH 16/54] Crypto: Bug Fix: Removing referencing implementatoin defined structure - Few tests in the crypto test suite makes assumption about the PSA key attributes structure which is implementation specific. No assumptions should be made on its content and are expected to be different for different implementations. Hence, modifying the attributes in accordance with the PSA specification. - Ordering checkpoint Signed-off-by: Gowtham Siddarth --- .../dev_apis/crypto/test_c002/test_c002.c | 10 +++---- .../dev_apis/crypto/test_c006/test_c006.c | 6 ++-- .../dev_apis/crypto/test_c014/test_c014.c | 6 ++-- .../dev_apis/crypto/test_c016/test_c016.c | 18 ++++++------ .../dev_apis/crypto/test_c018/test_c018.c | 6 ++-- .../dev_apis/crypto/test_c022/test_c022.c | 8 +++--- .../dev_apis/crypto/test_c025/test_c025.c | 12 ++++---- .../dev_apis/crypto/test_c026/test_c026.c | 12 +++++--- .../dev_apis/crypto/test_c031/test_c031.c | 18 ++++++------ .../dev_apis/crypto/test_c038/test_c038.c | 10 +++---- .../dev_apis/crypto/test_c040/test_c040.c | 10 +++---- .../dev_apis/crypto/test_c041/test_c041.c | 8 +++--- .../dev_apis/crypto/test_c043/test_c043.c | 4 +-- .../dev_apis/crypto/test_c050/test_c050.c | 28 ++++++++----------- .../dev_apis/crypto/test_c055/test_c055.c | 8 +++--- 15 files changed, 80 insertions(+), 84 deletions(-) diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.c b/api-tests/dev_apis/crypto/test_c002/test_c002.c index 656aebc4..3cee88c4 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.c +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c @@ -36,6 +36,7 @@ int32_t psa_import_key_test(caller_security_t caller) size_t length; const uint8_t *key_data; psa_key_type_t get_key_type; + size_t get_key_bits; int num_checks = sizeof(check1)/sizeof(check1[0]); psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; psa_key_attributes_t get_attributes = PSA_KEY_ATTRIBUTES_INIT; @@ -110,14 +111,11 @@ int32_t psa_import_key_test(caller_security_t caller) &get_attributes); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); - val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &get_attributes, &get_key_type); TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5)); - if (check1[i].attr_bits != 0) - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6)); - else - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, - TEST_CHECKPOINT_NUM(7)); + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &get_attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(6)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, diff --git a/api-tests/dev_apis/crypto/test_c006/test_c006.c b/api-tests/dev_apis/crypto/test_c006/test_c006.c index 594e3eb4..d6b603f6 100644 --- a/api-tests/dev_apis/crypto/test_c006/test_c006.c +++ b/api-tests/dev_apis/crypto/test_c006/test_c006.c @@ -66,15 +66,15 @@ int32_t psa_hash_compute_test(caller_security_t caller) /* Calculate the hash (digest) of a message */ status = val->crypto_function(VAL_CRYPTO_HASH_COMPUTE, check1[i].alg, &check1[i].input, check1[i].input_length, hash, hash_size, &hash_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(3)); if (check1[i].expected_status != PSA_SUCCESS) { continue; } - TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(5)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c014/test_c014.c b/api-tests/dev_apis/crypto/test_c014/test_c014.c index a35079ca..c1eda35b 100644 --- a/api-tests/dev_apis/crypto/test_c014/test_c014.c +++ b/api-tests/dev_apis/crypto/test_c014/test_c014.c @@ -86,12 +86,12 @@ int32_t psa_hash_finish_test(caller_security_t caller) continue; } - TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(7)); - TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(hash_length, PSA_HASH_SIZE(check1[i].alg), TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_MEMCMP(hash, expected_hash, hash_length, TEST_CHECKPOINT_NUM(7)); /*Abort the hash operation */ status = val->crypto_function(VAL_CRYPTO_HASH_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.c b/api-tests/dev_apis/crypto/test_c016/test_c016.c index f1ef9dbd..e7483d3e 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.c +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c @@ -37,6 +37,7 @@ int32_t psa_generate_key_test(caller_security_t caller) psa_key_type_t get_key_type; psa_key_usage_t get_key_usage; psa_algorithm_t get_key_alg; + size_t get_key_bits; int num_checks = sizeof(check1)/sizeof(check1[0]); psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; psa_key_attributes_t get_attributes = PSA_KEY_ATTRIBUTES_INIT; @@ -82,25 +83,22 @@ int32_t psa_generate_key_test(caller_security_t caller) val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &get_attributes, &get_key_type); TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(5)); - if (check1[i].attr_bits != 0) - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, TEST_CHECKPOINT_NUM(6)); - else - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, - TEST_CHECKPOINT_NUM(7)); + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &get_attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(6)); val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &get_attributes, &get_key_usage); - TEST_ASSERT_EQUAL(get_key_usage, check1[i].usage, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(get_key_usage, check1[i].usage, TEST_CHECKPOINT_NUM(7)); val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &get_attributes, &get_key_alg); - TEST_ASSERT_EQUAL(get_key_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(get_key_alg, check1[i].key_alg, TEST_CHECKPOINT_NUM(8)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, check1[i].key_handle, data, BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); /* Check the attributes of the exported key */ - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10)); /* Reset the attributes */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); @@ -108,7 +106,7 @@ int32_t psa_generate_key_test(caller_security_t caller) /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c018/test_c018.c b/api-tests/dev_apis/crypto/test_c018/test_c018.c index 3c5a2f93..154d4d6f 100644 --- a/api-tests/dev_apis/crypto/test_c018/test_c018.c +++ b/api-tests/dev_apis/crypto/test_c018/test_c018.c @@ -180,17 +180,17 @@ int32_t psa_key_derivation_input_key_negative_test(caller_security_t caller) /* Abort the key derivation operation */ status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Set up a key derivation operation */ status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_SETUP, &operation, check2[i].alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Provide an input for key derivation or key agreement */ status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY, &operation, check2[i].step, 0); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c022/test_c022.c b/api-tests/dev_apis/crypto/test_c022/test_c022.c index 7278a329..1949c73d 100644 --- a/api-tests/dev_apis/crypto/test_c022/test_c022.c +++ b/api-tests/dev_apis/crypto/test_c022/test_c022.c @@ -52,18 +52,18 @@ int32_t psa_key_derivation_abort_test(caller_security_t caller) val->print(PRINT_TEST, "Test psa_key_derivation_abort\n", 0); status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &func); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(2)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &init); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_ABORT, &zero); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Read some data from a key derivation operation with no data in the operation */ status = val->crypto_function(VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES, &func, output, BUFFER_SIZE); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(6)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c025/test_c025.c b/api-tests/dev_apis/crypto/test_c025/test_c025.c index f71d7938..51e6f727 100644 --- a/api-tests/dev_apis/crypto/test_c025/test_c025.c +++ b/api-tests/dev_apis/crypto/test_c025/test_c025.c @@ -100,28 +100,28 @@ int32_t psa_aead_decrypt_test(caller_security_t caller) check1[i].key_alg, nonce, check1[i].nonce_length, additional_data, check1[i].additional_data_length, check1[i].ciphertext, check1[i].ciphertext_size, plaintext, check1[i].plaintext_size, &plaintext_length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); continue; } /* Check if the length matches */ TEST_ASSERT_EQUAL(plaintext_length, check1[i].expected_plaintext_length, - TEST_CHECKPOINT_NUM(8)); + TEST_CHECKPOINT_NUM(6)); /* Check if the data matches */ TEST_ASSERT_MEMCMP(plaintext, check1[i].expected_plaintext, plaintext_length, - TEST_CHECKPOINT_NUM(9)); + TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); @@ -131,7 +131,7 @@ int32_t psa_aead_decrypt_test(caller_security_t caller) check1[i].key_alg, nonce, check1[i].nonce_length, additional_data, check1[i].additional_data_length, check1[i].ciphertext, check1[i].ciphertext_size, plaintext, check1[i].plaintext_size, &plaintext_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(9)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c026/test_c026.c b/api-tests/dev_apis/crypto/test_c026/test_c026.c index 826866ca..1de9cae8 100644 --- a/api-tests/dev_apis/crypto/test_c026/test_c026.c +++ b/api-tests/dev_apis/crypto/test_c026/test_c026.c @@ -53,6 +53,10 @@ int32_t psa_mac_sign_setup_test(caller_security_t caller) val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); + /* Setting up the watchdog timer for each check */ + status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(2)); + /* Setup the attributes for the key */ val->crypto_function(VAL_CRYPTO_SET_KEY_TYPE, &attributes, check1[i].key_type); val->crypto_function(VAL_CRYPTO_SET_KEY_USAGE_FLAGS, &attributes, check1[i].usage); @@ -66,13 +70,13 @@ int32_t psa_mac_sign_setup_test(caller_security_t caller) /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); /* Whether setup succeeded or failed, abort must succeed. Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* If setup failed, reproduce the failure, so that the caller can * test the resulting state of the operation object. @@ -81,12 +85,12 @@ int32_t psa_mac_sign_setup_test(caller_security_t caller) { status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); diff --git a/api-tests/dev_apis/crypto/test_c031/test_c031.c b/api-tests/dev_apis/crypto/test_c031/test_c031.c index 909ea11a..3e8c94eb 100644 --- a/api-tests/dev_apis/crypto/test_c031/test_c031.c +++ b/api-tests/dev_apis/crypto/test_c031/test_c031.c @@ -71,19 +71,19 @@ int32_t psa_mac_abort_test(caller_security_t caller) /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Multiple Abort a MAC operation should succeed */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } return VAL_STATUS_SUCCESS; @@ -131,24 +131,24 @@ int32_t psa_mac_abort_before_finish_test(caller_security_t caller) /* Start a multipart MAC calculation operation */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_SETUP, &operation, key_handle, key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); /* Add a message fragment to a multipart MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_UPDATE, &operation, input_data, inputdata_size); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); /* Abort a MAC operation */ status = val->crypto_function(VAL_CRYPTO_MAC_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Finish the calculation of the MAC of a message */ status = val->crypto_function(VAL_CRYPTO_MAC_SIGN_FINISH, &operation, data, BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/crypto/test_c038/test_c038.c b/api-tests/dev_apis/crypto/test_c038/test_c038.c index 99e008ca..8cf69cd0 100644 --- a/api-tests/dev_apis/crypto/test_c038/test_c038.c +++ b/api-tests/dev_apis/crypto/test_c038/test_c038.c @@ -73,27 +73,27 @@ int32_t psa_cipher_abort_test(caller_security_t caller) /* Set the key for a multipart symmetric encryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(4)); } else if (check1[i].usage == PSA_KEY_USAGE_DECRYPT) { /* Set the key for a multipart symmetric decryption operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } /* Abort a cipher operation */ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(6)); /* Multiple abort cipher operation should return success*/ status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); diff --git a/api-tests/dev_apis/crypto/test_c040/test_c040.c b/api-tests/dev_apis/crypto/test_c040/test_c040.c index e2490b5e..e769c1a8 100644 --- a/api-tests/dev_apis/crypto/test_c040/test_c040.c +++ b/api-tests/dev_apis/crypto/test_c040/test_c040.c @@ -132,26 +132,26 @@ int32_t psa_asymmetric_decrypt_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_ASYMMTERIC_DECRYPT, check1[i].key_handle, check1[i].key_alg, check1[i].input, check1[i].input_length, salt, check1[i].salt_length, output, check1[i].output_size, &length); - TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(4)); if (check1[i].expected_status != PSA_SUCCESS) { /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); continue; } /* Check if the output length matches with the expected length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(length, check1[i].expected_output_length, TEST_CHECKPOINT_NUM(6)); /* Check if the output matches with the expected data */ - TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_MEMCMP(output, check1[i].expected_output, length, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); diff --git a/api-tests/dev_apis/crypto/test_c041/test_c041.c b/api-tests/dev_apis/crypto/test_c041/test_c041.c index 7f8e2b43..82217287 100644 --- a/api-tests/dev_apis/crypto/test_c041/test_c041.c +++ b/api-tests/dev_apis/crypto/test_c041/test_c041.c @@ -115,20 +115,20 @@ int32_t psa_asymmetric_sign_test(caller_security_t caller) { /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); continue; } /* Check if the output length matches with the expected length */ - TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(5)); + TEST_ASSERT_EQUAL(length, check1[i].expected_signature_length, TEST_CHECKPOINT_NUM(6)); /* Check if the output matches with the expected data */ - TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_MEMCMP(signature, check1[i].expected_signature, length, TEST_CHECKPOINT_NUM(7)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c043/test_c043.c b/api-tests/dev_apis/crypto/test_c043/test_c043.c index 89ae1fc3..5817fa2d 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_c043.c +++ b/api-tests/dev_apis/crypto/test_c043/test_c043.c @@ -86,7 +86,7 @@ int32_t psa_raw_key_agreement_test(caller_security_t caller) /* Destroy a key and restore the slot to its default state */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); } return VAL_STATUS_SUCCESS; @@ -115,7 +115,7 @@ int32_t psa_raw_key_agreement_negative_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_RAW_KEY_AGREEMENT, check2[i].key_alg, check2[i].key_handle, check2[i].peer_key, check2[i].peer_key_length, output, check2[i].output_size, &output_length); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(3)); val->print(PRINT_TEST, "[Check %d] Test psa_raw_key_agreement - Zero as key handle\n", g_test_count++); diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c index 6b7f1bcb..3d912817 100644 --- a/api-tests/dev_apis/crypto/test_c050/test_c050.c +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c @@ -33,7 +33,7 @@ int32_t psa_open_key_test(caller_security_t caller) { int32_t status, i = 0; uint8_t data[BUFFER_SIZE]; - size_t length; + size_t length, get_key_bits; const uint8_t *key_data; psa_key_type_t get_key_type; psa_key_usage_t get_key_usage_flags; @@ -183,38 +183,34 @@ int32_t psa_open_key_test(caller_security_t caller) &get_attributes); TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(16)); - val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &attributes, &get_key_type); + val->crypto_function(VAL_CRYPTO_GET_KEY_TYPE, &get_attributes, &get_key_type); TEST_ASSERT_EQUAL(get_key_type, check1[i].key_type, TEST_CHECKPOINT_NUM(17)); - if (check1[i].attr_bits != 0) - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].attr_bits, - TEST_CHECKPOINT_NUM(18)); - else - TEST_ASSERT_EQUAL(get_attributes.bits, check1[i].expected_bit_length, - TEST_CHECKPOINT_NUM(19)); + val->crypto_function(VAL_CRYPTO_GET_KEY_BITS, &get_attributes, &get_key_bits); + TEST_ASSERT_EQUAL(get_key_bits, check1[i].expected_bit_length, TEST_CHECKPOINT_NUM(18)); val->crypto_function(VAL_CRYPTO_GET_KEY_USAGE_FLAGS, &attributes, &get_key_usage_flags); - TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(20)); + TEST_ASSERT_EQUAL(get_key_usage_flags, check1[i].usage, TEST_CHECKPOINT_NUM(19)); val->crypto_function(VAL_CRYPTO_GET_KEY_ALGORITHM, &attributes, &get_key_algorithm); - TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(21)); + TEST_ASSERT_EQUAL(get_key_algorithm, check1[i].key_alg, TEST_CHECKPOINT_NUM(20)); /* Export a key in binary format */ status = val->crypto_function(VAL_CRYPTO_EXPORT_KEY, key_handle, data, BUFFER_SIZE, &length); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(22)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(21)); /* Check the value of the exported key */ - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(23)); + TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(22)); if (PSA_KEY_TYPE_IS_UNSTRUCTURED(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(24)); + TEST_ASSERT_MEMCMP(data, check1[i].key_data, length, TEST_CHECKPOINT_NUM(23)); } else if (PSA_KEY_TYPE_IS_RSA(check1[i].key_type) || PSA_KEY_TYPE_IS_ECC(check1[i].key_type)) { - TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(25)); + TEST_ASSERT_MEMCMP(key_data, data, length, TEST_CHECKPOINT_NUM(24)); } else { @@ -227,10 +223,10 @@ int32_t psa_open_key_test(caller_security_t caller) /* Save the check ID and set boot flags */ ++i; status = val->nvmem_write(VAL_NVMEM_OFFSET(NV_TEST_DATA1), &i, sizeof(int32_t)); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(26)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(25)); status = val->set_boot_flag(BOOT_NOT_EXPECTED); - TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(27)); + TEST_ASSERT_EQUAL(status, VAL_STATUS_SUCCESS, TEST_CHECKPOINT_NUM(26)); } else diff --git a/api-tests/dev_apis/crypto/test_c055/test_c055.c b/api-tests/dev_apis/crypto/test_c055/test_c055.c index 600eb1d2..741fad16 100644 --- a/api-tests/dev_apis/crypto/test_c055/test_c055.c +++ b/api-tests/dev_apis/crypto/test_c055/test_c055.c @@ -92,15 +92,15 @@ int32_t psa_aead_set_nonce_test(caller_security_t caller) /* Setting the nonce on an ongoing operation should be an error */ status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, check1[i].nonce_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(9)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(8)); /* Abort the AEAD operation */ status = val->crypto_function(VAL_CRYPTO_AEAD_ABORT, &operation); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(10)); /* Reset the key attributes */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); @@ -108,7 +108,7 @@ int32_t psa_aead_set_nonce_test(caller_security_t caller) /* Setting the nonce on an aborted operation should be an error */ status = val->crypto_function(VAL_CRYPTO_AEAD_SET_NONCE, &operation, check1[i].nonce, check1[i].nonce_size); - TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, PSA_ERROR_BAD_STATE, TEST_CHECKPOINT_NUM(11)); } From 1d6d46943d75d3fe789fdc2c4863c477f265c40a Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Mon, 16 Sep 2019 11:47:29 +0530 Subject: [PATCH 17/54] Updating default args and docs - Updated the document with latest supported toolchain information - Defaulted CPU_ARCH to armv8m_ml if not passed from CMake arguments. Signed-off-by: Gowtham Siddarth --- api-tests/CMakeLists.txt | 15 +++++++++------ api-tests/docs/sw_requirements.md | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index fa949a38..d1bc0282 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -96,8 +96,6 @@ _check_arguments("TARGET") _check_arguments("SUITE") # Check for PSA_INCLUDE_PATHS command line argument _check_arguments("PSA_INCLUDE_PATHS") -# Check for CPU_ARCH command line argument -_check_arguments("CPU_ARCH") string(TOLOWER ${SUITE} SUITE_LOWER) @@ -191,12 +189,17 @@ if(NOT DEFINED TOOLCHAIN) message(STATUS "[PSA] : Defaulting compiler to ${TOOLCHAIN}") endif() -# Check for CPU architecture -if(NOT ${CPU_ARCH} IN_LIST PSA_CPU_ARCH_SUPPORT) - message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DCPU_ARCH=, supported CPU arch are : ${PSA_CPU_ARCH_SUPPORT}") +if(${TOOLCHAIN} STREQUAL "ARMCLANG" OR ${TOOLCHAIN} STREQUAL "GNUARM") + if(NOT DEFINED CPU_ARCH) + message(FATAL_ERROR "[PSA] : Error: -DCPU_ARCH option missing") + else() + # Check for CPU architecture + if(NOT ${CPU_ARCH} IN_LIST PSA_CPU_ARCH_SUPPORT) + message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DCPU_ARCH=, supported CPU arch are : ${PSA_CPU_ARCH_SUPPORT}") + endif() + endif() endif() - # Check for VERBOSE if(NOT DEFINED VERBOSE) set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE) diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index 0a221459..e0424f3f 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -5,7 +5,7 @@ Before starting the test suite build, ensure that the following requirements are - Host Operating System : Ubuntu 16.04, Windows 10 - Scripting tools : Python 3.1.7 -- Compiler toolchain : GNU Arm Embedded Toolchain 6.3.1, Arm Compiler v6.7 +- Compiler toolchain : GNU Arm Embedded Toolchain 6.3.1, Arm Compiler v6.7, GCC 5.4.0 32-Bit (Linux Host), MinGW 6.3.0 32-Bit (Windows Host) - Build tools : CMake 3.10 **Note**: To compile the test suite code, at least one of the above supported compiler toolchains From 68a7b94f9a847b8ea38b2d1e786cd9aec4af58ef Mon Sep 17 00:00:00 2001 From: Vikas Katariya Date: Wed, 21 Aug 2019 12:05:30 +0100 Subject: [PATCH 18/54] Add support for Linux target The purpose of these changes is to support Linux targets, but the code should be suitable for many platforms. Linux target file changes to adhere with new API test suite 1.0.0-beta3. These have been referenced/leveraged from `tgt_dev_apis_mbedos_fvp_mps2_m4` target. At the moment only Crypto is supported. --- .../nspe/common/pal_client_api_empty_intf.c | 93 ++++ .../nspe/common/pal_client_api_intf.h | 32 ++ .../nspe/common/pal_common.h | 116 ++++ .../nspe/common/pal_config.h | 88 +++ .../nspe/common/pal_driver_ns_intf.c | 209 ++++++++ .../nspe/crypto/pal_crypto_config.h | 322 +++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c | 30 ++ .../nspe/crypto/pal_crypto_intf.c | 506 ++++++++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 103 ++++ .../targets/tgt_dev_apis_stdc/target.cfg | 63 +++ 11 files changed, 1785 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config_check.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..578b4cef --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,93 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - minor_version : minor_version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..3f5741e0 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_client_api_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_status_t pal_ipc_call(psa_handle_t handle, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h new file mode 100644 index 00000000..00768919 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h @@ -0,0 +1,116 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#include "pal_config.h" +#include "pal_crypto_config.h" + +/* typedef's */ +typedef uint8_t bool_t; +typedef uintptr_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum +{ + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#ifndef IPC + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* IPC */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h new file mode 100644 index 00000000..28713398 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) + +/* Print verbosity = TEST */ +#define VERBOSE 3 + +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD + +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD + +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE + +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE + +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP +#endif /* PSA_CMAKE_BUILD */ + +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + +/* + * Include of PSA defined Header files + */ +#ifdef IPC +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#ifdef CRYPTO +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#ifdef INTERNAL_TRUSTED_STORAGE +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#ifdef PROTECTED_STORAGE +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#ifdef INITIAL_ATTESTATION +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..204adfb7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,209 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include +#include +#include +#include +#include + +#include "pal_common.h" + +/* This stdc implementation doesn't support tests that involve resets of the + * test process or the system, so we don't actually need non-volatile memory. + * Just implement the "nvmem" as an array in memory. + */ + +/* Using zero as NVMEM_BASE is a bit arbitrary - we don't actually need callers + * to specify a base address but the nvmem function signatures have "base" params. + * Zero is the value used in our target.cfg file so that's what we should recieve. + */ +#define NVMEM_BASE 0 + +#define NVMEM_SIZE (1024) +static uint8_t g_nvmem[NVMEM_SIZE]; + +/** + @brief - Check that an nvmem access is within the bounds of the nvmem + @param - base : Base address of nvmem (must be zero) + offset : Offset into nvmem + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +static int nvmem_check_bounds(addr_t base, uint32_t offset, int size) +{ + if (base != NVMEM_BASE) + { + return PAL_STATUS_ERROR; + } + if (offset > NVMEM_SIZE) + { + return PAL_STATUS_ERROR; + } + if (size < 0) + { + return PAL_STATUS_ERROR; + } + if (offset > INT_MAX - size) + { + return PAL_STATUS_ERROR; + } + if (offset + size > NVMEM_SIZE) + { + return PAL_STATUS_ERROR; + } + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem (must be zero) + offset : Offset + buffer : Pointer to dest address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_check_bounds(base, offset, size) != PAL_STATUS_SUCCESS) + { + return PAL_STATUS_ERROR; + } + memcpy(buffer, g_nvmem + offset, size); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem (must be zero) + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_check_bounds(base, offset, size) != PAL_STATUS_SUCCESS) + { + return PAL_STATUS_ERROR; + } + memcpy(g_nvmem + offset, buffer, size); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function initializes the UART + + This implementation doesn't actually use a UART to print test output, we + just send it to stdout. No init necessary. + + @param - uart base addr (ignored) + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + + This implementation doesn't actually use a UART to print test output, we + just send it to stdout. + + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ +int pal_print_ns(char *str, int32_t data) +{ + if (printf(str, data) < 0) + { + return PAL_STATUS_ERROR; + } + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + + This implementation doesn't support watchdogs so this is a noop. + + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Enables a hardware watchdog timer + + This implementation doesn't support watchdogs so this is a noop. + + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Disables a hardware watchdog timer + + This implementation doesn't support watchdogs so this is a noop. + + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function will read peripherals using SPI commands + + This implementation doesn't support SPI so this is a noop. + + @param - addr : address of the peripheral + data : read buffer + len : length of the read buffer in bytes + @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return PAL_STATUS_ERROR; +} + +/** + @brief - Terminates the simulation at the end of all tests completion. + + This implementation just calls exit. + + @param - void + @return - void +**/ +void pal_terminate_simulation(void) +{ + ; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..47bb881c --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,322 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_DES +#define ARCH_TEST_DES_1KEY +#define ARCH_TEST_DES_2KEY +#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +// #define ARCH_TEST_MD2 +// #define ARCH_TEST_MD4 +#define ARCH_TEST_MD5 +#define ARCH_TEST_RIPEMD160 +#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +// #define ARCH_TEST_SHA512_224 +// #define ARCH_TEST_SHA512_256 +// #define ARCH_TEST_SHA3_224 +// #define ARCH_TEST_SHA3_256 +// #define ARCH_TEST_SHA3_384 +// #define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..443e0bc2 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_empty_intf.c new file mode 100644 index 00000000..2a28f397 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..fd2e0557 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,506 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); + return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; + case PAL_CRYPTO_EXPORT_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); + return 0; + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); + return 0; + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); + return 0; + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); + case PAL_CRYPTO_AEAD_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_SIGN: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); + case PAL_CRYPTO_COPY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..486f7935 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,103 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_H_ +#define _PAL_CRYPTO_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg new file mode 100644 index 00000000..daef0dbe --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg @@ -0,0 +1,63 @@ +///** @file +// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +// In this implementation we don't assume there's a UART device, we just print +// to stdout, so the values below don't mean much. +uart.num=1; +uart.0.base = 0x00000000; +uart.0.size = 0x0; +uart.0.intr_id = 0x0; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +// In this implementation we don't assume there's a watchdog. Watchdog PAL +// functions all just return SUCCESS, so the values below don't mean much. +watchdog.num = 1; +watchdog.0.base = 0x0; +watchdog.0.size = 0x0; +watchdog.0.intr_id = 0x0; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x0; +watchdog.0.timeout_in_micro_sec_low = 0x0; +watchdog.0.timeout_in_micro_sec_medium = 0x0; +watchdog.0.timeout_in_micro_sec_high = 0x0; +watchdog.0.timeout_in_micro_sec_crypto = 0x0; + +// In this implementation we don't actually use NV memory - we don't support +// tests that require process or system restarts so NV memory isn't required. +// The implementation just uses an array in memory. +nvmem.num =1; +nvmem.0.start = 0x0; +nvmem.0.end = 0x400; // 1KiB +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x2007F000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file. +dut.0.ns_start_addr_of_combine_test_binary = 0x2003F000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + +// Level of Isolation +dut.0.implemented_psa_firmware_isolation_level = LEVEL1; From 5c911b0632aac268754630124d1f4777251c7ea0 Mon Sep 17 00:00:00 2001 From: Vikas Katariya Date: Mon, 23 Sep 2019 11:18:00 +0100 Subject: [PATCH 19/54] Add Cmake build for the target --- .../targets/tgt_dev_apis_stdc/target.cmake | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake new file mode 100644 index 00000000..38e4db21 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -0,0 +1,76 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + message(FATAL_ERROR "IPC not supported") +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + message(FATAL_ERROR "Protected Storage not supported") +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + message(FATAL_ERROR "Internal Trusted Storage not support") +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + message(FATAL_ERROR "Initial attestation not supported") +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() From e080239655c00bbf398d08d9f5db8fc5f755ae32 Mon Sep 17 00:00:00 2001 From: Vikas Katariya Date: Mon, 23 Sep 2019 11:31:39 +0100 Subject: [PATCH 20/54] Readme documentation for Linux target --- .../platform/targets/tgt_dev_apis_stdc/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/README.md diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/README.md b/api-tests/platform/targets/tgt_dev_apis_stdc/README.md new file mode 100644 index 00000000..df272d83 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/README.md @@ -0,0 +1,15 @@ +# Linux Host Target + +There are a couple of limitations to this target when it comes to a test which involves system reset or test process due to Watch Dog Timer (WDT) and NVMEM implementation. + +- **WDT**: Lacks functionality to recover after a hang as they just return failure or success. + +- **NVMEM**: Stores data in an array in memory, which means NVMEM would be lost as it isn't a non-volatile implementation. + +## License + +Arm PSA test suite is distributed under Apache v2.0 License. + +-------------- + +*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* From f0175d6d24d4503766eabcfabcf8a09a4eabce9d Mon Sep 17 00:00:00 2001 From: Vikas Katariya Date: Fri, 30 Aug 2019 11:16:10 +0100 Subject: [PATCH 21/54] Return status of the test Adding a new status code to return if there are any test failures. This helps to automate these arch-tests on the running host. --- api-tests/val/common/val.h | 1 + api-tests/val/nspe/val_dispatcher.c | 30 +++++++++++++++-------------- api-tests/val/nspe/val_dispatcher.h | 2 +- api-tests/val/nspe/val_entry.c | 15 ++++++++++----- api-tests/val/nspe/val_entry.h | 4 ++-- 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h index f2ccf7ab..243c5848 100644 --- a/api-tests/val/common/val.h +++ b/api-tests/val/common/val.h @@ -241,6 +241,7 @@ typedef enum { VAL_STATUS_UNSUPPORTED = 0x2B, VAL_STATUS_DRIVER_FN_FAILED = 0x2C, VAL_STATUS_NO_TESTS = 0X2D, + VAL_STATUS_TEST_FAILED = 0x2E, VAL_STATUS_ERROR_MAX = INT_MAX, } val_status_t; diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c index eff584f3..5d6da4e0 100644 --- a/api-tests/val/nspe/val_dispatcher.c +++ b/api-tests/val/nspe/val_dispatcher.c @@ -313,9 +313,9 @@ char * val_get_comp_name(test_id_t test_id) @brief - This function is responsible for setting up VAL infrastructure. Loads test one by one from combine binary and calls test_entry function of each test image. - @return - none + @return - 0 if success Or error code for the failure. **/ -void val_dispatcher(test_id_t test_id_prev) +int32_t val_dispatcher(test_id_t test_id_prev) { test_id_t test_id; @@ -332,7 +332,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\ttarget config read failed", 0); - return; + return status; } combine_test_binary_addr = misc_desc->ns_start_addr_of_combine_test_binary; @@ -342,7 +342,7 @@ void val_dispatcher(test_id_t test_id_prev) status = val_get_boot_flag(&boot.state); if (VAL_ERROR(status)) { - return; + return status; } /* Did last run test hang and system re-booted due to watchdog timeout and @@ -356,7 +356,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM read error", 0); - return; + return status; } } /* Did last run test hang and system reset due to watchdog timeout but @@ -372,7 +372,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM read error", 0); - return; + return status; } } else @@ -381,7 +381,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { - return; + return status; } else if (test_id == VAL_INVALID_TEST_ID) { @@ -393,7 +393,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM write error", 0); - return; + return status; } if (VAL_GET_COMP_NUM(test_id_prev) != VAL_GET_COMP_NUM(test_id)) @@ -409,7 +409,7 @@ void val_dispatcher(test_id_t test_id_prev) status = val_set_boot_flag(BOOT_NOT_EXPECTED); if (VAL_ERROR(status)) { - return; + return status; } } val_execute_test_fn(); @@ -421,7 +421,7 @@ void val_dispatcher(test_id_t test_id_prev) status = val_set_boot_flag(BOOT_UNKNOWN); if (VAL_ERROR(status)) { - return; + return status; } /* Prepare suite summary data structure */ @@ -429,7 +429,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM read error", 0); - return; + return status; } switch (test_result) @@ -452,7 +452,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM write error", 0); - return; + return status; } test_id_prev = test_id; @@ -461,7 +461,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM write error", 0); - return; + return status; } } while(1); @@ -470,7 +470,7 @@ void val_dispatcher(test_id_t test_id_prev) if (VAL_ERROR(status)) { val_print(PRINT_ERROR, "\n\tNVMEM read error", 0); - return; + return status; } val_print(PRINT_ALWAYS, "\n************ ", 0); @@ -483,6 +483,8 @@ void val_dispatcher(test_id_t test_id_prev) val_print(PRINT_ALWAYS, "TOTAL FAILED : %d\n", test_count.fail_cnt); val_print(PRINT_ALWAYS, "TOTAL SKIPPED : %d\n", test_count.skip_cnt); val_print(PRINT_ALWAYS, "******************************************\n", 0); + + return (test_count.fail_cnt > 0) ? VAL_STATUS_TEST_FAILED : VAL_STATUS_SUCCESS ; } diff --git a/api-tests/val/nspe/val_dispatcher.h b/api-tests/val/nspe/val_dispatcher.h index 9adc98f8..173e8c6d 100644 --- a/api-tests/val/nspe/val_dispatcher.h +++ b/api-tests/val/nspe/val_dispatcher.h @@ -66,5 +66,5 @@ typedef struct { uint32_t elf_size; } test_header_t; -void val_dispatcher(test_id_t); +int32_t val_dispatcher(test_id_t); #endif diff --git a/api-tests/val/nspe/val_entry.c b/api-tests/val/nspe/val_entry.c index cff5dedf..f0a44dde 100644 --- a/api-tests/val/nspe/val_entry.c +++ b/api-tests/val/nspe/val_entry.c @@ -23,18 +23,21 @@ /** @brief - PSA C main function, does VAL init and calls test dispatcher @param - None - @return - void + @return - status - error code **/ -void val_entry(void) +int32_t val_entry(void) { test_id_t test_id; + int32_t status; - if (VAL_ERROR(val_uart_init())) + status = val_uart_init(); + if (VAL_ERROR(status)) { goto exit; } - if (VAL_ERROR(val_get_last_run_test_id(&test_id))) + status = val_get_last_run_test_id(&test_id); + if (VAL_ERROR(status)) { goto exit; } @@ -48,10 +51,12 @@ void val_entry(void) } /* Call dispatcher routine*/ - val_dispatcher(test_id); + status = val_dispatcher(test_id); exit: val_print(PRINT_ALWAYS, "\nEntering standby.. \n", 0); pal_terminate_simulation(); + + return status; } diff --git a/api-tests/val/nspe/val_entry.h b/api-tests/val/nspe/val_entry.h index 2236016e..f594cc4f 100644 --- a/api-tests/val/nspe/val_entry.h +++ b/api-tests/val/nspe/val_entry.h @@ -26,7 +26,7 @@ /** @brief - PSA Test Suite C main function, does VAL init and calls test dispatcher @param - None - @return - void + @return - int32_t **/ -extern void val_entry(void); +extern int32_t val_entry(void); #endif From 6a00d3a3abf20241526fe1378efd33a759a2055d Mon Sep 17 00:00:00 2001 From: Vikas Katariya Date: Tue, 24 Sep 2019 11:45:05 +0100 Subject: [PATCH 22/54] Update documentation --- api-tests/dev_apis/README.md | 2 +- api-tests/ff/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md index 6b8fabf8..5b036996 100644 --- a/api-tests/dev_apis/README.md +++ b/api-tests/dev_apis/README.md @@ -71,7 +71,7 @@ Building the test suite generates the following NSPE binaries:
    The following steps describe the execution flow before the test execution:
    1. The target platform must load the above binaries into appropriate memory.
    -3. Upon booting firmware and Non-secure OS, the SUT boot software gives control to the test suite entry point void **val_entry(void);** as an Non-secure application entry point.
    +3. Upon booting firmware and Non-secure OS, the SUT boot software gives control to the test suite entry point **int32_t val_entry(void);** as an Non-secure application entry point returning test status code.
    4. The tests are executed sequentially in a loop in the test_dispatcher function.
    For details on test suite integration, refer to the **Integrating the test suite with the SUT** section of [Validation Methodology](../docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf). diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index f3e46b46..d5814ee9 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -99,7 +99,7 @@ The following steps describe the execution flow before the test execution:
    2. The *System Under Test* (SUT) boots to an environment that initializes the SPM and the test suite partitions are ready to accept requests.
    -3. On the Non-secure side, the SUT boot software gives control to the test suite entry point **void val_entry(void);** as an application entry point.
    +3. On the Non-secure side, the SUT boot software gives control to the test suite entry point **int32_t val_entry(void);** as an application entry point returning test status code.
    4. The tests are executed sequentially in a loop in the test_dispatcher function.
    For details on test suite integration, refer to the **Integrating the test suite with the SUT** section of [Validation Methodology](../docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf). From 45b242e0091bacea2f8b6b6f958b0996da36c937 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Fri, 27 Sep 2019 15:42:06 +0530 Subject: [PATCH 23/54] Documentation update for cmake build support --- ..._APIs_Arch_Test_Validation_Methodology.pdf | Bin 590051 -> 593975 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/api-tests/docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf b/api-tests/docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf index b22a7242cc319037785f5f2a385a4cd484f38c02..258019ff12630e33f453cac5656a5f0b180fba40 100755 GIT binary patch literal 593975 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Ŗ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

    UMOv+ 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

    AFUw7bt=cX5!q#~|NFPN8!kAwPZFmzn# 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

  1. N|x*<{NgR;X-Z5OS{-yV5m6Xe9n@XsR;B-x2=lQ+r$^NffS_`1$i z4R|Ev($Wa00-#sgVN?zfH~Hi5m%_W@+{!rcL6D-BtOwWOeGak5Pa8p9 zoeMpJmCFqPcAnY+`w&z9#q@Z_&UN3NN+b)v>*K*z~o-adDLX8OOzP|^!4&pu6nL4+M=0>~e z=~P$|IgTbfqdNU7I+7y_k#2cs(Ktj}|1HF?r2inYBhW5ylD6h;zzrCVGA-VQejB1y z=5b`rYD@7QwGfFHK8CqpVn5_;)wEJk9zqxC%t0MO{=JtU;vOAF-vc!89fHe4duy^h zvj3TLTMuMEO2CKw8KcxTHX;B#k`!>V+mGpEEUSwY+DD?qJ^IF$53N^0jT_5&25GRW z97DOPu;Sa3$FgU&GE~+dHDXQOLUt!#xl46VTKpm)=u9n02=&Ek3f> zxL}_96IJH3_qX|F*n^bNo*dw5vwEGrG>q{w@w@BAE0UYlFhwwRp=tWh&TRT2d%0Z@ZL}Ow27quL zl%>nd52F~u9p%GgGPDDz0A=HL56gimc-+w}Pknt~P2#51W$flnaW&7Cq*RJ~&cM@3 zy}DG4SyxB)2jbn8_JC_52iLXCLiOPOo!;9hcGrlYLOK#lLL3K z)}I%!B7-4-%E1cKi@Y^OGbQXjPTO@(2+?dHl?UEEH=w-L9x_0Kvu2w3H`14FBxiPiotPc$?9FcwCJWtRlGFV^rI)pQi`&Cw0#C zw>u3cg%p2bfwXGBR$f0^SSKYAH?$sVI}sV(D!o;*6}*0>o12XA!uB!7wcdB{$TS)H zpv1AU%lF0L3*%U>EVk)*KHX+VjTHz}_b?QRF%-`edo7EQKnwmY-}>c-uD-%VFIxh( z&ksDA+769%C;nu7E2}B98Mog2m)g1ES~aI>UE7M~M%GlIgx)TP(nn+-aS6;jl?0G4N$?)VmTdMWPonsqdOazC&Hmca6itYGBbpEOc5>{D55Rhlph4y=`{EL zBSR@^f2odxA@qyAe;W6Tdm|aWV9?l(}|kZ<>D( zADU&c4Lv~g_*_3%=OoB16k;>n@X1%%Ap7}xN5SjKu&k-lTG}M7mfu+jf%&W&=%_!> z{t(;)w)c!f8qN5fHz52-8=n?RNamLdC?h;xUL5u4$0o55F8;ndOYRJv2C9B6WAJdS z3?k3}k|Zj&=wkHpnUSTLr+BV6pg$H)iX@xEpt(hbxrESGbsCCZ%>!V>mrzB|G)uFa zg{47C1Ikl3hI5^*&hQ_g&_jV+>q;+}*d^(JE&vsiJ2BIEr7u-wz*0x4VLWGQS*O`y zY=Oq){5>Y$5h@#6u+|7-C1P^$nu7vcu}Ph}ORw~H{erh_{2@_g9qUwu7BIF(CSFn; zb7^!mXDzy9)R}1W$|;IkW}ug3wpQJ6NMur8sVC0|@^uMVt{YuKj+XzKqDE;_qFx*C z%~+kX$O8L}d4it9y!1(LVy|6+%}y$?zL0K?AB4-ON+LqT#WUxwt+(^!UzL;}%fJr0 zIS&K83trJy_v$YVuM9kxxJx^O*jg}nKNVydMV{9fF0*0BhGMwJmN1bVPHCS_I_!&z9M*8W`YK!55zPQ0f@ONkie z0k!c{_(R8h%)ESGN?B02%2{(Iok5u4bwGU|<|+rUE)5RGT}l#|1k{s8+lO9lev<|(x^`8zKq#i(h7}mNN zJ}^(T$&;_Ue_~>O_HBQ8cXUCr@HzonU|QJw7h_T^Osm3KE7P})n%%D*O7tXcPrlSr z#L$X=h4pt*Z1yFtzE#-R)u@3OOnk~l8VwXmfpd3rN+*EhWT~L~8R7G80DPC{Mzk^) zVk9Kj#3rt(DCnT3Bxay42f+NlzJKVPmaR}j{3AI<{WrOtSxsQY&bQ&XPy4( zopN8XCZ9rgF$#c-SN7Rtj!bqP;_fvO2c??;USFgHKCmhJ%E$9ud79UmD44W5RK0Ea zCCs_{FVQD=(2k*m?MuEH;9afE=)HgA9PIFT^`4TStbK?9`+-c;61RUl92I?x5IeM_Y~pWH(x+OG(o-%{YK9iqCF%dv-(j@_$? z?N7U0AwS|{qHi!b@Su%vbi9oQldnbHy9l$6Nv_DrVCPvFOuGKOdJS#1eRprnsK3Ms zUxsEIf`gUAS=rda`aYW3lr$Ul$OeXA} z>I65|L91a>4v;6UPA75(LzQ252YyF2KdHl(l)AzqW>DE-6|){#P;-hzhPomRF90U7 zjhn5=;9TiGZvK9z8Kr`;vLWntX3tty83>^MDfwQ^-nc$&TBg2wERS&sOdPBrG&W?( z`(eJS0Pkp;eBfzbB5I_11FA4jZ2oD&#CEeiv)hrSbm(Fnp{t$8V2K*+P8d)^JpQ2G z`3m0}8@1#w_LQC9#eH)nwNu{Pz7*N(%$B@LZ#9e|Etai{j~DB6?n9?x_ z$(^|2IJAT=M0iJ4U-piITQjvO;3kG$DTel?)DdkI47meT1g1(n1Iz>e=Nc)*s8Bar z2ZP}3dhAd$ddX~_(w0tDhC!-~;|Tos=w#u2@4Hz82};1JBQA*Y`p~B*$y}kQRBm@M z(37ot>^GpDfeyq;2SqzJIk&36#eiAWP9(^FiN8-;&TSx68+WY$ln%$W9}!s7g&d zh)pm#)hh5Tl5NzlopQli#_|F>RdeMU)HweENzNPJc1r6$VH+~n!E7pz|kN8^^hj8-8!?m9z!F2PYZxtMmJ&(-HO z7W<&~%ko56$+rG3!RWY6G7U#+lawTvkqzW9_~r826nz6Kd@;4lWv}2efnwmIRVfmp z?@vJvaOFVT(LrE&gNRj+GE3jo56cH8pX?`yo$l#?IldS1dk6DX~ z@C7E{2x3j9=1s7+|8-Jvqnex!$}W-L&Nuq_6A98eYI0M6C-TZP7=7L!Q)T1CwKL_v z4|_-i?pFZn$n^7~b5x(V+;o-aGKt!0E2VnFCAi|FXV%*hZ9cDd=AzWp&?=+IkMX$g z0gaM!oG31)vy8tJ1`e>MmJvvy-rut8jUN=)S16nI>^v_d><7UG$iId7{SQ9{o!azWTU55UdR`h=in!mP=D-2})vfJ4dtiSznxjhuJPccl0u!?m% z*0=wn9$Rb-X2=6$SMIt@Vlka@nzNVxFb*VB4!5X7LbCwU;w|d?!7!hqc!fo`sByH6 zN292(%nxL4v#|Y6Bv!|n7H|X)gB?EQX-st{EJ5JFT)bPWa;k?d2=w7cO&!vQXLP(X zJHRAlSG$^hkp?g%3in)jNkXb%z-6nE>{SvnzcKKV;g zm`B8Ssx_8^kFZ7$i%U}Z8b9&1-hnnPMD&cnTa=Fb&ruD+gc9XZ8@=K6Y_we zqYrZOqecIu2iI0`U7HXeBBOc`7BryLuUo|DL8#+dX|A=k$e9WRUC|o%_k($G>qmZb zlS|8c1Kn!K!G4kSN+;3jsZJgNnBa>vS-?IXXkoDX(t5qvo8PXjN7lPDF1bpv7ruvn zCwngOcFu(FXFmz{-I+a3S5-`W$KV)WoaWJzZ45B?zM84`pv#^L#RZ%QoIpLkxukI4 ziy+Pn;`ixJ`$0;a40+QWV8)3#*hO$cI88cYtTt`=QUB4qO9sc&LrpJWgdg<|-=WH= zFY^tFANMfhX;dF@9@KE*QvX)RH_dblcX3&LC(IHezU9@C%fLIc#aR!{wm2wU!o3om z&T>5$z}3Fx`m^i3M=mF&x5Ub!W9#z34_wOyv}F9a(Qa^L+x=pS(&Bm8i8kPx`dRG1^ndEudiM9uPph&p#{ir71XeU*M4Jrl5@u) zcMs}vB|#fY`Lc{|NwI;Jmv0BH9B3g2it|q>^RF2m(o{`}m(I>H{*Bl=hO)L2&E^r5 zQk4-YbeRmz_F3#<9L$S#)@~Qf@}zS!vbVyoF^Y^V5m5 z8Wl9EEHY)6*w-N9o_^}IG)p;~WogE?CehL{b*4Twqr9O2Xf0HZvxsD#R@~KYT%J=3 z()>ZNw5Z{4b(&!W~SuiE70@g%+vw*6pq+Jp21MioJDBgQ;QmpVo$gn{2B|` z$VY^0$KAg*E;=PiNjCaU%ENB-~Gi zwcqxe5Kqikm_^M^1hl`ZS3c<|55uW4w6(+UcWFRFoa>+K9dDNg_q+h`E~B#z!INYJ z?PQhAE}Cichh(?#KyxyjTv>^JvgQqcYB?<DV1)SaegUyxkno+ z60UbERcdo6qbhYvP;xB#XUKQnY%_|ag!ZV8mvNF#D;05K8`9`dd+p4*!|`;5ioT(e z0S}%O>&ech^bCekatcK(1e3+Usu@9H>(@0l3e5UDKmj-<|KOae2S@aR?sPnR7(NIj z3KJc_L4(F~mA-8!2v=;}HF|mRVx2cXIeY4Amm6n7TaUp7C}CiU0@m#^s>Sp5g*L5N zTEJ9nPMc3hDJES*$f*gR3j!Dst`31w;vUK)-*@o6wB5<6Sr{LXWIR=HXA7DKPReR< zWz<4ooGKVS{<~qxl?FC}VL^OEZ7T+6<10(g^f+2Al$Bo#OksWh5**OY?Wg}d7qnrZ zQz5@#5pOkQm4rqLehA`_k!N8TF^kp2N$K~Z$CIPeSCoUq+`J)nPo)FZ^1B>Y^xTOV zE=5a|SyaDhBXOOXY}C|+ig`DJT$(K0KzYf)Qir|5mVae*WDBdEt{0eb#aKz#@<<`i zTCWrfp9&h?rV~RsrlU~62f=$;LKvv?=s->LG*Uz%YVpmð+K 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

    !O$ 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 From abbe0592305a0c6e8ac7a32e544109026c8f7afd Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Wed, 9 Oct 2019 11:04:41 +0530 Subject: [PATCH 24/54] Attest: Utilizing token size buffer from PSA spec - Due to the support of multi image boot, the size of the attestation token has increased, because there is one item for S and NS image in the SW_COMPONENTS array separately. Size exceeds the 0x200 value. Signed-off-by: Gowtham Siddarth --- .../dev_apis/initial_attestation/test_a001/test_a001.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c index 83124cc4..f46012d5 100644 --- a/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c +++ b/api-tests/dev_apis/initial_attestation/test_a001/test_a001.c @@ -36,7 +36,7 @@ int32_t psa_initial_attestation_get_token_test(caller_security_t caller) int32_t status; size_t token_buffer_size, token_size; uint8_t challenge[PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64+1]; - uint8_t token_buffer[TOKEN_SIZE]; + uint8_t token_buffer[PSA_INITIAL_ATTEST_MAX_TOKEN_SIZE]; for (i = 0; i < num_checks; i++) { @@ -61,6 +61,12 @@ int32_t psa_initial_attestation_get_token_test(caller_security_t caller) return status; } + if (token_buffer_size > PSA_INITIAL_ATTEST_MAX_TOKEN_SIZE) + { + val->print(PRINT_ERROR, "Insufficient token buffer size\n", 0); + return VAL_STATUS_INSUFFICIENT_SIZE; + } + status = val->attestation_function(VAL_INITIAL_ATTEST_GET_TOKEN, challenge, check1[i].challenge_size, token_buffer, token_buffer_size, &token_size); TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(1)); From f632c0ded31d05d633ecc101efb3b2005851dbb4 Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Wed, 9 Oct 2019 15:50:57 +0530 Subject: [PATCH 25/54] Attest: Key ID not mandatory in attestation token The specification of initial attestation token does not require to have an explicit key-id in the unprotected part of the attestation token. Furthermore according to the COSE standard the unprotected header can be just an empty map (just single 0xA0 byte). Signed-off-by: Gowtham Siddarth --- .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + .../initial_attestation/pal_attestation_eat.c | 43 +------------------ .../initial_attestation/pal_attestation_eat.h | 1 + 12 files changed, 18 insertions(+), 246 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c index 60c71645..68c4312e 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c @@ -21,7 +21,7 @@ uint32_t mandatory_claims = 0; uint32_t mandaroty_sw_components = 0; bool_t sw_component_present = 0; -static int pal_encode_cose_key(struct q_useful_buf_c *cose_key, +int pal_encode_cose_key(struct q_useful_buf_c *cose_key, struct q_useful_buf buffer_for_cose_key, struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) { @@ -145,16 +145,9 @@ static int parse_unprotected_headers(QCBORDecodeContext *decode_context, if (get_items_in_map(decode_context, item_list)) { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType != QCBOR_TYPE_BYTE_STRING) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + return PAL_ATTEST_ERR_CBOR_STRUCTURE; } - *child = item_list[0].item.val.string; - return PAL_ATTEST_SUCCESS; } @@ -329,15 +322,9 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz struct q_useful_buf_c signature; struct q_useful_buf_c protected_headers; struct q_useful_buf_c kid; - struct q_useful_buf_c x_cord; - struct q_useful_buf_c y_cord; - struct q_useful_buf_c cose_key_to_hash; - struct q_useful_buf_c key_hash; struct q_useful_buf_c token_hash; USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_kid, T_COSE_CRYPTO_SHA256_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_cose_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); @@ -350,11 +337,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz buf_to_hold_x_coord.len = attest_key.pubx_key_size; buf_to_hold_y_coord.len = attest_key.puby_key_size; - x_cord.ptr = buf_to_hold_x_coord.ptr; - x_cord.len = buf_to_hold_x_coord.len; - y_cord.ptr = buf_to_hold_y_coord.ptr; - y_cord.len = buf_to_hold_y_coord.len; - /* Construct the token buffer for validation */ completed_token.ptr = token; completed_token.len = token_size; @@ -407,27 +389,6 @@ int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_siz if (status != PAL_ATTEST_SUCCESS) return status; - /* Encode the given public key */ - status = pal_encode_cose_key(&cose_key_to_hash, buffer_for_cose_key, x_cord, y_cord); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Create hash of the given public key */ - status = pal_create_sha256(cose_key_to_hash, buffer_for_kid, &key_hash); - if (status != PSA_SUCCESS) - return status; - - /* Compare the hash of the public key in token and hash of the given public key */ - if (kid.len != key_hash.len) - { - return PAL_ATTEST_HASH_LENGTH_MISMATCH; - } - - if (memcmp(kid.ptr, key_hash.ptr, kid.len) != 0) - { - return PAL_ATTEST_HASH_MISMATCH; - } - /* Get the payload */ QCBORDecode_GetNext(&decode_context, &item); if (item.uDataType != QCBOR_TYPE_BYTE_STRING) diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index 10e3649d..df24c894 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -160,6 +160,7 @@ enum attestation_error_code { PAL_ATTEST_ERR_SIGN_STRUCT, PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, PAL_ATTEST_ERROR, }; From 808426b0cf26feaaf41daa2d0de6ed0d6ba76f88 Mon Sep 17 00:00:00 2001 From: Alamy Liu Date: Thu, 24 Oct 2019 17:39:55 -0700 Subject: [PATCH 26/54] fix: protected_storage/suite.cmake The purpose is to use -DPS_TEST for PROTECTED_STORAGE -DITS_TEST for INTERNAL_TRUSTED_STORAGE Sharing the *source code* in internal_trusted_storage/, not the *test.cmake*. - When it refer to the suite.cmake under protected_storage/, ${SUITE} is PROTECTED_STORAGE, no need to check it again. Remove (${SUITE} STREQUAL "PROTECTED_STORAGE") test - We always want to include the 'test.cmake' under protected_storage// directory, which is ${PSA_SUITE_DIR}. not internal_trusted_storage// directory. include(${PSA_SUITE_DIR}/${test}/test.cmake) --- api-tests/dev_apis/protected_storage/suite.cmake | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/api-tests/dev_apis/protected_storage/suite.cmake b/api-tests/dev_apis/protected_storage/suite.cmake index 2dc9b5b4..6daf1701 100644 --- a/api-tests/dev_apis/protected_storage/suite.cmake +++ b/api-tests/dev_apis/protected_storage/suite.cmake @@ -17,13 +17,12 @@ foreach(test ${PSA_TEST_LIST}) string(SUBSTRING ${test} 0 6 ITS_TEST_STR) - if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND - (${ITS_TEST_STR} STREQUAL "test_s")) + if(${ITS_TEST_STR} STREQUAL "test_s") string(REPLACE ${SUITE_LOWER} "internal_trusted_storage" ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) else() set(ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) endif() - include(${ACTUAL_PSA_SUITE_DIR}/${test}/test.cmake) + include(${PSA_SUITE_DIR}/${test}/test.cmake) foreach(source_file ${CC_SOURCE}) list(APPEND SUITE_CC_SOURCE ${ACTUAL_PSA_SUITE_DIR}/${test}/${source_file} @@ -34,24 +33,19 @@ foreach(test ${PSA_TEST_LIST}) ${ACTUAL_PSA_SUITE_DIR}/${test}/${asm_file} ) endforeach() - if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND - (${ITS_TEST_STR} STREQUAL "test_p")) - add_definitions(${CC_OPTIONS}) - add_definitions(${AS_OPTIONS}) - endif() unset(CC_SOURCE) unset(AS_SOURCE) unset(ACTUAL_PSA_SUITE_DIR) - unset(CC_OPTIONS) endforeach() +add_definitions(${CC_OPTIONS}) +add_definitions(${AS_OPTIONS}) add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) # Test related Include directories foreach(test ${PSA_TEST_LIST}) string(SUBSTRING ${test} 0 6 ITS_TEST_STR) - if((${SUITE} STREQUAL "PROTECTED_STORAGE") AND - (${ITS_TEST_STR} STREQUAL "test_s")) + if(${ITS_TEST_STR} STREQUAL "test_s") string(REPLACE ${SUITE_LOWER} "internal_trusted_storage" ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) else() set(ACTUAL_PSA_SUITE_DIR ${PSA_SUITE_DIR}) From 0bc772f2268eb0fe5650211ecfbb775a064b2a6d Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Fri, 8 Nov 2019 12:36:36 +0530 Subject: [PATCH 27/54] Fix: PSA Storage test_s006.c Test logic updated to consider actual protection level applied when storage gets created and not the requested level. --- .../test_s006/test_entry_s006.c | 2 +- .../test_s006/test_s006.c | 103 ++++++++++++------ api-tests/docs/psa_its_testlist.md | 2 +- api-tests/docs/psa_ps_testlist.md | 2 +- 4 files changed, 71 insertions(+), 38 deletions(-) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c index dda491bd..f3f2af34 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_entry_s006.c @@ -20,7 +20,7 @@ #include "test_s006.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_STORAGE_BASE, 6) -#define TEST_DESC "Flags not supported check\n" +#define TEST_DESC "Check for storage create flags\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c index a45351aa..2adc5d5a 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c @@ -43,48 +43,81 @@ static int32_t psa_sst_remove_api(psa_storage_uid_t uid, uint32_t data_len, /* Call the get_info function and match the attributes */ status = SST_FUNCTION(s006_data[2].api, uid, &info); - TEST_ASSERT_EQUAL(status, s006_data[2].status, TEST_CHECKPOINT_NUM(2)); - TEST_ASSERT_EQUAL(info.flags, create_flag, TEST_CHECKPOINT_NUM(3)); + TEST_ASSERT_EQUAL(status, s006_data[2].status, TEST_CHECKPOINT_NUM(1)); + if ((create_flag != PSA_STORAGE_FLAG_NO_CONFIDENTIALITY) || + (create_flag != PSA_STORAGE_FLAG_NO_REPLAY_PROTECTION)) + { + TEST_ASSERT_EQUAL(info.flags, create_flag, TEST_CHECKPOINT_NUM(2)); + } /* Remove the UID */ status = SST_FUNCTION(s006_data[4].api, uid); - TEST_ASSERT_EQUAL(status, s006_data[4].status, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(status, s006_data[4].status, TEST_CHECKPOINT_NUM(3)); + + return VAL_STATUS_SUCCESS; +} + +static int32_t psa_sst_create_storage_api(psa_storage_uid_t uid, uint32_t data_len, + uint8_t *data_buff, psa_storage_create_flags_t create_flag) +{ + uint32_t status; + int32_t test_status; + + status = SST_FUNCTION(s006_data[1].api, uid, data_len, data_buff, create_flag); + if (status == s006_data[1].status) + { + test_status = psa_sst_remove_api(uid, data_len, data_buff, create_flag); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + } else if (status == s006_data[0].status) + { + /* Remove UID should fail */ + status = SST_FUNCTION(s006_data[5].api, uid); + TEST_ASSERT_EQUAL(status, s006_data[5].status, TEST_CHECKPOINT_NUM(4)); + } return VAL_STATUS_SUCCESS; } int32_t psa_sst_flags_not_supported(caller_security_t caller) { - psa_storage_create_flags_t flag = 0x80000000; - uint32_t status = VAL_STATUS_SUCCESS; - psa_storage_uid_t uid = UID_BASE_VALUE + 5; - int32_t test_status; - - /* Calling set function with different create flag value */ - - val->print(PRINT_TEST, "[Check 1] Call set API with valid flag values\n", 0); - while (flag) - { - /* Create storage with flag value */ - status = SST_FUNCTION(s006_data[1].api, uid, TEST_BUFF_SIZE, write_buff, - (flag & (~PSA_STORAGE_FLAG_WRITE_ONCE))); - - if (status == s006_data[1].status) - { - test_status = psa_sst_remove_api(uid, TEST_BUFF_SIZE, write_buff, - (flag & (~PSA_STORAGE_FLAG_WRITE_ONCE))); - if (test_status != VAL_STATUS_SUCCESS) - return test_status; - } - else if (status == s006_data[0].status) - { - /* Remove UID should fail */ - status = SST_FUNCTION(s006_data[5].api, uid); - TEST_ASSERT_EQUAL(status, s006_data[5].status, TEST_CHECKPOINT_NUM(5)); - } - - flag = flag >> 1; - }; - - return status; + psa_storage_create_flags_t flag; + uint32_t status = VAL_STATUS_SUCCESS; + psa_storage_uid_t uid = UID_BASE_VALUE + 5; + int32_t test_status; + + /* Calling set function with different create flag value */ + + val->print(PRINT_TEST, "[Check 1] Call set API with flag - PSA_STORAGE_FLAG_NONE\n", 0); + /* Create storage with flag value */ + flag = PSA_STORAGE_FLAG_NONE; + test_status = psa_sst_create_storage_api(uid, TEST_BUFF_SIZE, write_buff, flag); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + + val->print(PRINT_TEST, "[Check 2] Call set API with flag - " + "PSA_STORAGE_FLAG_NO_CONFIDENTIALITY\n", 0); + /* Create storage with flag value */ + flag = PSA_STORAGE_FLAG_NO_CONFIDENTIALITY; + test_status = psa_sst_create_storage_api(uid, TEST_BUFF_SIZE, write_buff, flag); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + + val->print(PRINT_TEST, "[Check 3] Call set API with flag - " + "PSA_STORAGE_FLAG_NO_REPLAY_PROTECTION\n", 0); + /* Create storage with flag value */ + flag = PSA_STORAGE_FLAG_NO_REPLAY_PROTECTION; + test_status = psa_sst_create_storage_api(uid, TEST_BUFF_SIZE, write_buff, flag); + if (test_status != VAL_STATUS_SUCCESS) + { + return test_status; + } + + return status; } diff --git a/api-tests/docs/psa_its_testlist.md b/api-tests/docs/psa_its_testlist.md index 34432494..28aaead0 100644 --- a/api-tests/docs/psa_its_testlist.md +++ b/api-tests/docs/psa_its_testlist.md @@ -15,7 +15,7 @@ Following are the requirements of the Storage Test Suite.
    | test_s003 | Exhaust storage space | psa_its_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | | test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , error should be returned and also
    the return buffer should be empty
    5. Call GET api with correct data_len and validate the data received.
    6. Check old data cannot be accessed.
    7. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | | test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
    2. Call GET api and validate the set data
    3. Call GET info api and validate the data attributes
    4. Call REMOVE api to delete the UID/data pair
    | UID value used are 4 | -| test_s006 | Storage asset creation with unsupported
    create_flag value | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | +| test_s006 | Storage asset creation with supported create flag values | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET API with available create flag values
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | | test_s007 | Get API call with length different than asset
    data length | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | | test_s008 | Get API call with invalid offset | psa_its_get
    | PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
    2. Call GET api with valid offset and offset + data_len equal to stored data size.
    3. Call GET api with valid offset and offset + data_len less than stored data size.
    4. Call get api with invalid offset.
    5. Call get api with zero offset , but data len greater than data size.
    6. Remove the uid.
    | UID value used is 5 | | test_s009 | API call with NULL pointer and zero length | psa_its_get
    psa_its_set
    psa_its_get_info
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
    2. Validate using get_info api storage should be present.
    3. Call get API with NULL pointer.
    4. Remove the UID.
    5. Call get_info API to validate storage is removed.
    6. Set storage entity with valid write_buffer , but length zero.
    7. Call get_info API to validate storage attributes.
    8. Call get_info api with NULL pointer and valid uid.
    9. Remove the uid
    | UID value used is 5
    | diff --git a/api-tests/docs/psa_ps_testlist.md b/api-tests/docs/psa_ps_testlist.md index f93cfbdd..e12989b8 100644 --- a/api-tests/docs/psa_ps_testlist.md +++ b/api-tests/docs/psa_ps_testlist.md @@ -15,7 +15,7 @@ Following are the requirements of the Storage Test Suite.
    | test_s003 | Exhaust storage space | psa_its_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | | test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , error should be returned and also
    the return buffer should be empty
    5. Call GET api with correct data_len and validate the data received.
    6. Check old data cannot be accessed.
    7. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | | test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
    2. Call GET api and validate the set data
    3. Call GET info api and validate the data attributes
    4. Call REMOVE api to delete the UID/data pair
    | UID value used are 4 | -| test_s006 | Storage asset creation with unsupported
    create_flag value | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET_INFO with minimum flag value to max flag value
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | +| test_s006 | Storage asset creation with supported create flag values | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET API with available create flag values
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | | test_s007 | Get API call with length different than asset
    data length | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | | test_s008 | Get API call with invalid offset | psa_its_get
    | PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
    2. Call GET api with valid offset and offset + data_len equal to stored data size.
    3. Call GET api with valid offset and offset + data_len less than stored data size.
    4. Call get api with invalid offset.
    5. Call get api with zero offset , but data len greater than data size.
    6. Remove the uid.
    | UID value used is 5 | | test_s009 | API call with NULL pointer and zero length | psa_its_get
    psa_its_set
    psa_its_get_info
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
    2. Validate using get_info api storage should be present.
    3. Call get API with NULL pointer.
    4. Remove the UID.
    5. Call get_info API to validate storage is removed.
    6. Set storage entity with valid write_buffer , but length zero.
    7. Call get_info API to validate storage attributes.
    8. Call get_info api with NULL pointer and valid uid.
    9. Remove the uid
    | UID value used is 5
    | From 1c2b028ea80347cb9496f4e231008911d5d50679 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Wed, 6 Nov 2019 11:29:13 +0530 Subject: [PATCH 28/54] Add missing test suite build option information - Also fix duplicate function declaration --- api-tests/CMakeLists.txt | 11 +++++++---- api-tests/dev_apis/README.md | 24 +++++++++++++++--------- api-tests/ff/README.md | 27 ++++++++++++++++++--------- api-tests/val/common/val_target.h | 1 - 4 files changed, 40 insertions(+), 23 deletions(-) diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index d1bc0282..a43c3aef 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -45,9 +45,12 @@ list(APPEND PSA_SUITES list(APPEND PSA_IPC_FILES "psa/client.h" "psa/service.h" + "psa/lifecycle.h" "psa_manifest/sid.h" "psa_manifest/pid.h" - "psa/lifecycle.h" + "psa_manifest/driver_partition_psa.h" + "psa_manifest/client_partition_psa.h" + "psa_manifest/server_partition_psa.h" ) # list of crypto files required @@ -224,13 +227,13 @@ else() endif() if(NOT DEFINED WATCHDOG_AVAILABLE) - set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "By default watchdog is enabled" FORCE) - message(STATUS "[PSA] : Watchdog is enabled by default") + set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "Assuming watchdog is available to program by test suite" FORCE) + message(STATUS "[PSA] : Watchdog is available by default") endif() if((INCLUDE_PANIC_TESTS EQUAL 1) AND (WATCHDOG_AVAILABLE EQUAL 0)) - message(FATAL_ERROR "[PSA]: Panic test execution needs watchdog to be enabled! set -DWATCHDOG_AVAILABLE=1") + message(FATAL_ERROR "[PSA]: Panic test execution needs watchdog access. set -DWATCHDOG_AVAILABLE=1") endif() if(NOT DEFINED SP_HEAP_MEM_SUPP) diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md index 5b036996..f722b0b1 100644 --- a/api-tests/dev_apis/README.md +++ b/api-tests/dev_apis/README.md @@ -34,17 +34,23 @@ To build the test suite for your target platform, execute the following commands cd api-tests mkdir cd - cmake ../ -G" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" + cmake ../ -G"" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" cmake --build . ``` -
    where: - -- "Unix Makefiles" to generate Makefiles for Linux and Cygwin
    - "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    -- is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
    -- is the Arm Architecture version name for which the tests should be compiled. For example, Armv7M, Armv8M-Baseline and Armv8M-Mainline Architecture.
    -- is the suite name that is the same as the suite name available in **dev_apis/** directory.
    -- ;;...; is an additional directory to be included into the compiler search path.You must provide Developer APIs header file implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system.
    +
    Options information:
    + +- -G"" : "Unix Makefiles" to generate Makefiles for Linux and Cygwin. "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    +- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
    +- -DTOOLCHAIN= Compiler toolchain to be used for test suite compilation. Supported values are GNUARM (GNU Arm Embedded), ARMCLANG (ARM Compiler 6.x) and HOST_GCC. Default is GNUARM.
    +- -DCPU_ARCH= is the Arm Architecture version name for which the tests should be compiled. Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. Default is empty. This option is unused when TOOLCHAIN type is HOST_GCC.
    +- -DSUITE= is the suite name that is the same as the suite name available in **dev_apis/** directory.
    +- -DVERBOSE=. Print verbosity level. Default is 3. Supported print levels are 1(INFO & above), 2(DEBUG & above), 3(TEST & above), 4(WARN & ERROR) and 5(ERROR). +- -DBUILD= : To select the build directory to keep output files. Default is BUILD/ inside current directory. +- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which depend on the system reset conditions. +- -DPSA_INCLUDE_PATHS=";;...;" is an additional directory to be included into the compiler search path.You must provide Developer APIs header files implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system. Bydefault, PSA_INCLUDE_PATHS accepts absolute path. However, relative path can be provided using below format:
    +``` + -DPSA_INCLUDE_PATHS=`readlink -f ` +``` To compile Crypto tests for **tgt_dev_apis_tfm_an521** platform, execute the following commands: ``` diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index d5814ee9..63ffb63b 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -52,17 +52,26 @@ To build the test suite for your target platform, perform the following steps. cd api-tests mkdir cd - cmake ../ -G" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" + cmake ../ -G"" -DTARGET= -DCPU_ARCH= -DSUITE= -DPSA_INCLUDE_PATHS=";;...;" cmake --build . ``` -
    where: - -- "Unix Makefiles" to generate Makefiles for Linux and Cygwin
    - "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    -- is the same as the name of the target specific directory created in the **platform/targets/** directory.
    -- is the Arm Architecture version name for which the tests should be compiled. For example, Armv7M, Armv8M-Baseline and Armv8M-Mainline Architecture.
    -- is the suite name which is the same as the suite name available in **ff/** directory.
    -- ;;...; is an additional directory to be included into the compiler search path. To compile IPC tests, the include path must point to the path where **psa/client.h**, **psa/service.h**, **psa/lifecycle.h** and test partition manifest output files(**psa_manifest/sid.h**, **psa_manifest/pid.h** and **psa_manifest/.h**) are located in your build system.
    +
    Options information:
    + +- -G"" : "Unix Makefiles" to generate Makefiles for Linux and Cygwin. "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    +- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
    +- -DTOOLCHAIN= Compiler toolchain to be used for test suite compilation. Supported values are GNUARM (GNU Arm Embedded), ARMCLANG (ARM Compiler 6.x) and HOST_GCC. Default is GNUARM.
    +- -DCPU_ARCH= is the Arm Architecture version name for which the tests should be compiled. Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. Default is empty. This option is unused when TOOLCHAIN type is HOST_GCC.
    +- -DSUITE= is the suite name which is the same as the suite name available in **ff/** directory.
    +- -DVERBOSE=. Print verbosity level. Default is 3. Supported print levels are 1(INFO & above), 2(DEBUG & above), 3(TEST & above), 4(WARN & ERROR) and 5(ERROR). +- -DBUILD= : To select the build directory to keep output files. Default is BUILD/ inside current directory. +- -DINCLUDE_PANIC_TESTS=<0|1> : The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite by setting this option to 1. +- -DPLATFORM_PSA_ISOLATION_LEVEL=<1|2|3> : PSA Firmware Framwork isolation level supported by the platform. Default is highest level of isolation which is three. +- -DSP_HEAP_MEM_SUPP=<0|1> : Are dynamic memory functions available to secure partition? 0 means no and 1 means yes. +- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which test the panic conditions. +- -DPSA_INCLUDE_PATHS=";;...;" is an additional directory to be included into the compiler search path. To compile IPC tests, the include path must point to the path where **psa/client.h**, **psa/service.h**, **psa/lifecycle.h** and test partition manifest output files(**psa_manifest/sid.h**, **psa_manifest/pid.h** and **psa_manifest/.h**) are located in your build system. Bydefault, PSA_INCLUDE_PATHS accepts absolute path. However, relative path can be provided using below format:
    +``` + -DPSA_INCLUDE_PATHS=`readlink -f ` +``` To compile IPC tests for **tgt_ff_tfm_an521** platform, execute the following commands: ``` diff --git a/api-tests/val/common/val_target.h b/api-tests/val/common/val_target.h index c8b14661..415c8f63 100644 --- a/api-tests/val/common/val_target.h +++ b/api-tests/val/common/val_target.h @@ -204,6 +204,5 @@ STATIC_DECLARE val_status_t val_target_get_config(cfg_id_t cfg_id, uint8_t **dat STATIC_DECLARE val_status_t val_target_cfg_get_next(void **blob); STATIC_DECLARE val_status_t val_target_get_cfg_blob(cfg_id_t cfg_id, uint8_t **data, uint32_t *size); -STATIC_DECLARE val_status_t val_target_get_config(cfg_id_t cfg_id, uint8_t **data, uint32_t *size); #endif #endif From 8ca84a983cfeb3afd9750197b4939b46d32a05c9 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Wed, 2 Oct 2019 13:32:41 +0100 Subject: [PATCH 29/54] Add support for ITS testing. This commits adds PAL internal trusted storage support for the tgt_dev_apis_stdc target non secure processing element. --- .../pal_internal_trusted_storage_empty_intf.c | 30 +++++++++ .../pal_internal_trusted_storage_intf.c | 62 +++++++++++++++++++ .../pal_internal_trusted_storage_intf.h | 31 ++++++++++ 3 files changed, 123 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..133cfa9d --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..abfdc5d6 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,62 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..6db6aac6 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ From 443a73952d5429df54374f67e0686332d48e1785 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Wed, 2 Oct 2019 13:32:56 +0100 Subject: [PATCH 30/54] Add support for PS testing. This commit adds PAL protected storage support for the tgt_dev_apis_stdc target non-secure processing element. --- .../pal_protected_storage_empty_intf.c | 30 ++++++++ .../pal_protected_storage_intf.c | 77 +++++++++++++++++++ .../pal_protected_storage_intf.h | 34 ++++++++ 3 files changed, 141 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.h diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..ee9b13da --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..0dd07c57 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,77 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_storage_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..a338cdf7 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ From 82f52921ef0ed8ee6530fc57167feff27cc04204 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Wed, 2 Oct 2019 13:34:07 +0100 Subject: [PATCH 31/54] Fix target.cmake to enable PSA storage testing. --- api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index 38e4db21..32409268 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -44,10 +44,14 @@ if(${SUITE} STREQUAL "CRYPTO") ) endif() if(${SUITE} STREQUAL "PROTECTED_STORAGE") - message(FATAL_ERROR "Protected Storage not supported") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) endif() if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - message(FATAL_ERROR "Internal Trusted Storage not support") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") message(FATAL_ERROR "Initial attestation not supported") From d1400c69c109e526ee4f47f8dcffc3665efbf35f Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Fri, 27 Sep 2019 13:31:28 +0100 Subject: [PATCH 32/54] Add boiler-plate main.c file for building stdc test executables. The following provides more information on this commit: - In order for the stdc target to build an executable test binary this main.c is required to call the val_entry() function. It can be used to build CRYPTO, PROTECTED_STORAGE and INTERNAL_TRUSTED_STORAGE test executables, for example. --- .../tgt_dev_apis_stdc/nspe/common/main.c | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/main.c diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/main.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/main.c new file mode 100644 index 00000000..954cc1e9 --- /dev/null +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/main.c @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include + +int32_t val_entry(void); + +/** + @brief - PSA C main function, used for generating tgt_dev_apis_stdc test binaries. + @param - argc : the number of command line arguments. + argv : array containing command line arguments. + @return - error status +**/ +int main(int argc, char**argv) +{ + return val_entry(); +} From 1a4c4115d0a1e1288a1c57f275600d308d8596d0 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Thu, 14 Nov 2019 17:30:52 +0000 Subject: [PATCH 33/54] Add CMake support for building PSA Storage test binaries. --- .../targets/tgt_dev_apis_stdc/target.cmake | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index 38e4db21..3702e4b2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -15,6 +15,53 @@ # * limitations under the License. #**/ +############################################################################### +# FUNCTION: _create_psa_storage_exe() +# Function for generating PSA Storage test binaries. This function requires +# PSA_STORAGE_LIB_FILENAME to be specificed on the cmake command line, +# where the symbol is defined as the full path to the external PSA storage +# library to test. e.g. +# cmake ... -DPSA_STORAGE_LIB_FILENAME=/wdir/usr/lib/libpsastorage.so +# ARGUMENTS: +# _exe_name Name of the test binary to generate +# _api_dir PSA storage API directory name e.g. internal_trusted_storage +# or protected_storage +############################################################################### +function(_create_psa_storage_exe _exe_name _api_dir) + + if(NOT DEFINED PSA_STORAGE_LIB_FILENAME) + message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.") + endif() + + # Create the PSA PS Storage test binary. + set(EXE_NAME ${_exe_name}) + + # Define PSA_LIB_NAME to be the name of the PSA Storage library to be tested. + get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME [CACHE]) + set(PSA_LIB_NAME ${PSA_STORAGE_LIB_NAME}) + + # The path to the PSA Storage libpsastorage.so (external to this project) + # is specified on the cmake command line with the PSA_STORAGE_LD_LIBRARY_PATH + # symbol, and used as the the link directory. + get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY [CACHE]) + link_directories(${PSA_STORAGE_LIB_DIR}) + + # Create list of test binary source files. + list(APPEND EXE_SRC ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/main.c) + + # Create list of libraries to link to test binary + list(APPEND EXE_LIBS + ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a + ${PROJECT_BINARY_DIR}/val/val_nspe.a + ${PROJECT_BINARY_DIR}/platform/pal_nspe.a + ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a + ${PSA_LIB_NAME} + ) + + add_executable(${EXE_NAME} ${EXE_SRC}) + target_link_libraries(${EXE_NAME} ${EXE_LIBS}) +endfunction(_create_psa_storage_exe) + # PAL C source files part of NSPE library list(APPEND PAL_SRC_C_NSPE ) @@ -27,7 +74,6 @@ list(APPEND PAL_SRC_C_DRIVER_SP ) # PAL ASM source files part of SPE library - driver partition list(APPEND PAL_SRC_ASM_DRIVER_SP ) - # Listing all the sources required for given target if(${SUITE} STREQUAL "IPC") message(FATAL_ERROR "IPC not supported") @@ -44,10 +90,16 @@ if(${SUITE} STREQUAL "CRYPTO") ) endif() if(${SUITE} STREQUAL "PROTECTED_STORAGE") - message(FATAL_ERROR "Protected Storage not supported") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) + _create_psa_storage_exe(psa-arch-tests-ps protected_storage) endif() if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - message(FATAL_ERROR "Internal Trusted Storage not support") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) + _create_psa_storage_exe(psa-arch-tests-its internal_trusted_storage) endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") message(FATAL_ERROR "Initial attestation not supported") From bd092a754dbd8bc9e3b380ae4e8934b4d05ef007 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Mon, 18 Nov 2019 11:53:34 +0000 Subject: [PATCH 34/54] Revert "Fix target.cmake to enable PSA storage testing." This reverts commit 82f52921ef0ed8ee6530fc57167feff27cc04204. --- api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index 32409268..38e4db21 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -44,14 +44,10 @@ if(${SUITE} STREQUAL "CRYPTO") ) endif() if(${SUITE} STREQUAL "PROTECTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c - ) + message(FATAL_ERROR "Protected Storage not supported") endif() if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c - ) + message(FATAL_ERROR "Internal Trusted Storage not support") endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") message(FATAL_ERROR "Initial attestation not supported") From d17a93ce432345a374d7a63f790d402d43eb80c6 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Mon, 18 Nov 2019 16:52:15 +0000 Subject: [PATCH 35/54] Add CMake support for psa-arch-tests-crypto target to target.cmake. --- .../targets/tgt_dev_apis_stdc/target.cmake | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index 3702e4b2..f18aec5f 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -16,22 +16,26 @@ #**/ ############################################################################### -# FUNCTION: _create_psa_storage_exe() -# Function for generating PSA Storage test binaries. This function requires +# FUNCTION: _create_psa_stdc_exe() +# Function for generating PSA stdc test binaries linking with libraries +# external to the psa-arch-tests project. This function requires # PSA_STORAGE_LIB_FILENAME to be specificed on the cmake command line, # where the symbol is defined as the full path to the external PSA storage # library to test. e.g. # cmake ... -DPSA_STORAGE_LIB_FILENAME=/wdir/usr/lib/libpsastorage.so +# If the function is being used to generate a test binary for testing +# the mbed-crypto libaryr then the function requires +# PSA_CRYPTO_LIB_FILENAME to be specificed on the cmake command line, +# where the symbol is defined as the full path to the external PSA crypto +# library to test. e.g. +# cmake ... -DPSA_CRYPTO_LIB_FILENAME=/wdir/mbed-crypto/library/ \ +# libmbedcrypto.a # ARGUMENTS: # _exe_name Name of the test binary to generate -# _api_dir PSA storage API directory name e.g. internal_trusted_storage -# or protected_storage +# _api_dir PSA API directory name e.g. crypto, +# internal_trusted_storage or protected_storage/ ############################################################################### -function(_create_psa_storage_exe _exe_name _api_dir) - - if(NOT DEFINED PSA_STORAGE_LIB_FILENAME) - message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.") - endif() +function(_create_psa_stdc_exe _exe_name _api_dir) # Create the PSA PS Storage test binary. set(EXE_NAME ${_exe_name}) @@ -41,11 +45,22 @@ function(_create_psa_storage_exe _exe_name _api_dir) set(PSA_LIB_NAME ${PSA_STORAGE_LIB_NAME}) # The path to the PSA Storage libpsastorage.so (external to this project) - # is specified on the cmake command line with the PSA_STORAGE_LD_LIBRARY_PATH + # is specified on the cmake command line with the PSA_STORAGE_LIB_FILENAME # symbol, and used as the the link directory. get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY [CACHE]) link_directories(${PSA_STORAGE_LIB_DIR}) + if(DEFINED PSA_CRYPTO_LIB_FILENAME) + # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. + get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME [CACHE]) + + # The path to the PSA Crypto libmbedcrypto.a (external to this project) + # is specified on the cmake command line with the PSA_CRYPTO_LIB_FILENAME + # symbol, and used as the the link directory. + get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY [CACHE]) + link_directories(${PSA_CRYPTO_LIB_DIR}) + endif() + # Create list of test binary source files. list(APPEND EXE_SRC ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/main.c) @@ -55,12 +70,13 @@ function(_create_psa_storage_exe _exe_name _api_dir) ${PROJECT_BINARY_DIR}/val/val_nspe.a ${PROJECT_BINARY_DIR}/platform/pal_nspe.a ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a + ${PSA_CRYPTO_LIB_NAME} ${PSA_LIB_NAME} ) add_executable(${EXE_NAME} ${EXE_SRC}) target_link_libraries(${EXE_NAME} ${EXE_LIBS}) -endfunction(_create_psa_storage_exe) +endfunction(_create_psa_stdc_exe) # PAL C source files part of NSPE library list(APPEND PAL_SRC_C_NSPE ) @@ -88,18 +104,28 @@ if(${SUITE} STREQUAL "CRYPTO") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c ) + if(NOT DEFINED PSA_CRYPTO_LIB_FILENAME) + message(FATAL_ERROR "ERROR: PSA_CRYPTO_LIB_FILENAME undefined.") + endif() + _create_psa_stdc_exe(psa-arch-tests-crypto crypto) endif() if(${SUITE} STREQUAL "PROTECTED_STORAGE") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c ) - _create_psa_storage_exe(psa-arch-tests-ps protected_storage) + if(NOT DEFINED PSA_STORAGE_LIB_FILENAME) + message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.") + endif() + _create_psa_stdc_exe(psa-arch-tests-ps protected_storage) endif() if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c ) - _create_psa_storage_exe(psa-arch-tests-its internal_trusted_storage) + if(NOT DEFINED PSA_STORAGE_LIB_FILENAME) + message(FATAL_ERROR "ERROR: PSA_STORAGE_LIB_FILENAME undefined.") + endif() + _create_psa_stdc_exe(psa-arch-tests-its internal_trusted_storage) endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") message(FATAL_ERROR "Initial attestation not supported") From 5917e27865cfa1f61ea2dedd7f3ab34bdd7d32be Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Mon, 18 Nov 2019 11:04:57 +0000 Subject: [PATCH 36/54] Remove duplicate test_combine.a from target.cmake EXE_LIBS list. --- .../targets/tgt_dev_apis_stdc/target.cmake | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index f18aec5f..a4032c7c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -24,40 +24,39 @@ # library to test. e.g. # cmake ... -DPSA_STORAGE_LIB_FILENAME=/wdir/usr/lib/libpsastorage.so # If the function is being used to generate a test binary for testing -# the mbed-crypto libaryr then the function requires +# the mbed-crypto library then the function requires # PSA_CRYPTO_LIB_FILENAME to be specificed on the cmake command line, # where the symbol is defined as the full path to the external PSA crypto # library to test. e.g. # cmake ... -DPSA_CRYPTO_LIB_FILENAME=/wdir/mbed-crypto/library/ \ # libmbedcrypto.a # ARGUMENTS: -# _exe_name Name of the test binary to generate -# _api_dir PSA API directory name e.g. crypto, -# internal_trusted_storage or protected_storage/ +# _exe_name Name of the test binary to generate. +# _api_dir PSA API directory name e.g. crypto, +# internal_trusted_storage or protected_storage. ############################################################################### function(_create_psa_stdc_exe _exe_name _api_dir) - # Create the PSA PS Storage test binary. + # Create the PSA test binary. set(EXE_NAME ${_exe_name}) - # Define PSA_LIB_NAME to be the name of the PSA Storage library to be tested. - get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME [CACHE]) - set(PSA_LIB_NAME ${PSA_STORAGE_LIB_NAME}) + # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. + get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) # The path to the PSA Storage libpsastorage.so (external to this project) # is specified on the cmake command line with the PSA_STORAGE_LIB_FILENAME # symbol, and used as the the link directory. - get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY [CACHE]) + get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) link_directories(${PSA_STORAGE_LIB_DIR}) if(DEFINED PSA_CRYPTO_LIB_FILENAME) # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. - get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME [CACHE]) + get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME) # The path to the PSA Crypto libmbedcrypto.a (external to this project) # is specified on the cmake command line with the PSA_CRYPTO_LIB_FILENAME # symbol, and used as the the link directory. - get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY [CACHE]) + get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY) link_directories(${PSA_CRYPTO_LIB_DIR}) endif() @@ -66,12 +65,11 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Create list of libraries to link to test binary list(APPEND EXE_LIBS - ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a ${PROJECT_BINARY_DIR}/val/val_nspe.a ${PROJECT_BINARY_DIR}/platform/pal_nspe.a ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a ${PSA_CRYPTO_LIB_NAME} - ${PSA_LIB_NAME} + ${PSA_STORAGE_LIB_NAME} ) add_executable(${EXE_NAME} ${EXE_SRC}) From cd1c4a501b3be5775470e688e941652545743b80 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Mon, 18 Nov 2019 17:20:41 +0000 Subject: [PATCH 37/54] Remove redundant comments from target.cmake. --- api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake | 6 ------ 1 file changed, 6 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index a4032c7c..aa833443 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -43,9 +43,6 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) - # The path to the PSA Storage libpsastorage.so (external to this project) - # is specified on the cmake command line with the PSA_STORAGE_LIB_FILENAME - # symbol, and used as the the link directory. get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) link_directories(${PSA_STORAGE_LIB_DIR}) @@ -53,9 +50,6 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME) - # The path to the PSA Crypto libmbedcrypto.a (external to this project) - # is specified on the cmake command line with the PSA_CRYPTO_LIB_FILENAME - # symbol, and used as the the link directory. get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY) link_directories(${PSA_CRYPTO_LIB_DIR}) endif() From b10a00e66279dfd66edfc5dfd050d0f194c75c6b Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Wed, 20 Nov 2019 13:27:22 +0000 Subject: [PATCH 38/54] Add PSA_STORAGE_LIB_FILENAME code guard in target.cmake _create_psa_stdc_exe(). --- .../platform/targets/tgt_dev_apis_stdc/target.cmake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index aa833443..d3ac97a5 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -40,11 +40,13 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Create the PSA test binary. set(EXE_NAME ${_exe_name}) - # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. - get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) + if(DEFINED PSA_STORAGE_LIB_FILENAME) + # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. + get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) - get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) - link_directories(${PSA_STORAGE_LIB_DIR}) + get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) + link_directories(${PSA_STORAGE_LIB_DIR}) + endif() if(DEFINED PSA_CRYPTO_LIB_FILENAME) # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. From ff38d71e34b9efbb026ba83dbe7c45dfebc8101f Mon Sep 17 00:00:00 2001 From: Gowtham Siddarth Date: Fri, 29 Nov 2019 10:30:47 +0530 Subject: [PATCH 39/54] Dev APIs: Updating the testsuite with enhancements and fixes - Attest: Move token verification from PAL to VAL layer - Attest: Support to obtain public key from platform - Crypto: Bug fixes and resolving stack overflow issues - Crypto: HKDF does not take a LABEL or SEED input - Attest: Utilizing token size buffer from PSA spec - Attest: Key ID not mandatory in attestation token Signed-off-by: Gowtham Siddarth --- api-tests/CMakeLists.txt | 1 + .../dev_apis/crypto/test_c002/test_c002.c | 2 +- .../dev_apis/crypto/test_c009/test_data.h | 4 +- .../dev_apis/crypto/test_c032/test_c032.c | 8 +- .../dev_apis/crypto/test_c033/test_c033.c | 8 +- .../dev_apis/crypto/test_c037/test_c037.c | 1 + .../dev_apis/crypto/test_c050/test_c050.c | 4 +- .../dev_apis/crypto/test_c059/test_c059.c | 4 +- .../dev_apis/crypto/test_c061/test_c061.c | 4 +- .../dev_apis/initial_attestation/suite.cmake | 6 + api-tests/docs/psa_attestation_testlist.md | 4 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 99 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 105 +---- .../pal_attestation_intf.h | 8 +- .../target.cmake | 1 - .../nspe/common/pal_common.h | 3 +- .../nspe/common/pal_config.h | 6 + .../nspe/common/pal_driver_ns_intf.c | 2 +- .../nspe/crypto/pal_crypto_intf.h | 6 +- .../targets/tgt_dev_apis_stdc/target.cmake | 8 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 100 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 105 +---- .../pal_attestation_intf.c | 27 +- .../pal_attestation_intf.h | 8 +- .../tgt_dev_apis_tfm_an521/target.cmake | 1 - .../nspe/common/pal_common.h | 3 +- .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 99 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 105 +---- .../pal_attestation_intf.h | 8 +- .../tgt_dev_apis_tfm_an524/target.cmake | 1 - .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 99 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 105 +---- .../pal_attestation_intf.h | 8 +- .../tgt_dev_apis_tfm_musca_a/target.cmake | 1 - .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 99 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 105 +---- .../pal_attestation_intf.h | 8 +- .../tgt_dev_apis_tfm_musca_b1/target.cmake | 1 - .../nspe/common/pal_config.h | 3 + .../nspe/crypto/pal_crypto_intf.h | 6 +- .../pal_attestation_crypto.c | 83 ++-- .../pal_attestation_crypto.h | 18 +- .../initial_attestation/pal_attestation_eat.c | 442 ------------------ .../initial_attestation/pal_attestation_eat.h | 103 +--- .../pal_attestation_intf.h | 8 +- .../tgt_ff_mbedos_fvp_mps2_m4/target.cmake | 1 - api-tests/val/nspe/val_attestation.c | 397 +++++++++++++++- api-tests/val/nspe/val_attestation.h | 116 +++++ api-tests/val/val_nspe.cmake | 6 + 69 files changed, 1152 insertions(+), 3543 deletions(-) delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index a43c3aef..625fb620 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -365,6 +365,7 @@ add_dependencies(${PSA_TARGET_GENERATE_DATABASE_POST} ${PSA_TARGET_GENERATE_DATA if(${SUITE} STREQUAL "INITIAL_ATTESTATION") add_dependencies(${PSA_TARGET_QCBOR} ${PSA_TARGET_GENERATE_DATABASE_POST}) add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_QCBOR}) +add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_QCBOR}) else() add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_GENERATE_DATABASE_POST}) endif() diff --git a/api-tests/dev_apis/crypto/test_c002/test_c002.c b/api-tests/dev_apis/crypto/test_c002/test_c002.c index 3cee88c4..a23a7978 100644 --- a/api-tests/dev_apis/crypto/test_c002/test_c002.c +++ b/api-tests/dev_apis/crypto/test_c002/test_c002.c @@ -146,7 +146,7 @@ int32_t psa_import_key_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_IMPORT_KEY, &attributes, key_data, check1[i].key_length, &check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_ARGUMENT, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_NOT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(12)); TEST_ASSERT_EQUAL(check1[i].key_handle, 0, TEST_CHECKPOINT_NUM(13)); } diff --git a/api-tests/dev_apis/crypto/test_c009/test_data.h b/api-tests/dev_apis/crypto/test_c009/test_data.h index 647537b6..d4850671 100644 --- a/api-tests/dev_apis/crypto/test_c009/test_data.h +++ b/api-tests/dev_apis/crypto/test_c009/test_data.h @@ -52,14 +52,14 @@ static test_data check1[] = { PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), "abcdefghijklmnop", 16, PSA_KEY_DERIVATION_INPUT_LABEL, - PSA_SUCCESS, + PSA_ERROR_INVALID_ARGUMENT, }, {"Test psa_key_derivation_input_bytes - Step as seed\n", PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), "abcdefghijklmnop", 16, PSA_KEY_DERIVATION_INPUT_SEED, - PSA_SUCCESS, + PSA_ERROR_INVALID_ARGUMENT, }, {"Test psa_key_derivation_input_bytes - Invalid step\n", diff --git a/api-tests/dev_apis/crypto/test_c032/test_c032.c b/api-tests/dev_apis/crypto/test_c032/test_c032.c index c246c0c5..aa35e303 100644 --- a/api-tests/dev_apis/crypto/test_c032/test_c032.c +++ b/api-tests/dev_apis/crypto/test_c032/test_c032.c @@ -116,11 +116,14 @@ int32_t psa_cipher_encrypt_setup_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + + status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); @@ -157,6 +160,9 @@ int32_t psa_cipher_encrypt_setup_negative_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_CIPHER_ENCRYPT_SETUP, &operation, 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); + + status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c033/test_c033.c b/api-tests/dev_apis/crypto/test_c033/test_c033.c index c44e1153..4899f10d 100644 --- a/api-tests/dev_apis/crypto/test_c033/test_c033.c +++ b/api-tests/dev_apis/crypto/test_c033/test_c033.c @@ -115,11 +115,15 @@ int32_t psa_cipher_decrypt_setup_test(caller_security_t caller) status = val->crypto_function(VAL_CRYPTO_CIPHER_DECRYPT_SETUP, &operation, check1[i].key_handle, check1[i].key_alg); TEST_ASSERT_EQUAL(status, check1[i].expected_status, TEST_CHECKPOINT_NUM(6)); + + /* Abort a cipher operation */ + status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); } /* Destroy the key */ status = val->crypto_function(VAL_CRYPTO_DESTROY_KEY, check1[i].key_handle); - TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(8)); /* Reset the key attributes and check if psa_import_key fails */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); @@ -157,6 +161,8 @@ int32_t psa_cipher_decrypt_setup_negative_test(caller_security_t caller) 0, check2[i].key_alg); TEST_ASSERT_EQUAL(status, PSA_ERROR_INVALID_HANDLE, TEST_CHECKPOINT_NUM(4)); + status = val->crypto_function(VAL_CRYPTO_CIPHER_ABORT, &operation); + TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(5)); } return VAL_STATUS_SUCCESS; diff --git a/api-tests/dev_apis/crypto/test_c037/test_c037.c b/api-tests/dev_apis/crypto/test_c037/test_c037.c index 40ee54bc..86c2931d 100644 --- a/api-tests/dev_apis/crypto/test_c037/test_c037.c +++ b/api-tests/dev_apis/crypto/test_c037/test_c037.c @@ -56,6 +56,7 @@ int32_t psa_cipher_finish_test(caller_security_t caller) val->print(PRINT_TEST, "[Check %d] ", g_test_count++); val->print(PRINT_TEST, check1[i].test_desc, 0); memset(&operation, 0, sizeof(operation)); + memset(&invalid_operation, 0, sizeof(invalid_operation)); /* Setting up the watchdog timer for each check */ status = val->wd_reprogram_timer(WD_CRYPTO_TIMEOUT); diff --git a/api-tests/dev_apis/crypto/test_c050/test_c050.c b/api-tests/dev_apis/crypto/test_c050/test_c050.c index 3d912817..8499fc19 100644 --- a/api-tests/dev_apis/crypto/test_c050/test_c050.c +++ b/api-tests/dev_apis/crypto/test_c050/test_c050.c @@ -27,12 +27,12 @@ client_test_t test_c050_crypto_list[] = { NULL, }; -static int g_test_count = 1; +static int g_test_count = 1; +static uint8_t data[BUFFER_SIZE]; int32_t psa_open_key_test(caller_security_t caller) { int32_t status, i = 0; - uint8_t data[BUFFER_SIZE]; size_t length, get_key_bits; const uint8_t *key_data; psa_key_type_t get_key_type; diff --git a/api-tests/dev_apis/crypto/test_c059/test_c059.c b/api-tests/dev_apis/crypto/test_c059/test_c059.c index ce94a95d..86f3fb71 100644 --- a/api-tests/dev_apis/crypto/test_c059/test_c059.c +++ b/api-tests/dev_apis/crypto/test_c059/test_c059.c @@ -26,12 +26,12 @@ client_test_t test_c059_crypto_list[] = { NULL, }; -static int g_test_count = 1; +static int g_test_count = 1; +static uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; int32_t psa_aead_finish_test(caller_security_t caller) { int32_t i, status; - uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; size_t length, tag_length; int num_checks = sizeof(check1)/sizeof(check1[0]); psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; diff --git a/api-tests/dev_apis/crypto/test_c061/test_c061.c b/api-tests/dev_apis/crypto/test_c061/test_c061.c index d1bbe398..4b6bec98 100644 --- a/api-tests/dev_apis/crypto/test_c061/test_c061.c +++ b/api-tests/dev_apis/crypto/test_c061/test_c061.c @@ -26,12 +26,12 @@ client_test_t test_c061_crypto_list[] = { NULL, }; -static int g_test_count = 1; +static int g_test_count = 1; +static uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; int32_t psa_aead_verify_test(caller_security_t caller) { int32_t i, status; - uint8_t output[BUFFER_SIZE], tag[SIZE_128B]; size_t length; int num_checks = sizeof(check1)/sizeof(check1[0]); psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; diff --git a/api-tests/dev_apis/initial_attestation/suite.cmake b/api-tests/dev_apis/initial_attestation/suite.cmake index ddb3128e..913f7a44 100644 --- a/api-tests/dev_apis/initial_attestation/suite.cmake +++ b/api-tests/dev_apis/initial_attestation/suite.cmake @@ -35,6 +35,12 @@ add_definitions(${CC_OPTIONS}) add_definitions(${AS_OPTIONS}) add_library(${PSA_TARGET_TEST_COMBINE_LIB} STATIC ${SUITE_CC_SOURCE} ${SUITE_AS_SOURCE}) +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() + # Test related Include directories foreach(test ${PSA_TEST_LIST}) target_include_directories(${PSA_TARGET_TEST_COMBINE_LIB} PRIVATE ${PSA_SUITE_DIR}/${test}) diff --git a/api-tests/docs/psa_attestation_testlist.md b/api-tests/docs/psa_attestation_testlist.md index 12153ad7..c43cbe48 100644 --- a/api-tests/docs/psa_attestation_testlist.md +++ b/api-tests/docs/psa_attestation_testlist.md @@ -12,7 +12,9 @@ 1. In verifying the token, only the data type of claims and presence of the mandatory claims are checked and the values of the claims are not checked.
    2. Specify the version of underlying PSA crypto in /api-tests/platform/targets//nspe/common/pal_config.h
    -3. Supported crypto versions are CRYPTO_VERSION_BETA1, CRYPTO_VERSION_BETA2 and CRYPTO_VERSION_BETA3 +3. Supported crypto versions are CRYPTO_VERSION_BETA1, CRYPTO_VERSION_BETA2 and CRYPTO_VERSION_BETA3
    +4. Signer ID and Version fields of the software component must be present to be compliant with the PSA-SM
    +5. Define the macro PLATFORM_OVERRIDE_ATTEST_PK in /api-tests/platform/targets//nspe/common/pal_config.h to use hardcoded public key
    # License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..04fe5ef4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -137,6 +121,15 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } +/** + @brief - Computes hash for the requested data + @param - cose_alg_id : Algorithm ID + - buffer_for_hash : Temp buffer for calculating hash + - hash : Pointer to store the hash + - protected_headers : Buffer containing protected data + - payload : payload data + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -203,22 +196,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +261,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +274,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -288,6 +324,13 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } +/** + @brief - Verify the signature using the public key + @param - cose_algorithm_id : Algorithm ID + - token_hash : Data that needs to be verified + - signature : Signature to be verified against + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index df24c894..fae5434e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -78,71 +52,9 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake index 5c5c942e..db9a4fa5 100644 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h index 00768919..8a8f0642 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h @@ -37,8 +37,7 @@ typedef uint32_t cfg_id_t; #define PAL_STATUS_UNSUPPORTED_FUNC 0xFF -typedef enum -{ +typedef enum { PAL_STATUS_SUCCESS = 0x0, PAL_STATUS_ERROR = 0x80 } pal_status_t; diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h index 28713398..640f56f3 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h @@ -38,11 +38,17 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c index 204adfb7..2bbaad7d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c @@ -31,7 +31,7 @@ /* Using zero as NVMEM_BASE is a bit arbitrary - we don't actually need callers * to specify a base address but the nvmem function signatures have "base" params. - * Zero is the value used in our target.cfg file so that's what we should recieve. + * Zero is the value used in our target.cfg file so that's what we should receive. */ #define NVMEM_BASE 0 diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index 38e4db21..e46fe215 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -44,10 +44,14 @@ if(${SUITE} STREQUAL "CRYPTO") ) endif() if(${SUITE} STREQUAL "PROTECTED_STORAGE") - message(FATAL_ERROR "Protected Storage not supported") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) endif() if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - message(FATAL_ERROR "Internal Trusted Storage not support") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") message(FATAL_ERROR "Initial attestation not supported") diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..eec26192 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -137,6 +121,15 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } +/** + @brief - Computes hash for the requested data + @param - cose_alg_id : Algorithm ID + - buffer_for_hash : Temp buffer for calculating hash + - hash : Pointer to store the hash + - protected_headers : Buffer containing protected data + - payload : payload data + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -203,22 +196,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +261,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +274,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -272,6 +308,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) return status; } + static uint32_t pal_destroy_attest_key(void) { psa_status_t status; @@ -288,6 +325,13 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } +/** + @brief - Verify the signature using the public key + @param - cose_algorithm_id : Algorithm ID + - token_hash : Data that needs to be verified + - signature : Signature to be verified against + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h index df24c894..fae5434e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -78,71 +52,9 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..8dc9406a 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake index 5c5c942e..db9a4fa5 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h index 0a63b026..a03cd8d2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h @@ -37,8 +37,7 @@ typedef uint32_t cfg_id_t; #define PAL_STATUS_UNSUPPORTED_FUNC 0xFF -typedef enum -{ +typedef enum { PAL_STATUS_SUCCESS = 0x0, PAL_STATUS_ERROR = 0x80 } pal_status_t; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..04fe5ef4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -137,6 +121,15 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } +/** + @brief - Computes hash for the requested data + @param - cose_alg_id : Algorithm ID + - buffer_for_hash : Temp buffer for calculating hash + - hash : Pointer to store the hash + - protected_headers : Buffer containing protected data + - payload : payload data + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -203,22 +196,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +261,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +274,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -288,6 +324,13 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } +/** + @brief - Verify the signature using the public key + @param - cose_algorithm_id : Algorithm ID + - token_hash : Data that needs to be verified + - signature : Signature to be verified against + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h index df24c894..fae5434e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -78,71 +52,9 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake index 5c5c942e..db9a4fa5 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..04fe5ef4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -137,6 +121,15 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } +/** + @brief - Computes hash for the requested data + @param - cose_alg_id : Algorithm ID + - buffer_for_hash : Temp buffer for calculating hash + - hash : Pointer to store the hash + - protected_headers : Buffer containing protected data + - payload : payload data + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -203,22 +196,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +261,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +274,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -288,6 +324,13 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } +/** + @brief - Verify the signature using the public key + @param - cose_algorithm_id : Algorithm ID + - token_hash : Data that needs to be verified + - signature : Signature to be verified against + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h index df24c894..fae5434e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -78,71 +52,9 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake index 7c6628a8..756a0b41 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..04fe5ef4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -137,6 +121,15 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } +/** + @brief - Computes hash for the requested data + @param - cose_alg_id : Algorithm ID + - buffer_for_hash : Temp buffer for calculating hash + - hash : Pointer to store the hash + - protected_headers : Buffer containing protected data + - payload : payload data + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -203,22 +196,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +261,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +274,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -288,6 +324,13 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } +/** + @brief - Verify the signature using the public key + @param - cose_algorithm_id : Algorithm ID + - token_hash : Data that needs to be verified + - signature : Signature to be verified against + @return - SUCCESS/ERROR CODE +**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h index df24c894..fae5434e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -78,71 +52,9 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake index 7c6628a8..756a0b41 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h index 28713398..61db8d8e 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h @@ -43,6 +43,9 @@ /* Version of crypto spec used in attestation */ #define CRYPTO_VERSION_BETA2 +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h index 486f7935..671dfa0b 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_CRYPTO_H_ -#define _PAL_CRYPTO_H_ +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ #include "pal_common.h" @@ -100,4 +100,4 @@ enum crypto_function_code { }; int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_H_ */ +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c index 2da03fa4..488c96b1 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c @@ -19,29 +19,13 @@ static uint32_t public_key_registered; static psa_key_handle_t public_key_handle; + static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, size_t amount) { return UsefulBuf_Head(buf, amount); } -static psa_ecc_curve_t attest_map_elliptic_curve_type(int32_t cose_curve) -{ - psa_ecc_curve_t psa_curve; - - /*FixMe: Mapping is not complete, missing ones: P384, P521, ED25519, ED448 */ - switch (cose_curve) - { - case P_256: - psa_curve = PSA_ECC_CURVE_SECP256R1; - break; - default: - psa_curve = USHRT_MAX; - } - - return psa_curve; -} - static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) { psa_algorithm_t status; @@ -203,22 +187,56 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha return status; } +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) { psa_status_t status = PAL_ATTEST_ERROR; psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t psa_curve = attest_map_elliptic_curve_type(P_256); - psa_key_type_t attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(psa_curve); - size_t public_key_size = attest_key.pubx_key_size + attest_key.puby_key_size; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; #if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) psa_key_policy_t policy; if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Setup the key policy for public key */ policy = psa_key_policy_init(); psa_key_policy_set_usage(&policy, usage, key_alg); @@ -234,8 +252,8 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) /* Import the public key */ status = psa_import_key(public_key_handle, attest_key_type, - (const uint8_t *)&attest_public_key, - public_key_size + 1); + public_key_buff, + public_key_size); if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; @@ -247,21 +265,30 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) if (!public_key_registered) { - if (psa_curve == USHRT_MAX) + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) return PAL_ATTEST_ERROR; + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + /* Set the attributes for the public key */ psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size + 1); + psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); /* Import the public key */ status = psa_import_key(&attributes, - (const uint8_t *)&attest_public_key, - public_key_size + 1, + public_key_buff, + public_key_size, &public_key_handle); - if (status != PSA_SUCCESS) return PAL_ATTEST_ERR_KEY_FAIL; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h index bd479905..559a24c1 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h @@ -15,12 +15,15 @@ * limitations under the License. **/ -#include "pal_common.h" +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + #include "pal_attestation_eat.h" -#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) -typedef struct{ +typedef struct { uint8_t *pubx_key; size_t pubx_key_size; uint8_t *puby_key; @@ -47,16 +50,14 @@ static const struct ecc_public_key_t attest_public_key = { 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, }; -static const uint8_t initial_attestation_public_x_key[] = -{ +static const uint8_t initial_attestation_public_x_key[] = { 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F }; -static const uint8_t initial_attestation_public_y_key[] = -{ +static const uint8_t initial_attestation_public_y_key[] = { 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, @@ -84,5 +85,4 @@ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_ha struct q_useful_buf_c payload); uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); - - +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c deleted file mode 100644 index 68c4312e..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.c +++ /dev/null @@ -1,442 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -uint32_t mandatory_claims = 0; -uint32_t mandaroty_sw_components = 0; -bool_t sw_component_present = 0; - -int pal_encode_cose_key(struct q_useful_buf_c *cose_key, - struct q_useful_buf buffer_for_cose_key, - struct q_useful_buf_c x_cord, struct q_useful_buf_c y_cord) -{ - uint32_t return_value; - QCBORError qcbor_result; - QCBOREncodeContext cbor_encode_ctx; - int32_t cose_curve_id = P_256; - struct q_useful_buf_c encoded_key_id; - - /* Get the public key x and y */ - /* Encode it into a COSE_Key structure */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_cose_key); - QCBOREncode_OpenMap(&cbor_encode_ctx); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_COMMON_KTY, - COSE_KEY_TYPE_EC2); - QCBOREncode_AddInt64ToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_CRV, - cose_curve_id); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_X_COORDINATE, - x_cord); - QCBOREncode_AddBytesToMapN(&cbor_encode_ctx, - COSE_KEY_PARAM_Y_COORDINATE, - y_cord); - QCBOREncode_CloseMap(&cbor_encode_ctx); - - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &encoded_key_id); - if (qcbor_result != QCBOR_SUCCESS) - { - /* Mainly means that the COSE_Key was too big for buffer_for_cose_key */ - return_value = PAL_ATTEST_ERR_PROTECTED_HEADERS; - goto Done; - } - - /* Finish up and return */ - *cose_key = encoded_key_id; - return_value = PAL_ATTEST_SUCCESS; - -Done: - return return_value; -} - - -static int get_items_in_map(QCBORDecodeContext *decode_context, - struct items_to_get_t *item_list) -{ - int item_index; - QCBORItem item; - struct items_to_get_t *item_ptr = item_list; - - /* initialize the data type of all items in the list */ - while (item_ptr->label != 0) - { - item_ptr->item.uDataType = QCBOR_TYPE_NONE; - item_ptr++; - } - - QCBORDecode_GetNext(decode_context, &item); - if (item.uDataType != QCBOR_TYPE_MAP) - { - return PAL_ATTEST_ERROR; - } - - for (item_index = item.val.uCount; item_index != 0; item_index--) - { - if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - if (item.uLabelType != QCBOR_TYPE_INT64) - { - continue; - } - - item_ptr = item_list; - while (item_ptr->label != 0) - { - if (item.label.int64 == item_ptr->label) - { - item_ptr->item = item; - } - item_ptr++; - } - } - - return PAL_ATTEST_SUCCESS; -} - -static int get_item_in_map(QCBORDecodeContext *decode_context, - int32_t label, - QCBORItem *item) -{ - struct items_to_get_t item_list[2]; - - item_list[0].label = label; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERROR; - } - - if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) - { - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - *item = item_list[0].item; - - return PAL_ATTEST_SUCCESS; -} - -static int parse_unprotected_headers(QCBORDecodeContext *decode_context, - struct q_useful_buf_c *child) -{ - struct items_to_get_t item_list[3]; - - item_list[0].label = COSE_HEADER_PARAM_KID; - item_list[1].label = 0; - - if (get_items_in_map(decode_context, item_list)) - { - return PAL_ATTEST_ERR_CBOR_STRUCTURE; - } - - return PAL_ATTEST_SUCCESS; -} - -static int parse_protected_headers(struct q_useful_buf_c protected_headers, - int32_t *alg_id) -{ - QCBORDecodeContext decode_context; - QCBORItem item; - - QCBORDecode_Init(&decode_context, protected_headers, 0); - - if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) - { - return PAL_ATTEST_ERROR; - } - - if (QCBORDecode_Finish(&decode_context)) - { - return PAL_ATTEST_ERROR; - } - - if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) - { - return PAL_ATTEST_ERROR; - } - - *alg_id = (int32_t)item.val.int64; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - This API will verify the claims - @param - decode_context : The buffer containing the challenge - item : context for decoding the data items - completed_challenge : Buffer containing the challenge - @return - error status -**/ -static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, - struct q_useful_buf_c completed_challenge) -{ - int i, count = 0; - int status = PAL_ATTEST_SUCCESS; - - /* Parse each claim and validate their data type */ - while (status == PAL_ATTEST_SUCCESS) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - break; - - mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); - if (item.uLabelType == QCBOR_TYPE_INT64) - { - if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) - { - if (item.uDataType == QCBOR_TYPE_BYTE_STRING) - { - /* Given challenge vs challenge in token */ - if (UsefulBuf_Compare(item.val.string, completed_challenge)) - return PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; - } - else - return PAL_ATTEST_TOKEN_NOT_SUPPORTED; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || - item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || - item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || - item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || - item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) - { - if (item.uDataType != QCBOR_TYPE_ARRAY) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - sw_component_present = 1; - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - continue; - - count = item.val.uCount; - for (i = 0; i <= count; i++) - { - mandaroty_sw_components |= 1 << item.label.int64; - - if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) - { - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) - { - if (item.uDataType != QCBOR_TYPE_INT64) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) - { - if (item.uDataType != QCBOR_TYPE_TEXT_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - - if (i < count) - { - status = QCBORDecode_GetNext(decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - } - } - - } - } - else - { - /* ToDo: Add other claim types */ - } - } - - if (status == QCBOR_ERR_HIT_END) - return PAL_ATTEST_SUCCESS; - else - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; -} - -/** - @brief - This API will verify the attestation token - @param - challenge : The buffer containing the challenge - challenge_size : Size of the challenge buffer - token : The buffer containing the attestation token - token_size : Size of the token buffer - @return - error status -**/ -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size) -{ - int32_t status = PAL_ATTEST_SUCCESS; - int32_t cose_algorithm_id; - QCBORItem item; - QCBORDecodeContext decode_context; - struct q_useful_buf_c completed_challenge; - struct q_useful_buf_c completed_token; - struct q_useful_buf_c payload; - struct q_useful_buf_c signature; - struct q_useful_buf_c protected_headers; - struct q_useful_buf_c kid; - struct q_useful_buf_c token_hash; - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_x_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buf_to_hold_y_coord, T_COSE_CRYPTO_EC_P256_COORD_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); - USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); - - kid.ptr = buffer_for_encoded_key.ptr; - - memcpy(buf_to_hold_x_coord.ptr, (const void *)attest_key.pubx_key, attest_key.pubx_key_size); - memcpy(buf_to_hold_y_coord.ptr, (const void *)attest_key.puby_key, attest_key.puby_key_size); - - /* Update size */ - buf_to_hold_x_coord.len = attest_key.pubx_key_size; - buf_to_hold_y_coord.len = attest_key.puby_key_size; - - /* Construct the token buffer for validation */ - completed_token.ptr = token; - completed_token.len = token_size; - - /* Construct the challenge buffer for validation */ - completed_challenge.ptr = challenge; - completed_challenge.len = challenge_size; - -/* - ------------------------- - | CBOR Array Type | - ------------------------- - | Protected Headers | - ------------------------- - | Unprotected Headers | - ------------------------- - | Payload | - ------------------------- - | Signature | - ------------------------- -*/ - - /* Initialize the decorder */ - QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); - - /* Get the Header */ - QCBORDecode_GetNext(&decode_context, &item); - - /* Check the CBOR Array type. Check if the count is 4. - * Only COSE_SIGN1 is supported now. - */ - if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || - !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Get the next headers */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - protected_headers = item.val.string; - - /* Parse the protected headers and check the data type and value*/ - status = parse_protected_headers(protected_headers, &cose_algorithm_id); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Parse the unprotected headers and check the data type and value */ - status = parse_unprotected_headers(&decode_context, &kid); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Get the payload */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - payload = item.val.string; - - /* Get the digital signature */ - QCBORDecode_GetNext(&decode_context, &item); - if (item.uDataType != QCBOR_TYPE_BYTE_STRING) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - signature = item.val.string; - - /* Compute the hash from the token */ - status = pal_compute_hash(cose_algorithm_id, buffer_for_token_hash, &token_hash, - protected_headers, payload); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Initialize the Decoder and validate the payload format */ - QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); - status = QCBORDecode_GetNext(&decode_context, &item); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if (item.uDataType != QCBOR_TYPE_MAP) - return PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; - - /* Parse the payload and check the data type of each claim */ - status = parse_claims(&decode_context, item, completed_challenge); - if (status != PAL_ATTEST_SUCCESS) - return status; - - if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) - { - if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) - { - return PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; - } - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h index df24c894..56d624e3 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h @@ -15,43 +15,17 @@ * limitations under the License. **/ +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + #include "qcbor.h" #include "pal_common.h" -#include "psa/crypto.h" #define PAL_ATTEST_MIN_ERROR 30 -/* NIST P-256 also known as secp256r1 */ -#define P_256 1 - -#define COSE_HEADER_PARAM_ALG 1 -#define COSE_HEADER_PARAM_KID 4 - -#define COSE_KEY_COMMON_KTY 1 -#define COSE_KEY_TYPE_EC2 2 -#define COSE_KEY_PARAM_CRV -1 -#define COSE_KEY_PARAM_X_COORDINATE -2 -#define COSE_KEY_PARAM_Y_COORDINATE -3 #define COSE_ALGORITHM_ES256 -7 #define COSE_ALG_SHA256_PROPRIETARY -72000 -/** - * The size of X and Y coordinate in 2 parameter style EC public - * key. Format is as defined in [COSE (RFC 8152)] - * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve - * Cryptography](http://www.secg.org/sec1-v2.pdf). - * - * This size is well-known and documented in public standards. - */ -#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 -#define T_COSE_CRYPTO_SHA256_SIZE 32 - -#define MAX_ENCODED_COSE_KEY_SIZE \ - 1 + /* 1 byte to encode map */ \ - 2 + /* 2 bytes to encode key type */ \ - 2 + /* 2 bytes to encode curve */ \ - 2 * /* the X and Y coordinates at 32 bytes each */ \ - (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2) #define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" @@ -81,68 +55,6 @@ 3 * ( /* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) - -/* - CBOR Label for proprietary header indicating short-circuit - signing was used. Just a random number in the proprietary - label space */ -#define T_COSE_SHORT_CIRCUIT_LABEL (-8675309) - -#define EAT_CBOR_ARM_RANGE_BASE (-75000) -#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) -#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) -#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) -#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) -#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) -#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) -#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) -#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) -#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) -#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) -#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) - -#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 - -#define EAT_CBOR_SW_COMPONENT_TYPE (1u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) -#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) -#define EAT_CBOR_SW_COMPONENT_VERSION (4u) -#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) -#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) - -#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) - -#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NONCE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_UEID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ - 1 << (EAT_CBOR_ARM_RANGE_BASE \ - - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) - -#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ - 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) - #define NULL_USEFUL_BUF_C NULLUsefulBufC enum attestation_error_code { @@ -161,13 +73,8 @@ enum attestation_error_code { PAL_ATTEST_ERR_KEY_FAIL, PAL_ATTEST_ERR_SIGNATURE_FAIL, PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, PAL_ATTEST_ERROR, }; -struct items_to_get_t { - int64_t label; - QCBORItem item; -}; - -int32_t pal_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, - uint8_t *token, size_t token_size); +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h index 12f6ee94..3ab7ebb4 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h @@ -15,8 +15,8 @@ * limitations under the License. **/ -#ifndef _PAL_INITIAL_ATTESTATION_H_ -#define _PAL_INITIAL_ATTESTATION_H_ +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ #include "pal_attestation_crypto.h" @@ -24,7 +24,9 @@ enum attestation_function_code { PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_INITIAL_ATTESTATION_H_ */ +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake index 5c5c942e..db9a4fa5 100644 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake +++ b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake @@ -71,7 +71,6 @@ endif() if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_eat.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) endif() diff --git a/api-tests/val/nspe/val_attestation.c b/api-tests/val/nspe/val_attestation.c index 82d7191b..50e400a3 100644 --- a/api-tests/val/nspe/val_attestation.c +++ b/api-tests/val/nspe/val_attestation.c @@ -21,24 +21,415 @@ #include "val_client_defs.h" #include "val_attestation.h" +#ifdef INITIAL_ATTESTATION + +uint32_t mandatory_claims = 0; +uint32_t mandaroty_sw_components = 0; +bool_t sw_component_present = 0; + +static int get_items_in_map(QCBORDecodeContext *decode_context, + struct items_to_get_t *item_list) +{ + int item_index; + QCBORItem item; + struct items_to_get_t *item_ptr = item_list; + + /* initialize the data type of all items in the list */ + while (item_ptr->label != 0) + { + item_ptr->item.uDataType = QCBOR_TYPE_NONE; + item_ptr++; + } + + QCBORDecode_GetNext(decode_context, &item); + if (item.uDataType != QCBOR_TYPE_MAP) + { + return VAL_ATTEST_ERROR; + } + + for (item_index = item.val.uCount; item_index != 0; item_index--) + { + if (QCBORDecode_GetNext(decode_context, &item) != QCBOR_SUCCESS) + { + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + if (item.uLabelType != QCBOR_TYPE_INT64) + { + continue; + } + + item_ptr = item_list; + while (item_ptr->label != 0) + { + if (item.label.int64 == item_ptr->label) + { + item_ptr->item = item; + } + item_ptr++; + } + } + + return VAL_ATTEST_SUCCESS; +} + +static int get_item_in_map(QCBORDecodeContext *decode_context, + int32_t label, + QCBORItem *item) +{ + struct items_to_get_t item_list[2]; + + item_list[0].label = label; + item_list[1].label = 0; + + if (get_items_in_map(decode_context, item_list)) + { + return VAL_ATTEST_ERROR; + } + + if (item_list[0].item.uDataType == QCBOR_TYPE_NONE) + { + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + *item = item_list[0].item; + + return VAL_ATTEST_SUCCESS; +} + +static int parse_unprotected_headers(QCBORDecodeContext *decode_context, + struct q_useful_buf_c *child) +{ + struct items_to_get_t item_list[3]; + + item_list[0].label = COSE_HEADER_PARAM_KID; + item_list[1].label = 0; + + if (get_items_in_map(decode_context, item_list)) + { + return VAL_ATTEST_ERR_CBOR_STRUCTURE; + } + + return VAL_ATTEST_SUCCESS; +} + +static int parse_protected_headers(struct q_useful_buf_c protected_headers, + int32_t *alg_id) +{ + QCBORDecodeContext decode_context; + QCBORItem item; + + QCBORDecode_Init(&decode_context, protected_headers, 0); + + if (get_item_in_map(&decode_context, COSE_HEADER_PARAM_ALG, &item)) + { + return VAL_ATTEST_ERROR; + } + + if (QCBORDecode_Finish(&decode_context)) + { + return VAL_ATTEST_ERROR; + } + + if ((item.uDataType != QCBOR_TYPE_INT64) || (item.val.int64 > INT32_MAX)) + { + return VAL_ATTEST_ERROR; + } + + *alg_id = (int32_t)item.val.int64; + + return VAL_ATTEST_SUCCESS; +} + +/** + @brief - This API will verify the claims + @param - decode_context : The buffer containing the challenge + item : context for decoding the data items + completed_challenge : Buffer containing the challenge + @return - error status +**/ +static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, + struct q_useful_buf_c completed_challenge) +{ + int i, count = 0; + int status = VAL_ATTEST_SUCCESS; + + /* Parse each claim and validate their data type */ + while (status == VAL_ATTEST_SUCCESS) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != VAL_ATTEST_SUCCESS) + break; + + mandatory_claims |= 1 << (EAT_CBOR_ARM_RANGE_BASE - item.label.int64); + if (item.uLabelType == QCBOR_TYPE_INT64) + { + if (item.label.int64 == EAT_CBOR_ARM_LABEL_NONCE) + { + if (item.uDataType == QCBOR_TYPE_BYTE_STRING) + { + /* Given challenge vs challenge in token */ + if (UsefulBuf_Compare(item.val.string, completed_challenge)) + return VAL_ATTEST_TOKEN_CHALLENGE_MISMATCH; + } + else + return VAL_ATTEST_TOKEN_NOT_SUPPORTED; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_BOOT_SEED || + item.label.int64 == EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_UEID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_ORIGINATION || + item.label.int64 == EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION || + item.label.int64 == EAT_CBOR_ARM_LABEL_HW_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_CLIENT_ID || + item.label.int64 == EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_ARM_LABEL_SW_COMPONENTS) + { + if (item.uDataType != QCBOR_TYPE_ARRAY) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + sw_component_present = 1; + status = QCBORDecode_GetNext(decode_context, &item); + if (status != VAL_ATTEST_SUCCESS) + continue; + + count = item.val.uCount; + for (i = 0; i <= count; i++) + { + mandaroty_sw_components |= 1 << item.label.int64; + + if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_VERSION) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_SIGNER_ID) + { + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_EPOCH) + { + if (item.uDataType != QCBOR_TYPE_INT64) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + else if (item.label.int64 == EAT_CBOR_SW_COMPONENT_TYPE) + { + if (item.uDataType != QCBOR_TYPE_TEXT_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + + if (i < count) + { + status = QCBORDecode_GetNext(decode_context, &item); + if (status != VAL_ATTEST_SUCCESS) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + } + } + + } + } + else + { + /* For other claim types */ + } + } + + if (status == QCBOR_ERR_HIT_END) + return VAL_ATTEST_SUCCESS; + else + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; +} + +/** + @brief - This API will verify the attestation token + @param - challenge : The buffer containing the challenge + challenge_size : Size of the challenge buffer + token : The buffer containing the attestation token + token_size : Size of the token buffer + @return - error status +**/ +int32_t val_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size) +{ + int32_t status = VAL_ATTEST_SUCCESS; + int32_t cose_algorithm_id; + QCBORItem item; + QCBORDecodeContext decode_context; + struct q_useful_buf_c completed_challenge; + struct q_useful_buf_c completed_token; + struct q_useful_buf_c payload; + struct q_useful_buf_c signature; + struct q_useful_buf_c protected_headers; + struct q_useful_buf_c kid; + struct q_useful_buf_c token_hash; + + USEFUL_BUF_MAKE_STACK_UB(buffer_for_encoded_key, MAX_ENCODED_COSE_KEY_SIZE); + USEFUL_BUF_MAKE_STACK_UB(buffer_for_token_hash, T_COSE_CRYPTO_SHA256_SIZE); + + kid.ptr = buffer_for_encoded_key.ptr; + + /* Construct the token buffer for validation */ + completed_token.ptr = token; + completed_token.len = token_size; + + /* Construct the challenge buffer for validation */ + completed_challenge.ptr = challenge; + completed_challenge.len = challenge_size; + +/* + ------------------------- + | CBOR Array Type | + ------------------------- + | Protected Headers | + ------------------------- + | Unprotected Headers | + ------------------------- + | Payload | + ------------------------- + | Signature | + ------------------------- +*/ + + /* Initialize the decorder */ + QCBORDecode_Init(&decode_context, completed_token, QCBOR_DECODE_MODE_NORMAL); + + /* Get the Header */ + QCBORDecode_GetNext(&decode_context, &item); + + /* Check the CBOR Array type. Check if the count is 4. + * Only COSE_SIGN1 is supported now. + */ + if (item.uDataType != QCBOR_TYPE_ARRAY || item.val.uCount != 4 || + !QCBORDecode_IsTagged(&decode_context, &item, CBOR_TAG_COSE_SIGN1)) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Get the next headers */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + protected_headers = item.val.string; + + /* Parse the protected headers and check the data type and value*/ + status = parse_protected_headers(protected_headers, &cose_algorithm_id); + if (status != VAL_ATTEST_SUCCESS) + return status; + + /* Parse the unprotected headers and check the data type and value */ + status = parse_unprotected_headers(&decode_context, &kid); + if (status != VAL_ATTEST_SUCCESS) + return status; + + /* Get the payload */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + payload = item.val.string; + + /* Get the digital signature */ + QCBORDecode_GetNext(&decode_context, &item); + if (item.uDataType != QCBOR_TYPE_BYTE_STRING) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + signature = item.val.string; + + /* Compute the hash from the token */ + status = val_attestation_function(VAL_INITIAL_ATTEST_COMPUTE_HASH, cose_algorithm_id, + buffer_for_token_hash, &token_hash, + protected_headers, payload); + if (status != VAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = val_attestation_function(VAL_INITIAL_ATTEST_VERIFY_WITH_PK, cose_algorithm_id, + token_hash, signature); + if (status != VAL_ATTEST_SUCCESS) + return status; + + /* Initialize the Decoder and validate the payload format */ + QCBORDecode_Init(&decode_context, payload, QCBOR_DECODE_MODE_NORMAL); + status = QCBORDecode_GetNext(&decode_context, &item); + if (status != VAL_ATTEST_SUCCESS) + return status; + + if (item.uDataType != QCBOR_TYPE_MAP) + return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; + + /* Parse the payload and check the data type of each claim */ + status = parse_claims(&decode_context, item, completed_challenge); + if (status != VAL_ATTEST_SUCCESS) + return status; + + if ((mandatory_claims & MANDATORY_CLAIM_WITH_SW_COMP) == MANDATORY_CLAIM_WITH_SW_COMP) + { + if ((mandaroty_sw_components & MANDATORY_SW_COMP) != MANDATORY_SW_COMP) + return VAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + else if ((mandatory_claims & MANDATORY_CLAIM_NO_SW_COMP) != MANDATORY_CLAIM_NO_SW_COMP) + { + return VAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS; + } + + return VAL_ATTEST_SUCCESS; +} +#endif /* INITIAL_ATTESTATION */ + /** @brief - This API will call the requested attestation function @param - type : function code ... : variable number of arguments @return - Error status **/ - int32_t val_attestation_function(int type, ...) { #ifdef INITIAL_ATTESTATION va_list valist; val_status_t status; + uint8_t *challenge, *token; + size_t challenge_size, verify_token_size; va_start(valist, type); - status = pal_attestation_function(type, valist); + switch (type) + { + case VAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, size_t); + status = val_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + break; + default: + status = pal_attestation_function(type, valist); + break; + } + va_end(valist); return status; #else return VAL_STATUS_ERROR; -#endif +#endif /* INITIAL_ATTESTATION */ } diff --git a/api-tests/val/nspe/val_attestation.h b/api-tests/val/nspe/val_attestation.h index 58ea59c1..f810fcc5 100644 --- a/api-tests/val/nspe/val_attestation.h +++ b/api-tests/val/nspe/val_attestation.h @@ -18,14 +18,130 @@ #ifndef _VAL_INITIAL_ATTESTATION_H_ #define _VAL_INITIAL_ATTESTATION_H_ +#ifdef INITIAL_ATTESTATION + #include "val.h" +#include "qcbor.h" + +#define COSE_HEADER_PARAM_ALG 1 +#define COSE_HEADER_PARAM_KID 4 + +/** + * The size of X and Y coordinate in 2 parameter style EC public + * key. Format is as defined in [COSE (RFC 8152)] + * (https://tools.ietf.org/html/rfc8152) and [SEC 1: Elliptic Curve + * Cryptography](http://www.secg.org/sec1-v2.pdf). + * + * This size is well-known and documented in public standards. + */ +#define T_COSE_CRYPTO_EC_P256_COORD_SIZE 32 +#define T_COSE_CRYPTO_SHA256_SIZE 32 + +#define MAX_ENCODED_COSE_KEY_SIZE \ + (1 + /* 1 byte to encode map */ \ + 2 + /* 2 bytes to encode key type */ \ + 2 + /* 2 bytes to encode curve */ \ + 2 * /* the X and Y coordinates at 32 bytes each */ \ + (T_COSE_CRYPTO_EC_P256_COORD_SIZE + 1 + 2)) + +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + #define MAX_CHALLENGE_SIZE PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64 +#define EAT_CBOR_ARM_RANGE_BASE (-75000) +#define EAT_CBOR_ARM_LABEL_PROFILE_DEFINITION (EAT_CBOR_ARM_RANGE_BASE - 0) +#define EAT_CBOR_ARM_LABEL_CLIENT_ID (EAT_CBOR_ARM_RANGE_BASE - 1) +#define EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE (EAT_CBOR_ARM_RANGE_BASE - 2) +#define EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID (EAT_CBOR_ARM_RANGE_BASE - 3) +#define EAT_CBOR_ARM_LABEL_BOOT_SEED (EAT_CBOR_ARM_RANGE_BASE - 4) +#define EAT_CBOR_ARM_LABEL_HW_VERSION (EAT_CBOR_ARM_RANGE_BASE - 5) +#define EAT_CBOR_ARM_LABEL_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 6) +#define EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS (EAT_CBOR_ARM_RANGE_BASE - 7) +#define EAT_CBOR_ARM_LABEL_NONCE (EAT_CBOR_ARM_RANGE_BASE - 8) +#define EAT_CBOR_ARM_LABEL_UEID (EAT_CBOR_ARM_RANGE_BASE - 9) +#define EAT_CBOR_ARM_LABEL_ORIGINATION (EAT_CBOR_ARM_RANGE_BASE - 10) + +#define CBOR_ARM_TOTAL_CLAIM_INSTANCE 10 + +#define EAT_CBOR_SW_COMPONENT_TYPE (1u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT (2u) +#define EAT_CBOR_SW_COMPONENT_EPOCH (3u) +#define EAT_CBOR_SW_COMPONENT_VERSION (4u) +#define EAT_CBOR_SW_COMPONENT_SIGNER_ID (5u) +#define EAT_CBOR_SW_COMPONENT_MEASUREMENT_DESC (6u) + +#define MANDATORY_CLAIM_WITH_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SW_COMPONENTS)) + +#define MANDATORY_CLAIM_NO_SW_COMP (1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NONCE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_UEID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_IMPLEMENTATION_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_CLIENT_ID) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_SECURITY_LIFECYCLE) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_BOOT_SEED) | \ + 1 << (EAT_CBOR_ARM_RANGE_BASE \ + - EAT_CBOR_ARM_LABEL_NO_SW_COMPONENTS)) + +#define MANDATORY_SW_COMP (1 << EAT_CBOR_SW_COMPONENT_MEASUREMENT | \ + 1 << EAT_CBOR_SW_COMPONENT_VERSION | \ + 1 << EAT_CBOR_SW_COMPONENT_SIGNER_ID) + +#define VAL_ATTEST_MIN_ERROR 70 + +enum attestation_error_code { + VAL_ATTEST_SUCCESS = 0, + VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = VAL_ATTEST_MIN_ERROR, + VAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + VAL_ATTEST_TOKEN_NOT_SUPPORTED, + VAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + VAL_ATTEST_HASH_LENGTH_MISMATCH, + VAL_ATTEST_HASH_MISMATCH, + VAL_ATTEST_HASH_FAIL, + VAL_ATTEST_HASH_UNSUPPORTED, + VAL_ATTEST_HASH_BUFFER_SIZE, + VAL_ATTEST_ERR_PROTECTED_HEADERS, + VAL_ATTEST_ERR_SIGN_STRUCT, + VAL_ATTEST_ERR_KEY_FAIL, + VAL_ATTEST_ERR_SIGNATURE_FAIL, + VAL_ATTEST_ERR_CBOR_STRUCTURE, + VAL_ATTEST_ERR_SMALL_BUFFER, + VAL_ATTEST_ERROR, +}; + +struct items_to_get_t { + int64_t label; + QCBORItem item; +}; + enum attestation_function_code { VAL_INITIAL_ATTEST_GET_TOKEN = 0x1, VAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, VAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + VAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + VAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, }; +int32_t val_initial_attest_verify_token(uint8_t *challenge, size_t challenge_size, + uint8_t *token, size_t token_size); +#endif /* INITIAL_ATTESTATION */ + int32_t val_attestation_function(int type, ...); #endif /* _VAL_INITIAL_ATTESTATION_H_ */ diff --git a/api-tests/val/val_nspe.cmake b/api-tests/val/val_nspe.cmake index 91113b0a..4494ed26 100644 --- a/api-tests/val/val_nspe.cmake +++ b/api-tests/val/val_nspe.cmake @@ -38,6 +38,12 @@ foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) target_include_directories(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE ${psa_inc_path}) endforeach() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() + target_include_directories(${PSA_TARGET_VAL_NSPE_LIB} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${PSA_ROOT_DIR}/val/common From e37306eea2772110f7eab410bd8d4537414c74e1 Mon Sep 17 00:00:00 2001 From: Jamie Fox Date: Mon, 30 Sep 2019 17:25:01 +0100 Subject: [PATCH 40/54] Align PSA Storage tests with 1.0.0 spec Updates the PSA Storage tests to take account of the fact that the latest spec allows the client to try to get more data than available, with the actual read amount returned in p_data_length. Signed-off-by: Jamie Fox --- .../internal_trusted_storage/test_s003/test_s003.c | 2 +- .../internal_trusted_storage/test_s004/test_its_data.h | 2 +- .../internal_trusted_storage/test_s004/test_s004.c | 9 +++------ .../internal_trusted_storage/test_s007/test_its_data.h | 4 ++-- .../internal_trusted_storage/test_s007/test_s007.c | 4 ++-- .../internal_trusted_storage/test_s008/test_its_data.h | 4 ++-- .../internal_trusted_storage/test_s008/test_s008.c | 9 +++------ 7 files changed, 14 insertions(+), 20 deletions(-) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c index 69f78937..f3c20c38 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c @@ -24,7 +24,7 @@ #include "test_ps_data.h" #endif -#define TEST_BUFF_SIZE 1024 +#define TEST_BUFF_SIZE 512 #define NUM_ITERATIONS 2 #define TEST_BASE_UID_VALUE UID_BASE_VALUE + 5 diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h index e12f221c..22124d13 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h @@ -43,7 +43,7 @@ static const test_data s004_data[] = { VAL_ITS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get with incorrect length */ + VAL_ITS_GET, PSA_SUCCESS /* Call get with incorrect length */ }, { 0, 0 /* No data should be returned */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c index 69ecf515..7e299e78 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c @@ -61,12 +61,9 @@ int32_t psa_sst_get_data_check(caller_security_t caller) memset(read_buff, 0, TEST_BUFF_SIZE); status = SST_FUNCTION(s004_data[5].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s004_data[5].status, TEST_CHECKPOINT_NUM(6)); - for (j = 0; j < TEST_BUFF_SIZE; j++) - { - TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(7)); - } - /* Expect p_data_length = 0, when psa get function is not unsuccessful as in previous case */ - TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(7)); + /* Expect p_data_length = TEST_BUFF_SIZE/2, when psa get function is successful as in previous case */ + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(8)); /* Call get function with CORRECT buffer length */ status = SST_FUNCTION(s004_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h index 82f4cd00..6a680849 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h @@ -49,10 +49,10 @@ static const test_data s007_data[] = { VAL_ITS_SET, PSA_SUCCESS /* Decrease the length of storage */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ }, { VAL_ITS_GET, PSA_SUCCESS /* Try to access data with correct length */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c index 8b03f69a..9caee670 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c @@ -75,13 +75,13 @@ int32_t psa_sst_get_incorrect_size(caller_security_t caller) /* Access data using get API and old length */ status = SST_FUNCTION(s007_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s007_data[7].status, TEST_CHECKPOINT_NUM(9)); - TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(10)); /* Access data using get API and old length */ val->print(PRINT_TEST, "[Check 2] Call get API with old length\n", 0); status = SST_FUNCTION(s007_data[8].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s007_data[8].status, TEST_CHECKPOINT_NUM(11)); - TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(12)); /* Access data using correct length */ val->print(PRINT_TEST, "[Check 3] Call get API with valid length\n", 0); diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h index cff9e245..95522c9a 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h @@ -52,13 +52,13 @@ static const test_data s008_data[] = { 0, 0 /* This is dummy for index7 */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* get API with offset + data_len > total data_size */ + VAL_ITS_GET, PSA_SUCCESS /* get API with offset + data_len > total data_size */ }, { 0, 0 /* This is dummy for index9 */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with invalid data len and offset zero */ + VAL_ITS_GET, PSA_SUCCESS /* Call get API with invalid data len and offset zero */ }, { 0, 0 /* This is dummy for index11 */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c index 9050b8a7..25783625 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c @@ -66,16 +66,13 @@ int32_t psa_sst_invalid_offset_failure(caller_security_t caller) /* Case where offset = 0 , data_len > data_size Also check nothing is returned in read buff*/ status = SST_FUNCTION(s008_data[10].api, uid, 0, TEST_BUFF_SIZE+1, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s008_data[10].status, TEST_CHECKPOINT_NUM(14)); - TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(15)); - for (j = 0; j < TEST_BUFF_SIZE; j++) - { - TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(16)); - } + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(16)); /* Try to access data with offset as MAX_UINT32 and length less than buffer size */ status = SST_FUNCTION(s008_data[12].api, uid, TEST_MAX_UINT32, TEST_BUFF_SIZE/2, read_buff, &p_data_length); - TEST_ASSERT_NOT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(17)); + TEST_ASSERT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(17)); /* Remove the UID */ status = SST_FUNCTION(s008_data[13].api, uid); From 4cacfcc82c6aabedeb55386970aaf10e6e53fc09 Mon Sep 17 00:00:00 2001 From: "Galanakis, Minos" Date: Thu, 5 Dec 2019 11:29:49 +0000 Subject: [PATCH 41/54] Aligned the protected storage test-dataset with PSA.1.0.0 This patch updates the test_ps_data for tests 004, 007, 008 in order to align the expected outputs with that defined in PSA 1.0.0 Signed-off-by: Galanakis, Minos --- .../internal_trusted_storage/test_s004/test_ps_data.h | 2 +- .../internal_trusted_storage/test_s007/test_ps_data.h | 4 ++-- .../internal_trusted_storage/test_s008/test_ps_data.h | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h index 7773c674..54f4d7a3 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h @@ -43,7 +43,7 @@ static const test_data s004_data[] = { VAL_PS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get with incorrect length */ + VAL_PS_GET, PSA_SUCCESS /* Call get with incorrect length */ }, { 0, 0 /* No data should be returned */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h index 2b996659..ca4fd1a6 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h @@ -49,10 +49,10 @@ static const test_data s007_data[] = { VAL_PS_SET, PSA_SUCCESS /* Decrease the length of storage */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ }, { VAL_PS_GET, PSA_SUCCESS /* Try to access data with correct length */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h index d66e2a2c..598ac992 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h @@ -52,19 +52,19 @@ static const test_data s008_data[] = { 0, 0 /* This is dummy for index7 */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset + data_len > total data_size */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len > total data_size */ }, { 0, 0 /* This is dummy for index9 */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with invalid data len and offset zero */ + VAL_PS_GET, PSA_SUCCESS /* Call get API with invalid data len and offset zero */ }, { 0, 0 /* This is dummy for index11 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with offset = MAX_UINT32 */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset = MAX_UINT32 */ }, { VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ From ccf5bf2b4dca377843c52859e861b28465ea5fce Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Fri, 6 Dec 2019 11:58:32 +0530 Subject: [PATCH 42/54] IPC: Tests addition and updates for PSA FF 1.0 - Tests addition and updates for PSA FF 1.0 - Remove unused platform files - Update READMEs for security implication note - Minor bug fixes --- api-tests/CMakeLists.txt | 19 +- api-tests/dev_apis/README.md | 5 +- api-tests/docs/psa_ipc_testlist.md | 235 ++++---- api-tests/ff/README.md | 6 +- api-tests/ff/ipc/test_i001/test_i001.c | 14 +- api-tests/ff/ipc/test_i001/test_i001.h | 10 +- api-tests/ff/ipc/test_i001/test_supp_i001.c | 4 +- api-tests/ff/ipc/test_i002/test_i002.c | 93 +++- api-tests/ff/ipc/test_i002/test_i002.h | 13 +- api-tests/ff/ipc/test_i002/test_supp_i002.c | 112 ++-- api-tests/ff/ipc/test_i003/test_i003.c | 45 +- api-tests/ff/ipc/test_i003/test_i003.h | 10 +- api-tests/ff/ipc/test_i003/test_supp_i003.c | 46 +- api-tests/ff/ipc/test_i004/test_i004.c | 2 +- api-tests/ff/ipc/test_i004/test_i004.h | 10 +- api-tests/ff/ipc/test_i004/test_supp_i004.c | 4 +- api-tests/ff/ipc/test_i005/test_entry_i005.c | 4 +- api-tests/ff/ipc/test_i005/test_i005.c | 10 +- api-tests/ff/ipc/test_i005/test_i005.h | 12 +- api-tests/ff/ipc/test_i005/test_supp_i005.c | 12 +- api-tests/ff/ipc/test_i006/test_entry_i006.c | 4 +- api-tests/ff/ipc/test_i006/test_i006.c | 10 +- api-tests/ff/ipc/test_i006/test_i006.h | 12 +- api-tests/ff/ipc/test_i006/test_supp_i006.c | 12 +- api-tests/ff/ipc/test_i007/test_entry_i007.c | 4 +- api-tests/ff/ipc/test_i007/test_i007.c | 10 +- api-tests/ff/ipc/test_i007/test_i007.h | 12 +- api-tests/ff/ipc/test_i007/test_supp_i007.c | 12 +- api-tests/ff/ipc/test_i008/test_i008.c | 4 +- api-tests/ff/ipc/test_i008/test_i008.h | 10 +- api-tests/ff/ipc/test_i008/test_supp_i008.c | 8 +- api-tests/ff/ipc/test_i009/test_entry_i009.c | 4 +- api-tests/ff/ipc/test_i009/test_i009.c | 8 +- api-tests/ff/ipc/test_i009/test_i009.h | 12 +- api-tests/ff/ipc/test_i009/test_supp_i009.c | 12 +- api-tests/ff/ipc/test_i010/test_entry_i010.c | 4 +- api-tests/ff/ipc/test_i010/test_i010.c | 14 +- api-tests/ff/ipc/test_i010/test_i010.h | 12 +- api-tests/ff/ipc/test_i010/test_supp_i010.c | 12 +- api-tests/ff/ipc/test_i011/test_entry_i011.c | 4 +- api-tests/ff/ipc/test_i011/test_i011.c | 16 +- api-tests/ff/ipc/test_i011/test_i011.h | 12 +- api-tests/ff/ipc/test_i011/test_supp_i011.c | 12 +- api-tests/ff/ipc/test_i012/test_i012.h | 10 +- api-tests/ff/ipc/test_i012/test_supp_i012.c | 4 +- api-tests/ff/ipc/test_i013/test_i013.c | 2 +- api-tests/ff/ipc/test_i013/test_i013.h | 10 +- api-tests/ff/ipc/test_i013/test_supp_i013.c | 12 +- api-tests/ff/ipc/test_i014/test_i014.c | 2 +- api-tests/ff/ipc/test_i014/test_i014.h | 10 +- api-tests/ff/ipc/test_i014/test_supp_i014.c | 10 +- api-tests/ff/ipc/test_i015/test_i015.c | 2 +- api-tests/ff/ipc/test_i015/test_i015.h | 10 +- api-tests/ff/ipc/test_i015/test_supp_i015.c | 8 +- api-tests/ff/ipc/test_i016/test_i016.c | 2 +- api-tests/ff/ipc/test_i016/test_i016.h | 10 +- api-tests/ff/ipc/test_i016/test_supp_i016.c | 10 +- api-tests/ff/ipc/test_i017/test_i017.c | 2 +- api-tests/ff/ipc/test_i017/test_i017.h | 10 +- api-tests/ff/ipc/test_i017/test_supp_i017.c | 8 +- api-tests/ff/ipc/test_i018/test_i018.c | 2 +- api-tests/ff/ipc/test_i018/test_i018.h | 10 +- api-tests/ff/ipc/test_i018/test_supp_i018.c | 6 +- api-tests/ff/ipc/test_i019/test_i019.c | 2 +- api-tests/ff/ipc/test_i019/test_i019.h | 10 +- api-tests/ff/ipc/test_i019/test_supp_i019.c | 6 +- api-tests/ff/ipc/test_i020/test_i020.c | 2 +- api-tests/ff/ipc/test_i020/test_i020.h | 10 +- api-tests/ff/ipc/test_i020/test_supp_i020.c | 6 +- api-tests/ff/ipc/test_i021/test_i021.c | 8 +- api-tests/ff/ipc/test_i021/test_i021.h | 10 +- api-tests/ff/ipc/test_i021/test_supp_i021.c | 4 +- api-tests/ff/ipc/test_i022/test_i022.c | 2 +- api-tests/ff/ipc/test_i022/test_i022.h | 10 +- api-tests/ff/ipc/test_i022/test_supp_i022.c | 6 +- api-tests/ff/ipc/test_i023/test_i023.c | 2 +- api-tests/ff/ipc/test_i023/test_i023.h | 10 +- api-tests/ff/ipc/test_i023/test_supp_i023.c | 6 +- api-tests/ff/ipc/test_i024/test_i024.c | 2 +- api-tests/ff/ipc/test_i024/test_i024.h | 10 +- api-tests/ff/ipc/test_i024/test_supp_i024.c | 4 +- api-tests/ff/ipc/test_i025/test_i025.c | 2 +- api-tests/ff/ipc/test_i025/test_i025.h | 10 +- api-tests/ff/ipc/test_i025/test_supp_i025.c | 4 +- api-tests/ff/ipc/test_i026/test_i026.c | 7 +- api-tests/ff/ipc/test_i026/test_i026.h | 10 +- api-tests/ff/ipc/test_i026/test_supp_i026.c | 12 +- api-tests/ff/ipc/test_i027/test_i027.c | 10 +- api-tests/ff/ipc/test_i027/test_i027.h | 10 +- api-tests/ff/ipc/test_i027/test_supp_i027.c | 10 +- api-tests/ff/ipc/test_i028/test_i028.c | 2 +- api-tests/ff/ipc/test_i028/test_i028.h | 10 +- api-tests/ff/ipc/test_i028/test_supp_i028.c | 6 +- api-tests/ff/ipc/test_i029/test_i029.c | 4 +- api-tests/ff/ipc/test_i029/test_i029.h | 10 +- api-tests/ff/ipc/test_i029/test_supp_i029.c | 8 +- api-tests/ff/ipc/test_i030/test_i030.c | 7 +- api-tests/ff/ipc/test_i030/test_i030.h | 10 +- api-tests/ff/ipc/test_i030/test_supp_i030.c | 10 +- api-tests/ff/ipc/test_i031/test_i031.c | 6 +- api-tests/ff/ipc/test_i031/test_i031.h | 10 +- api-tests/ff/ipc/test_i031/test_supp_i031.c | 10 +- api-tests/ff/ipc/test_i032/test_i032.c | 6 +- api-tests/ff/ipc/test_i032/test_i032.h | 10 +- api-tests/ff/ipc/test_i032/test_supp_i032.c | 10 +- api-tests/ff/ipc/test_i033/test_i033.c | 6 +- api-tests/ff/ipc/test_i033/test_i033.h | 10 +- api-tests/ff/ipc/test_i033/test_supp_i033.c | 10 +- api-tests/ff/ipc/test_i034/test_i034.c | 2 +- api-tests/ff/ipc/test_i034/test_i034.h | 10 +- api-tests/ff/ipc/test_i034/test_supp_i034.c | 6 +- api-tests/ff/ipc/test_i035/test_i035.c | 4 +- api-tests/ff/ipc/test_i035/test_i035.h | 10 +- api-tests/ff/ipc/test_i035/test_supp_i035.c | 8 +- api-tests/ff/ipc/test_i036/test_i036.c | 6 +- api-tests/ff/ipc/test_i036/test_i036.h | 10 +- api-tests/ff/ipc/test_i036/test_supp_i036.c | 10 +- api-tests/ff/ipc/test_i037/test_i037.c | 6 +- api-tests/ff/ipc/test_i037/test_i037.h | 10 +- api-tests/ff/ipc/test_i037/test_supp_i037.c | 10 +- api-tests/ff/ipc/test_i038/test_i038.c | 6 +- api-tests/ff/ipc/test_i038/test_i038.h | 10 +- api-tests/ff/ipc/test_i038/test_supp_i038.c | 10 +- api-tests/ff/ipc/test_i039/test_i039.c | 6 +- api-tests/ff/ipc/test_i039/test_i039.h | 10 +- api-tests/ff/ipc/test_i039/test_supp_i039.c | 10 +- api-tests/ff/ipc/test_i040/test_i040.c | 2 +- api-tests/ff/ipc/test_i040/test_i040.h | 10 +- api-tests/ff/ipc/test_i040/test_supp_i040.c | 6 +- api-tests/ff/ipc/test_i041/test_i041.c | 4 +- api-tests/ff/ipc/test_i041/test_i041.h | 10 +- api-tests/ff/ipc/test_i041/test_supp_i041.c | 8 +- api-tests/ff/ipc/test_i042/test_i042.c | 6 +- api-tests/ff/ipc/test_i042/test_i042.h | 10 +- api-tests/ff/ipc/test_i042/test_supp_i042.c | 10 +- api-tests/ff/ipc/test_i043/test_i043.c | 6 +- api-tests/ff/ipc/test_i043/test_i043.h | 10 +- api-tests/ff/ipc/test_i043/test_supp_i043.c | 10 +- api-tests/ff/ipc/test_i044/test_i044.c | 6 +- api-tests/ff/ipc/test_i044/test_i044.h | 10 +- api-tests/ff/ipc/test_i044/test_supp_i044.c | 10 +- api-tests/ff/ipc/test_i045/test_i045.c | 6 +- api-tests/ff/ipc/test_i045/test_i045.h | 10 +- api-tests/ff/ipc/test_i045/test_supp_i045.c | 10 +- api-tests/ff/ipc/test_i046/test_i046.c | 6 +- api-tests/ff/ipc/test_i046/test_i046.h | 10 +- api-tests/ff/ipc/test_i046/test_supp_i046.c | 10 +- api-tests/ff/ipc/test_i047/test_i047.c | 4 +- api-tests/ff/ipc/test_i047/test_i047.h | 10 +- api-tests/ff/ipc/test_i047/test_supp_i047.c | 24 +- api-tests/ff/ipc/test_i048/test_i048.c | 21 +- api-tests/ff/ipc/test_i048/test_i048.h | 10 +- api-tests/ff/ipc/test_i048/test_supp_i048.c | 12 +- api-tests/ff/ipc/test_i049/test_i049.c | 21 +- api-tests/ff/ipc/test_i049/test_i049.h | 10 +- api-tests/ff/ipc/test_i049/test_supp_i049.c | 12 +- api-tests/ff/ipc/test_i050/test_i050.c | 21 +- api-tests/ff/ipc/test_i050/test_i050.h | 10 +- api-tests/ff/ipc/test_i050/test_supp_i050.c | 12 +- api-tests/ff/ipc/test_i051/test_i051.c | 21 +- api-tests/ff/ipc/test_i051/test_i051.h | 10 +- api-tests/ff/ipc/test_i051/test_supp_i051.c | 12 +- api-tests/ff/ipc/test_i052/test_entry_i052.c | 12 +- api-tests/ff/ipc/test_i052/test_i052.c | 7 +- api-tests/ff/ipc/test_i052/test_i052.h | 10 +- api-tests/ff/ipc/test_i052/test_supp_i052.c | 12 +- api-tests/ff/ipc/test_i053/test_entry_i053.c | 12 +- api-tests/ff/ipc/test_i053/test_i053.c | 7 +- api-tests/ff/ipc/test_i053/test_i053.h | 10 +- api-tests/ff/ipc/test_i053/test_supp_i053.c | 12 +- api-tests/ff/ipc/test_i054/test_i054.c | 6 +- api-tests/ff/ipc/test_i054/test_i054.h | 10 +- api-tests/ff/ipc/test_i054/test_supp_i054.c | 12 +- api-tests/ff/ipc/test_i055/test_i055.c | 6 +- api-tests/ff/ipc/test_i055/test_i055.h | 10 +- api-tests/ff/ipc/test_i055/test_supp_i055.c | 32 +- api-tests/ff/ipc/test_i056/test_i056.c | 6 +- api-tests/ff/ipc/test_i056/test_i056.h | 10 +- api-tests/ff/ipc/test_i056/test_supp_i056.c | 10 +- api-tests/ff/ipc/test_i057/test_i057.c | 6 +- api-tests/ff/ipc/test_i057/test_i057.h | 10 +- api-tests/ff/ipc/test_i057/test_supp_i057.c | 32 +- api-tests/ff/ipc/test_i058/test_i058.c | 4 +- api-tests/ff/ipc/test_i058/test_i058.h | 10 +- api-tests/ff/ipc/test_i058/test_supp_i058.c | 8 +- api-tests/ff/ipc/test_i059/test_i059.h | 10 +- api-tests/ff/ipc/test_i059/test_supp_i059.c | 4 +- api-tests/ff/ipc/test_i060/test_i060.h | 10 +- api-tests/ff/ipc/test_i060/test_supp_i060.c | 4 +- api-tests/ff/ipc/test_i061/test_i061.h | 10 +- api-tests/ff/ipc/test_i061/test_supp_i061.c | 4 +- api-tests/ff/ipc/test_i062/test_i062.h | 10 +- api-tests/ff/ipc/test_i062/test_supp_i062.c | 4 +- api-tests/ff/ipc/test_i063/test_i063.c | 4 +- api-tests/ff/ipc/test_i063/test_i063.h | 10 +- api-tests/ff/ipc/test_i063/test_supp_i063.c | 28 +- api-tests/ff/ipc/test_i064/test_i064.c | 8 +- api-tests/ff/ipc/test_i064/test_i064.h | 10 +- api-tests/ff/ipc/test_i064/test_supp_i064.c | 4 +- api-tests/ff/ipc/test_i065/test_i065.c | 8 +- api-tests/ff/ipc/test_i065/test_i065.h | 10 +- api-tests/ff/ipc/test_i065/test_supp_i065.c | 4 +- api-tests/ff/ipc/test_i066/test_i066.c | 8 +- api-tests/ff/ipc/test_i066/test_i066.h | 10 +- api-tests/ff/ipc/test_i066/test_supp_i066.c | 4 +- api-tests/ff/ipc/test_i067/test_i067.h | 10 +- api-tests/ff/ipc/test_i067/test_supp_i067.c | 4 +- api-tests/ff/ipc/test_i068/test_i068.c | 5 +- api-tests/ff/ipc/test_i068/test_i068.h | 10 +- api-tests/ff/ipc/test_i068/test_supp_i068.c | 4 +- api-tests/ff/ipc/test_i069/test_i069.h | 10 +- api-tests/ff/ipc/test_i069/test_supp_i069.c | 4 +- api-tests/ff/ipc/test_i070/test_i070.h | 10 +- api-tests/ff/ipc/test_i070/test_supp_i070.c | 4 +- api-tests/ff/ipc/test_i071/test_i071.h | 10 +- api-tests/ff/ipc/test_i071/test_supp_i071.c | 4 +- api-tests/ff/ipc/test_i072/test_i072.c | 10 +- api-tests/ff/ipc/test_i072/test_i072.h | 10 +- api-tests/ff/ipc/test_i072/test_supp_i072.c | 21 +- api-tests/ff/ipc/test_i073/test_i073.c | 10 +- api-tests/ff/ipc/test_i073/test_i073.h | 10 +- api-tests/ff/ipc/test_i073/test_supp_i073.c | 18 +- api-tests/ff/ipc/test_i074/test_i074.c | 10 +- api-tests/ff/ipc/test_i074/test_i074.h | 10 +- api-tests/ff/ipc/test_i074/test_supp_i074.c | 16 +- api-tests/ff/ipc/test_i075/test_i075.c | 10 +- api-tests/ff/ipc/test_i075/test_i075.h | 10 +- api-tests/ff/ipc/test_i075/test_supp_i075.c | 23 +- api-tests/ff/ipc/test_i076/test_i076.c | 8 +- api-tests/ff/ipc/test_i076/test_i076.h | 10 +- api-tests/ff/ipc/test_i076/test_supp_i076.c | 4 +- api-tests/ff/ipc/test_i077/test_i077.c | 8 +- api-tests/ff/ipc/test_i077/test_i077.h | 10 +- api-tests/ff/ipc/test_i077/test_supp_i077.c | 4 +- api-tests/ff/ipc/test_i078/test_i078.c | 8 +- api-tests/ff/ipc/test_i078/test_i078.h | 10 +- api-tests/ff/ipc/test_i078/test_supp_i078.c | 4 +- api-tests/ff/ipc/test_i079/test_i079.c | 8 +- api-tests/ff/ipc/test_i079/test_i079.h | 10 +- api-tests/ff/ipc/test_i079/test_supp_i079.c | 4 +- api-tests/ff/ipc/test_i080/test_i080.c | 8 +- api-tests/ff/ipc/test_i080/test_i080.h | 10 +- api-tests/ff/ipc/test_i080/test_supp_i080.c | 4 +- api-tests/ff/ipc/test_i081/test_i081.c | 8 +- api-tests/ff/ipc/test_i081/test_i081.h | 10 +- api-tests/ff/ipc/test_i081/test_supp_i081.c | 4 +- api-tests/ff/ipc/test_i082/test_i082.c | 8 +- api-tests/ff/ipc/test_i082/test_i082.h | 10 +- api-tests/ff/ipc/test_i082/test_supp_i082.c | 4 +- api-tests/ff/ipc/test_i083/test_i083.c | 8 +- api-tests/ff/ipc/test_i083/test_i083.h | 10 +- api-tests/ff/ipc/test_i083/test_supp_i083.c | 4 +- api-tests/ff/ipc/test_i084/test_i084.c | 10 +- api-tests/ff/ipc/test_i084/test_i084.h | 10 +- api-tests/ff/ipc/test_i084/test_supp_i084.c | 21 +- api-tests/ff/ipc/test_i085/test_i085.c | 10 +- api-tests/ff/ipc/test_i085/test_i085.h | 10 +- api-tests/ff/ipc/test_i085/test_supp_i085.c | 16 +- api-tests/ff/ipc/test_i086/test_i086.c | 10 +- api-tests/ff/ipc/test_i086/test_i086.h | 10 +- api-tests/ff/ipc/test_i086/test_supp_i086.c | 16 +- api-tests/ff/ipc/test_i087/test_i087.c | 10 +- api-tests/ff/ipc/test_i087/test_i087.h | 10 +- api-tests/ff/ipc/test_i087/test_supp_i087.c | 20 +- api-tests/ff/ipc/test_i089/test.cmake | 32 ++ api-tests/ff/ipc/test_i089/test_entry_i089.c | 51 ++ api-tests/ff/ipc/test_i089/test_i089.c | 37 ++ api-tests/ff/ipc/test_i089/test_i089.h | 37 ++ api-tests/ff/ipc/test_i089/test_supp_i089.c | 82 +++ api-tests/ff/ipc/test_i090/test.cmake | 32 ++ api-tests/ff/ipc/test_i090/test_entry_i090.c | 59 ++ api-tests/ff/ipc/test_i090/test_i090.c | 108 ++++ api-tests/ff/ipc/test_i090/test_i090.h | 37 ++ api-tests/ff/ipc/test_i090/test_supp_i090.c | 79 +++ api-tests/ff/ipc/test_l088/test_l088.h | 10 +- api-tests/ff/ipc/test_l088/test_supp_l088.c | 4 +- api-tests/ff/ipc/testsuite.db | 2 + .../ff/partition/common/driver_partition.c | 56 +- api-tests/ff/partition/ipc/client_partition.c | 7 +- api-tests/ff/partition/ipc/server_partition.c | 4 +- .../platform/drivers/uart/cmsdk/pal_uart.c | 2 +- .../platform/drivers/uart/pl011/pal_uart.c | 2 +- .../nspe/common/pal_common.h | 3 +- .../nspe/common/pal_config.h | 3 + .../nspe/common/pal_driver_ns_intf.c | 2 +- .../targets/tgt_dev_apis_stdc/target.cfg | 5 +- .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 18 +- .../nspe/common/pal_client_api_intf.c | 22 +- .../nspe/common/pal_client_api_intf.h | 11 +- .../nspe/common/pal_config.h | 3 + .../nspe/common/pal_driver_ipc_intf.c | 140 +++-- .../targets/tgt_dev_apis_tfm_an521/target.cfg | 3 - .../common/driver_partition_psa.json | 75 --- .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 18 +- .../nspe/common/pal_client_api_intf.c | 26 +- .../nspe/common/pal_client_api_intf.h | 11 +- .../nspe/common/pal_common.h | 3 +- .../nspe/common/pal_config.h | 3 + .../nspe/common/pal_driver_ipc_intf.c | 158 +++--- .../nspe/common/pal_driver_ns_intf.c | 8 +- .../spe/pal_driver_intf.c | 132 ----- .../targets/tgt_dev_apis_tfm_an524/target.cfg | 3 - .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 18 +- .../nspe/common/pal_client_api_intf.c | 22 +- .../nspe/common/pal_client_api_intf.h | 11 +- .../nspe/common/pal_config.h | 3 + .../nspe/common/pal_driver_ipc_intf.c | 140 +++-- .../spe/pal_driver_intf.h | 35 -- .../tgt_dev_apis_tfm_musca_a/target.cfg | 2 - .../common/driver_partition_psa.json | 75 --- .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 18 +- .../nspe/common/pal_client_api_intf.c | 22 +- .../nspe/common/pal_client_api_intf.h | 11 +- .../nspe/common/pal_config.h | 3 + .../nspe/common/pal_driver_ipc_intf.c | 140 +++-- .../spe/pal_driver_intf.c | 131 ----- .../spe/pal_driver_intf.h | 35 -- .../tgt_dev_apis_tfm_musca_b1/target.cfg | 2 - .../common/driver_partition_psa.json | 39 +- .../manifests/ipc/client_partition_psa.json | 28 + .../manifests/ipc/server_partition_psa.json | 70 +++ .../nspe/common/pal_client_api_empty_intf.c | 95 ++++ .../nspe/common/pal_client_api_intf.c | 99 ++++ .../nspe/common/pal_client_api_intf.h | 33 ++ .../tgt_ff_tfm_an521/nspe/common/pal_common.h | 116 ++++ .../tgt_ff_tfm_an521/nspe/common/pal_config.h | 94 ++++ .../nspe/common/pal_driver_ipc_intf.c | 293 ++++++++++ .../nspe/common/pal_driver_ns_intf.c | 145 +++++ .../nspe/crypto/pal_crypto_config.h | 323 +++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c | 30 + .../nspe/crypto/pal_crypto_intf.c | 516 ++++++++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 103 ++++ .../pal_attestation_crypto.c | 343 ++++++++++++ .../pal_attestation_crypto.h | 88 +++ .../initial_attestation/pal_attestation_eat.h | 80 +++ .../pal_attestation_empty_intf.c | 30 + .../pal_attestation_intf.c | 56 ++ .../pal_attestation_intf.h | 32 ++ .../pal_internal_trusted_storage_empty_intf.c | 30 + .../pal_internal_trusted_storage_intf.c | 62 +++ .../pal_internal_trusted_storage_intf.h | 31 ++ .../pal_protected_storage_empty_intf.c | 30 + .../pal_protected_storage_intf.c | 77 +++ .../pal_protected_storage_intf.h | 34 ++ .../spe/pal_driver_intf.c | 0 .../spe/pal_driver_intf.h | 0 .../targets/tgt_ff_tfm_an521/target.cfg | 78 +++ .../targets/tgt_ff_tfm_an521/target.cmake | 105 ++++ .../common/driver_partition_psa.json | 39 +- .../manifests/ipc/client_partition_psa.json | 28 + .../manifests/ipc/server_partition_psa.json | 70 +++ .../nspe/common/pal_client_api_empty_intf.c | 95 ++++ .../nspe/common/pal_client_api_intf.c | 99 ++++ .../nspe/common/pal_client_api_intf.h | 33 ++ .../nspe/common/pal_common.h | 116 ++++ .../nspe/common/pal_config.h | 94 ++++ .../nspe/common/pal_driver_ipc_intf.c | 293 ++++++++++ .../nspe/common/pal_driver_ns_intf.c | 145 +++++ .../nspe/crypto/pal_crypto_config.h | 323 +++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c | 30 + .../nspe/crypto/pal_crypto_intf.c | 516 ++++++++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 103 ++++ .../pal_attestation_crypto.c | 343 ++++++++++++ .../pal_attestation_crypto.h | 88 +++ .../initial_attestation/pal_attestation_eat.h | 80 +++ .../pal_attestation_empty_intf.c | 30 + .../pal_attestation_intf.c | 56 ++ .../pal_attestation_intf.h | 32 ++ .../pal_internal_trusted_storage_empty_intf.c | 30 + .../pal_internal_trusted_storage_intf.c | 62 +++ .../pal_internal_trusted_storage_intf.h | 31 ++ .../pal_protected_storage_empty_intf.c | 30 + .../pal_protected_storage_intf.c | 77 +++ .../pal_protected_storage_intf.h | 34 ++ .../spe/pal_driver_intf.c | 10 +- .../spe/pal_driver_intf.h | 0 .../targets/tgt_ff_tfm_musca_a/target.cfg | 78 +++ .../targets/tgt_ff_tfm_musca_a/target.cmake | 105 ++++ api-tests/tools/scripts/manifest_update.py | 111 ++++ api-tests/val/common/val.h | 6 + api-tests/val/common/val_target.h | 8 - api-tests/val/nspe/pal_interfaces_ns.h | 18 +- api-tests/val/nspe/val_dispatcher.c | 2 +- api-tests/val/nspe/val_dispatcher.h | 4 +- api-tests/val/nspe/val_entry.c | 2 +- api-tests/val/nspe/val_framework.c | 91 ++- api-tests/val/nspe/val_framework.h | 20 +- api-tests/val/nspe/val_interfaces.h | 21 +- api-tests/val/spe/val_partition_common.h | 89 +-- api-tests/val/spe/val_service_defs.h | 23 +- tbsa-v8m/README.md | 57 +- 401 files changed, 9279 insertions(+), 2989 deletions(-) create mode 100644 api-tests/ff/ipc/test_i089/test.cmake create mode 100644 api-tests/ff/ipc/test_i089/test_entry_i089.c create mode 100644 api-tests/ff/ipc/test_i089/test_i089.c create mode 100644 api-tests/ff/ipc/test_i089/test_i089.h create mode 100644 api-tests/ff/ipc/test_i089/test_supp_i089.c create mode 100644 api-tests/ff/ipc/test_i090/test.cmake create mode 100644 api-tests/ff/ipc/test_i090/test_entry_i090.c create mode 100644 api-tests/ff/ipc/test_i090/test_i090.c create mode 100644 api-tests/ff/ipc/test_i090/test_i090.h create mode 100644 api-tests/ff/ipc/test_i090/test_supp_i090.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/common/driver_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.h rename api-tests/platform/targets/{tgt_dev_apis_tfm_an521 => tgt_ff_tfm_an521}/manifests/common/driver_partition_psa.json (64%) create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ipc_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config_check.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.h rename api-tests/platform/targets/{tgt_dev_apis_tfm_an521 => tgt_ff_tfm_an521}/spe/pal_driver_intf.c (100%) rename api-tests/platform/targets/{tgt_dev_apis_tfm_an521 => tgt_ff_tfm_an521}/spe/pal_driver_intf.h (100%) create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg create mode 100644 api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake rename api-tests/platform/targets/{tgt_dev_apis_tfm_musca_a => tgt_ff_tfm_musca_a}/manifests/common/driver_partition_psa.json (64%) create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.h rename api-tests/platform/targets/{tgt_dev_apis_tfm_musca_a => tgt_ff_tfm_musca_a}/spe/pal_driver_intf.c (93%) rename api-tests/platform/targets/{tgt_dev_apis_tfm_an524 => tgt_ff_tfm_musca_a}/spe/pal_driver_intf.h (100%) create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake create mode 100644 api-tests/tools/scripts/manifest_update.py diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index a43c3aef..80f7d589 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -91,6 +91,9 @@ list(APPEND PSA_CPU_ARCH_SUPPORT # list of VERBOSE options list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5) +# list of PLATFORM_PSA_ISOLATION_LEVEL options +list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2 3) + message(STATUS "[PSA] : ----------Process input arguments- start-------------") # Check for TARGET command line argument @@ -206,16 +209,26 @@ endif() # Check for VERBOSE if(NOT DEFINED VERBOSE) set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE) - message(STATUS "[PSA] : Defaulting to VERBOSE=3") + message(STATUS "[PSA] : Defaulting to VERBOSE=${VERBOSE}") else() if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS) message(FATAL_ERROR "[PSA] : Error: Unspported value for -DVERBOSE=, supported values are : ${PSA_VERBOSE_OPTIONS}") endif() endif() +# Check for PLATFORM_PSA_ISOLATION_LEVEL +if(NOT DEFINED PLATFORM_PSA_ISOLATION_LEVEL) + set(PLATFORM_PSA_ISOLATION_LEVEL 3 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE) + message(STATUS "[PSA] : Defaulting to PLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL}") +else() + if(NOT ${PLATFORM_PSA_ISOLATION_LEVEL} IN_LIST PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS) + message(FATAL_ERROR "[PSA] : Error: Unspported value for -DPLATFORM_PSA_ISOLATION_LEVEL=, supported values are : ${PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS}") + endif() +endif() + if(NOT DEFINED INCLUDE_PANIC_TESTS) set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "By default panic tests are disabled" FORCE) - message(STATUS "[PSA] : Defaulting to INCLUDE_PANIC_TESTS=0") + message(STATUS "[PSA] : Defaulting to INCLUDE_PANIC_TESTS=${INCLUDE_PANIC_TESTS}") else() if(INCLUDE_PANIC_TESTS EQUAL 1) message(STATUS "[PSA] : Ensure you set watchdog.num to 1 in ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg") @@ -273,6 +286,7 @@ execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR} ${PSA_CLIENT_TEST_LIST_INC} ${PSA_SERVER_TEST_LIST_DECLARE_INC} ${PSA_SERVER_TEST_LIST}) + # Creating CMake list variable from file file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST) string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}") @@ -343,6 +357,7 @@ endif() add_definitions(-DPSA_CMAKE_BUILD) add_definitions(-D${SUITE}) add_definitions(-DVERBOSE=${VERBOSE}) +add_definitions(-DPLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL}) if(${SP_HEAP_MEM_SUPP} EQUAL 1) add_definitions(-DSP_HEAP_MEM_SUPP) diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md index f722b0b1..83aac79e 100644 --- a/api-tests/dev_apis/README.md +++ b/api-tests/dev_apis/README.md @@ -82,11 +82,14 @@ The following steps describe the execution flow before the test execution:
    0 with the minor version of the implemented RoT Service. | [client/server]_test_psa_version() | 1. Pass un-implemented SID and expects PSA_VERSION_NONE as return value.
    2. Call to API from NSPE with a SID who doesn't provide service to NSPE and expects PSA_VERSION_NONE as return value.
    3. Pass SID who is implemented and provides service to NSPE and expect minor number(>0) of given RoT service as return.
    Perform all above checks from SPE too. | Mandatory | Yes | -| test_i002 | 1. psa_connect() returns the PSA_ERROR_CONNECTION_BUSY when RoT Service cannot make the connection at the moment (transient error).
    2. psa_connect() returns the PSA_ERROR_CONNECTION_REFUSED when RoT Service has refused the connection
    3. psa_wait() returns the Secure Partition interrupt signals that have been asserted from a subset of signals provided by the caller. Returns > 0 when at least one signal is asserted
    4. psa_get():Get the message which corresponds to a given RoT Service signal and remove the message from the queue.
    5. psa_get() returns PSA_SUCCESS when *msg will contain the delivered message.
    6. The type member of the psa_msg_t object should return PSA_IPC_CONNECT for a new connection request following a psa_get() call to psa_connect() and msg.handle must be positive.
    7. psa_reply(): If the message type is PSA_IPC_CONNECT then server can reject the connection by sending PSA_ERROR_CONNECTION_REFUSED (permanent error) or PSA_ERROR_CONNECTION_BUSY (transient error) status code.
    | [client/server]_test_connection_busy_and_reject() | 1. Client tries to connect to ROT service using psa_connect()
    2. RoT service checks the delivery of PSA_IPC_CONNECT message type and positive handle value returned by psa_get()
    3. RoT service rejects the connection by executing psa_reply(handle,PSA_ERROR_CONNECTION_BUSY)
    4. Client tries to connect to same ROT service using psa_connect() again
    5. This time, RoT service rejects the connection by executing psa_reply(handle,PSA_ERROR_CONNECTION_REFUSED)
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_connect(): When SID is implemented and client is permitted to access the service, SPM delivers a PSA_IPC_CONNECT message from the client to the Secure Partition that implements the RoT Service and positive handle is returned to client.
    2. psa_get():Get the message which corresponds to a given RoT Service signal and remove the message from the queue.
    3. psa_get() returns PSA_SUCCESS when *msg will contain the delivered message
    4. psa_get():The type member of the psa_msg_t object should return PSA_IPC_CONNECT for a new connection request following a psa_get() call to psa_connect() and msg.handle must be positive.
    5. psa_get(): The type member of the psa_msg_t object should return PSA_IPC_DISCONNECT for a new connection request following a psa_get() call to psa_close() and msg.handle must be positive.
    6. psa_reply(): If the message type is PSA_IPC_CONNECT then server can accept the connection by sending PSA_SUCCESS status code. If the message type is PSA_IPC_DISCONNECT then the status code is ignored.
    7. psa_close(): Closes a connection to a RoT Service. Sends the PSA_IPC_DISCONNECT message to the RoT Service. This function will have no effect if called with the null handle.
    | [client/server]_test_accept_and_close_connect() | 1.Client tries to connect to ROT service
    2. RoT service checks the delivery of PSA_IPC_CONNECT message type and positive handle value return by psa_get()
    3. RoT service accepts the connection by executing psa_reply(.., PSA_CONNECTION_ACCEPTED).
    4. Client calls the psa_close with PSA_NULL_HANDLE and later it closes the connection using psa_close() with actual handle value
    5. RoT service checks the delivery of PSA_IPC_DISCONNECT message type, checks handle value eqaul to NULL returned by psa_get() and completes the PSA_IPC_DISCONNECT by executing psa_reply() .
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | -| | Following are allowed minor version condition to psa_connect():
    1. Version policy is not mentioned and requested version is 1 which is default minimum version
    2. Version policy is STRICT and requested version equals minimum version
    3. Version policy is relaxed and requested version is smaller than the minimum version
    4. Version policy is relaxed and requested version is euqal to the minimum version
    | [client/server]_test_connect_with_allowed_minor_version_policy() | Client tries connecting ROT service of following properties and expects connection to establish:
    - Version policy is not mentioned and requested version is 1 which is default minimum version
    - Version policy is STRICT and requested version equals minimum version
    - Version policy is relaxed and requested version is smaller than the minimum version
    - Version policy is relaxed and requested version is equal to the minimum version
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_call(): The valid psa_call, make SPM to send PSA_IPC_CALL msg.type to the RoT servicee partition and the successful call should return >=0 handle value.
    2. psa_call() receives return value >= 0 for RoT-specific return code
    3. psa_call() receive return value < 0 for RoT-specific error code
    4. psa_reply(): If the message type is PSA_IPC_CALL, all status codes other than PSA_ERROR_PROGRAMMER_ERROR must be reported to the client. | [client/server]_test_psa_call_with_allowed_status_code() | 1. Client connects to RoT service
    2. Client sends message using psa_call()
    3. RoT service checks the delivery of PSA_IPC_CALL message type and positive handle value return by psa_get()
    4. RoT service ends the call using psa_reply(status_code)
    5. Client checks the return value of psa_call() and Client closes the connectionRepeat (1) to (5) for different status code, SUCCESS, +ve, -ve..
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. A msg.client_id that has a positive value indicates that the client is in the SPE and this the Secure Partition ID of the client. A negative client_id indicates that the client is in the NSPE.
    2. Client_id is valid during PSA_IPC_CONNECT, PSA_IPC_CALL and PSA_IPC_DISCONNECT msg type.
    3. Manifest Parameter- name (required, unique)
    A Partition must have an alphanumeric name for source code to directly refer to a specific Partition. The format of the name must follow the rules of a C macro. | [client/server]_test_identity() | - Check the value returned by msg.client_id during PSA_IPC_CONNECT, PSA_IPC_CALL and PSA_IPC_DISCONNECT. For NSPE connection, client_id should be <0 and for SPE, it should be >0.
    Perform all above steps from NSPE and SPE both.
    - Access the Partition ID of client partition and compare the value with expected ID value. | Mandatory | Yes | -| | 1. psa_connect() will return the PSA_ERROR_CONNECTION_REFUSED OR PSA_ERROR_CONNECTION_BUSY when the SPM has reached the limit of concurrent connections | [client/server]_test_spm_concurrent_connect_limit() | Execute psa_connect() API in a loop until it returns PSA_CONNECTION_REFUSED or PSA_CONNECTION_BUSY to indicate end of concurrent connections limit.
    Perform above step from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_wait(): When MODE(PSA_BLOCK) is one, the function will block the caller until one of the requested signals is asserted.
    2. psa_wait(): Callers must set RES to zero, implementations must ignore the value of RES.
    | [client/server]_test_psa_block_behave() | 1. Client connects to a RoT service mutilpe times.
    2. RoT service psa_wait(PSA_BLOCK|(Non-zero value for timeout[30:0])) API is executed without while(1) loop.
    3. RoT service serves the connections by rejecting them.
    This is a sanity check, a successful handshaking between client and server for requested connection represents check pass.
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_wait(): When MODE is zero, the function will return immediately with the current signal state, which can be zero if no signals are active. | [client/server]_test_psa_poll_behave() | 1. Client connects to a RoT service mutilpe times.
    2. RoT service executes psa_wait(PSA_POLL) in a while loop and checks the API's polling behaviour.
    3. Call psa_wait(PSA_POLL) when no request is made by client and checks the return value.
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| test_i003 | 1. The reverse handle for a connection is NULL until psa_set_rhandle() is used. psa_set_rhandle() can be used to associate some caller-provided private data with a specified client connection. And SPM must provide same rhandle for msg.rhandle with all subsequent messages delivered on this connection. On success the rhandle is retained by the implementation and provided in all future messages on that connection as part of the psa_msg_t structure.
    2. Setting the rhandle for a connection during disconnection has no observable effect. | [client/server]_test_psa_set_rhandle() | 1. Client connects to RoT service and RoT service checks the value of msg.rhanlde value duing PSA_IPC_CONNECT2. Client send call msg to RoT service and RoT service checks the value of msg.rhanlde value duing PSA_IPC_CONNECT
    3. ROT service sets the rhandle with known value.
    4. Client send call msg to RoT service and RoT service now compare the value of msg.rhanndle with previously set value
    5. ROT service sets the rhandle with known value other than previously set value
    6. Client send call msg to RoT service and RoT service now compare the value of msg.rhanndle with last set value
    7. The reverse handle for a connection is NULL until psa_set_rhandle() is used
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_call():The caller can optionally provide one or more buffers to receive a response (out_vec).
    2. psa_get(): The array in_size provides the size of each client input vector in bytes. The array out_size provides the size of each client output vector in bytes.
    3. psa_read(): parameter from the client input vector. Streams up to the next num_bytes bytes of client input vector invec_idx in the message identified by msg_handle to the Secure Partition buffer. Returns the number of bytes copied.
    4. psa_read(): If num_bytes is less than or equal to the available data in the input vector then num_bytes are copied to buffer, and the remaining data in the input vector can be read by subsequent calls to psa_read() with the same msg_handle and invec_idx.
    5. psa_read(): RoT Services can determine how much data is available to read from the message based on the in_size[] attribute of the psa_msg_t message returned from psa_get(). If an input vector has not been passed by the client then the corresponding in_size[] for that vector is zero.
    6. psa_read(): If num_bytes is greater than the remaining data in the input vector then the remaining input bytes are copied to buffer and the call returns the number of bytes copied. Any space after this in buffer is not modified. Subsequent calls of psa_read() or psa_skip() with the same message input vector will report that there is no more data in the vector.
    7. psa_skip(): Skip over part of a client input vector. Advances the current read offset by skipping up to num_bytes bytes for input vector invec_idx in the message identified by msg_handle. psa_skip(): When psa_skip returns, it returns with the number of bytes skipped
    8. psa_skip(): If There was no remaining data in this input vector, return zero
    9.psa_skip(): If num_bytes is greater than the remaining size of the input vector then the remaining size of the input vector is returned. Subsequent calls of psa_read() or psa_skip() with the same message input vector will report that there is no more data in the vector.
    | [client/server]_test_call_read_and_skip() | 1.Client connects to RoT service
    2.Client sends four input vectors to RoT service using psa_call
    3. RoT service checks following:
    - Reporting of input vectors size through msg.in_size
    - Input vectors content reading through psa_read
    -Inbound /Outbound offset reading
    -Inbound/Outbound offset skipping
    -Zero byte read and skip
    -out_len=0 check
    4. Client recieves the status of RoT service checks and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_call(): The caller can optionally provide one or more buffers to receive a response (out_vec). On return from psa_call() the len value will have been updated to indicate the number of bytes of data written to the buffer by the RoT Service.
    2. psa_write(): Appends num_bytes of data from buffer to the client output vector outvec_idx in the message identified by msg_handle. Sequential calls using the same msg_handle and outvec_idx will be concatenated in the output vector | [client/server]_test_call_and_write() | 1. Client connects to RoT service
    2. Client sends four output vectors to RoT service using psa_call
    3. RoT service checks following:
    - Reporting of output vectors size through msg.out_size
    - in_len=0 check
    - zero byte write
    - Out vector writes using psa_write
    - Vector write concatenation
    4. Client recieves the status of RoT service checks, cross check the content of out vectors and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. psa_call(): Any I/O vector of length zero is permitted and will be treated as an empty or non-existent vector by the framework. When less than four vectors are provided to psa_call() for either input or output, then the remaining vectors have zero length and the in_size and out_size elements for these vectors will be zero.A memory reference contains a start address and an associated length. A zero-length memory reference is one where the length is zero. The start address of a zero-length memory reference can safely take any value and must be ignored by the implementation.
    2. psa_call(): If in_len is zero then in_vec is ignored
    3. sa_call(): If out_len is zero then out_vec is ignored
    4. psa_get(): If an input and output vector has not been passed by the client then the corresponding in_size[] and out_size[] for that vector is zero. | [client/server]_test_zero_length_invec()[client/server]_test_zero_length_outvec() | Test zero lenth input vector:
    1. Client connects to RoT service
    2. Client sends three input and one outvec vectors to RoT service using psa_call - invec 0 as zero length vector, invec 1 as NULL and invec 2 and outvec 0 as non-zero length vector
    3. RoT service checks size of each vectors reported through msg.in_size and msg.out_size
    4. Client recieves the status of checks and closes the connection
    Test zero lenth output vector:
    1. Client connects to RoT service
    2. Client sends one input and three outvec vectorsto RoT service using psa_call - outvec 0 as zero length vector, outvec 0 as NULL and invec 0 and outvec 2 as non-zero length vector
    3. RoT service checks size of each vectors reported through msg.in_size and msg.out_size
    4. Client recieves the status of checks and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | -| | 1. When client provides an input and output vectors which are referencing to same memory location, a psa_read after psa_write to the same memory location can return original or modified value.
    2. When client provides an input and output vectors which are referencing to same memory location, a psa_write(s) to both memory vectors can return either the 1st or the 2nd value written. | [client/server]_test_overlapping_vectors | 1. Client provides one input and 2 output vectors which are pointing to same location.
    2. RoT service performs read after write operation on to outvec-0 and expects return value either modified one or the original
    3. RoT service performs write operation to outvec-1 and unblock the connection. The write performed is to mimic write after write operatio to the overlapping vector.
    4. Client check the value of outvec. The value should be either the value written by first psa_write or the second psa_write. | Mandatory | Yes | -| test_i004 | The call to psa_connect() is PROGRAMMER ERROR if RoT Service does not exist on platform | [client/server]_test_sid_does_not_exists() | Call psa_connect with SID which does not exist on a platform and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i005 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is STRICT and requested version is HIGHER than minimum version | [client/server]_test_strict_policy_higher_minor_version() | call psa_connect with SID whose Version policy is STRICT and requested minor version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i006 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is STRICT and requested version lower than minimum version | [client/server]_test_strict_policy_lower_minor_version() | call psa_connect with SID whose Version policy is STRICT and requested minor version is Lower than minimum version.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i007 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is RELAXED and requested version is bigger than minimum version | [client/server]_test_relax_policy_higher_minor_version() | call psa_connect with SID whose Version policy is RELAXED and requested minor version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i008 | 1. The call to psa_connect() is PROGRAMMER ERROR if service to non_secure_client is not available
    2. Manifest parameter - The non_secure_clients field contains a boolean to indicate if it is accessible to NSPE clients. RoT Services are always accessible to SPE clients. | [client/server]_test_secure_access_only_connection() | Call psa_connect with SID which allow secure only connection and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i009 | 1. The call to psa_connect() is PROGRAMMER ERROR if SID is not mentioned in dependencies field.
    2. Manifest parameter- dependencies (optional)
    If access between a Secure Partition (acting as client) and a RoT Service (acting as server) is not specified in the manifest, then the client is not permitted to connect to the RoT Service. | [client/server]_test_unextern_sid_connection() | Call psa_connect with SID which is not mentioned as external SID in manifest and expect PROGRAMMER ERROR behaviour. | Optional | Yes | -| test_i010 | It is not required for the minor_version or minor_policy attributes to be specified. If they are not specified in the manifest, the RoT Service will have default attributes of minor_version=1 and minor_policy="STRICT". In this case, the call to psa_connect() is PROGRAMMER ERROR if requested version higher than minimum version. | [client/server]_test_unspecified_policy_with_higher_minor_ver() | Call psa_connect with SID whose Version policy is not mentioned and requested minor version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i011 | It is not required for the minor_version or minor_policy attributes to be specified. If they are not specified in the manifest, the RoT Service will have default attributes of minor_version=1 and minor_policy="STRICT". In this case, the call to psa_connect() is PROGRAMMER ERROR if requested version lower than minimum version | [client/server]_test_unspecified_policy_with_lower_minor_ver() | Call psa_connect with SID whose Version policy is not mentioned and requested minor version is lower than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i012 | The call to psa_close() is PROGRAMMER ERROR if an invalid handle was provided that is not the null handle | [client/server]_test_psa_close_with_invalid_handle() | Call psa_close with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | -| test_i013 | The call to psa_get() is PROGRAMMER ERROR if signal has more than a single bit set | [client/server]_test_psa_get_with_more_than_one_signal() | Call psa_get with a signal who has more than a single bit set and expect PROGRAMMER ERROR behaviour. | Optional | Yes | -| test_i014 | After a RoT Service message is signaled, psa_get() function is used to retrieve the message details. Each message can only be retrieved once. | [client/server]_test_psa_get_called_twice() | Call psa_get with a valid signal back to back and expect PROGRAMMER ERROR behaviour. | Optional | Yes | -| test_i015 | The call to psa_get() is PROGRAMMER ERROR if signal does not correspond to a RoT Service | [client/server]_test_psa_get_with_non_rot_signal() | Call psa_get with DOORBELL signal and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i016 | The call to psa_get() is PROGRAMMER ERROR if The RoT Service signal is not currently asserted | [client/server]_test_psa_get_with_unasserted_signal() | Call psa_get with singal which is currently not asserted and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i017 | Each RoT Service listed creates a dependency from the client Partition to a server Partition. Within the resulting network of dependencies, there must be no circular dependencies between Secure Partitions. This would result in deadlock because the Service requests are always synchronous.For the same reason, a Secure Partition must not use a RoT Service that is defined within itself. Direct function calls must be used instead of IPC where there is a dependency between RoT Services within a single Secure Partition. | [client/server]_test_partition_calling_its_own_rot_service() | Partition calling its own ROT service using psa_connect and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i018 | The call to psa_set_rhandle() is PROGRAMMER ERROR if an invalid message handle was provided | [client/server]_test_psa_set_rhandle_with_invalid_handle() | Call psa_set_rhanlde with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call | Optional | Yes | -| test_i019 | The call to psa_set_rhandle() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_set_rhandle_with_null_handle() | Call psa_set_rhanlde with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i020 | If messgae type if is PSA_IPC_CONNECT then use of status values in psa_reply() other than PSA_SUCCESS, PSA_ERROR_CONNECTION_BUSY and PSA_ERROR_CONNECTION_REFUSED is a PROGRAMMER ERROR. | [client/server]_test_psa_reply_with_invalid_connect_status_code() | Call to psa_reply during PSA_IPC_CONNECT with status code other than PSA_SUCCESS and PSA_CONNECTION_REFUSED and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i021 | 1. psa_wait() returns the Secure Partition interrupt signals that have been asserted from the subset of signals indicated in the bitmask provided. (psa_wait API to recieve interrupt signal)
    2. psa_eoi():Informs the SPM that an interrupt has been handled (end of interrupt). This will re-enable the interrupt line.
    3.psa_eoi(): A signal remains active until it is processed by psa_eoi
    4. Manifest- irqs (optional, unique)This attribute is a list of IRQ lines which are assigned to the Secure Partition.A Secure Partition always has exclusive access to an assigned IRQ. Secure Partitions are not allowed to share IRQs with other Secure Partitions.Each IRQ specified must provide a signal field. This field contains a symbolic name for the signal, used by the SPM to indicate when the interrupt is asserted. Each IRQ line is declared as either of the following:¿ line_num: A valid IRQ number for the platform.¿ line_name: A named IRQ, represented by a string identifier. | | Generate interrupt for driver partition assigned irq number and checks that:
    - interrupt is routed to driver patition
    - psa_wait returns the required irq_signal value
    - end of interrupt using psa_eoi
    Test Limitation:
    1. Rules around sharing of irq lines can't be tested as specifiying it can result into build error.
    2. Test suite partition manifests are rely on only line_num for specifying irq line number as line_name is subject to resolved in Implementation defined manner. | Mandatory | Yes | -| test_i022 | The call to psa_reply() is PROGRAMMER ERROR if the message handle is invalid | [client/server]_test_psa_reply_with_invalid_handle() | Call psa_reply with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i023 | The call to psa_reply() is PROGRAMMER ERROR if the message handle is Null handle | [client/server]_test_psa_reply_with_null_handle() | Call psa_reply with a NULL HANDLE | Optional | Yes | -| test_i024 | The call to psa_call() is PROGRAMMER ERROR if an invalid handle was passed | [client/server]_test_psa_call_with_invalid_handle() | Call psa_call with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call.Perform this step from NSPE and SPE both. | Optional | Yes | -| test_i025 | The call to psa_call() is PROGRAMMER ERROR if an null handle was passed | [client/server]_test_psa_call_with_null_handle() | Call psa_call with a NULL HANDLE and expect PROGRAMMER ERROR behaviour for API call.
    Perform this step from NSPE and SPE both. | Optional | Yes | -| test_i026 | The call to psa_call() is PROGRAMMER ERROR if in_len + out_len > PSA_MAX_IOVEC | [client/server]_test_psa_call_with_iovec_more_than_max_limit() | Call psa_call with more than four IOVECs and expect PROGRAMMER ERROR behaviour for API call.
    Perform this step from NSPE and SPE both. | Optional | Yes | -| test_i027 | If the message type is PSA_IPC_CALL and the client has made an invalid request, then the RoT Service can request for the connection to be terminated by calling psa_reply() with return value PSA_ERROR_PROGRAMMER_ERROR. After this, the RoT Service will receive no further PSA_IPC_CALL messages on that connection. The SPM will deliver a PSA_IPC_DISCONNECT to the RoT Service to release any resources associated with that connection.
    If the SPM does not restart the system in response to the above PROGRAMMER ERROR, then termination of the connection has the following effects:
    - No further PSA_IPC_CALL messages will be received by the RoT Service for the connection.
    - The RoT Service will receive a PSA_IPC_DISCONNECT message for the connection to release resources and reset state associated with the connection.
    - The failing call to psa_call() will return PSA_ERROR_PROGRAMMER_ERROR.
    - Subsequent calls to psa_call() on the same connection will immediately return PSA_ERROR_PROGRAMMER_ERROR.
    - The client must call psa_close() to close the connection. | [client/server]_test_psa_drop_connection() | RoT service executes psa_reply with status code equal to PSA_ERROR_PROGRAMMER_ERROR during PSA_IPC_CALL.Client expects either PSA_ERROR_PROGRAMMER_ERROR as returned status code for psa_call or system to get paniced
    Perform above steps from NSPE and SPE both. | Optional | Yes | -| test_i028 | The call to psa_read() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_read_at_ipc_connect() | Call psa_read during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i029 | The call to psa_read() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_read_at_ipc_disconnect() | Call psa_read during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i030 | The call to psa_read() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_read_with_null_handle() | Call psa_read with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i031 | The call to psa_read() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_read_with_invalid_handle() | Calll psa_read with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i032 | The call to psa_read() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_read_with_invec_equal_to_max_iovec() | Call psa_read with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i033 | The call to psa_read() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_read_with_invec_greater_than_max_iovec() | Call psa_read with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i034 | The call to psa_skip() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_skip_at_ipc_connect() | Call psa_skip during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i035 | The call to psa_skip() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_skip_at_ipc_disconnect() | Call psa_skip during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i036 | The call to psa_skip() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_skip_with_null_handle() | Call psa_skipwith NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i037 | The call to psa_skip() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_skip_with_invalid_handle() | Calll psa_skip with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i038 | The call to psa_skip() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_skip_with_invec_equal_to_max_iovec() | Call psa_skip with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i039 | The call to psa_skip() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_skip_with_invec_greater_than_max_iovec() | Call psa_skip with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i040 | The call to psa_write() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_write_at_ipc_connect() | Call psa_write during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i041 | The call to psa_write() is PROGRAMMER ERROR if msg_handle does not refer to a PSA_IPC_CALL message | [client/server]_test_psa_write_at_ipc_disconnect() | Call psa_write during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i042 | The call to psa_write() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_write_with_null_handle() | Call psa_write with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i043 | The call to psa_write() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_write_with_invalid_handle() | Calll psa_write with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i044 | The call to psa_write() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_write_with_invec_equal_to_max_iovec() | Call psa_write with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i045 | The call to psa_write() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_write_with_invec_greater_than_max_iovec() | Call psa_write with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i046 | The call to psa_write() is PROGRAMMER ERROR if the call attempts to write data past the end of the client output vector | [client/server]_test_psa_write_with_size_overflow() | Call psa_write with a size input one byte bigger than allowed size and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i047 | The call to psa_get() is PROGRAMMER ERROR if The msg pointer provided is not a valid memory reference | [client/server]_test_psa_get_with_invalid_msg_pointer() | Call psa_get with invalid msg pointer and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid pointer is as below:
    if (ISOLATION_LEVEL > 1)
    // PSA RoT Pointer
    psa_get(msg_pointer = driver_mmio_base);
    else
    psa_get(msg_pointer = NULL);
    | Optional | Yes | -| test_i048 | The call to psa_call() is PROGRAMMER ERROR if address of in_vec is invalid for client | [client/server]_test_psa_call_with_invalid_invec_pointer | Call psa_call with invalid address for invec and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid invec pointer is as below:
    if caller == CALLER_NONSECURE
    // PSA RoT pointer
    invec_pointer = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invec_pointer = driver_mmio_base;
    else
    invec_pointer = NULL; | Optional | Yes | -| test_i049 | The call to psa_call() is PROGRAMMER ERROR if address of out_vec is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_pointer() | Call psa_call with invalid address for outvec and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid outvec pointer is as below:
    if caller == CALLER_NONSECURE
    // PSA RoT pointer
    outvec_pointer = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    outvec_pointer = driver_mmio_base;
    else
    outvec_pointer = NULL; | Optional | Yes | -| test_i050 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_base() | Call psa_call with invalid address for psa_invec.base and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid base is as below:
    if caller == CALLER_NONSECURE
    // PSA RoT pointer
    invalid_base = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invalid_base = driver_mmio_base;
    else
    invalid_base = NULL; | Optional | Yes | -| test_i051 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_base() | Call psa_call with invalid address for psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid base is as below:
    if caller == CALLER_NONSECURE
    // PSA RoT pointer
    invalid_base = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invalid_base = driver_mmio_base;
    else
    invalid_base = NULL; | Optional | Yes | -| test_i052 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base addr is valid but psa_invec.base+size address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_end_addr() | Call psa_call with valid address for psa_invec.base but (psa_invec.base + psa_invec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
    Selection of base and size are as below:
    if caller == CALLER_NONSECURE
    valid_base = nspe_mmio_region_base;
    invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

    else

    if (ISOLATION_LEVEL > 1)
    valid_base = server_mmio_region_base;
    invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
    | Optional | Yes | -| test_i053 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base addr is valid but psa_invec.base+sizeaddress is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_end_addr() | Call psa_call with valid address for psa_outvec.base but (psa_outvec.base + psa_outvec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
    Selection of base and size are as below:
    if caller == CALLER_NONSECURE
    valid_base = nspe_mmio_region_base;
    invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

    else

    if (ISOLATION_LEVEL > 1)
    valid_base = server_mmio_region_base;
    invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
    | Optional | Yes | -| test_i054 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base is not writable | [client/server]_test_psa_call_with_not_writable_outvec_base() | Call psa_call with not writable (code address) psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i055 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is invalid | [client/server]_test_psa_read_with_invalid_buffer_addr() | Call psa_read with invalid buffer addr and expect PROGRAMMER ERROR behaviour for API call.
    Selection of buffer address is as below:
    if (ISOLATION_LEVEL > 1)
    buffer = driver_mmio_region_base;
    else
    buffer = NULL;
    | Optional | Yes | -| test_i056 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is not writable | [client/server]_test_psa_read_with_not_writable_buffer_addr() | Call psa_read with not writable address (function address- code memory) and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i057 | The call to psa_write() is PROGRAMMER ERROR if the memory reference for buffer is invalid | [client/server]_test_psa_write_with_invalid_buffer_addr() | Call psa_write with invalid buffer addr and expect PROGRAMMER ERROR behaviour for API call.
    Selection of buffer address is as below:
    if (ISOLATION_LEVEL > 1)
    buffer = driver_mmio_region_base;
    else
    buffer = NULL;
    | Optional | Yes | -| test_i058 | 1. psa_notify() is used to asynchronously wake up another Secure Partition. The receiving partition uses psa_wait() to detect, or wait for, assertion of its PSA_DOORBELL signal. The value of partition_id must be greater than zero as the target of notification must be a Secure Partition.
    2. psa_clear() clears the PSA_DOORBELL signal.
    3. psa_clear(): The target Partition doorbell will remain asserted until it calls psa_clear(). | [client/server]_test_psa_doorbell_signal() | 1. Client connects to RoT service.
    2. RoT services executes asserts PSA_DOORBELL singal back to client after accepting the connection.
    3. Client checks the delivery of PSA_DOORBELL singal using psa_wait().
    4. Client clears the doorbell and closes the connection.
    5. RoT service receives the closing connection request.
    | Mandatory | Yes | -| test_i059 | The call to psa_notify() is PROGRAMMER ERROR if Partition ID does not correspond to a Secure Partition | [client/server]_test_psa_notify_with_neg_part_id() | Call psa_notify with negative partition id and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i060 | The call to psa_notify() is PROGRAMMER ERROR if Partition ID does not correspond to a Secure Partition | [client/server]_test_psa_notify_with_invalid_pos_part_id() | Call psa_notify with positive partition id which does not exist in the platform and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i061 | The call to psa_clear() is PROGRAMMER ERROR if The Secure Partition¿s doorbell signal is not currently asserted | [client/server]_test_psa_clear_at_unasserted_doorbell_sig() | Call psa_clear when doorbell signal is not asserted and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i062 | The call to psa_wait() is PROGRAMMER ERROR if signal_mask does not include any assigned signals. | [client/server_test_psa_wait_with_unassigned_signal() | Call psa_wait with signal mask that doesn't include any assigned signal and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | -| test_i063 | psa_wait() returns the Secure Partition interrupt signals that have been asserted from the subset of signals indicated in the bitmask provided. The mask must contain the set of signals the caller is interested in handling. Signals that are not in signal_mask should be ignored. | [client/server]_test_psa_wait_signal_mask() | 1. Select signal_mask = (SERVER_UNSPECIFED_MINOR_V_SIG | SERVER_RELAX_MINOR_VERSION_SIG);
    2. Server partition requests the client partition to make connection using sid=SERVER_SECURE_CONNECT_ONLY_SID. This connection request act as irritator to psa_wait(signal_mask) call and it is used to cover the rule - Signals that are not in signal_mask should be ignored by psa_wait.
    3. NSPE client connects to a server partition using SID whose signal are part of signal_mask
    4. Server partition executes psa_wait with necessary signal_mask. RoT service checks that returned signal value is subset of signals indicated in the signal_mask
    5. At the end, server partition completes the starved (irritator) connection request of SERVER_SECURE_CONNECT_ONLY_SID. | Mandatory | Yes | -| test_i064 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal is not an interrupt signal | driver_test_psa_eoi_with_non_intr_signal() | Call to psa_eoi with non-interrupt signal(PSA_DOORBELL) and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt line. | Optional | Yes | -| test_i065 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal is not currently asserted | driver_test_psa_eoi_with_unasserted_signal() | Call to psa_eoi with interrupt signal which is currently not asserted and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt line. | Optional | Yes | -| test_i066 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal indicates more than one signal | driver_test_psa_eoi_with_multiple_signals() | Call to psa_eoi with irq_signal provided with multiple signals and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt line. | Optional | Yes | -| test_i067 | A Secure Partition is guaranteed to be able to read and write its private heap regions.
    Manifest Parameter- heap_size. Properties: Optional.
    This attribute indicates the Secure Partition¿s heap size in bytes.The size value is represented either as a positive integer or as a hexadecimal string.If this field is specified in the manifest then the value must be greater than 0. If this field is not specified in the manifest then the SPM can assume the size is 0. | [client/server]_test_dynamic_mem_alloc_fn() | Test dynamic memory service functions-malloc(), free() and realloc behaviour defined in the specification if these APIs are available to secure partition. Otherwise skip the test.
    | Mandatory | Yes | -| test_i068 | Only Code is executable in secure partition. Writable region must not be executable. | client_test_instr_exec_from_writable_mem() | Execute set of instructions from writable memory and expect internal fault. | Optional | Yes | -| test_i069 | Only Private data is writable in secure partition. Code space must not be writable. | client_test_write_to_code_space() | Write to code space from secure partition and expect internal fault | Optional | Yes | -| test_i070 | Only Private data is writable in secure partition. Constant data space must not be writable. | client_test_write_to_const_data() | Write to constant data space and expect internal fault | Optional | Yes | -| test_i071 | The following memory manipulation functions from must be implemented with standard C99 definitions:
    memcmp()
    memcpy()
    memmove()
    memset() | client_test_mem_manipulation_fn() | 1 .Set buffer content using memset(). Check that content is set as expected.
    2. Copy one buffer to another buffer using memcpy() and check that buffer is copied correctly.
    3. Compare two buffers two times, once with equal data and once with unequal data.
    2. Copy one buffer to another buffer using memmove() and check that buffer is copied correctly.
    | Mandatory | Yes | -| test_i072 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT variables- Global variable. | [client/server]_test_nspe_read_app_rot_variable()
    [client/server]_test_nspe_write_app_rot_variable() | Access Application RoT global variable address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i073 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT execution stack. | [client/server]_test_nspe_read_app_rot_stack()
    [client/server]_test_nspe_write_app_rot_stack() | Access Application RoT local variable(stack region) address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i074 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT heap memory. | [client/server]_test_nspe_read_app_rot_heap()
    [client/server]_test_nspe_write_app_rot_heap() | Access Application RoT heap memory address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i075 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT MMIO region. | [client/server]_test_nspe_read_app_rot_mmio()
    [client/server]_test_nspe_write_app_rot_mmio() | Access Application RoT MMIO address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i076 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT variables- Global variable. | client_test_nspe_read_psa_rot_variable()
    driver_test_isolation_psa_rot_data_rd()
    client_test_nspe_write_psa_rot_variable()
    driver_test_isolation_psa_rot_data_wr() | Access PSA RoT global variable address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i077 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT execution stack. | client_test_nspe_read_psa_rot_stack()
    driver_test_isolation_psa_rot_stack_rd()
    client_test_nspe_write_psa_stack_variable()
    driver_test_isolation_psa_rot_stack_wr() | Access PSA RoT local variable(stack region) address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i078 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT heap memory. | client_test_nspe_read_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_rd()
    client_test_nspe_write_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_wr() | Access PSA RoT partition heap memory address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i079 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT MMIO region. | client_test_nspe_read_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_rd()
    client_test_nspe_write_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_wr() | Access PSA RoT partition MMIO address from NSPE and expect internal fault behavior | Optional | Yes | -| test_i080 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT variables- Global variable. | client_test_app_rot_read_psa_rot_variable()
    driver_test_isolation_psa_rot_data_rd()
    client_test_app_rot_write_psa_rot_variable()
    driver_test_isolation_psa_rot_data_wr() | Access PSA RoT global variable address from Application RoT and expect internal fault behavior | Optional | Yes | -| test_i081 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT execution stack. | client_test_app_rot_read_psa_rot_stack()
    driver_test_isolation_psa_rot_stack_rd()
    client_test_app_rot_write_psa_stack_variable()
    driver_test_isolation_psa_rot_stack_wr() | Access PSA RoT local variable(stack region) address from Application RoT and expect internal fault behavior | Optional | Yes | -| test_i082 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT heap memory. | client_test_app_rot_read_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_rd()
    client_test_app_rot_write_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_wr() | Access PSA RoT partition heap memory address from Application RoT and expect internal fault behavior | Optional | Yes | -| test_i083 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT MMIO region. | client_test_app_rot_read_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_rd()
    client_test_app_rot_write_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_wr() | Access PSA RoT partition MMIO address from Application RoT and expect internal fault behavior | Optional | Yes | -| test_i084 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition variables- Global variable. | [client/server]_test_sp_read_other_sp_variable()
    [client/server]_test_sp_write_other_sp_variable() | Access Application RoT global variable address from other RoT and expect internal fault behavior | Optional | Yes | -| test_i085 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition execution stack. | [client/server]_test_sp_read_other_sp_stack()
    [client/server]_test_sp_write_other_sp_stack() | Access Application RoT local variable(stack region) address from other Application RoT and expect internal fault behavior | Optional | Yes | -| test_i086 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition heap memory. | [client/server]_test_sp_read_other_sp_heap()
    [client/server]_test_sp_write_other_sp_heap() | Access Application RoT partition heap memory address from other Application RoT and expect internal fault behavior | Optional | Yes | -| test_i087 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition MMIO region. | [client/server]_test_sp_read_other_sp_mmio()
    [client/server]_test_sp_write_other_sp_mmio() | Access Application RoT partition MMIO address from other Application RoT and expect internal fault behavior | Optional | Yes | -| test_l088 | psa_rot_lifecycle_state() function retrieves the current PSA RoT lifecycle state. | server_test_psa_rot_lifecycle_state() | Call psa_rot_lifecycle_state() from secure side and check that return value is within the allowed range. | Mandatory | Yes | -| | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B. From B access below asserts of A:
    - Variables
    - Execution stacks
    - Allocation heap
    - Memory-mapped I/O regions

    Where, A & B combination are: A=SPM & B=NSPE | N/A | Future release of test suite will be updated to cover this rule. | N/A | No | -| | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B. From B access below asserts of A:
    - Variables
    - Execution stacks
    - Allocation heap
    - Memory-mapped I/O regions

    Where, A & B combination are: A=SPM & B=Application RoT partition | N/A | Future release of test suite will be updated to cover this rule. | N/A | No | -| | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B. From B access below asserts of A:
    - Variables
    - Execution stacks
    - Allocation heap
    - Memory-mapped I/O regions

    Where, A & B combination are: A=SPM & B=PSA RoT partition | N/A | Future release of test suite will be updated to cover this rule. | N/A | No | -| NO_EXPLICIT_TEST | A Secure Partition is guaranteed to be able to read and write its private stack.
    Manifest Parameter- stack_size (required)
    Partition's stack size in bytes. The size value must be represented either as a positive integer or as a hexadecimal string. | N/A | No explicit test written to cover this rule. PSA IPC tests manifests are provided with tests partition required stack_size. A successful execution of tests partition code without stack access related faults, indirectly verify this field. | N/A | Yes | -| NO_EXPLICIT_TEST | mmio_regions (optional, unique):
    List of memory-mapped I/O region objects which the Secure Partition needs access to. A Secure Partition always has exclusive access to an MMIO region. Secure Partitions are not permitted to share MMIO regions with other Secure Partitions.
    An MMIO region can be defined either as a:
    numbered_region
    named_region
    A numbered region consists of a base address and a size. The size must be represented either as a positive integer or as a hexadecimal string. The base address must be represented as a hexadecimal string.
    MMIO regions must not overlap.
    An MMIO region must include a permission attribute. The following permissions are available:
    READ-ONLY
    READ-WRITE | N/A | Comments:
    1. PSA IPC tests device driver partition manifests are provided with these fields. A successful compilation and run of device driver partition code indirectly verify this field.
    2. Rules around sharing of MMIO regions is covered as part of isolation tests.
    3. Rules around overlapping of MMIO regions can't be tested as specifying that into manifest results into compilation fail.
    4. Test suite partition manifests are rely on numbered_region only as named_region is subject to resolved in Implementation defined manner. | N/A | Yes | -| NO_EXPLICIT_TEST | Manifest Parameter- type (required)
    Whether the Partition is a part of the PSA Root of Trust Services or is part of the Application Root of Trust Services.Type must be assigned one of the following values:- APPLICATION-ROT- PSA-ROT | N/A | PSA IPC tests partition files are provided with these fields. Access permission behaviour related to these fields will be verified as part of tests covering isolation level rules. | N/A | Yes | -| NO_EXPLICIT_TEST | Manifest Parameter - description (optional)
    This attribute contains a human-readable description and comments for the Secure Partition. | N/A | Test suite manifests are provided with these field with adhere to manifest rules. Manifest build tool parser must parse this field without any compilation fail. | N/A | Yes | -| NO_EXPLICIT_TEST | Manifest Parameter -entry_point (required, unique)
    The Partition entry point in the form of an C function symbol. A single entry point must be provided and it must have the following signature:
    void entry_point(void); | N/A | No explicit test written to cover this rule. Test suite manifests are provided with tests partition entry_point. A successful launch and run of tests partition code indirectly verify this field. | N/A | Yes | -| NO_EXPLICIT_TEST | The SPM must eventually deliver all signals and IPC messages. | N/A | No explicit test written to cover this rule. However all PSA IPC tests are written with the expectation that the SPM delivers all requested signals and IPC message in a timely fashion. Failure to provide this will result in simulation time out.
    This rule is unbounded and cannot have full coverage. It is good to that things are delivered in a timely manner, however failure will not break compliance. | N/A | Yes | -| NO_EXPLICIT_TEST | A Secure Partition is guaranteed to be able to execute and read its own code regions and read its own read-only data regions. | N/A | No explicit test written to cover this rule. This is a minimum requirement to able to launch and run secure partition. Failing to provide this, will not be able to run IPC test suite. | N/A | Yes | -| NOT_COVERED | psa_get returns PSA_ERROR_DOES_NOT_EXIST if the SPM cannot deliver a message to the Secure Partition following the assertion of the RoT Service signal. | N/A | This scenario cannot be simulated as test can't generate stimulus where psa_get() API returns PSA_ERROR_DOES_NOT_EXIST. However every instances of psa_get() API call in test suite checks the API return value and re-waits for signal delivery if return value is PSA_ERROR_DOES_NOT_EXIST. | N/A | No | -| NOT_COVERED | The call to psa_call is PROGRAMMER ERROR if the connection is already handling a request. | N/A | This rule is not verified beacuse of following reasons:
    - There is no common infrastructure to test this rule as this needs two OS specific tasks where one task interrupted during execution of psa_call or psa_close and second task scheduled to execute psa_call using same handle.
    - It is hard to write test stimulus where this rule is always hit as it is highly dependent of platform software scheduling policy.
    | N/A | No | -| NOT_COVERED | The call to psa_close is PROGRAMMER ERROR if the connection is already handling a request | N/A | This rule is not verified beacuse of following reasons:
    - There is no common infrastructure to test this rule as this needs two OS specific tasks where one task interrupted during execution of psa_call or psa_close and second task scheduled to execute psa_close using same handle.
    - It is hard to write test stimulus where this rule is always hit as it is highly dependent of platform software scheduling policy.
    | N/A | No | -| NOT_COVERED | Manifest Parameter - priority (required)
    Partitions must be assigned one of the following priority groups:¿ HIGH¿ NORMAL¿ LOWLOW is the lowest priority. Priority is ignored by SPMs that do not implement any priority-based scheduling. | N/A | Use of these fields are highly dependent on type of SPM scheduling policy, hence can't test the behavious of this field. And test suite partition manifests are provided with priority field equal to LOW. | N/A | No | -| NOT_COVERED | Secure Partition IDs must be fixed across updates | N/A | Checking for Partition IDs across SPM updates is out of scope for PSA IPC tests. | N/A | No | +| Tests | Scenario Rules | Client- Server Test Functions Pair | Test Algorithm/Comments/Test Limitation | Rule optional for API compliance? | Is scenario implemented in this release? | +|-------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|------------------------------------------| +| test_i001 | 1. psa_framework_version(): Retrieve the version of the PSA Framework API that is implemented. Manifest field- psa_framework_version: Version of the PSA Firmware Framework specification this manifest conforms to. | [client/server]_test_psa_framework_version() | Call the psa_framework_version() API from both SPE and NSPE side and compare the return value with PSA_FRAMEWORK_VERSION. | Mandatory | Yes | +| | 1. psa_version() returns PSA_VERSION_NONE when the RoT Service is not implemented, or the caller is not permitted to access the service OR return > 0 with the version of the implemented RoT Service. | [client/server]_test_psa_version() | 1. Pass un-implemented SID and expects PSA_VERSION_NONE as return value.
    2. Call to API from NSPE with a SID who doesn't provide service to NSPE and expects PSA_VERSION_NONE as return value.
    3. Pass SID who is implemented and provides service to NSPE and expect version number(>0) of given RoT service as return value.
    Perform all above checks from SPE too. | Mandatory | Yes | +| test_i002 | 1. psa_connect() returns the PSA_ERROR_CONNECTION_BUSY when RoT Service cannot make the connection at the moment (transient error).
    2. psa_connect() returns the PSA_ERROR_CONNECTION_REFUSED when RoT Service has refused the connection
    3. psa_wait() returns the Secure Partition interrupt signals that have been asserted from a subset of signals provided by the caller. Returns > 0 when at least one signal is asserted
    4. psa_get():Get the message which corresponds to a given RoT Service signal and remove the message from the queue.
    5. psa_get() returns PSA_SUCCESS when *msg will contain the delivered message.
    6. The type member of the psa_msg_t object should return PSA_IPC_CONNECT for a new connection request following a psa_get() call to psa_connect() and msg.handle must be positive.
    7. psa_reply(): If the message type is PSA_IPC_CONNECT then server can reject the connection by sending PSA_ERROR_CONNECTION_REFUSED (permanent error) or PSA_ERROR_CONNECTION_BUSY (transient error) status code.
    | [client/server]_test_connection_busy_and_reject() | 1. Client tries to connect to ROT service using psa_connect()
    2. RoT service checks the delivery of PSA_IPC_CONNECT message type and positive handle value returned by psa_get()
    3. RoT service rejects the connection by executing psa_reply(handle,PSA_ERROR_CONNECTION_BUSY)
    4. Client tries to connect to same ROT service using psa_connect() again
    5. This time, RoT service rejects the connection by executing psa_reply(handle,PSA_ERROR_CONNECTION_REFUSED)
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_connect(): When SID is implemented and client is permitted to access the service, SPM delivers a PSA_IPC_CONNECT message from the client to the Secure Partition that implements the RoT Service and positive handle is returned to client.
    2. psa_get():Get the message which corresponds to a given RoT Service signal and remove the message from the queue.
    3. psa_get() returns PSA_SUCCESS when *msg will contain the delivered message
    4. psa_get():The type member of the psa_msg_t object should return PSA_IPC_CONNECT for a new connection request following a psa_get() call to psa_connect() and msg.handle must be positive.
    5. psa_get(): The type member of the psa_msg_t object should return PSA_IPC_DISCONNECT for a new connection request following a psa_get() call to psa_close() and msg.handle must be positive.
    6. psa_reply(): If the message type is PSA_IPC_CONNECT then server can accept the connection by sending PSA_SUCCESS status code. If the message type is PSA_IPC_DISCONNECT then the status code is ignored.
    7. psa_close(): Closes a connection to a RoT Service. Sends the PSA_IPC_DISCONNECT message to the RoT Service. This function will have no effect if called with the null handle.
    | [client/server]_test_accept_and_close_connect() | 1.Client tries to connect to ROT service
    2. RoT service checks the delivery of PSA_IPC_CONNECT message type and positive handle value return by psa_get()
    3. RoT service accepts the connection by executing psa_reply(.., PSA_CONNECTION_ACCEPTED).
    4. Client calls the psa_close with PSA_NULL_HANDLE and later it closes the connection using psa_close() with actual handle value
    5. RoT service checks the delivery of PSA_IPC_DISCONNECT message type, checks handle value eqaul to NULL returned by psa_get() and completes the PSA_IPC_DISCONNECT by executing psa_reply() .
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | +| | Following are allowed version condition to psa_connect():
    1. Version policy is not mentioned and requested version is 1 which is default minimum version
    2. Version policy is STRICT and requested version equals minimum version
    3. Version policy is relaxed and requested version is smaller than the minimum version
    4. Version policy is relaxed and requested version is euqal to the minimum version
    | [client/server]_test_connect_with_allowed_version_policy() | Client tries connecting ROT service of following properties and expects connection to establish:
    1. Version policy is not mentioned and requested version is 1 which is default minimum version
    2. Version policy is STRICT and requested version equals minimum version
    3. Version policy is relaxed and requested version is smaller than the minimum version
    4. Version policy is relaxed and requested version is equal to the minimum version
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_call(): The valid psa_call makes SPM to send type value(>=) to msg.type of RoT service partition and the successful call should return >=0 handle value.
    2. psa_call() receives return value >= 0 for RoT-specific return code
    3. psa_call() receive return value < 0 for RoT-specific error code
    4. psa_reply(): If the message type is request message, all status codes other than PSA_ERROR_PROGRAMMER_ERROR must be reported to the client. | [client/server]_test_psa_call_with_allowed_status_code() | 1. Client connects to RoT service
    2. Client sends message using psa_call()
    3. RoT service checks the delivery of request message type and positive handle value return by psa_get()
    4. RoT service ends the call using psa_reply(status_code)
    5. Client checks the return value of psa_call() and Client closes the connectionRepeat (1) to (5) for different status code, SUCCESS, +ve, -ve..
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_call(): The valid psa_call makes SPM to send type value(>=) to msg.type of RoT service partition
    | [client/server]_test_psa_call_with_allowed_type_values() | 1. Client connects to RoT service
    2. Client sends message using psa_call() with different allowed type values one after another
    3. RoT service checks the delivery of different request message type values.
    Perform all above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. A msg.client_id that has a positive value indicates that the client is in the SPE and this the Secure Partition ID of the client. A negative client_id indicates that the client is in the NSPE.
    2. Client_id is valid during connection message, request message and disconnect message.
    3. Manifest Parameter- name (required, unique)
    A Partition must have an alphanumeric name for source code to directly refer to a specific Partition. The format of the name must follow the rules of a C macro. | [client/server]_test_identity() | - Check the value returned by msg.client_id during various message types. For NSPE connection, client_id should be <0 and for SPE, it should be >0.
    Perform all above steps from NSPE and SPE both.
    - Access the Partition ID of client partition and compare the value with expected ID value. | Mandatory | Yes | +| | 1. psa_connect() will return the PSA_ERROR_CONNECTION_REFUSED OR PSA_ERROR_CONNECTION_BUSY when the SPM has reached the limit of concurrent connections | [client/server]_test_spm_concurrent_connect_limit() | Execute psa_connect() API in a loop until it returns PSA_CONNECTION_REFUSED or PSA_CONNECTION_BUSY to indicate end of concurrent connections limit.
    Perform above step from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_wait(): When MODE(PSA_BLOCK) is one, the function will block the caller until one of the requested signals is asserted.
    2. psa_wait(): Callers must set RES to zero, implementations must ignore the value of RES.
    | [client/server]_test_psa_block_behave() | 1. Client connects to a RoT service mutilpe times.
    2. RoT service psa_wait(PSA_BLOCK|(Non-zero value for timeout[30:0])) API is executed without while(1) loop.
    3. RoT service serves the connections by rejecting them.
    This is a sanity check, a successful handshaking between client and server for requested connection represents check pass.
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_wait(): When MODE is zero, the function will return immediately with the current signal state, which can be zero if no signals are active. | [client/server]_test_psa_poll_behave() | 1. Client connects to a RoT service mutilpe times.
    2. RoT service executes psa_wait(PSA_POLL) in a while loop and checks the API's polling behaviour.
    3. Call psa_wait(PSA_POLL) when no request is made by client and checks the return value.
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| test_i003 | 1. The reverse handle for a connection is NULL until psa_set_rhandle() is used. psa_set_rhandle() can be used to associate some caller-provided private data with a specified client connection. And SPM must provide same rhandle for msg.rhandle with all subsequent messages delivered on this connection. On success the rhandle is retained by the implementation and provided in all future messages on that connection as part of the psa_msg_t structure.
    2. Setting the rhandle for a connection during disconnection has no observable effect. | [client/server]_test_psa_set_rhandle() | 1. Client connects to RoT service and RoT service checks the value of msg.rhanlde value duing PSA_IPC_CONNECT2. Client send call msg to RoT service and RoT service checks the value of msg.rhanlde value duing PSA_IPC_CONNECT
    3. ROT service sets the rhandle with known value.
    4. Client send call msg to RoT service and RoT service now compare the value of msg.rhanndle with previously set value
    5. ROT service sets the rhandle with known value other than previously set value
    6. Client send call msg to RoT service and RoT service now compare the value of msg.rhanndle with last set value
    7. The reverse handle for a connection is NULL until psa_set_rhandle() is used
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_call():The caller can optionally provide one or more buffers to receive a response (out_vec).
    2. psa_get(): The array in_size provides the size of each client input vector in bytes. The array out_size provides the size of each client output vector in bytes.
    3. psa_read(): parameter from the client input vector. Streams up to the next num_bytes bytes of client input vector invec_idx in the message identified by msg_handle to the Secure Partition buffer. Returns the number of bytes copied.
    4. psa_read(): If num_bytes is less than or equal to the available data in the input vector then num_bytes are copied to buffer, and the remaining data in the input vector can be read by subsequent calls to psa_read() with the same msg_handle and invec_idx.
    5. psa_read(): RoT Services can determine how much data is available to read from the message based on the in_size[] attribute of the psa_msg_t message returned from psa_get(). If an input vector has not been passed by the client then the corresponding in_size[] for that vector is zero.
    6. psa_read(): If num_bytes is greater than the remaining data in the input vector then the remaining input bytes are copied to buffer and the call returns the number of bytes copied. Any space after this in buffer is not modified. Subsequent calls of psa_read() or psa_skip() with the same message input vector will report that there is no more data in the vector.
    7. psa_skip(): Skip over part of a client input vector. Advances the current read offset by skipping up to num_bytes bytes for input vector invec_idx in the message identified by msg_handle. psa_skip(): When psa_skip returns, it returns with the number of bytes skipped
    8. psa_skip(): If There was no remaining data in this input vector, return zero
    9.psa_skip(): If num_bytes is greater than the remaining size of the input vector then the remaining size of the input vector is returned. Subsequent calls of psa_read() or psa_skip() with the same message input vector will report that there is no more data in the vector.
    | [client/server]_test_call_read_and_skip() | 1.Client connects to RoT service
    2.Client sends four input vectors to RoT service using psa_call
    3. RoT service checks following:
    - Reporting of input vectors size through msg.in_size
    - Input vectors content reading through psa_read
    -Inbound /Outbound offset reading
    -Inbound/Outbound offset skipping
    -Zero byte read and skip
    -out_len=0 check
    4. Client recieves the status of RoT service checks and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_call(): The caller can optionally provide one or more buffers to receive a response (out_vec). On return from psa_call() the len value will have been updated to indicate the number of bytes of data written to the buffer by the RoT Service.
    2. psa_write(): Appends num_bytes of data from buffer to the client output vector outvec_idx in the message identified by msg_handle. Sequential calls using the same msg_handle and outvec_idx will be concatenated in the output vector | [client/server]_test_call_and_write() | 1. Client connects to RoT service
    2. Client sends four output vectors to RoT service using psa_call
    3. RoT service checks following:
    - Reporting of output vectors size through msg.out_size
    - in_len=0 check
    - zero byte write
    - Out vector writes using psa_write
    - Vector write concatenation
    4. Client recieves the status of RoT service checks, cross check the content of out vectors and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. psa_call(): Any I/O vector of length zero is permitted and will be treated as an empty or non-existent vector by the framework. When less than four vectors are provided to psa_call() for either input or output, then the remaining vectors have zero length and the in_size and out_size elements for these vectors will be zero.A memory reference contains a start address and an associated length. A zero-length memory reference is one where the length is zero. The start address of a zero-length memory reference can safely take any value and must be ignored by the implementation.
    2. psa_call(): If in_len is zero then in_vec is ignored
    3. sa_call(): If out_len is zero then out_vec is ignored
    4. psa_get(): If an input and output vector has not been passed by the client then the corresponding in_size[] and out_size[] for that vector is zero. | [client/server]_test_zero_length_invec()[client/server]_test_zero_length_outvec() | Test zero lenth input vector:
    1. Client connects to RoT service
    2. Client sends three input and one outvec vectors to RoT service using psa_call - invec 0 as zero length vector, invec 1 as NULL and invec 2 and outvec 0 as non-zero length vector
    3. RoT service checks size of each vectors reported through msg.in_size and msg.out_size
    4. Client recieves the status of checks and closes the connection
    Test zero lenth output vector:
    1. Client connects to RoT service
    2. Client sends one input and three outvec vectorsto RoT service using psa_call - outvec 0 as zero length vector, outvec 0 as NULL and invec 0 and outvec 2 as non-zero length vector
    3. RoT service checks size of each vectors reported through msg.in_size and msg.out_size
    4. Client recieves the status of checks and closes the connection
    Perform above steps from NSPE and SPE both. | Mandatory | Yes | +| | 1. When client provides an input and output vectors which are referencing to same memory location, a psa_read after psa_write to the same memory location can return original or modified value.
    2. When client provides an input and output vectors which are referencing to same memory location, a psa_write(s) to both memory vectors can return either the 1st or the 2nd value written. | [client/server]_test_overlapping_vectors | 1. Client provides one input and 2 output vectors which are pointing to same location.
    2. RoT service performs read after write operation on to outvec-0 and expects return value either modified one or the original
    3. RoT service performs write operation to outvec-1 and unblock the connection. The write performed is to mimic write after write operatio to the overlapping vector.
    4. Client check the value of outvec. The value should be either the value written by first psa_write or the second psa_write. | Mandatory | Yes | +| test_i004 | The call to psa_connect() is PROGRAMMER ERROR if RoT Service does not exist on platform | [client/server]_test_sid_does_not_exists() | Call psa_connect with SID which does not exist on a platform and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i005 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is STRICT and requested version is HIGHER than minimum version | [client/server]_test_strict_policy_higher_version() | Call psa_connect with SID whose version policy is STRICT and requested version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i006 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is STRICT and requested version lower than minimum version | [client/server]_test_strict_policy_lower_version() | Call psa_connect with SID whose version policy is STRICT and requested version is Lower than minimum version.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i007 | The call to psa_connect() is PROGRAMMER ERROR if Version policy is RELAXED and requested version is bigger than minimum version | [client/server]_test_relax_policy_higher_version() | Call psa_connect with SID whose version policy is RELAXED and requested version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i008 | 1. The call to psa_connect() is PROGRAMMER ERROR if service to non_secure_client is not available
    2. Manifest parameter - The non_secure_clients field contains a boolean to indicate if it is accessible to NSPE clients. RoT Services are always accessible to SPE clients. | [client/server]_test_secure_access_only_connection() | Call psa_connect with SID which allow secure only connection and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i009 | 1. The call to psa_connect() is PROGRAMMER ERROR if SID is not mentioned in dependencies field.
    2. Manifest parameter- dependencies (optional)
    If access between a Secure Partition (acting as client) and a RoT Service (acting as server) is not specified in the manifest, then the client is not permitted to connect to the RoT Service. | [client/server]_test_unspecified_dependent_sid() | Call psa_connect with SID which is not mentioned in dependencies list in manifest and expect PROGRAMMER ERROR behaviour. | Optional | Yes | +| test_i010 | It is not required for the version or version_policy attributes to be specified. If they are not specified in the manifest, the RoT Service will have default attributes of version=1 and version_policy="STRICT". In this case, the call to psa_connect() is PROGRAMMER ERROR if requested version higher than minimum version. | [client/server]_test_unspecified_policy_with_higher_version() | Call psa_connect with SID whose version policy is not mentioned in the manifest and requested SID version is HIGHER than minimum version and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i011 | 1. It is not required for the version or version_policy attributes to be specified. If they are not specified in the manifest, the RoT Service will have default attributes of version=1 and version_policy="STRICT"". In this case, the call to psa_connect() is PROGRAMMER ERROR if requested version lower than minimum version
    | | | | | +| 2. RoT Service version must be non-zero positive integer.." | [client/server]_test_unspecified_policy_with_lower_version() | Call psa_connect with SID whose Version policy is not mentioned in the manifest and requested SID version is lower(0) than minimum version(1) and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | | +| test_i012 | The call to psa_close() is PROGRAMMER ERROR if an invalid handle was provided that is not the null handle | [client/server]_test_psa_close_with_invalid_handle() | Call psa_close with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour.
    Perform above step from NSPE and SPE both. | Optional | Yes | +| test_i013 | The call to psa_get() is PROGRAMMER ERROR if signal has more than a single bit set | [client/server]_test_psa_get_with_more_than_one_signal() | Call psa_get with a signal who has more than a single bit set and expect PROGRAMMER ERROR behaviour. | Optional | Yes | +| test_i014 | After a RoT Service message is signaled, psa_get() function is used to retrieve the message details. Each message can only be retrieved once. | [client/server]_test_psa_get_called_twice() | Call psa_get with a valid signal back to back and expect PROGRAMMER ERROR behaviour. | Optional | Yes | +| test_i015 | The call to psa_get() is PROGRAMMER ERROR if signal does not correspond to a RoT Service | [client/server]_test_psa_get_with_non_rot_signal() | Call psa_get with DOORBELL signal and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i016 | The call to psa_get() is PROGRAMMER ERROR if The RoT Service signal is not currently asserted | [client/server]_test_psa_get_with_unasserted_signal() | Call psa_get with singal which is currently not asserted and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i017 | Each RoT Service listed creates a dependency from the client Partition to a server Partition. Within the resulting network of dependencies, there must be no circular dependencies between Secure Partitions. This would result in deadlock because the Service requests are always synchronous.For the same reason, a Secure Partition must not use a RoT Service that is defined within itself. Direct function calls must be used instead of IPC where there is a dependency between RoT Services within a single Secure Partition. | [client/server]_test_partition_calling_its_own_rot_service() | Partition calling its own ROT service using psa_connect and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i018 | The call to psa_set_rhandle() is PROGRAMMER ERROR if an invalid message handle was provided | [client/server]_test_psa_set_rhandle_with_invalid_handle() | Call psa_set_rhanlde with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call | Optional | Yes | +| test_i019 | The call to psa_set_rhandle() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_set_rhandle_with_null_handle() | Call psa_set_rhanlde with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i020 | If messgae type if is PSA_IPC_CONNECT then use of status values in psa_reply() other than PSA_SUCCESS, PSA_ERROR_CONNECTION_BUSY and PSA_ERROR_CONNECTION_REFUSED is a PROGRAMMER ERROR. | [client/server]_test_psa_reply_with_invalid_connect_status_code() | Call to psa_reply during PSA_IPC_CONNECT with status code other than PSA_SUCCESS and PSA_CONNECTION_REFUSED and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i021 | 1. psa_wait() returns the Secure Partition interrupt signals that have been asserted from the subset of signals indicated in the bitmask provided. (psa_wait API to recieve interrupt signal)
    2. psa_eoi():Informs the SPM that an interrupt has been handled (end of interrupt). This will re-enable the interrupt line.
    3.psa_eoi(): A signal remains active until it is processed by psa_eoi
    3. Manifest- irqs (optional, unique)
    This attribute is a list of IRQ lines which are assigned to the Secure Partition.A Secure Partition always has exclusive access to an assigned IRQ. Secure Partitions are not allowed to share IRQs with other Secure Partitions.
    Each IRQ specified must provide a signal field. This field contains a symbolic name for the signal, used by the SPM to indicate when the interrupt is asserted.
    Each IRQ source is declared using the source field. This is a string which identifies the interrupt source in an IMPLEMENTATION DEFINED manner. | | Generate interrupt for driver partition assigned irq source and checks that:
    - interrupt is routed to driver patition
    - psa_wait returns the required irq_signal value
    - end of interrupt using psa_eoi
    Test Limitation: Rules around sharing of irq lines can't be tested as specifiying it can result into build error. | Mandatory | Yes | +| test_i022 | The call to psa_reply() is PROGRAMMER ERROR if the message handle is invalid | [client/server]_test_psa_reply_with_invalid_handle() | Call psa_reply with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i023 | The call to psa_reply() is PROGRAMMER ERROR if the message handle is null handle | [client/server]_test_psa_reply_with_null_handle() | Call psa_reply with a NULL HANDLE | Optional | Yes | +| test_i024 | The call to psa_call() is PROGRAMMER ERROR if an invalid handle was passed | [client/server]_test_psa_call_with_invalid_handle() | Call psa_call with an INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call.Perform this step from NSPE and SPE both. | Optional | Yes | +| test_i025 | The call to psa_call() is PROGRAMMER ERROR if an null handle was passed | [client/server]_test_psa_call_with_null_handle() | Call psa_call with a NULL HANDLE and expect PROGRAMMER ERROR behaviour for API call.
    Perform this step from NSPE and SPE both. | Optional | Yes | +| test_i026 | The call to psa_call() is PROGRAMMER ERROR if in_len + out_len > PSA_MAX_IOVEC | [client/server]_test_psa_call_with_iovec_more_than_max_limit() | Call psa_call with more than four IOVECs and expect PROGRAMMER ERROR behaviour for API call.
    Perform this step from NSPE and SPE both. | Optional | Yes | +| test_i027 | If the message type is request message and the client has made an invalid request, then the RoT Service can request for the connection to be terminated by calling psa_reply() with return value PSA_ERROR_PROGRAMMER_ERROR. After this, the RoT Service will receive no further request messages on that connection. The SPM will deliver a PSA_IPC_DISCONNECT to the RoT Service to release any resources associated with that connection.
    If the SPM does not restart the system in response to the above PROGRAMMER ERROR, then termination of the connection has the following effects:
    - No further request messages will be received by the RoT Service for the connection.
    - The RoT Service will receive a PSA_IPC_DISCONNECT message for the connection to release resources and reset state associated with the connection.
    - The failing call to psa_call() will return PSA_ERROR_PROGRAMMER_ERROR.
    - Subsequent calls to psa_call() on the same connection will immediately return PSA_ERROR_PROGRAMMER_ERROR.
    - The client must call psa_close() to close the connection. | [client/server]_test_psa_drop_connection() | RoT service executes psa_reply with status code equal to PSA_ERROR_PROGRAMMER_ERROR during request message.Client expects either PSA_ERROR_PROGRAMMER_ERROR as returned status code for psa_call or system to get paniced
    Perform above steps from NSPE and SPE both. | Optional | Yes | +| test_i028 | The call to psa_read() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_read_at_ipc_connect() | Call psa_read during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i029 | The call to psa_read() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_read_at_ipc_disconnect() | Call psa_read during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i030 | The call to psa_read() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_read_with_null_handle() | Call psa_read with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i031 | The call to psa_read() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_read_with_invalid_handle() | Calll psa_read with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i032 | The call to psa_read() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_read_with_invec_equal_to_max_iovec() | Call psa_read with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i033 | The call to psa_read() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_read_with_invec_greater_than_max_iovec() | Call psa_read with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i034 | The call to psa_skip() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_skip_at_ipc_connect() | Call psa_skip during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i035 | The call to psa_skip() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_skip_at_ipc_disconnect() | Call psa_skip during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i036 | The call to psa_skip() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_skip_with_null_handle() | Call psa_skipwith NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i037 | The call to psa_skip() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_skip_with_invalid_handle() | Calll psa_skip with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i038 | The call to psa_skip() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_skip_with_invec_equal_to_max_iovec() | Call psa_skip with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i039 | The call to psa_skip() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_skip_with_invec_greater_than_max_iovec() | Call psa_skip with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i040 | The call to psa_write() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_write_at_ipc_connect() | Call psa_write during PSA_IPC_CONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i041 | The call to psa_write() is PROGRAMMER ERROR if msg_handle does not refer to a request message | [client/server]_test_psa_write_at_ipc_disconnect() | Call psa_write during PSA_IPC_DISCONNECT and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i042 | The call to psa_write() is PROGRAMMER ERROR if Null handle was passed | [client/server]_test_psa_write_with_null_handle() | Call psa_write with NULL handle and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i043 | The call to psa_write() is PROGRAMMER ERROR if Invalid handle was passed | [client/server]_test_psa_write_with_invalid_handle() | Calll psa_write with INVALID_HANDLE which is not NULL and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i044 | The call to psa_write() is PROGRAMMER ERROR if invec_idx is equal to PSA_MAX_IOVEC | [client/server]_test_psa_write_with_invec_equal_to_max_iovec() | Call psa_write with invec_idx=PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i045 | The call to psa_write() is PROGRAMMER ERROR if invec_idx is greater than PSA_MAX_IOVEC | [client/server]_test_psa_write_with_invec_greater_than_max_iovec() | Call psa_write with invec_idx>PSA_MAX_IOVEC and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i046 | The call to psa_write() is PROGRAMMER ERROR if the call attempts to write data past the end of the client output vector | [client/server]_test_psa_write_with_size_overflow() | Call psa_write with a size input one byte bigger than allowed size and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i047 | The call to psa_get() is PROGRAMMER ERROR if The msg pointer provided is not a valid memory reference | [client/server]_test_psa_get_with_invalid_msg_pointer() | Call psa_get with invalid msg pointer and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid pointer is as below:
    if (ISOLATION_LEVEL > 1)
    // PSA RoT Pointer
    psa_get(msg_pointer = driver_mmio_base);
    else
    psa_get(msg_pointer = NULL);
    | Optional | Yes | +| test_i048 | The call to psa_call() is PROGRAMMER ERROR if address of in_vec is invalid for client | [client/server]_test_psa_call_with_invalid_invec_pointer | Call psa_call with invalid address for invec and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid invec pointer is as below:
    if caller == NONSECURE
    // PSA RoT pointer
    invec_pointer = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invec_pointer = driver_mmio_base;
    else
    invec_pointer = NULL; | Optional | Yes | +| test_i049 | The call to psa_call() is PROGRAMMER ERROR if address of out_vec is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_pointer() | Call psa_call with invalid address for outvec and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid outvec pointer is as below:
    if caller == NONSECURE
    // PSA RoT pointer
    outvec_pointer = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    outvec_pointer = driver_mmio_base;
    else
    outvec_pointer = NULL; | Optional | Yes | +| test_i050 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_base() | Call psa_call with invalid address for psa_invec.base and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid base is as below:
    if caller == NONSECURE
    // PSA RoT pointer
    invalid_base = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invalid_base = driver_mmio_base;
    else
    invalid_base = NULL; | Optional | Yes | +| test_i051 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base address is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_base() | Call psa_call with invalid address for psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call.
    Selection of invalid base is as below:
    if caller == NONSECURE
    // PSA RoT pointer
    invalid_base = driver_mmio_base;

    else

    if (ISOLATION_LEVEL > 1)
    invalid_base = driver_mmio_base;
    else
    invalid_base = NULL; | Optional | Yes | +| test_i052 | The call to psa_call() is PROGRAMMER ERROR if psa_invec.base addr is valid but psa_invec.base+size address is invalid for client | [client/server]_test_psa_call_with_invalid_invec_end_addr() | Call psa_call with valid address for psa_invec.base but (psa_invec.base + psa_invec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
    Selection of base and size are as below:
    if caller == NONSECURE
    valid_base = nspe_mmio_region_base;
    invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

    else

    if (ISOLATION_LEVEL > 1)
    valid_base = server_mmio_region_base;
    invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
    | Optional | Yes | +| test_i053 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base addr is valid but psa_invec.base+sizeaddress is invalid for client | [client/server]_test_psa_call_with_invalid_outvec_end_addr() | Call psa_call with valid address for psa_outvec.base but (psa_outvec.base + psa_outvec.size) pointing to invalid address and expect PROGRAMMER ERROR behaviour for API call.
    Selection of base and size are as below:
    if caller == NONSECURE
    valid_base = nspe_mmio_region_base;
    invalid_size = (driver_mmio_region_base - nspe_mmio_region_base + 1);

    else

    if (ISOLATION_LEVEL > 1)
    valid_base = server_mmio_region_base;
    invalid_size = (driver_mmio_region_base - server_mmio_region_base + 1);
    | Optional | Yes | +| test_i054 | The call to psa_call() is PROGRAMMER ERROR if psa_outvec.base is not writable | [client/server]_test_psa_call_with_not_writable_outvec_base() | Call psa_call with not writable (code address) psa_outvec.base and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i055 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is invalid | [client/server]_test_psa_read_with_invalid_buffer_addr() | Call psa_read with invalid buffer addr and expect PROGRAMMER ERROR behaviour for API call.
    Selection of buffer address is as below:
    if (ISOLATION_LEVEL > 1)
    buffer = driver_mmio_region_base;
    else
    buffer = NULL;
    | Optional | Yes | +| test_i056 | The call to psa_read() is PROGRAMMER ERROR if the memory reference for buffer is not writable | [client/server]_test_psa_read_with_not_writable_buffer_addr() | Call psa_read with not writable address (function address- code memory) and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i057 | The call to psa_write() is PROGRAMMER ERROR if the memory reference for buffer is invalid | [client/server]_test_psa_write_with_invalid_buffer_addr() | Call psa_write with invalid buffer addr and expect PROGRAMMER ERROR behaviour for API call.
    Selection of buffer address is as below:
    if (ISOLATION_LEVEL > 1)
    buffer = driver_mmio_region_base;
    else
    buffer = NULL;
    | Optional | Yes | +| test_i058 | 1. psa_notify() is used to asynchronously wake up another Secure Partition. The receiving partition uses psa_wait() to detect, or wait for, assertion of its PSA_DOORBELL signal. The value of partition_id must be greater than zero as the target of notification must be a Secure Partition.
    2. psa_clear() clears the PSA_DOORBELL signal.
    3. psa_clear(): The target Partition doorbell will remain asserted until it calls psa_clear(). | [client/server]_test_psa_doorbell_signal() | 1. Client connects to RoT service.
    2. RoT services executes asserts PSA_DOORBELL singal back to client after accepting the connection.
    3. Client checks the delivery of PSA_DOORBELL singal using psa_wait().
    4. Client clears the doorbell and closes the connection.
    5. RoT service receives the closing connection request.
    | Mandatory | Yes | +| test_i059 | The call to psa_notify() is PROGRAMMER ERROR if Partition ID does not correspond to a Secure Partition | [client/server]_test_psa_notify_with_neg_part_id() | Call psa_notify with negative partition id and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i060 | The call to psa_notify() is PROGRAMMER ERROR if Partition ID does not correspond to a Secure Partition | [client/server]_test_psa_notify_with_invalid_pos_part_id() | Call psa_notify with positive partition id which does not exist in the platform and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i061 | The call to psa_clear() is PROGRAMMER ERROR if The Secure Partition¿s doorbell signal is not currently asserted | [client/server]_test_psa_clear_at_unasserted_doorbell_sig() | Call psa_clear when doorbell signal is not asserted and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i062 | The call to psa_wait() is PROGRAMMER ERROR if signal_mask does not include any assigned signals. | [client/server_test_psa_wait_with_unassigned_signal() | Call psa_wait with signal mask that doesn't include any assigned signal and expect PROGRAMMER ERROR behaviour for API call. | Optional | Yes | +| test_i063 | psa_wait() returns the Secure Partition interrupt signals that have been asserted from the subset of signals indicated in the bitmask provided. The mask must contain the set of signals the caller is interested in handling. Signals that are not in signal_mask should be ignored. | [client/server]_test_psa_wait_signal_mask() | 1. Select signal_mask = (SERVER_UNSPECIFED_VERSION_SIG | SERVER_RELAX_VERSION_SIG);
    2. Server partition requests the client partition to make connection using sid=SERVER_SECURE_CONNECT_ONLY_SID. This connection request act as irritator to psa_wait(signal_mask) call and it is used to cover the rule - Signals that are not in signal_mask should be ignored by psa_wait.
    3. NSPE client connects to a server partition using SID whose signal are part of signal_mask
    4. Server partition executes psa_wait with necessary signal_mask. RoT service checks that returned signal value is subset of signals indicated in the signal_mask
    5. At the end, server partition completes the starved (irritator) connection request of SERVER_SECURE_CONNECT_ONLY_SID. | Mandatory | Yes | +| test_i064 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal is not an interrupt signal | driver_test_psa_eoi_with_non_intr_signal() | Call to psa_eoi with non-interrupt signal(PSA_DOORBELL) and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt source. | Optional | Yes | +| test_i065 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal is not currently asserted | driver_test_psa_eoi_with_unasserted_signal() | Call to psa_eoi with interrupt signal which is currently not asserted and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt source. | Optional | Yes | +| test_i066 | The call to psa_eoi() is PROGRAMMER ERROR if irq_signal indicates more than one signal | driver_test_psa_eoi_with_multiple_signals() | Call to psa_eoi with irq_signal provided with multiple signals and expect PROGRAMMER ERROR behaviour for API call.
    Note: The interrupt related test check is captured in driver_partition.c as this is the only partition in test suite that holds the interrupt source. | Optional | Yes | +| test_i067 | A Secure Partition is guaranteed to be able to read and write its private heap regions.
    Manifest Parameter- heap_size. Properties: Optional.
    This attribute indicates the Secure Partition¿s heap size in bytes.The size value is represented either as a positive integer or as a hexadecimal string.If this field is specified in the manifest then the value must be greater than 0. If this field is not specified in the manifest then the SPM can assume the size is 0. | [client/server]_test_dynamic_mem_alloc_fn() | Test dynamic memory service functions-malloc(), free() and realloc behaviour defined in the specification if these APIs are available to secure partition. Otherwise skip the test.
    | Mandatory | Yes | +| test_i068 | Only Code is executable in secure partition. Writable region must not be executable. | client_test_instr_exec_from_writable_mem() | Execute set of instructions from writable memory and expect internal fault. | Optional | Yes | +| test_i069 | Only Private data is writable in secure partition. Code space must not be writable. | client_test_write_to_code_space() | Write to code space from secure partition and expect internal fault | Optional | Yes | +| test_i070 | Only Private data is writable in secure partition. Constant data space must not be writable. | client_test_write_to_const_data() | Write to constant data space and expect internal fault | Optional | Yes | +| test_i071 | The following memory manipulation functions from must be implemented with standard C99 definitions:
    memcmp()
    memcpy()
    memmove()
    memset() | client_test_mem_manipulation_fn() | 1 .Set buffer content using memset(). Check that content is set as expected.
    2. Copy one buffer to another buffer using memcpy() and check that buffer is copied correctly.
    3. Compare two buffers two times, once with equal data and once with unequal data.
    2. Copy one buffer to another buffer using memmove() and check that buffer is copied correctly.
    | Mandatory | Yes | +| test_i072 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT variables- Global variable. | [client/server]_test_nspe_read_app_rot_variable()
    [client/server]_test_nspe_write_app_rot_variable() | Access Application RoT global variable address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i073 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT execution stack. | [client/server]_test_nspe_read_app_rot_stack()
    [client/server]_test_nspe_write_app_rot_stack() | Access Application RoT local variable(stack region) address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i074 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT heap memory. | [client/server]_test_nspe_read_app_rot_heap()
    [client/server]_test_nspe_write_app_rot_heap() | Access Application RoT heap memory address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i075 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT, B is NSPE and memory asset to be protected is Application RoT MMIO region. | [client/server]_test_nspe_read_app_rot_mmio()
    [client/server]_test_nspe_write_app_rot_mmio() | Access Application RoT MMIO address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i076 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT variables- Global variable. | client_test_nspe_read_psa_rot_variable()
    driver_test_isolation_psa_rot_data_rd()
    client_test_nspe_write_psa_rot_variable()
    driver_test_isolation_psa_rot_data_wr() | Access PSA RoT global variable address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i077 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT execution stack. | client_test_nspe_read_psa_rot_stack()
    driver_test_isolation_psa_rot_stack_rd()
    client_test_nspe_write_psa_stack_variable()
    driver_test_isolation_psa_rot_stack_wr() | Access PSA RoT local variable(stack region) address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i078 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT heap memory. | client_test_nspe_read_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_rd()
    client_test_nspe_write_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_wr() | Access PSA RoT partition heap memory address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i079 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is NSPE and memory asset to be protected is PSA RoT MMIO region. | client_test_nspe_read_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_rd()
    client_test_nspe_write_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_wr() | Access PSA RoT partition MMIO address from NSPE and expect internal fault behavior | Optional | Yes | +| test_i080 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT variables- Global variable. | client_test_app_rot_read_psa_rot_variable()
    driver_test_isolation_psa_rot_data_rd()
    client_test_app_rot_write_psa_rot_variable()
    driver_test_isolation_psa_rot_data_wr() | Access PSA RoT global variable address from Application RoT and expect internal fault behavior | Optional | Yes | +| test_i081 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT execution stack. | client_test_app_rot_read_psa_rot_stack()
    driver_test_isolation_psa_rot_stack_rd()
    client_test_app_rot_write_psa_stack_variable()
    driver_test_isolation_psa_rot_stack_wr() | Access PSA RoT local variable(stack region) address from Application RoT and expect internal fault behavior | Optional | Yes | +| test_i082 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT heap memory. | client_test_app_rot_read_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_rd()
    client_test_app_rot_write_psa_rot_heap()
    driver_test_isolation_psa_rot_heap_wr() | Access PSA RoT partition heap memory address from Application RoT and expect internal fault behavior | Optional | Yes | +| test_i083 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is PSA RoT, B is Application RoT and memory asset to be protected is PSA RoT MMIO region. | client_test_app_rot_read_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_rd()
    client_test_app_rot_write_psa_rot_mmio()
    driver_test_isolation_psa_rot_mmio_wr() | Access PSA RoT partition MMIO address from Application RoT and expect internal fault behavior | Optional | Yes | +| test_i084 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition variables- Global variable. | [client/server]_test_sp_read_other_sp_variable()
    [client/server]_test_sp_write_other_sp_variable() | Access Application RoT global variable address from other RoT and expect internal fault behavior | Optional | Yes | +| test_i085 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition execution stack. | [client/server]_test_sp_read_other_sp_stack()
    [client/server]_test_sp_write_other_sp_stack() | Access Application RoT local variable(stack region) address from other Application RoT and expect internal fault behavior | Optional | Yes | +| test_i086 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition heap memory. | [client/server]_test_sp_read_other_sp_heap()
    [client/server]_test_sp_write_other_sp_heap() | Access Application RoT partition heap memory address from other Application RoT and expect internal fault behavior | Optional | Yes | +| test_i087 | If domain A needs protection from domain B, then Private data in domain A cannot be accessed by domain B.
    Where A is Application RoT Partition, B is other Application RoT partition and memory asset to be protected is A- Application RoT partition MMIO region. | [client/server]_test_sp_read_other_sp_mmio()
    [client/server]_test_sp_write_other_sp_mmio() | Access Application RoT partition MMIO address from other Application RoT and expect internal fault behavior | Optional | Optional | +| test_l088 | psa_rot_lifecycle_state() function retrieves the current PSA RoT lifecycle state. | server_test_psa_rot_lifecycle_state() | Call psa_rot_lifecycle_state() from secure side and check that return value is within the allowed range. | Mandatory | Yes | +| test_i089 | psa_panic() will terminate execution within the calling Secure Partition and will not return. | server_test_psa_panic() | Call psa_panic() from the secure partition and expect PROGRAMMER ERROR behaviour for API call. | Optional | Optional | +| test_i090 | The call to psa_call() is a PROGRAMMER ERROR if type < 0 | [client/server]_test_psa_call_with_neg_type | Call to psa_call with negative type value and expect PROGRAMMER ERROR behaviour for API call. | Optional | Optional | +| NO_EXPLICIT_TEST | A Secure Partition is guaranteed to be able to read and write its private stack.
    Manifest Parameter- stack_size (required)
    Partition's stack size in bytes. The size value must be represented either as a positive integer or as a hexadecimal string. | N/A | No explicit test written to cover this rule. PSA IPC tests manifests are provided with tests partition required stack_size. A successful execution of tests partition code without stack access related faults, indirectly verify this field. | N/A | Yes | +| NO_EXPLICIT_TEST | mmio_regions (optional, unique):
    List of memory-mapped I/O region objects which the Secure Partition needs access to. A Secure Partition always has exclusive access to an MMIO region. Secure Partitions are not permitted to share MMIO regions with other Secure Partitions.
    An MMIO region can be defined either as a:
    numbered_region
    named_region
    A numbered region consists of a base address and a size. The size must be represented either as a positive integer or as a hexadecimal string. The base address must be represented as a hexadecimal string.
    MMIO regions must not overlap.
    An MMIO region must include a permission attribute. The following permissions are available:
    READ-ONLY
    READ-WRITE | N/A | Comments:
    1. PSA IPC tests device driver partition manifests are provided with these fields. A successful compilation and run of device driver partition code indirectly verify this field.
    2. Rules around sharing of MMIO regions is covered as part of isolation tests.
    3. Rules around overlapping of MMIO regions can't be tested as specifying that into manifest results into compilation fail.
    4. Test suite partition manifests are rely on numbered_region only as named_region is subject to resolved in Implementation defined manner. | N/A | Yes | +| NO_EXPLICIT_TEST | Manifest Parameter- type (required)
    Whether the Partition is a part of the PSA Root of Trust Services or is part of the Application Root of Trust Services.Type must be assigned one of the following values:- APPLICATION-ROT- PSA-ROT | N/A | PSA IPC tests partition files are provided with these fields. Access permission behaviour related to these fields will be verified as part of tests covering isolation level rules. | N/A | Yes | +| NO_EXPLICIT_TEST | Manifest Parameter - description (optional)
    This attribute contains a human-readable description and comments for the Secure Partition. | N/A | Test suite manifests are provided with these field with adhere to manifest rules. Manifest build tool parser must parse this field without any compilation fail. | N/A | Yes | +| NO_EXPLICIT_TEST | Manifest Parameter -entry_point (required, unique)
    The Partition entry point in the form of an C function symbol. A single entry point must be provided and it must have the following signature:
    void entry_point(void); | N/A | No explicit test written to cover this rule. Test suite manifests are provided with tests partition entry_point. A successful launch and run of tests partition code indirectly verify this field. | N/A | Yes | +| NO_EXPLICIT_TEST | The SPM must eventually deliver all signals and IPC messages. | N/A | No explicit test written to cover this rule. However all PSA IPC tests are written with the expectation that the SPM delivers all requested signals and IPC message in a timely fashion. Failure to provide this will result in simulation time out.
    This rule is unbounded and cannot have full coverage. It is good to that things are delivered in a timely manner, however failure will not break compliance. | N/A | Yes | +| NO_EXPLICIT_TEST | A Secure Partition is guaranteed to be able to execute and read its own code regions and read its own read-only data regions. | N/A | No explicit test written to cover this rule. This is a minimum requirement to able to launch and run secure partition. Failing to provide this, will not be able to run IPC test suite. | N/A | Yes | +| NOT_COVERED | psa_get returns PSA_ERROR_DOES_NOT_EXIST if the SPM cannot deliver a message to the Secure Partition following the assertion of the RoT Service signal. | N/A | This scenario cannot be simulated as test can't generate stimulus where psa_get() API returns PSA_ERROR_DOES_NOT_EXIST. However every instances of psa_get() API call in test suite checks the API return value and re-waits for signal delivery if return value is PSA_ERROR_DOES_NOT_EXIST. | N/A | No | +| NOT_COVERED | The call to psa_call is PROGRAMMER ERROR if the connection is already handling a request. | N/A | This rule is not verified beacuse of following reasons:
    - There is no common infrastructure to test this rule as this needs two OS specific tasks where one task interrupted during execution of psa_call or psa_close and second task scheduled to execute psa_call using same handle.
    - It is hard to write test stimulus where this rule is always hit as it is highly dependent of platform software scheduling policy.
    | N/A | No | +| NOT_COVERED | The call to psa_close is PROGRAMMER ERROR if the connection is already handling a request | N/A | This rule is not verified beacuse of following reasons:
    - There is no common infrastructure to test this rule as this needs two OS specific tasks where one task interrupted during execution of psa_call or psa_close and second task scheduled to execute psa_close using same handle.
    - It is hard to write test stimulus where this rule is always hit as it is highly dependent of platform software scheduling policy.
    | N/A | No | +| NOT_COVERED | Manifest Parameter - priority (required)
    Partitions must be assigned one of the following priority groups:¿ HIGH¿ NORMAL¿ LOWLOW is the lowest priority. Priority is ignored by SPMs that do not implement any priority-based scheduling. | N/A | Use of these fields are highly dependent on type of SPM scheduling policy, hence can't test the behavious of this field. And test suite partition manifests are provided with priority field equal to LOW. | N/A | No | +| NOT_COVERED | Secure Partition IDs must be fixed across updates | N/A | Checking for Partition IDs across SPM updates is out of scope for PSA IPC tests. | N/A | No | ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index 63ffb63b..deb09a83 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -58,7 +58,7 @@ To build the test suite for your target platform, perform the following steps.
    Options information:
    - -G"" : "Unix Makefiles" to generate Makefiles for Linux and Cygwin. "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    -- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
    +- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521** and **tgt_dev_apis_tfm_musca_a** platforms.
    - -DTOOLCHAIN= Compiler toolchain to be used for test suite compilation. Supported values are GNUARM (GNU Arm Embedded), ARMCLANG (ARM Compiler 6.x) and HOST_GCC. Default is GNUARM.
    - -DCPU_ARCH= is the Arm Architecture version name for which the tests should be compiled. Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. Default is empty. This option is unused when TOOLCHAIN type is HOST_GCC.
    - -DSUITE= is the suite name which is the same as the suite name available in **ff/** directory.
    @@ -113,6 +113,10 @@ The following steps describe the execution flow before the test execution:
    print(PRINT_TEST, "[Check 2] psa_version\n", 0); - /*Return PSA_VERSION_NONE when the RoT Service is not implemented, or the caller is not permitted - to access the service. Return minor version of the implemented and allowed RoT Service */ + /* + * Return PSA_VERSION_NONE when the RoT Service is not implemented, + * or the caller is not permitted to access the service. + * Return version of the implemented and allowed RoT Service + */ + /* psa_version() check for un-implemented SID */ if (psa->version(INVALID_SID) != PSA_VERSION_NONE) { @@ -72,7 +76,7 @@ int32_t client_test_psa_version(caller_security_t caller) /* psa_version() check for implemented SID but allows only secure connection */ version = psa->version(SERVER_SECURE_CONNECT_ONLY_SID); if (((caller == CALLER_NONSECURE) && (version != PSA_VERSION_NONE)) - || ((caller == CALLER_SECURE) && (version != 2))) + || ((caller == CALLER_SECURE) && (version != SERVER_SECURE_CONNECT_ONLY_VERSION))) { status = VAL_STATUS_VERSION_API_FAILED; val->print(PRINT_ERROR, @@ -84,8 +88,8 @@ int32_t client_test_psa_version(caller_security_t caller) return status; } - /* psa_version() returns minor version of the implemented and allowed RoT Service */ - if (psa->version(SERVER_TEST_DISPATCHER_SID) != 1) + /* psa_version() returns version of the implemented and allowed RoT Service */ + if (psa->version(SERVER_TEST_DISPATCHER_SID) != SERVER_TEST_DISPATCHER_VERSION) { status = VAL_STATUS_VERSION_API_FAILED; } diff --git a/api-tests/ff/ipc/test_i001/test_i001.h b/api-tests/ff/ipc/test_i001/test_i001.h index 1defb81b..191bb17c 100644 --- a/api-tests/ff/ipc/test_i001/test_i001.h +++ b/api-tests/ff/ipc/test_i001/test_i001.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i001) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i001) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i001/test_supp_i001.c b/api-tests/ff/ipc/test_i001/test_supp_i001.c index 2a33cfaa..45ffd93b 100644 --- a/api-tests/ff/ipc/test_i001/test_supp_i001.c +++ b/api-tests/ff/ipc/test_i001/test_supp_i001.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i002/test_i002.c b/api-tests/ff/ipc/test_i002/test_i002.c index 8bd48588..84630112 100644 --- a/api-tests/ff/ipc/test_i002/test_i002.c +++ b/api-tests/ff/ipc/test_i002/test_i002.c @@ -29,8 +29,9 @@ client_test_t test_i002_client_tests_list[] = { NULL, client_test_connection_busy_and_reject, client_test_accept_and_close_connect, - client_test_connect_with_allowed_minor_version_policy, + client_test_connect_with_allowed_version_policy, client_test_psa_call_with_allowed_status_code, + client_test_psa_call_with_allowed_type_values, client_test_identity, client_test_spm_concurrent_connect_limit, client_test_psa_block_behave, @@ -45,7 +46,7 @@ int32_t client_test_connection_busy_and_reject(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test busy and reject connect type\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* * The RoT Service can't make connection at this moment. It sends @@ -58,7 +59,7 @@ int32_t client_test_connection_busy_and_reject(caller_security_t caller) return VAL_STATUS_INVALID_HANDLE; } - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* The RoT Service rejected the client because of an application-specific case * Expect PSA_ERROR_CONNECTION_REFUSED as return @@ -79,9 +80,9 @@ int32_t client_test_accept_and_close_connect(caller_security_t caller) val->print(PRINT_TEST, "[Check 2] Accept and close connection\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* RoT service accepts the connection. Expecting positive handle */ - if (handle < 0) + if (!PSA_HANDLE_IS_VALID(handle)) { return VAL_STATUS_INVALID_HANDLE; } @@ -94,19 +95,22 @@ int32_t client_test_accept_and_close_connect(caller_security_t caller) return VAL_STATUS_SUCCESS; } -int32_t client_test_connect_with_allowed_minor_version_policy(caller_security_t caller) +int32_t client_test_connect_with_allowed_version_policy(caller_security_t caller) { psa_handle_t handle = 0; uint32_t i = 0; - uint32_t sid[] = {SERVER_UNSPECIFED_MINOR_V_SID, - SERVER_STRICT_MINOR_VERSION_SID, - SERVER_RELAX_MINOR_VERSION_SID, - SERVER_RELAX_MINOR_VERSION_SID}; - uint32_t minor_v[] = {1, 2, 1, 2}; - - val->print(PRINT_TEST, "[Check 3] Test psa_connect with allowed minor version policy\n", 0); - - /* Connect RoT service with following minor version numbers and expect positive handle for + uint32_t sid[] = {SERVER_UNSPECIFED_VERSION_SID, + SERVER_STRICT_VERSION_SID, + SERVER_RELAX_VERSION_SID, + SERVER_RELAX_VERSION_SID}; + uint32_t version[] = {SERVER_UNSPECIFED_VERSION_VERSION, + SERVER_STRICT_VERSION_VERSION, + SERVER_RELAX_VERSION_VERSION - 1, + SERVER_RELAX_VERSION_VERSION}; + + val->print(PRINT_TEST, "[Check 3] Test psa_connect with allowed version policy\n", 0); + + /* Connect RoT service with following version numbers and expect positive handle for * each connection: * Case 1. Version policy is not mentioned and requested version is 1 (default minimum version) * Case 2. Version policy is STRICT and requested version equals minimum version @@ -116,11 +120,11 @@ int32_t client_test_connect_with_allowed_minor_version_policy(caller_security_t for (i = 0; i < (sizeof(sid)/sizeof(sid[0])); i++) { - handle = psa->connect(sid[i], minor_v[i]); - if (handle < 0) + handle = psa->connect(sid[i], version[i]); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, - "\tpsa_connect failed for minor_v policy. Iteration No=%d\n", i); + "\tpsa_connect failed for version policy. Iteration No=%d\n", i); return VAL_STATUS_INVALID_HANDLE; } @@ -136,13 +140,13 @@ int32_t psa_call_with_null_msg(int32_t expected_status) psa_handle_t handle = 0; psa_status_t status_of_call; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Compare status code returned with expected status code */ if (status_of_call != expected_status) { @@ -175,6 +179,35 @@ int32_t client_test_psa_call_with_allowed_status_code(caller_security_t caller) return status; } +int32_t client_test_psa_call_with_allowed_type_values(caller_security_t caller) +{ + int32_t status = VAL_STATUS_SUCCESS; + psa_handle_t handle = 0; + int32_t type[] = {PSA_IPC_CALL, 1, 2, INT32_MAX}; + uint32_t i = 0; + + val->print(PRINT_TEST, "[Check 5] Test psa_call with different type values\n", 0); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) + { + return VAL_STATUS_INVALID_HANDLE; + } + + for (i = 0; i < (sizeof(type)/sizeof(type[0])); i++) + { + /* Send type = type[i] */ + if (psa->call(handle, type[i], NULL, 0, NULL, 0) != PSA_SUCCESS) + { + val->print(PRINT_ERROR, "\tCheck failed for type=%d\n", type[i]); + status = VAL_STATUS_CALL_FAILED; + break; + } + } + + psa->close(handle); + return status; +} + int32_t client_test_identity(caller_security_t caller) { int32_t status = VAL_STATUS_SUCCESS; @@ -182,10 +215,10 @@ int32_t client_test_identity(caller_security_t caller) psa_status_t status_of_call; int id_at_connect = 0, id_at_call = 0; - val->print(PRINT_TEST, "[Check 5] Test client_id\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + val->print(PRINT_TEST, "[Check 6] Test client_id\n", 0); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { return(VAL_STATUS_INVALID_HANDLE); } @@ -193,7 +226,7 @@ int32_t client_test_identity(caller_security_t caller) psa_outvec resp[2] = {{&id_at_connect, sizeof(id_at_call)}, {&id_at_call, sizeof(id_at_call)}}; - status_of_call = psa->call(handle, NULL, 0, resp, 2); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, resp, 2); if (status_of_call != PSA_SUCCESS) @@ -223,14 +256,14 @@ int32_t client_test_spm_concurrent_connect_limit(caller_security_t caller) psa_handle_t handle[CONNECT_LIMIT] = {0}; int i= 0, signture = 0; - val->print(PRINT_TEST, "[Check 6] Test connect limit\n", 0); + val->print(PRINT_TEST, "[Check 7] Test connect limit\n", 0); /* Execute psa_connect in a loop until it returns * PSA_ERROR_CONNECTION_REFUSED OR PSA_ERROR_CONNECTION_BUSY */ while (i < CONNECT_LIMIT) { - handle[i] = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle[i] = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Compare handle value */ if ((handle[i] == PSA_ERROR_CONNECTION_REFUSED) || (handle[i] == PSA_ERROR_CONNECTION_BUSY)) { @@ -266,7 +299,7 @@ int32_t client_test_psa_wait(void) for (i = 0; i < CONNECT_NUM; i++) { - handle[i] = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle[i] = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); if (handle[i] != PSA_ERROR_CONNECTION_REFUSED) { return VAL_STATUS_INVALID_HANDLE; @@ -278,12 +311,12 @@ int32_t client_test_psa_wait(void) int32_t client_test_psa_block_behave(caller_security_t caller) { - val->print(PRINT_TEST, "[Check 7] Test PSA_BLOCK\n", 0); + val->print(PRINT_TEST, "[Check 8] Test PSA_BLOCK\n", 0); return (client_test_psa_wait()); } int32_t client_test_psa_poll_behave(caller_security_t caller) { - val->print(PRINT_TEST, "[Check 8] Test PSA_POLL\n", 0); + val->print(PRINT_TEST, "[Check 9] Test PSA_POLL\n", 0); return (client_test_psa_wait()); } diff --git a/api-tests/ff/ipc/test_i002/test_i002.h b/api-tests/ff/ipc/test_i002/test_i002.h index bce864cd..9f36dca7 100644 --- a/api-tests/ff/ipc/test_i002/test_i002.h +++ b/api-tests/ff/ipc/test_i002/test_i002.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i002) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i002) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif #define CONNECT_LIMIT 50 @@ -38,8 +38,9 @@ extern client_test_t test_i002_client_tests_list[]; int32_t client_test_connection_busy_and_reject(caller_security_t); int32_t client_test_accept_and_close_connect(caller_security_t); -int32_t client_test_connect_with_allowed_minor_version_policy(caller_security_t); +int32_t client_test_connect_with_allowed_version_policy(caller_security_t); int32_t client_test_psa_call_with_allowed_status_code(caller_security_t); +int32_t client_test_psa_call_with_allowed_type_values(caller_security_t); int32_t client_test_identity(caller_security_t); int32_t client_test_spm_concurrent_connect_limit(caller_security_t); int32_t client_test_psa_block_behave(caller_security_t); diff --git a/api-tests/ff/ipc/test_i002/test_supp_i002.c b/api-tests/ff/ipc/test_i002/test_supp_i002.c index 274452b7..716b6b26 100644 --- a/api-tests/ff/ipc/test_i002/test_supp_i002.c +++ b/api-tests/ff/ipc/test_i002/test_supp_i002.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -27,8 +27,9 @@ extern psa_api_t *psa; int32_t server_test_connection_busy_and_reject(void); int32_t server_test_accept_and_close_connect(void); -int32_t server_test_connect_with_allowed_minor_version_policy(void); +int32_t server_test_connect_with_allowed_version_policy(void); int32_t server_test_psa_call_with_allowed_status_code(void); +int32_t server_test_psa_call_with_allowed_type_values(void); int32_t server_test_identity(void); int32_t server_test_spm_concurrent_connect_limit(void); int32_t server_test_psa_block_behave(void); @@ -38,8 +39,9 @@ server_test_t test_i002_server_tests_list[] = { NULL, server_test_connection_busy_and_reject, server_test_accept_and_close_connect, - server_test_connect_with_allowed_minor_version_policy, + server_test_connect_with_allowed_version_policy, server_test_psa_call_with_allowed_status_code, + server_test_psa_call_with_allowed_type_values, server_test_identity, server_test_spm_concurrent_connect_limit, server_test_psa_block_behave, @@ -58,16 +60,16 @@ int32_t server_test_connection_busy_and_reject(void) * check delivery of PSA_IPC_CONNECT when psa_connect called. * And msg.handle must be positive. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { return status; } - /* Rejecting connection to check behaviour of PSA_CONNECTION_BUSY */ - psa->reply(msg.handle, PSA_CONNECTION_BUSY); + /* Rejecting connection to check behaviour of PSA_ERROR_CONNECTION_BUSY */ + psa->reply(msg.handle, PSA_ERROR_CONNECTION_BUSY); - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { return status; @@ -83,7 +85,7 @@ int32_t server_test_accept_and_close_connect(void) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { /* Reject the connection if processing of connect request has failed */ @@ -97,7 +99,7 @@ int32_t server_test_accept_and_close_connect(void) /* Checking delivery of PSA_IPC_DISCONNECT when psa_close called * msg.handle must be positive */ - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { return status; @@ -110,15 +112,15 @@ int32_t server_test_accept_and_close_connect(void) return status; } -int32_t server_test_connect_with_allowed_minor_version_policy(void) +int32_t server_test_connect_with_allowed_version_policy(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; int i = 0; - psa_signal_t signal[4] = {SERVER_UNSPECIFED_MINOR_V_SIG, - SERVER_STRICT_MINOR_VERSION_SIG, - SERVER_RELAX_MINOR_VERSION_SIG, - SERVER_RELAX_MINOR_VERSION_SIG}; + psa_signal_t signal[4] = {SERVER_UNSPECIFED_VERSION_SIGNAL, + SERVER_STRICT_VERSION_SIGNAL, + SERVER_RELAX_VERSION_SIGNAL, + SERVER_RELAX_VERSION_SIGNAL}; for (i = 0; i < 4; i++) { @@ -149,7 +151,7 @@ int32_t server_test_psa_call_with_allowed_status_code(void) for (i = 0; i < (sizeof(status_code)/sizeof(status_code[0])); i++) { - status = ((val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); if (val->err_check_set(TEST_CHECKPOINT_NUM(208), status)) { @@ -158,7 +160,7 @@ int32_t server_test_psa_call_with_allowed_status_code(void) } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(209), status)) { /* Send status code other than status_code[] to indicate failure @@ -172,7 +174,7 @@ int32_t server_test_psa_call_with_allowed_status_code(void) psa->reply(msg.handle, status_code[i]); } - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); val->err_check_set(TEST_CHECKPOINT_NUM(210), status); @@ -180,15 +182,59 @@ int32_t server_test_psa_call_with_allowed_status_code(void) return status; } +int32_t server_test_psa_call_with_allowed_type_values(void) +{ + int32_t status = VAL_STATUS_SUCCESS; + psa_msg_t msg = {0}; + int32_t type[] = {PSA_IPC_CALL, 1, 2, INT32_MAX}; + uint32_t i = 0; + + status = ((val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) + ? VAL_STATUS_ERROR : status); + if (val->err_check_set(TEST_CHECKPOINT_NUM(211), status)) + { + psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); + return status; + } + psa->reply(msg.handle, PSA_SUCCESS); + + for (i = 0; i < (sizeof(type)/sizeof(type[0])); i++) + { + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + if (val->err_check_set(TEST_CHECKPOINT_NUM(212), status)) + { + psa->reply(msg.handle, -3); + break; + } + else + { + /* Check recieve of client provided message type */ + if (msg.type != type[i]) + { + status = VAL_STATUS_CALL_FAILED; + psa->reply(msg.handle, -2); + break; + } + psa->reply(msg.handle, PSA_SUCCESS); + } + } + + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) + ? VAL_STATUS_ERROR : status); + psa->reply(msg.handle, PSA_SUCCESS); + val->err_check_set(TEST_CHECKPOINT_NUM(213), status); + return status; +} + int32_t server_test_identity(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; int id_at_connect = 0, id_at_call = 0; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); - if (val->err_check_set(TEST_CHECKPOINT_NUM(211), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(214), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; @@ -198,8 +244,8 @@ int32_t server_test_identity(void) id_at_connect = msg.client_id; psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); - if (val->err_check_set(TEST_CHECKPOINT_NUM(212), status)) + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + if (val->err_check_set(TEST_CHECKPOINT_NUM(215), status)) { psa->reply(msg.handle, -3); } @@ -212,8 +258,8 @@ int32_t server_test_identity(void) psa->reply(msg.handle, PSA_SUCCESS); } - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); - val->err_check_set(TEST_CHECKPOINT_NUM(213), status); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + val->err_check_set(TEST_CHECKPOINT_NUM(216), status); /* Client ID during disconnect. It should be equal to id_at_call */ if (msg.client_id != id_at_call) { @@ -246,14 +292,14 @@ int32_t server_test_spm_concurrent_connect_limit(void) while (1) { signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if ((signals & SERVER_UNSPECIFED_MINOR_V_SIG) == 0) + if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, "psa_wait returned with invalid signal value = 0x%x\n", signals); return VAL_STATUS_ERROR; } - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) continue; switch(msg.type) @@ -289,7 +335,7 @@ int32_t server_test_psa_block_behave(void) */ /* Debug print */ - val->err_check_set(TEST_CHECKPOINT_NUM(214), VAL_STATUS_SUCCESS); + val->err_check_set(TEST_CHECKPOINT_NUM(217), VAL_STATUS_SUCCESS); for (i = 0; i < CONNECT_NUM; i++) { @@ -298,7 +344,7 @@ int32_t server_test_psa_block_behave(void) signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); /* When MODE is one(PSA_BLOCK), the psa_wait must return non-zero signal value */ - if ((signals & SERVER_UNSPECIFED_MINOR_V_SIG) == 0) + if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, "psa_wait returned with invalid signal value = 0x%x\n", signals); @@ -306,7 +352,7 @@ int32_t server_test_psa_block_behave(void) } else { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -316,7 +362,7 @@ int32_t server_test_psa_block_behave(void) } /* Debug print */ - val->err_check_set(TEST_CHECKPOINT_NUM(215), VAL_STATUS_SUCCESS); + val->err_check_set(TEST_CHECKPOINT_NUM(218), VAL_STATUS_SUCCESS); return VAL_STATUS_SUCCESS; } @@ -330,7 +376,7 @@ int32_t server_test_psa_poll_behave(void) while (1) { /* Debug print */ - val->err_check_set(TEST_CHECKPOINT_NUM(216), VAL_STATUS_SUCCESS); + val->err_check_set(TEST_CHECKPOINT_NUM(219), VAL_STATUS_SUCCESS); /* Loop to receive client request */ while (signals == 0) @@ -351,7 +397,7 @@ int32_t server_test_psa_poll_behave(void) "psa_wait returned with invalid signals_temp = 0x%x\n", signals_temp); return VAL_STATUS_ERROR; } - else if ((signals & SERVER_UNSPECIFED_MINOR_V_SIG) == 0) + else if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, "psa_wait returned with invalid signal value = 0x%x\n", signals); @@ -359,7 +405,7 @@ int32_t server_test_psa_poll_behave(void) } else { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) continue; psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); count++; diff --git a/api-tests/ff/ipc/test_i003/test_i003.c b/api-tests/ff/ipc/test_i003/test_i003.c index a8e795de..0c0cb8da 100644 --- a/api-tests/ff/ipc/test_i003/test_i003.c +++ b/api-tests/ff/ipc/test_i003/test_i003.c @@ -45,7 +45,9 @@ int32_t client_test_zero_length_invec(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test zero length invec\n", 0); - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } @@ -63,7 +65,7 @@ int32_t client_test_zero_length_invec(caller_security_t caller) */ psa_outvec resp[1] = {{&data[2], sizeof(data[2])}}; - status = psa->call(handle, data1, 3, resp, 1); + status = psa->call(handle, PSA_IPC_CALL, data1, 3, resp, 1); if (status < 0) { @@ -99,7 +101,9 @@ int32_t client_test_zero_length_outvec(caller_security_t caller) val->print(PRINT_TEST, "[Check 2] Test zero length outvec\n", 0); - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } @@ -118,7 +122,7 @@ int32_t client_test_zero_length_outvec(caller_security_t caller) {NULL, 0}, {&data[2], sizeof(data[2])}}; - status = psa->call(handle, data1, 1, resp, 3); + status = psa->call(handle, PSA_IPC_CALL, data1, 1, resp, 3); if (status < 0) { status = VAL_STATUS_CALL_FAILED; @@ -157,7 +161,9 @@ int32_t client_test_call_read_and_skip(caller_security_t caller) val->print(PRINT_TEST, "[Check 3] Test psa_write, psa_read and psa_skip\n", 0); - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } @@ -171,7 +177,7 @@ int32_t client_test_call_read_and_skip(caller_security_t caller) {&data2, sizeof(data2)}, {&data3, sizeof(data3)}}; - status = psa->call(handle, data, 4, NULL, 0); + status = psa->call(handle, PSA_IPC_CALL, data, 4, NULL, 0); if (status < 0) { val->print(PRINT_ERROR, "\tpsa_call failed. status=%x\n",status); @@ -194,7 +200,9 @@ int32_t client_test_call_and_write(caller_security_t caller) val->print(PRINT_TEST, "[Check 4] Test psa_call and psa_write\n", 0); - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } @@ -208,7 +216,7 @@ int32_t client_test_call_and_write(caller_security_t caller) {&data[2], sizeof(data[2])}, {&data[3], sizeof(data[3])}}; - status = psa->call(handle, NULL, 0, resp, 4); + status = psa->call(handle, PSA_IPC_CALL, NULL, 0, resp, 4); if (status < 0) { status = VAL_STATUS_CALL_FAILED; @@ -250,18 +258,21 @@ int32_t client_test_psa_set_rhandle(caller_security_t caller) val->print(PRINT_TEST, "[Check 5] Test psa_set_rhandle API\n", 0); - /*rhandle value check when PSA_IPC_CONNECT */ - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + /* rhandle value check when PSA_IPC_CONNECT */ + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } for (i = 0; i < 3; i++) { - /*i=0: rhandle value check when PSA_IPC_CALL */ - /*i=1: rhandle value check after calling psa_set_rhandle() */ - /*i:2: rhandle value check after resetting rhandle to other value */ - status = psa->call(handle, NULL, 0, NULL, 0); + /* i=0: rhandle value check when PSA_IPC_CALL + * i=1: rhandle value check after calling psa_set_rhandle() + * i:2: rhandle value check after resetting rhandle to other value + */ + status = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); if (status < 0) { val->print(PRINT_ERROR, "psa_call failed. status=%x\n", status); @@ -283,7 +294,9 @@ int32_t client_test_overlapping_vectors(caller_security_t caller) val->print(PRINT_TEST, "[Check 6] Test overlapping vectors\n", 0); - if (val->ipc_connect(SERVER_UNSPECIFED_MINOR_V_SID, 1, &handle)) + if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, + SERVER_UNSPECIFED_VERSION_VERSION, + &handle)) { return VAL_STATUS_CONNECTION_FAILED; } @@ -304,7 +317,7 @@ int32_t client_test_overlapping_vectors(caller_security_t caller) psa_outvec outvec[2] = {{&data, sizeof(data)}, {&data, sizeof(data)}}; - status = psa->call(handle, invec, 1, outvec, 2); + status = psa->call(handle, PSA_IPC_CALL, invec, 1, outvec, 2); if (status < 0) { diff --git a/api-tests/ff/ipc/test_i003/test_i003.h b/api-tests/ff/ipc/test_i003/test_i003.h index 09e62cdf..1d0971b1 100644 --- a/api-tests/ff/ipc/test_i003/test_i003.h +++ b/api-tests/ff/ipc/test_i003/test_i003.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i003) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i003) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i003/test_supp_i003.c b/api-tests/ff/ipc/test_i003/test_supp_i003.c index eddefced..1043aa70 100644 --- a/api-tests/ff/ipc/test_i003/test_supp_i003.c +++ b/api-tests/ff/ipc/test_i003/test_supp_i003.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -56,7 +56,7 @@ static void exit_graceful(psa_handle_t msg_handle, int status_code, */ psa->reply(msg_handle, status_code); - if (val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { val->print(PRINT_ERROR, "\tdisconnect failed in exit_graceful func\n", 0); } @@ -69,14 +69,14 @@ int32_t server_test_zero_length_invec(void) psa_msg_t msg = {0}; int data[5] = {0}, actual_data = 0x22; - if (val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return VAL_STATUS_CONNECTION_FAILED; } psa->reply(msg.handle, PSA_SUCCESS); - if (val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { exit_graceful(msg.handle, -2, 0, 0, 0); return VAL_STATUS_CALL_FAILED; @@ -116,7 +116,7 @@ int32_t server_test_zero_length_invec(void) psa->write(msg.handle, 0, &data[2], msg.out_size[0]); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); return status; } @@ -127,14 +127,14 @@ int32_t server_test_zero_length_outvec(void) psa_msg_t msg={0}; int data[5] ={0}, actual_data=0x11; - if (val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return VAL_STATUS_CONNECTION_FAILED; } psa->reply(msg.handle, PSA_SUCCESS); - if (val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { exit_graceful(msg.handle, -2, 0, 0, 0); return VAL_STATUS_CALL_FAILED; @@ -176,7 +176,7 @@ int32_t server_test_zero_length_outvec(void) psa->write(msg.handle, 2, &data[0], msg.out_size[0]); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); return status; } @@ -189,14 +189,14 @@ int32_t server_test_call_read_and_skip(void) actual_data[4] = {0}, i; psa_msg_t msg = {0}; - if (val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return VAL_STATUS_CONNECTION_FAILED; } psa->reply(msg.handle, PSA_SUCCESS); - if (val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { exit_graceful(msg.handle, -2, 0, 0, 0); return VAL_STATUS_CALL_FAILED; @@ -332,7 +332,7 @@ int32_t server_test_call_read_and_skip(void) } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); return status; } @@ -343,14 +343,14 @@ int32_t server_test_call_and_write(void) int data[5] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee}, i; psa_msg_t msg = {0}; - if (val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return VAL_STATUS_CONNECTION_FAILED; } psa->reply(msg.handle, PSA_SUCCESS); - if (val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + if (val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) { exit_graceful(msg.handle, -2, 0, 0, 0); return VAL_STATUS_CALL_FAILED; @@ -391,7 +391,7 @@ int32_t server_test_call_and_write(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); return status; } @@ -403,7 +403,7 @@ int32_t server_test_psa_set_rhandle(void) int num; /*rhandle value check when PSA_IPC_CONNECT */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (msg.rhandle != NULL) { status = VAL_STATUS_INVALID_HANDLE; @@ -417,7 +417,7 @@ int32_t server_test_psa_set_rhandle(void) /*rhandle value check when PSA_IPC_CALL */ - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (msg.rhandle != NULL) { status = VAL_STATUS_INVALID_HANDLE; @@ -433,7 +433,7 @@ int32_t server_test_psa_set_rhandle(void) psa->set_rhandle(msg.handle, &num); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (*(int *)(msg.rhandle) != num) { status = VAL_STATUS_INVALID_HANDLE; @@ -452,7 +452,7 @@ int32_t server_test_psa_set_rhandle(void) psa->set_rhandle(msg.handle, &num); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (*(int *)(msg.rhandle) != num) { status = VAL_STATUS_INVALID_HANDLE; @@ -465,7 +465,7 @@ int32_t server_test_psa_set_rhandle(void) psa->reply(msg.handle, PSA_SUCCESS); /* rhandle should retain the value at PSA_IPC_DISCONNECT too */ - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (*(int *)(msg.rhandle) != num) { status = VAL_STATUS_INVALID_HANDLE; @@ -490,7 +490,7 @@ int32_t server_test_overlapping_vectors(void) rd_data[] = {0x0, 0x0}, expected_data[] = {0x11, 0x22}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(207), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -498,7 +498,7 @@ int32_t server_test_overlapping_vectors(void) } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(208), status)) { exit_graceful(msg.handle, -1, 0, 0, 0); @@ -521,7 +521,7 @@ int32_t server_test_overlapping_vectors(void) psa->write(msg.handle, 1, &wr_data[1], 1); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); val->err_check_set(TEST_CHECKPOINT_NUM(209), status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i004/test_i004.c b/api-tests/ff/ipc/test_i004/test_i004.c index 49f05f11..4c003d8d 100644 --- a/api-tests/ff/ipc/test_i004/test_i004.c +++ b/api-tests/ff/ipc/test_i004/test_i004.c @@ -91,7 +91,7 @@ int32_t client_test_sid_does_not_exists(caller_security_t caller) return VAL_STATUS_ERROR; } - if (handle > 0) + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i004/test_i004.h b/api-tests/ff/ipc/test_i004/test_i004.h index 6d3aa1fa..4edf8ea8 100644 --- a/api-tests/ff/ipc/test_i004/test_i004.h +++ b/api-tests/ff/ipc/test_i004/test_i004.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i004) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i004) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i004/test_supp_i004.c b/api-tests/ff/ipc/test_i004/test_supp_i004.c index c0f484a9..f769fc95 100644 --- a/api-tests/ff/ipc/test_i004/test_supp_i004.c +++ b/api-tests/ff/ipc/test_i004/test_supp_i004.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i005/test_entry_i005.c b/api-tests/ff/ipc/test_i005/test_entry_i005.c index e0e22955..099d5905 100644 --- a/api-tests/ff/ipc/test_i005/test_entry_i005.c +++ b/api-tests/ff/ipc/test_i005/test_entry_i005.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i005.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 5) -#define TEST_DESC "Testing STRICT policy with higher minor version\n" +#define TEST_DESC "Testing STRICT policy with higher version\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i005/test_i005.c b/api-tests/ff/ipc/test_i005/test_i005.c index 3c67a056..db596735 100644 --- a/api-tests/ff/ipc/test_i005/test_i005.c +++ b/api-tests/ff/ipc/test_i005/test_i005.c @@ -27,16 +27,16 @@ client_test_t test_i005_client_tests_list[] = { NULL, - client_test_strict_policy_higher_minor_version, + client_test_strict_policy_higher_version, NULL, }; -int32_t client_test_strict_policy_higher_minor_version(caller_security_t caller) +int32_t client_test_strict_policy_higher_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; - val->print(PRINT_TEST, "[Check 1] Test STRICT policy with higher minor version\n", 0); + val->print(PRINT_TEST, "[Check 1] Test STRICT policy with higher version\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -71,7 +71,7 @@ int32_t client_test_strict_policy_higher_minor_version(caller_security_t caller) /* Test check- Version policy is strict and requested version is bigger than * the minimum version. */ - handle = psa->connect(SERVER_STRICT_MINOR_VERSION_SID, 3); + handle = psa->connect(SERVER_STRICT_VERSION_SID, SERVER_STRICT_VERSION_VERSION + 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -85,7 +85,7 @@ int32_t client_test_strict_policy_higher_minor_version(caller_security_t caller) /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, - "\tSTRICT policy with higher minor version should have failed but succeeded\n", 0); + "\tSTRICT policy with higher version should have failed but succeeded\n", 0); /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) diff --git a/api-tests/ff/ipc/test_i005/test_i005.h b/api-tests/ff/ipc/test_i005/test_i005.h index 2f398d04..2aca795e 100644 --- a/api-tests/ff/ipc/test_i005/test_i005.h +++ b/api-tests/ff/ipc/test_i005/test_i005.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i005) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i005) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i005_client_tests_list[]; -int32_t client_test_strict_policy_higher_minor_version(caller_security_t); +int32_t client_test_strict_policy_higher_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i005/test_supp_i005.c b/api-tests/ff/ipc/test_i005/test_supp_i005.c index 7e819f81..6c9526c3 100644 --- a/api-tests/ff/ipc/test_i005/test_supp_i005.c +++ b/api-tests/ff/ipc/test_i005/test_supp_i005.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_strict_policy_higher_minor_version(void); +int32_t server_test_strict_policy_higher_version(void); server_test_t test_i005_server_tests_list[] = { NULL, - server_test_strict_policy_higher_minor_version, + server_test_strict_policy_higher_version, NULL, }; -int32_t server_test_strict_policy_higher_minor_version(void) +int32_t server_test_strict_policy_higher_version(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_STRICT_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_STRICT_VERSION_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i006/test_entry_i006.c b/api-tests/ff/ipc/test_i006/test_entry_i006.c index 2c83556a..13f0b7d8 100644 --- a/api-tests/ff/ipc/test_i006/test_entry_i006.c +++ b/api-tests/ff/ipc/test_i006/test_entry_i006.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i006.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 6) -#define TEST_DESC "Testing STRICT policy with lower minor version\n" +#define TEST_DESC "Testing STRICT policy with lower version\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i006/test_i006.c b/api-tests/ff/ipc/test_i006/test_i006.c index 452508d3..7ee0832b 100644 --- a/api-tests/ff/ipc/test_i006/test_i006.c +++ b/api-tests/ff/ipc/test_i006/test_i006.c @@ -27,16 +27,16 @@ client_test_t test_i006_client_tests_list[] = { NULL, - client_test_strict_policy_lower_minor_version, + client_test_strict_policy_lower_version, NULL, }; -int32_t client_test_strict_policy_lower_minor_version(caller_security_t caller) +int32_t client_test_strict_policy_lower_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; - val->print(PRINT_TEST, "[Check 1] Test STRICT policy with lower minor version\n", 0); + val->print(PRINT_TEST, "[Check 1] Test STRICT policy with lower version\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -69,7 +69,7 @@ int32_t client_test_strict_policy_lower_minor_version(caller_security_t caller) } /* Version policy is strict and requested version is smaller than the minimum version */ - handle = psa->connect(SERVER_STRICT_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_STRICT_VERSION_SID, SERVER_STRICT_VERSION_VERSION - 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -83,7 +83,7 @@ int32_t client_test_strict_policy_lower_minor_version(caller_security_t caller) /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, - "\tSTRICT policy with lower minor version should have failed but succeeded\n", 0); + "\tSTRICT policy with lower version should have failed but succeeded\n", 0); /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) diff --git a/api-tests/ff/ipc/test_i006/test_i006.h b/api-tests/ff/ipc/test_i006/test_i006.h index e3cd3d1c..c3ba7c7e 100644 --- a/api-tests/ff/ipc/test_i006/test_i006.h +++ b/api-tests/ff/ipc/test_i006/test_i006.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i006) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i006) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i006_client_tests_list[]; -int32_t client_test_strict_policy_lower_minor_version(caller_security_t); +int32_t client_test_strict_policy_lower_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i006/test_supp_i006.c b/api-tests/ff/ipc/test_i006/test_supp_i006.c index 7831d065..23ced7e5 100644 --- a/api-tests/ff/ipc/test_i006/test_supp_i006.c +++ b/api-tests/ff/ipc/test_i006/test_supp_i006.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_strict_policy_lower_minor_version(void); +int32_t server_test_strict_policy_lower_version(void); server_test_t test_i006_server_tests_list[] = { NULL, - server_test_strict_policy_lower_minor_version, + server_test_strict_policy_lower_version, NULL, }; -int32_t server_test_strict_policy_lower_minor_version(void) +int32_t server_test_strict_policy_lower_version(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_STRICT_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_STRICT_VERSION_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i007/test_entry_i007.c b/api-tests/ff/ipc/test_i007/test_entry_i007.c index ddfe3cdd..86ea3520 100644 --- a/api-tests/ff/ipc/test_i007/test_entry_i007.c +++ b/api-tests/ff/ipc/test_i007/test_entry_i007.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i007.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 7) -#define TEST_DESC "Testing RELAX policy with higher minor version\n" +#define TEST_DESC "Testing RELAX policy with higher version\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i007/test_i007.c b/api-tests/ff/ipc/test_i007/test_i007.c index 14a3d642..cbbbee5b 100644 --- a/api-tests/ff/ipc/test_i007/test_i007.c +++ b/api-tests/ff/ipc/test_i007/test_i007.c @@ -27,16 +27,16 @@ client_test_t test_i007_client_tests_list[] = { NULL, - client_test_relax_policy_higher_minor_version, + client_test_relax_policy_higher_version, NULL, }; -int32_t client_test_relax_policy_higher_minor_version(caller_security_t caller) +int32_t client_test_relax_policy_higher_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; - val->print(PRINT_TEST, "[Check 1] Test RELAX policy with higher minor version\n", 0); + val->print(PRINT_TEST, "[Check 1] Test RELAX policy with higher version\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -69,7 +69,7 @@ int32_t client_test_relax_policy_higher_minor_version(caller_security_t caller) } /* Version policy is relaxed and requested version is higher than the minimum version */ - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 3); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION + 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -83,7 +83,7 @@ int32_t client_test_relax_policy_higher_minor_version(caller_security_t caller) /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, - "\tRELAXED policy with higher minor version should have failed but succeeded\n", 0); + "\tRELAXED policy with higher version should have failed but succeeded\n", 0); /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) diff --git a/api-tests/ff/ipc/test_i007/test_i007.h b/api-tests/ff/ipc/test_i007/test_i007.h index 9392229b..7929b3a5 100644 --- a/api-tests/ff/ipc/test_i007/test_i007.h +++ b/api-tests/ff/ipc/test_i007/test_i007.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i007) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i007) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i007_client_tests_list[]; -int32_t client_test_relax_policy_higher_minor_version(caller_security_t); +int32_t client_test_relax_policy_higher_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i007/test_supp_i007.c b/api-tests/ff/ipc/test_i007/test_supp_i007.c index e20d4254..96a200e9 100644 --- a/api-tests/ff/ipc/test_i007/test_supp_i007.c +++ b/api-tests/ff/ipc/test_i007/test_supp_i007.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_relax_policy_higher_minor_version(void); +int32_t server_test_relax_policy_higher_version(void); server_test_t test_i007_server_tests_list[] = { NULL, - server_test_relax_policy_higher_minor_version, + server_test_relax_policy_higher_version, NULL, }; -int32_t server_test_relax_policy_higher_minor_version(void) +int32_t server_test_relax_policy_higher_version(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i008/test_i008.c b/api-tests/ff/ipc/test_i008/test_i008.c index 982d1d49..d13a4b37 100644 --- a/api-tests/ff/ipc/test_i008/test_i008.c +++ b/api-tests/ff/ipc/test_i008/test_i008.c @@ -75,7 +75,7 @@ int32_t client_test_secure_access_only_connection(caller_security_t caller) * It is PROGRAMMER ERROR to connect to secure only access service from nspe. * Whereas call should succeed if called from spe. */ - handle = psa->connect(SERVER_SECURE_CONNECT_ONLY_SID, 1); + handle = psa->connect(SERVER_SECURE_CONNECT_ONLY_SID, SERVER_SECURE_CONNECT_ONLY_VERSION); if (caller == CALLER_NONSECURE) { @@ -101,7 +101,7 @@ int32_t client_test_secure_access_only_connection(caller_security_t caller) } /* Should return positive handle for SPE connection */ - if (handle > 0) + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i008/test_i008.h b/api-tests/ff/ipc/test_i008/test_i008.h index 9eaaf02b..ee762edc 100644 --- a/api-tests/ff/ipc/test_i008/test_i008.h +++ b/api-tests/ff/ipc/test_i008/test_i008.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i008) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i008) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i008/test_supp_i008.c b/api-tests/ff/ipc/test_i008/test_supp_i008.c index 22868d3e..df13c4c5 100644 --- a/api-tests/ff/ipc/test_i008/test_supp_i008.c +++ b/api-tests/ff/ipc/test_i008/test_supp_i008.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_secure_access_only_connection(void) psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_SECURE_CONNECT_ONLY_SIG, &msg); + status = val->process_connect_request(SERVER_SECURE_CONNECT_ONLY_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -63,7 +63,7 @@ int32_t server_test_secure_access_only_connection(void) psa->reply(msg.handle, PSA_SUCCESS); } - status = val->process_disconnect_request(SERVER_SECURE_CONNECT_ONLY_SIG, &msg); + status = val->process_disconnect_request(SERVER_SECURE_CONNECT_ONLY_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; diff --git a/api-tests/ff/ipc/test_i009/test_entry_i009.c b/api-tests/ff/ipc/test_i009/test_entry_i009.c index 992e9e23..8506ac1b 100644 --- a/api-tests/ff/ipc/test_i009/test_entry_i009.c +++ b/api-tests/ff/ipc/test_i009/test_entry_i009.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i009.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 9) -#define TEST_DESC "Testing unextern SID connection\n" +#define TEST_DESC "Testing psa_connect with SID unspecified in dependencies\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i009/test_i009.c b/api-tests/ff/ipc/test_i009/test_i009.c index 5fd1b62d..cd530822 100644 --- a/api-tests/ff/ipc/test_i009/test_i009.c +++ b/api-tests/ff/ipc/test_i009/test_i009.c @@ -27,15 +27,15 @@ client_test_t test_i009_client_tests_list[] = { NULL, - client_test_unextern_sid_connection, + client_test_unspecified_dependent_sid, NULL, }; -int32_t client_test_unextern_sid_connection(caller_security_t caller) +int32_t client_test_unspecified_dependent_sid(caller_security_t caller) { psa_handle_t handle = 0; - val->print(PRINT_TEST, "[Check 1] Test unextern SID connection\n", 0); + val->print(PRINT_TEST, "[Check 1] Test psa_connect with SID unspecified in dependencies\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -70,7 +70,7 @@ int32_t client_test_unextern_sid_connection(caller_security_t caller) * If access between a client Secure Partition and an RoT Service is not specified in * the manifest, then the client is not allowed to connect to the RoT Service. */ - handle = psa->connect(SERVER_UNEXTERN_SID, 2); + handle = psa->connect(SERVER_UNEXTERN_SID, SERVER_UNEXTERN_VERSION); /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, "\tunextern SID connection should have failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i009/test_i009.h b/api-tests/ff/ipc/test_i009/test_i009.h index 661e7ca6..35d7e152 100644 --- a/api-tests/ff/ipc/test_i009/test_i009.h +++ b/api-tests/ff/ipc/test_i009/test_i009.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i009) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i009) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i009_client_tests_list[]; -int32_t client_test_unextern_sid_connection(caller_security_t); +int32_t client_test_unspecified_dependent_sid(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i009/test_supp_i009.c b/api-tests/ff/ipc/test_i009/test_supp_i009.c index a0f1ccaa..c6711bc3 100644 --- a/api-tests/ff/ipc/test_i009/test_supp_i009.c +++ b/api-tests/ff/ipc/test_i009/test_supp_i009.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_unextern_sid_connection(void); +int32_t server_test_unspecified_dependent_sid(void); server_test_t test_i009_server_tests_list[] = { NULL, - server_test_unextern_sid_connection, + server_test_unspecified_dependent_sid, NULL, }; -int32_t server_test_unextern_sid_connection(void) +int32_t server_test_unspecified_dependent_sid(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_UNEXTERN_SIG, &msg); + status = val->process_connect_request(SERVER_UNEXTERN_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i010/test_entry_i010.c b/api-tests/ff/ipc/test_i010/test_entry_i010.c index fa42b059..e0e72ef6 100644 --- a/api-tests/ff/ipc/test_i010/test_entry_i010.c +++ b/api-tests/ff/ipc/test_i010/test_entry_i010.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i010.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 10) -#define TEST_DESC "Testing un-specified minor_policy with higher minor version\n" +#define TEST_DESC "Testing un-specified version_policy with higher version\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i010/test_i010.c b/api-tests/ff/ipc/test_i010/test_i010.c index 7a2074bd..77233b60 100644 --- a/api-tests/ff/ipc/test_i010/test_i010.c +++ b/api-tests/ff/ipc/test_i010/test_i010.c @@ -27,17 +27,17 @@ client_test_t test_i010_client_tests_list[] = { NULL, - client_test_unspecified_policy_with_higher_minor_ver, + client_test_unspecified_policy_with_higher_version, NULL, }; -int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t caller) +int32_t client_test_unspecified_policy_with_higher_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; val->print(PRINT_TEST, - "[Check 1] Test un-specified minor_policy with higher minor version\n", 0); + "[Check 1] Test un-specified version_policy with higher version\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -70,11 +70,11 @@ int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t c } /* - * The minor_version and minor_policy attributes do not need to be specified. + * The SID version and version_policy attributes do not need to be specified. * If they are not specified in the manifest, the RoT Service will have - * default attributes of minor_version=1 and minor_policy="STRICT". + * default attributes of version=1 and version_policy="STRICT". */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 3); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION + 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -88,7 +88,7 @@ int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t c /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, - "\tun-specified policy with higher minor version should have failed but succeeded\n", 0); + "\tun-specified policy with higher version should have failed but succeeded\n", 0); /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) diff --git a/api-tests/ff/ipc/test_i010/test_i010.h b/api-tests/ff/ipc/test_i010/test_i010.h index f299f981..e5dc30d6 100644 --- a/api-tests/ff/ipc/test_i010/test_i010.h +++ b/api-tests/ff/ipc/test_i010/test_i010.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i010) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i010) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i010_client_tests_list[]; -int32_t client_test_unspecified_policy_with_higher_minor_ver(caller_security_t); +int32_t client_test_unspecified_policy_with_higher_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i010/test_supp_i010.c b/api-tests/ff/ipc/test_i010/test_supp_i010.c index 6f8ffb8c..0429ea5a 100644 --- a/api-tests/ff/ipc/test_i010/test_supp_i010.c +++ b/api-tests/ff/ipc/test_i010/test_supp_i010.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_unspecified_policy_with_higher_minor_ver(void); +int32_t server_test_unspecified_policy_with_higher_version(void); server_test_t test_i010_server_tests_list[] = { NULL, - server_test_unspecified_policy_with_higher_minor_ver, + server_test_unspecified_policy_with_higher_version, NULL, }; -int32_t server_test_unspecified_policy_with_higher_minor_ver(void) +int32_t server_test_unspecified_policy_with_higher_version(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i011/test_entry_i011.c b/api-tests/ff/ipc/test_i011/test_entry_i011.c index ef4b6f5a..a1ca9c71 100644 --- a/api-tests/ff/ipc/test_i011/test_entry_i011.c +++ b/api-tests/ff/ipc/test_i011/test_entry_i011.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "test_i011.h" #define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 11) -#define TEST_DESC "Testing un-specified minor_policy with lower minor version\n" +#define TEST_DESC "Testing un-specified version_policy with lower version\n" TEST_PUBLISH(TEST_NUM, test_entry); val_api_t *val = NULL; psa_api_t *psa = NULL; diff --git a/api-tests/ff/ipc/test_i011/test_i011.c b/api-tests/ff/ipc/test_i011/test_i011.c index 536d04c0..e0996aa9 100644 --- a/api-tests/ff/ipc/test_i011/test_i011.c +++ b/api-tests/ff/ipc/test_i011/test_i011.c @@ -27,17 +27,17 @@ client_test_t test_i011_client_tests_list[] = { NULL, - client_test_unspecified_policy_with_lower_minor_ver, + client_test_unspecified_policy_with_lower_version, NULL, }; -int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t caller) +int32_t client_test_unspecified_policy_with_lower_version(caller_security_t caller) { psa_handle_t handle = 0; boot_state_t boot_state; val->print(PRINT_TEST, - "[Check 1] Test un-specified minor_policy with higher minor version\n", 0); + "[Check 1] Test un-specified version_policy with higher version\n", 0); /* * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to @@ -70,11 +70,13 @@ int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t ca } /* - * The minor_version and minor_policy attributes do not need to be specified. + * 1. The SID version and version_policy attributes do not need to be specified. * If they are not specified in the manifest, the RoT Service will have - * default attributes of minor_version=1 and minor_policy="STRICT". + * default attributes of version=1 and version_policy="STRICT". + * + * 2. RoT Service version must be non-zero. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 0); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -88,7 +90,7 @@ int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t ca /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, - "\tun-specified policy with lower minor version should have failed but succeeded\n", 0); + "\tun-specified policy with lower version should have failed but succeeded\n", 0); /* Resetting boot.state to catch unwanted reboot */ if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) diff --git a/api-tests/ff/ipc/test_i011/test_i011.h b/api-tests/ff/ipc/test_i011/test_i011.h index 3e0b3347..db4436d5 100644 --- a/api-tests/ff/ipc/test_i011/test_i011.h +++ b/api-tests/ff/ipc/test_i011/test_i011.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i011) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i011) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; @@ -33,5 +33,5 @@ extern psa_api_t *psa; extern client_test_t test_i011_client_tests_list[]; -int32_t client_test_unspecified_policy_with_lower_minor_ver(caller_security_t); +int32_t client_test_unspecified_policy_with_lower_version(caller_security_t); #endif diff --git a/api-tests/ff/ipc/test_i011/test_supp_i011.c b/api-tests/ff/ipc/test_i011/test_supp_i011.c index 87d4a4da..97e05dff 100644 --- a/api-tests/ff/ipc/test_i011/test_supp_i011.c +++ b/api-tests/ff/ipc/test_i011/test_supp_i011.c @@ -18,26 +18,26 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; -int32_t server_test_unspecified_policy_with_lower_minor_ver(void); +int32_t server_test_unspecified_policy_with_lower_version(void); server_test_t test_i011_server_tests_list[] = { NULL, - server_test_unspecified_policy_with_lower_minor_ver, + server_test_unspecified_policy_with_lower_version, NULL, }; -int32_t server_test_unspecified_policy_with_lower_minor_ver(void) +int32_t server_test_unspecified_policy_with_lower_version(void) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; val->err_check_set(TEST_CHECKPOINT_NUM(201), status); - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); /* Shouldn't have reached here */ if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) diff --git a/api-tests/ff/ipc/test_i012/test_i012.h b/api-tests/ff/ipc/test_i012/test_i012.h index fbdd20e1..c8b269f2 100644 --- a/api-tests/ff/ipc/test_i012/test_i012.h +++ b/api-tests/ff/ipc/test_i012/test_i012.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i012) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i012) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i012/test_supp_i012.c b/api-tests/ff/ipc/test_i012/test_supp_i012.c index f6d39b60..0de30cfb 100644 --- a/api-tests/ff/ipc/test_i012/test_supp_i012.c +++ b/api-tests/ff/ipc/test_i012/test_supp_i012.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i013/test_i013.c b/api-tests/ff/ipc/test_i013/test_i013.c index 9ac96fd4..db112751 100644 --- a/api-tests/ff/ipc/test_i013/test_i013.c +++ b/api-tests/ff/ipc/test_i013/test_i013.c @@ -37,7 +37,7 @@ int32_t client_test_psa_get_with_more_than_one_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_get with multiple signals\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i013/test_i013.h b/api-tests/ff/ipc/test_i013/test_i013.h index 99458c52..efcd9883 100644 --- a/api-tests/ff/ipc/test_i013/test_i013.h +++ b/api-tests/ff/ipc/test_i013/test_i013.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i013) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i013) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i013/test_supp_i013.c b/api-tests/ff/ipc/test_i013/test_supp_i013.c index fb54c3fe..640d71f5 100644 --- a/api-tests/ff/ipc/test_i013/test_supp_i013.c +++ b/api-tests/ff/ipc/test_i013/test_supp_i013.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -57,23 +57,23 @@ int32_t server_test_psa_get_with_more_than_one_signal(void) * VAL APIs to decide test status. */ - if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_MINOR_V_SIG) + if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_VERSION_SIGNAL) { /* Setting boot.state before test check */ if (val->set_boot_flag(BOOT_EXPECTED_NS)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); /* Unblock client */ - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { - val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); } psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return VAL_STATUS_ERROR; } /* multiple signals check */ - psa->get((SERVER_UNSPECIFED_MINOR_V_SIG | SERVER_RELAX_MINOR_VERSION_SIG), &msg); + psa->get((SERVER_UNSPECIFED_VERSION_SIGNAL | SERVER_RELAX_VERSION_SIGNAL), &msg); /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ /* Resetting boot.state to catch unwanted reboot */ diff --git a/api-tests/ff/ipc/test_i014/test_i014.c b/api-tests/ff/ipc/test_i014/test_i014.c index 3da7d744..b6c260a5 100644 --- a/api-tests/ff/ipc/test_i014/test_i014.c +++ b/api-tests/ff/ipc/test_i014/test_i014.c @@ -37,7 +37,7 @@ int32_t client_test_psa_get_called_twice(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_get called twice\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i014/test_i014.h b/api-tests/ff/ipc/test_i014/test_i014.h index e92beb7b..0825f260 100644 --- a/api-tests/ff/ipc/test_i014/test_i014.h +++ b/api-tests/ff/ipc/test_i014/test_i014.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i014) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i014) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i014/test_supp_i014.c b/api-tests/ff/ipc/test_i014/test_supp_i014.c index fe062f4b..ab2e9383 100644 --- a/api-tests/ff/ipc/test_i014/test_supp_i014.c +++ b/api-tests/ff/ipc/test_i014/test_supp_i014.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -59,10 +59,10 @@ int32_t server_test_psa_get_called_twice(void) */ wait: - if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_MINOR_V_SIG) + if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_VERSION_SIGNAL) { /* First psa_get call */ - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -80,7 +80,7 @@ int32_t server_test_psa_get_called_twice(void) } /* Second psa_get call. This should panic */ - psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ /* Resetting boot.state to catch unwanted reboot */ diff --git a/api-tests/ff/ipc/test_i015/test_i015.c b/api-tests/ff/ipc/test_i015/test_i015.c index f1854f3a..a23157cc 100644 --- a/api-tests/ff/ipc/test_i015/test_i015.c +++ b/api-tests/ff/ipc/test_i015/test_i015.c @@ -37,7 +37,7 @@ int32_t client_test_psa_get_with_non_rot_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_get with non-RoT signal\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i015/test_i015.h b/api-tests/ff/ipc/test_i015/test_i015.h index 70b647c3..b74f6c31 100644 --- a/api-tests/ff/ipc/test_i015/test_i015.h +++ b/api-tests/ff/ipc/test_i015/test_i015.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i015) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i015) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i015/test_supp_i015.c b/api-tests/ff/ipc/test_i015/test_supp_i015.c index a044796b..6b24b66a 100644 --- a/api-tests/ff/ipc/test_i015/test_supp_i015.c +++ b/api-tests/ff/ipc/test_i015/test_supp_i015.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,14 +58,14 @@ int32_t server_test_psa_get_with_non_rot_signal(void) * VAL APIs to decide test status. */ - if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_MINOR_V_SIG) + if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_VERSION_SIGNAL) { /* Setting boot.state before test check */ status = val->set_boot_flag(BOOT_EXPECTED_NS); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); - psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; } diff --git a/api-tests/ff/ipc/test_i016/test_i016.c b/api-tests/ff/ipc/test_i016/test_i016.c index 781d3172..cec06b97 100644 --- a/api-tests/ff/ipc/test_i016/test_i016.c +++ b/api-tests/ff/ipc/test_i016/test_i016.c @@ -37,7 +37,7 @@ int32_t client_test_psa_get_with_unasserted_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_get with unasserted signal\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i016/test_i016.h b/api-tests/ff/ipc/test_i016/test_i016.h index 104803cc..16c265d0 100644 --- a/api-tests/ff/ipc/test_i016/test_i016.h +++ b/api-tests/ff/ipc/test_i016/test_i016.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i016) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i016) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i016/test_supp_i016.c b/api-tests/ff/ipc/test_i016/test_supp_i016.c index 7b4d5e1b..5818ebdc 100644 --- a/api-tests/ff/ipc/test_i016/test_supp_i016.c +++ b/api-tests/ff/ipc/test_i016/test_supp_i016.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,20 +58,20 @@ int32_t server_test_psa_get_with_unasserted_signal(void) * VAL APIs to decide test status. */ - if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_MINOR_V_SIG) + if ((psa->wait(PSA_WAIT_ANY, PSA_BLOCK)) & SERVER_UNSPECIFED_VERSION_SIGNAL) { /* Setting boot.state before test check */ status = val->set_boot_flag(BOOT_EXPECTED_NS); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); - psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; } /* Unasserted signal check, call to psa_get should panic */ - psa->get(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + psa->get(SERVER_RELAX_VERSION_SIGNAL, &msg); /* shouldn't have reached here */ /* Resetting boot.state to catch unwanted reboot */ diff --git a/api-tests/ff/ipc/test_i017/test_i017.c b/api-tests/ff/ipc/test_i017/test_i017.c index 00a9dc31..4823c460 100644 --- a/api-tests/ff/ipc/test_i017/test_i017.c +++ b/api-tests/ff/ipc/test_i017/test_i017.c @@ -37,7 +37,7 @@ int32_t client_test_partition_calling_its_own_rot_service(caller_security_t call val->print(PRINT_TEST, "[Check 1] Test partition calling its own RoT service\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i017/test_i017.h b/api-tests/ff/ipc/test_i017/test_i017.h index e5ac1b97..57697d87 100644 --- a/api-tests/ff/ipc/test_i017/test_i017.h +++ b/api-tests/ff/ipc/test_i017/test_i017.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i017) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i017) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i017/test_supp_i017.c b/api-tests/ff/ipc/test_i017/test_supp_i017.c index 6c729770..63057a50 100644 --- a/api-tests/ff/ipc/test_i017/test_supp_i017.c +++ b/api-tests/ff/ipc/test_i017/test_supp_i017.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_partition_calling_its_own_rot_service(void) int32_t status = VAL_STATUS_SUCCESS; psa_handle_t handle = 0; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -75,7 +75,7 @@ int32_t server_test_partition_calling_its_own_rot_service(void) } /* Calling server partition RoT service using IPC and call should panic */ - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); /* shouldn't have reached here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i018/test_i018.c b/api-tests/ff/ipc/test_i018/test_i018.c index 0825ddf3..fa40d5fa 100644 --- a/api-tests/ff/ipc/test_i018/test_i018.c +++ b/api-tests/ff/ipc/test_i018/test_i018.c @@ -37,7 +37,7 @@ int32_t client_test_psa_set_rhandle_with_invalid_handle(caller_security_t caller val->print(PRINT_TEST, "[Check 1] Test psa_set_rhandle with invalid msg handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i018/test_i018.h b/api-tests/ff/ipc/test_i018/test_i018.h index 14e05bcf..9bf6c7f4 100644 --- a/api-tests/ff/ipc/test_i018/test_i018.h +++ b/api-tests/ff/ipc/test_i018/test_i018.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i018) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i018) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i018/test_supp_i018.c b/api-tests/ff/ipc/test_i018/test_supp_i018.c index 5a67aba0..6a7afe41 100644 --- a/api-tests/ff/ipc/test_i018/test_supp_i018.c +++ b/api-tests/ff/ipc/test_i018/test_supp_i018.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_set_rhandle_with_invalid_handle(void) int32_t status = VAL_STATUS_SUCCESS; int num; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i019/test_i019.c b/api-tests/ff/ipc/test_i019/test_i019.c index a123bb25..941a82c8 100644 --- a/api-tests/ff/ipc/test_i019/test_i019.c +++ b/api-tests/ff/ipc/test_i019/test_i019.c @@ -37,7 +37,7 @@ int32_t client_test_psa_set_rhandle_with_null_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_set_rhandle with null msg handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i019/test_i019.h b/api-tests/ff/ipc/test_i019/test_i019.h index c4bcfdcf..9e1f1466 100644 --- a/api-tests/ff/ipc/test_i019/test_i019.h +++ b/api-tests/ff/ipc/test_i019/test_i019.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i019) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i019) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i019/test_supp_i019.c b/api-tests/ff/ipc/test_i019/test_supp_i019.c index af063a61..5e4362ce 100644 --- a/api-tests/ff/ipc/test_i019/test_supp_i019.c +++ b/api-tests/ff/ipc/test_i019/test_supp_i019.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -59,7 +59,7 @@ int32_t server_test_psa_set_rhandle_with_null_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i020/test_i020.c b/api-tests/ff/ipc/test_i020/test_i020.c index 21d0ab56..7f3dbb59 100644 --- a/api-tests/ff/ipc/test_i020/test_i020.c +++ b/api-tests/ff/ipc/test_i020/test_i020.c @@ -39,7 +39,7 @@ int32_t client_test_psa_reply_with_invalid_connect_status_code(caller_security_t val->print(PRINT_TEST, "[Check 1] Test psa_reply with invalid status code for PSA_IPC_CONNECT\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i020/test_i020.h b/api-tests/ff/ipc/test_i020/test_i020.h index ccad95b9..5c820fc6 100644 --- a/api-tests/ff/ipc/test_i020/test_i020.h +++ b/api-tests/ff/ipc/test_i020/test_i020.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i020) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i020) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i020/test_supp_i020.c b/api-tests/ff/ipc/test_i020/test_supp_i020.c index 816fd66b..4bbc184d 100644 --- a/api-tests/ff/ipc/test_i020/test_supp_i020.c +++ b/api-tests/ff/ipc/test_i020/test_supp_i020.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_reply_with_invalid_connect_status_code(void) psa_msg_t msg = {0}; psa_status_t invalid_status_code = PSA_ERROR_CONNECTION_REFUSED + 0x10; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i021/test_i021.c b/api-tests/ff/ipc/test_i021/test_i021.c index ca7f3ee5..cdb21074 100644 --- a/api-tests/ff/ipc/test_i021/test_i021.c +++ b/api-tests/ff/ipc/test_i021/test_i021.c @@ -38,7 +38,7 @@ int32_t client_test_irq_routing(caller_security_t caller) /* * The interrupt related test check is captured in driver_partition.c as this is the - * only partition in test suite that holds the interrupt line. The interrupt test check + * only partition in test suite that holds the interrupt source. The interrupt test check * is invoked by client by calling to DRIVER_TEST_SID RoT service of driver partition that * hold the test check. */ @@ -46,8 +46,8 @@ int32_t client_test_irq_routing(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test irq routing\n", 0); /* Connect to DRIVER_TEST_SID */ - handle = psa->connect(DRIVER_TEST_SID, 1); - if (handle < 0) + handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\t psa_connect failed. handle=0x%x\n", handle); return VAL_STATUS_SPM_FAILED; @@ -56,7 +56,7 @@ int32_t client_test_irq_routing(caller_security_t caller) /* Execute driver function related to TEST_INTR_SERVICE */ psa_invec invec = {&driver_test_fn_id, sizeof(driver_test_fn_id)}; - if (psa->call(handle, &invec, 1, NULL, 0) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, &invec, 1, NULL, 0) != PSA_SUCCESS) { psa->close(handle); return VAL_STATUS_SPM_FAILED; diff --git a/api-tests/ff/ipc/test_i021/test_i021.h b/api-tests/ff/ipc/test_i021/test_i021.h index f532c7f2..d99b1d7f 100644 --- a/api-tests/ff/ipc/test_i021/test_i021.h +++ b/api-tests/ff/ipc/test_i021/test_i021.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i021) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i021) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i021/test_supp_i021.c b/api-tests/ff/ipc/test_i021/test_supp_i021.c index 672f3408..1877450e 100644 --- a/api-tests/ff/ipc/test_i021/test_supp_i021.c +++ b/api-tests/ff/ipc/test_i021/test_supp_i021.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i022/test_i022.c b/api-tests/ff/ipc/test_i022/test_i022.c index cad50be4..366d9444 100644 --- a/api-tests/ff/ipc/test_i022/test_i022.c +++ b/api-tests/ff/ipc/test_i022/test_i022.c @@ -37,7 +37,7 @@ int32_t client_test_psa_reply_with_invalid_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Testing psa_reply with invalid handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i022/test_i022.h b/api-tests/ff/ipc/test_i022/test_i022.h index 8c5b5e14..ad0e5700 100644 --- a/api-tests/ff/ipc/test_i022/test_i022.h +++ b/api-tests/ff/ipc/test_i022/test_i022.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i022) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i022) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i022/test_supp_i022.c b/api-tests/ff/ipc/test_i022/test_supp_i022.c index e2ba3915..f952610a 100644 --- a/api-tests/ff/ipc/test_i022/test_supp_i022.c +++ b/api-tests/ff/ipc/test_i022/test_supp_i022.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_reply_with_invalid_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i023/test_i023.c b/api-tests/ff/ipc/test_i023/test_i023.c index d81c2847..6e0cff1c 100644 --- a/api-tests/ff/ipc/test_i023/test_i023.c +++ b/api-tests/ff/ipc/test_i023/test_i023.c @@ -37,7 +37,7 @@ int32_t client_test_psa_reply_with_null_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Testing psa_reply with invalid handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tConnection should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i023/test_i023.h b/api-tests/ff/ipc/test_i023/test_i023.h index 9029a4b5..2bd6660e 100644 --- a/api-tests/ff/ipc/test_i023/test_i023.h +++ b/api-tests/ff/ipc/test_i023/test_i023.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i023) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i023) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i023/test_supp_i023.c b/api-tests/ff/ipc/test_i023/test_supp_i023.c index 4436e4ac..11d871ff 100644 --- a/api-tests/ff/ipc/test_i023/test_supp_i023.c +++ b/api-tests/ff/ipc/test_i023/test_supp_i023.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_reply_with_null_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i024/test_i024.c b/api-tests/ff/ipc/test_i024/test_i024.c index 70aaf67f..40de6815 100644 --- a/api-tests/ff/ipc/test_i024/test_i024.c +++ b/api-tests/ff/ipc/test_i024/test_i024.c @@ -70,7 +70,7 @@ int32_t client_test_psa_call_with_invalid_handle(caller_security_t caller) } /* Test check- psa_call with INVALID_HANDLE */ - status_of_call = psa->call(INVALID_HANDLE, NULL, 0, NULL, 0); + status_of_call = psa->call(INVALID_HANDLE, PSA_IPC_CALL, NULL, 0, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i024/test_i024.h b/api-tests/ff/ipc/test_i024/test_i024.h index 701382e9..30159327 100644 --- a/api-tests/ff/ipc/test_i024/test_i024.h +++ b/api-tests/ff/ipc/test_i024/test_i024.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i024) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i024) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i024/test_supp_i024.c b/api-tests/ff/ipc/test_i024/test_supp_i024.c index 60d98953..67b4fc95 100644 --- a/api-tests/ff/ipc/test_i024/test_supp_i024.c +++ b/api-tests/ff/ipc/test_i024/test_supp_i024.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i025/test_i025.c b/api-tests/ff/ipc/test_i025/test_i025.c index 753d920d..da203755 100644 --- a/api-tests/ff/ipc/test_i025/test_i025.c +++ b/api-tests/ff/ipc/test_i025/test_i025.c @@ -70,7 +70,7 @@ int32_t client_test_psa_call_with_null_handle(caller_security_t caller) } /* Test check- psa_call with NULL HANDLE */ - status_of_call = psa->call(PSA_NULL_HANDLE, NULL, 0, NULL, 0); + status_of_call = psa->call(PSA_NULL_HANDLE, PSA_IPC_CALL, NULL, 0, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i025/test_i025.h b/api-tests/ff/ipc/test_i025/test_i025.h index 570c5f33..eaec5a13 100644 --- a/api-tests/ff/ipc/test_i025/test_i025.h +++ b/api-tests/ff/ipc/test_i025/test_i025.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i025) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i025) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i025/test_supp_i025.c b/api-tests/ff/ipc/test_i025/test_supp_i025.c index 20f15573..19d70e82 100644 --- a/api-tests/ff/ipc/test_i025/test_supp_i025.c +++ b/api-tests/ff/ipc/test_i025/test_supp_i025.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i026/test_i026.c b/api-tests/ff/ipc/test_i026/test_i026.c index 8ead26d0..0b186e99 100644 --- a/api-tests/ff/ipc/test_i026/test_i026.c +++ b/api-tests/ff/ipc/test_i026/test_i026.c @@ -70,9 +70,8 @@ int32_t client_test_psa_call_with_iovec_more_than_max_limit(caller_security_t ca * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -87,7 +86,7 @@ int32_t client_test_psa_call_with_iovec_more_than_max_limit(caller_security_t ca } /* Test check- psa_call with IOVEC > PSA_MAX_IOVEC */ - status_of_call = psa->call(handle, invec, PSA_MAX_IOVEC, outvec, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, invec, PSA_MAX_IOVEC, outvec, 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i026/test_i026.h b/api-tests/ff/ipc/test_i026/test_i026.h index 7c467126..98eb2fe5 100644 --- a/api-tests/ff/ipc/test_i026/test_i026.h +++ b/api-tests/ff/ipc/test_i026/test_i026.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i026) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i026) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i026/test_supp_i026.c b/api-tests/ff/ipc/test_i026/test_supp_i026.c index 4b1794b7..dc5b829c 100644 --- a/api-tests/ff/ipc/test_i026/test_supp_i026.c +++ b/api-tests/ff/ipc/test_i026/test_supp_i026.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_iovec_more_than_max_limit() psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_iovec_more_than_max_limit() wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_iovec_more_than_max_limit() /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i027/test_i027.c b/api-tests/ff/ipc/test_i027/test_i027.c index f12f9404..b346fa77 100644 --- a/api-tests/ff/ipc/test_i027/test_i027.c +++ b/api-tests/ff/ipc/test_i027/test_i027.c @@ -63,8 +63,8 @@ int32_t client_test_psa_drop_connection(caller_security_t caller) * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_CONNECTION_DROP_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_CONNECTION_DROP_SID, SERVER_CONNECTION_DROP_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -78,7 +78,7 @@ int32_t client_test_psa_drop_connection(caller_security_t caller) return VAL_STATUS_ERROR; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether @@ -94,14 +94,14 @@ int32_t client_test_psa_drop_connection(caller_security_t caller) return VAL_STATUS_ERROR; } - val->print(PRINT_DEBUG, "\tRecieved PSA_ERROR_PROGRAMMER_ERROR\n", 0); + val->print(PRINT_DEBUG, "\tReceived PSA_ERROR_PROGRAMMER_ERROR\n", 0); /* If this call returns PSA_ERROR_PROGRAMMER_ERROR, * when a valid connection handle was provided, then * all subsequent calls to psa_call() with the same connection * handle will immediately return PSA_ERROR_PROGRAMMER_ERROR. */ - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); if (status_of_call != PSA_ERROR_PROGRAMMER_ERROR) { status = VAL_STATUS_SPM_FAILED; diff --git a/api-tests/ff/ipc/test_i027/test_i027.h b/api-tests/ff/ipc/test_i027/test_i027.h index 827196fa..9a679ea5 100644 --- a/api-tests/ff/ipc/test_i027/test_i027.h +++ b/api-tests/ff/ipc/test_i027/test_i027.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i027) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i027) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i027/test_supp_i027.c b/api-tests/ff/ipc/test_i027/test_supp_i027.c index c2eb4d3c..fe5374b2 100644 --- a/api-tests/ff/ipc/test_i027/test_supp_i027.c +++ b/api-tests/ff/ipc/test_i027/test_supp_i027.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -36,7 +36,7 @@ int32_t server_test_psa_drop_connection(void) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_CONNECTION_DROP_SIG, &msg); + status = val->process_connect_request(SERVER_CONNECTION_DROP_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -45,7 +45,7 @@ int32_t server_test_psa_drop_connection(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_CONNECTION_DROP_SIG, &msg); + status = val->process_call_request(SERVER_CONNECTION_DROP_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -62,7 +62,7 @@ int32_t server_test_psa_drop_connection(void) * directly after receipt of the PSA_ERROR_PROGRAMMER_ERROR completion to allow * connection resources within the RoT Service to be released */ - status = val->process_disconnect_request(SERVER_CONNECTION_DROP_SIG, &msg); + status = val->process_disconnect_request(SERVER_CONNECTION_DROP_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { val->print(PRINT_ERROR, "\tDisconnect request failed\n", 0); diff --git a/api-tests/ff/ipc/test_i028/test_i028.c b/api-tests/ff/ipc/test_i028/test_i028.c index cc1d8e07..7e2f1127 100644 --- a/api-tests/ff/ipc/test_i028/test_i028.c +++ b/api-tests/ff/ipc/test_i028/test_i028.c @@ -37,7 +37,7 @@ int32_t client_test_psa_read_at_ipc_connect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_read at PSA_IPC_CONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); /* Shouldn't have reached here */ val->print(PRINT_ERROR, "\tConnection should have failed but succeeded\n", 0); diff --git a/api-tests/ff/ipc/test_i028/test_i028.h b/api-tests/ff/ipc/test_i028/test_i028.h index 41b207a0..f958ebb6 100644 --- a/api-tests/ff/ipc/test_i028/test_i028.h +++ b/api-tests/ff/ipc/test_i028/test_i028.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i028) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i028) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i028/test_supp_i028.c b/api-tests/ff/ipc/test_i028/test_supp_i028.c index 3c571e3c..02a0023e 100644 --- a/api-tests/ff/ipc/test_i028/test_supp_i028.c +++ b/api-tests/ff/ipc/test_i028/test_supp_i028.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_at_ipc_connect() * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i029/test_i029.c b/api-tests/ff/ipc/test_i029/test_i029.c index 7c997e41..d208bc83 100644 --- a/api-tests/ff/ipc/test_i029/test_i029.c +++ b/api-tests/ff/ipc/test_i029/test_i029.c @@ -37,8 +37,8 @@ int32_t client_test_psa_read_at_ipc_disconnect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_read at PSA_IPC_DISCONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); - if (handle > 0) + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i029/test_i029.h b/api-tests/ff/ipc/test_i029/test_i029.h index 48a1b759..bc211840 100644 --- a/api-tests/ff/ipc/test_i029/test_i029.h +++ b/api-tests/ff/ipc/test_i029/test_i029.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i029) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i029) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i029/test_supp_i029.c b/api-tests/ff/ipc/test_i029/test_supp_i029.c index 0e7aac6b..ff9caf96 100644 --- a/api-tests/ff/ipc/test_i029/test_supp_i029.c +++ b/api-tests/ff/ipc/test_i029/test_supp_i029.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_at_ipc_disconnect(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -69,7 +69,7 @@ int32_t server_test_psa_read_at_ipc_disconnect(void) } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_disconnect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_SUCCESS); diff --git a/api-tests/ff/ipc/test_i030/test_i030.c b/api-tests/ff/ipc/test_i030/test_i030.c index 9b1351a7..922f1317 100644 --- a/api-tests/ff/ipc/test_i030/test_i030.c +++ b/api-tests/ff/ipc/test_i030/test_i030.c @@ -40,15 +40,14 @@ int32_t client_test_psa_read_with_null_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_read with NULL handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i030/test_i030.h b/api-tests/ff/ipc/test_i030/test_i030.h index 20af72f8..c5ec886a 100644 --- a/api-tests/ff/ipc/test_i030/test_i030.h +++ b/api-tests/ff/ipc/test_i030/test_i030.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i030) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i030) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i030/test_supp_i030.c b/api-tests/ff/ipc/test_i030/test_supp_i030.c index 6c67a002..1f46e698 100644 --- a/api-tests/ff/ipc/test_i030/test_supp_i030.c +++ b/api-tests/ff/ipc/test_i030/test_supp_i030.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_with_null_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_read_with_null_handle(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -105,7 +105,7 @@ int32_t server_test_psa_read_with_null_handle(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i031/test_i031.c b/api-tests/ff/ipc/test_i031/test_i031.c index 0751f063..25b69757 100644 --- a/api-tests/ff/ipc/test_i031/test_i031.c +++ b/api-tests/ff/ipc/test_i031/test_i031.c @@ -40,14 +40,14 @@ int32_t client_test_psa_read_with_invalid_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_read with invalid handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i031/test_i031.h b/api-tests/ff/ipc/test_i031/test_i031.h index 6283b61a..849197f3 100644 --- a/api-tests/ff/ipc/test_i031/test_i031.h +++ b/api-tests/ff/ipc/test_i031/test_i031.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i031) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i031) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i031/test_supp_i031.c b/api-tests/ff/ipc/test_i031/test_supp_i031.c index 9bac47af..94f7389d 100644 --- a/api-tests/ff/ipc/test_i031/test_supp_i031.c +++ b/api-tests/ff/ipc/test_i031/test_supp_i031.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_with_invalid_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_read_with_invalid_handle(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -105,7 +105,7 @@ int32_t server_test_psa_read_with_invalid_handle(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i032/test_i032.c b/api-tests/ff/ipc/test_i032/test_i032.c index be3f1f11..b7902712 100644 --- a/api-tests/ff/ipc/test_i032/test_i032.c +++ b/api-tests/ff/ipc/test_i032/test_i032.c @@ -40,14 +40,14 @@ int32_t client_test_psa_read_with_invec_equal_to_max_iovec(caller_security_t cal val->print(PRINT_TEST, "[Check 1] Test psa_read with invec_idx=PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i032/test_i032.h b/api-tests/ff/ipc/test_i032/test_i032.h index 48e4d8a4..327be5a3 100644 --- a/api-tests/ff/ipc/test_i032/test_i032.h +++ b/api-tests/ff/ipc/test_i032/test_i032.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i032) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i032) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i032/test_supp_i032.c b/api-tests/ff/ipc/test_i032/test_supp_i032.c index e45d47b9..20771337 100644 --- a/api-tests/ff/ipc/test_i032/test_supp_i032.c +++ b/api-tests/ff/ipc/test_i032/test_supp_i032.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_with_invec_equal_to_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_read_with_invec_equal_to_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -105,7 +105,7 @@ int32_t server_test_psa_read_with_invec_equal_to_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i033/test_i033.c b/api-tests/ff/ipc/test_i033/test_i033.c index e8e803a3..79cad60c 100644 --- a/api-tests/ff/ipc/test_i033/test_i033.c +++ b/api-tests/ff/ipc/test_i033/test_i033.c @@ -40,14 +40,14 @@ int32_t client_test_psa_read_with_invec_greater_than_max_iovec(caller_security_t val->print(PRINT_TEST, "[Check 1] Test psa_read with invec_idx > PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i033/test_i033.h b/api-tests/ff/ipc/test_i033/test_i033.h index b4f74cca..3ee55580 100644 --- a/api-tests/ff/ipc/test_i033/test_i033.h +++ b/api-tests/ff/ipc/test_i033/test_i033.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i033) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i033) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i033/test_supp_i033.c b/api-tests/ff/ipc/test_i033/test_supp_i033.c index 425c255a..676c1cdc 100644 --- a/api-tests/ff/ipc/test_i033/test_supp_i033.c +++ b/api-tests/ff/ipc/test_i033/test_supp_i033.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_read_with_invec_greater_than_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_read_with_invec_greater_than_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -105,7 +105,7 @@ int32_t server_test_psa_read_with_invec_greater_than_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i034/test_i034.c b/api-tests/ff/ipc/test_i034/test_i034.c index f7f14fff..a5a18b83 100644 --- a/api-tests/ff/ipc/test_i034/test_i034.c +++ b/api-tests/ff/ipc/test_i034/test_i034.c @@ -37,7 +37,7 @@ int32_t client_test_psa_skip_at_ipc_connect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_skip at PSA_IPC_CONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); /* Shouldn't have reached here */ val->print(PRINT_ERROR, "\tConnection should have failed but succeeded\n", 0); diff --git a/api-tests/ff/ipc/test_i034/test_i034.h b/api-tests/ff/ipc/test_i034/test_i034.h index 0f0d5b94..0c0001f1 100644 --- a/api-tests/ff/ipc/test_i034/test_i034.h +++ b/api-tests/ff/ipc/test_i034/test_i034.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i034) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i034) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i034/test_supp_i034.c b/api-tests/ff/ipc/test_i034/test_supp_i034.c index 2580d99f..b455d232 100644 --- a/api-tests/ff/ipc/test_i034/test_supp_i034.c +++ b/api-tests/ff/ipc/test_i034/test_supp_i034.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_at_ipc_connect(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i035/test_i035.c b/api-tests/ff/ipc/test_i035/test_i035.c index 1556e7ef..aea9bd9c 100644 --- a/api-tests/ff/ipc/test_i035/test_i035.c +++ b/api-tests/ff/ipc/test_i035/test_i035.c @@ -37,8 +37,8 @@ int32_t client_test_psa_skip_at_ipc_disconnect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_skip at PSA_IPC_DISCONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); - if (handle > 0) + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i035/test_i035.h b/api-tests/ff/ipc/test_i035/test_i035.h index 13129738..8ebc1c33 100644 --- a/api-tests/ff/ipc/test_i035/test_i035.h +++ b/api-tests/ff/ipc/test_i035/test_i035.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i035) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i035) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i035/test_supp_i035.c b/api-tests/ff/ipc/test_i035/test_supp_i035.c index a3551488..c9caa9e1 100644 --- a/api-tests/ff/ipc/test_i035/test_supp_i035.c +++ b/api-tests/ff/ipc/test_i035/test_supp_i035.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_at_ipc_disconnect() * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -66,7 +66,7 @@ int32_t server_test_psa_skip_at_ipc_disconnect() } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_disconnect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_SUCCESS); diff --git a/api-tests/ff/ipc/test_i036/test_i036.c b/api-tests/ff/ipc/test_i036/test_i036.c index 87f6f2a6..a54ab145 100644 --- a/api-tests/ff/ipc/test_i036/test_i036.c +++ b/api-tests/ff/ipc/test_i036/test_i036.c @@ -40,14 +40,14 @@ int32_t client_test_psa_skip_with_null_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_skip with NULL handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i036/test_i036.h b/api-tests/ff/ipc/test_i036/test_i036.h index 7be6f54a..ebce979f 100644 --- a/api-tests/ff/ipc/test_i036/test_i036.h +++ b/api-tests/ff/ipc/test_i036/test_i036.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i036) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i036) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i036/test_supp_i036.c b/api-tests/ff/ipc/test_i036/test_supp_i036.c index b61bbfe7..1a47f3f8 100644 --- a/api-tests/ff/ipc/test_i036/test_supp_i036.c +++ b/api-tests/ff/ipc/test_i036/test_supp_i036.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_with_null_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -67,7 +67,7 @@ int32_t server_test_psa_skip_with_null_handle(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -102,7 +102,7 @@ int32_t server_test_psa_skip_with_null_handle(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i037/test_i037.c b/api-tests/ff/ipc/test_i037/test_i037.c index 306990e8..c428c434 100644 --- a/api-tests/ff/ipc/test_i037/test_i037.c +++ b/api-tests/ff/ipc/test_i037/test_i037.c @@ -40,14 +40,14 @@ int32_t client_test_psa_skip_with_invalid_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_skip with invalid handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i037/test_i037.h b/api-tests/ff/ipc/test_i037/test_i037.h index 051565fc..29d6346b 100644 --- a/api-tests/ff/ipc/test_i037/test_i037.h +++ b/api-tests/ff/ipc/test_i037/test_i037.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i037) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i037) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i037/test_supp_i037.c b/api-tests/ff/ipc/test_i037/test_supp_i037.c index 9ed99633..a4d0f6f6 100644 --- a/api-tests/ff/ipc/test_i037/test_supp_i037.c +++ b/api-tests/ff/ipc/test_i037/test_supp_i037.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_with_invalid_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -67,7 +67,7 @@ int32_t server_test_psa_skip_with_invalid_handle(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -102,7 +102,7 @@ int32_t server_test_psa_skip_with_invalid_handle(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i038/test_i038.c b/api-tests/ff/ipc/test_i038/test_i038.c index 2cb1f9f7..b75ed58a 100644 --- a/api-tests/ff/ipc/test_i038/test_i038.c +++ b/api-tests/ff/ipc/test_i038/test_i038.c @@ -40,14 +40,14 @@ int32_t client_test_psa_skip_with_invec_equal_to_max_iovec(caller_security_t cal val->print(PRINT_TEST, "[Check 1] Test psa_skip with invec_idx=PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i038/test_i038.h b/api-tests/ff/ipc/test_i038/test_i038.h index 8da20a35..162466f0 100644 --- a/api-tests/ff/ipc/test_i038/test_i038.h +++ b/api-tests/ff/ipc/test_i038/test_i038.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i038) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i038) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i038/test_supp_i038.c b/api-tests/ff/ipc/test_i038/test_supp_i038.c index 540440d1..bcd8dbe5 100644 --- a/api-tests/ff/ipc/test_i038/test_supp_i038.c +++ b/api-tests/ff/ipc/test_i038/test_supp_i038.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_with_invec_equal_to_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -67,7 +67,7 @@ int32_t server_test_psa_skip_with_invec_equal_to_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -104,7 +104,7 @@ int32_t server_test_psa_skip_with_invec_equal_to_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i039/test_i039.c b/api-tests/ff/ipc/test_i039/test_i039.c index 2582094f..c6cdd244 100644 --- a/api-tests/ff/ipc/test_i039/test_i039.c +++ b/api-tests/ff/ipc/test_i039/test_i039.c @@ -40,14 +40,14 @@ int32_t client_test_psa_skip_with_invec_greater_than_max_iovec(caller_security_t val->print(PRINT_TEST, "[Check 1] Test psa_skip with invec_idx > PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i039/test_i039.h b/api-tests/ff/ipc/test_i039/test_i039.h index e9862df6..9d5ae477 100644 --- a/api-tests/ff/ipc/test_i039/test_i039.h +++ b/api-tests/ff/ipc/test_i039/test_i039.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i039) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i039) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i039/test_supp_i039.c b/api-tests/ff/ipc/test_i039/test_supp_i039.c index 9b4b3c6e..eb788b85 100644 --- a/api-tests/ff/ipc/test_i039/test_supp_i039.c +++ b/api-tests/ff/ipc/test_i039/test_supp_i039.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -58,7 +58,7 @@ int32_t server_test_psa_skip_with_invec_greater_than_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -67,7 +67,7 @@ int32_t server_test_psa_skip_with_invec_greater_than_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -104,7 +104,7 @@ int32_t server_test_psa_skip_with_invec_greater_than_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i040/test_i040.c b/api-tests/ff/ipc/test_i040/test_i040.c index 412f0bf3..18c95bfe 100644 --- a/api-tests/ff/ipc/test_i040/test_i040.c +++ b/api-tests/ff/ipc/test_i040/test_i040.c @@ -37,7 +37,7 @@ int32_t client_test_psa_write_at_ipc_connect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write at PSA_IPC_CONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); /* Shouldn't have reached here */ val->print(PRINT_ERROR, "\tConnection should have failed but succeeded\n", 0); diff --git a/api-tests/ff/ipc/test_i040/test_i040.h b/api-tests/ff/ipc/test_i040/test_i040.h index de982eb7..f865a10b 100644 --- a/api-tests/ff/ipc/test_i040/test_i040.h +++ b/api-tests/ff/ipc/test_i040/test_i040.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i040) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i040) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i040/test_supp_i040.c b/api-tests/ff/ipc/test_i040/test_supp_i040.c index 8ea608b1..2ba2015f 100644 --- a/api-tests/ff/ipc/test_i040/test_supp_i040.c +++ b/api-tests/ff/ipc/test_i040/test_supp_i040.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_at_ipc_connect(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i041/test_i041.c b/api-tests/ff/ipc/test_i041/test_i041.c index bd5060de..2866b6c0 100644 --- a/api-tests/ff/ipc/test_i041/test_i041.c +++ b/api-tests/ff/ipc/test_i041/test_i041.c @@ -37,8 +37,8 @@ int32_t client_test_psa_write_at_ipc_disconnect(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write at PSA_IPC_DISCONNECT\n", 0); - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); - if (handle > 0) + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i041/test_i041.h b/api-tests/ff/ipc/test_i041/test_i041.h index 617639b3..c43d574b 100644 --- a/api-tests/ff/ipc/test_i041/test_i041.h +++ b/api-tests/ff/ipc/test_i041/test_i041.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i041) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i041) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i041/test_supp_i041.c b/api-tests/ff/ipc/test_i041/test_supp_i041.c index 8b3d2b31..d7365ac1 100644 --- a/api-tests/ff/ipc/test_i041/test_supp_i041.c +++ b/api-tests/ff/ipc/test_i041/test_supp_i041.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_at_ipc_disconnect(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_connect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -69,7 +69,7 @@ int32_t server_test_psa_write_at_ipc_disconnect(void) } psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_RELAX_MINOR_VERSION_SIG, &msg); + status = val->process_disconnect_request(SERVER_RELAX_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_SUCCESS); diff --git a/api-tests/ff/ipc/test_i042/test_i042.c b/api-tests/ff/ipc/test_i042/test_i042.c index 522f558d..9977cb51 100644 --- a/api-tests/ff/ipc/test_i042/test_i042.c +++ b/api-tests/ff/ipc/test_i042/test_i042.c @@ -40,14 +40,14 @@ int32_t client_test_psa_write_with_null_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write with NULL handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i042/test_i042.h b/api-tests/ff/ipc/test_i042/test_i042.h index fd25e4b6..42713dfd 100644 --- a/api-tests/ff/ipc/test_i042/test_i042.h +++ b/api-tests/ff/ipc/test_i042/test_i042.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i042) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i042) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i042/test_supp_i042.c b/api-tests/ff/ipc/test_i042/test_supp_i042.c index 1257cdfc..0ea1a9ac 100644 --- a/api-tests/ff/ipc/test_i042/test_supp_i042.c +++ b/api-tests/ff/ipc/test_i042/test_supp_i042.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -59,7 +59,7 @@ int32_t server_test_psa_write_with_null_handle() * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -68,7 +68,7 @@ int32_t server_test_psa_write_with_null_handle() psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -101,7 +101,7 @@ int32_t server_test_psa_write_with_null_handle() } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i043/test_i043.c b/api-tests/ff/ipc/test_i043/test_i043.c index aeeea43e..e0689104 100644 --- a/api-tests/ff/ipc/test_i043/test_i043.c +++ b/api-tests/ff/ipc/test_i043/test_i043.c @@ -40,14 +40,14 @@ int32_t client_test_psa_write_with_invalid_handle(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write with invalid handle\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i043/test_i043.h b/api-tests/ff/ipc/test_i043/test_i043.h index e618a3da..56250f9a 100644 --- a/api-tests/ff/ipc/test_i043/test_i043.h +++ b/api-tests/ff/ipc/test_i043/test_i043.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i043) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i043) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i043/test_supp_i043.c b/api-tests/ff/ipc/test_i043/test_supp_i043.c index 51237539..a5dcc9b3 100644 --- a/api-tests/ff/ipc/test_i043/test_supp_i043.c +++ b/api-tests/ff/ipc/test_i043/test_supp_i043.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_with_invalid_handle(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_write_with_invalid_handle(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -106,7 +106,7 @@ int32_t server_test_psa_write_with_invalid_handle(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i044/test_i044.c b/api-tests/ff/ipc/test_i044/test_i044.c index 339d84dd..f67150ae 100644 --- a/api-tests/ff/ipc/test_i044/test_i044.c +++ b/api-tests/ff/ipc/test_i044/test_i044.c @@ -40,14 +40,14 @@ int32_t client_test_psa_write_with_invec_equal_to_max_iovec(caller_security_t ca val->print(PRINT_TEST, "[Check 1] Test psa_write with invec_idx=PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i044/test_i044.h b/api-tests/ff/ipc/test_i044/test_i044.h index 423b9236..19e32d38 100644 --- a/api-tests/ff/ipc/test_i044/test_i044.h +++ b/api-tests/ff/ipc/test_i044/test_i044.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i044) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i044) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i044/test_supp_i044.c b/api-tests/ff/ipc/test_i044/test_supp_i044.c index b4e4cae3..3b506969 100644 --- a/api-tests/ff/ipc/test_i044/test_supp_i044.c +++ b/api-tests/ff/ipc/test_i044/test_supp_i044.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_with_invec_equal_to_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_write_with_invec_equal_to_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -106,7 +106,7 @@ int32_t server_test_psa_write_with_invec_equal_to_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i045/test_i045.c b/api-tests/ff/ipc/test_i045/test_i045.c index a0461065..1b4c6b48 100644 --- a/api-tests/ff/ipc/test_i045/test_i045.c +++ b/api-tests/ff/ipc/test_i045/test_i045.c @@ -40,14 +40,14 @@ int32_t client_test_psa_write_with_invec_greater_than_max_iovec(caller_security_ val->print(PRINT_TEST, "[Check 1] Test psa_write with invec_idx > PSA_MAX_IOVEC\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } - status_of_call = psa->call(handle, NULL, 0, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i045/test_i045.h b/api-tests/ff/ipc/test_i045/test_i045.h index 66221a87..04e11c00 100644 --- a/api-tests/ff/ipc/test_i045/test_i045.h +++ b/api-tests/ff/ipc/test_i045/test_i045.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i045) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i045) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i045/test_supp_i045.c b/api-tests/ff/ipc/test_i045/test_supp_i045.c index 260e6ff7..caeb823b 100644 --- a/api-tests/ff/ipc/test_i045/test_supp_i045.c +++ b/api-tests/ff/ipc/test_i045/test_supp_i045.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_with_invec_greater_than_max_iovec(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_write_with_invec_greater_than_max_iovec(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -106,7 +106,7 @@ int32_t server_test_psa_write_with_invec_greater_than_max_iovec(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i046/test_i046.c b/api-tests/ff/ipc/test_i046/test_i046.c index 7281286d..f0efdf55 100644 --- a/api-tests/ff/ipc/test_i046/test_i046.c +++ b/api-tests/ff/ipc/test_i046/test_i046.c @@ -41,8 +41,8 @@ int32_t client_test_psa_write_with_size_overflow(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write with size overflow\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -50,7 +50,7 @@ int32_t client_test_psa_write_with_size_overflow(caller_security_t caller) psa_outvec resp = {&data, sizeof(data)}; - status_of_call = psa->call(handle, NULL, 0, &resp, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, &resp, 1); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i046/test_i046.h b/api-tests/ff/ipc/test_i046/test_i046.h index 340bd124..f2f7a7ef 100644 --- a/api-tests/ff/ipc/test_i046/test_i046.h +++ b/api-tests/ff/ipc/test_i046/test_i046.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i046) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i046) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i046/test_supp_i046.c b/api-tests/ff/ipc/test_i046/test_supp_i046.c index 8a4513a2..450d7126 100644 --- a/api-tests/ff/ipc/test_i046/test_supp_i046.c +++ b/api-tests/ff/ipc/test_i046/test_supp_i046.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -61,7 +61,7 @@ int32_t server_test_psa_write_with_size_overflow(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -70,7 +70,7 @@ int32_t server_test_psa_write_with_size_overflow(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -106,7 +106,7 @@ int32_t server_test_psa_write_with_size_overflow(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i047/test_i047.c b/api-tests/ff/ipc/test_i047/test_i047.c index 3271b93e..d08096ba 100644 --- a/api-tests/ff/ipc/test_i047/test_i047.c +++ b/api-tests/ff/ipc/test_i047/test_i047.c @@ -38,8 +38,8 @@ int32_t client_test_psa_get_with_invalid_msg_pointer(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_get with invalid msg pointer\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle > 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { psa->close(handle); } diff --git a/api-tests/ff/ipc/test_i047/test_i047.h b/api-tests/ff/ipc/test_i047/test_i047.h index db30d764..c8f2d526 100644 --- a/api-tests/ff/ipc/test_i047/test_i047.h +++ b/api-tests/ff/ipc/test_i047/test_i047.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i047) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i047) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i047/test_supp_i047.c b/api-tests/ff/ipc/test_i047/test_supp_i047.c index 82e43df6..eeef0319 100644 --- a/api-tests/ff/ipc/test_i047/test_supp_i047.c +++ b/api-tests/ff/ipc/test_i047/test_supp_i047.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,6 @@ int32_t server_test_psa_get_with_invalid_msg_pointer(void) int32_t status = VAL_STATUS_SUCCESS; psa_signal_t signals = 0; psa_msg_t *invalid_msg = NULL; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; /* @@ -62,8 +61,8 @@ int32_t server_test_psa_get_with_invalid_msg_pointer(void) * VAL APIs to decide test status. */ - signals = psa->wait(SERVER_UNSPECIFED_MINOR_V_SIG, PSA_BLOCK); - if ((signals & SERVER_UNSPECIFED_MINOR_V_SIG) == 0) + signals = psa->wait(SERVER_UNSPECIFED_VERSION_SIGNAL, PSA_BLOCK); + if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, "psa_wait returned with invalid signal value = 0x%x\n", signals); @@ -79,22 +78,13 @@ int32_t server_test_psa_get_with_invalid_msg_pointer(void) * msg_pointer = NULL; */ - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) - { - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_DRIVER_PARTITION_MMIO, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { return status; } @@ -110,7 +100,7 @@ int32_t server_test_psa_get_with_invalid_msg_pointer(void) } /* psa_get with invalid msg pointer, call should panic */ - psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, invalid_msg); + psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, invalid_msg); /* shouldn't have reached here */ val->print(PRINT_ERROR, diff --git a/api-tests/ff/ipc/test_i048/test_i048.c b/api-tests/ff/ipc/test_i048/test_i048.c index 13f6d79f..d55611ae 100644 --- a/api-tests/ff/ipc/test_i048/test_i048.c +++ b/api-tests/ff/ipc/test_i048/test_i048.c @@ -37,7 +37,6 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t caller psa_handle_t handle = 0; psa_status_t status_of_call; boot_state_t boot_state; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; psa_invec *invalid_invec = NULL; @@ -66,9 +65,8 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t caller * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -102,18 +100,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t caller invalid_invec = (psa_invec *) memory_desc->start; else { - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - - if (val->err_check_set(TEST_CHECKPOINT_NUM(102), status)) - { - psa->close(handle); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) invalid_invec = (psa_invec *) memory_desc->start; } @@ -126,7 +113,7 @@ int32_t client_test_psa_call_with_invalid_invec_pointer(caller_security_t caller } /* Test check- psa_call with invalid address for in_vec */ - status_of_call = psa->call(handle, invalid_invec, 1, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, invalid_invec, 1, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i048/test_i048.h b/api-tests/ff/ipc/test_i048/test_i048.h index 05101e20..b614ac5a 100644 --- a/api-tests/ff/ipc/test_i048/test_i048.h +++ b/api-tests/ff/ipc/test_i048/test_i048.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i048) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i048) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i048/test_supp_i048.c b/api-tests/ff/ipc/test_i048/test_supp_i048.c index 51b11da5..167f2c34 100644 --- a/api-tests/ff/ipc/test_i048/test_supp_i048.c +++ b/api-tests/ff/ipc/test_i048/test_supp_i048.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_invec_pointer(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_invec_pointer(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_invec_pointer(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i049/test_i049.c b/api-tests/ff/ipc/test_i049/test_i049.c index db4b1f8f..590944de 100644 --- a/api-tests/ff/ipc/test_i049/test_i049.c +++ b/api-tests/ff/ipc/test_i049/test_i049.c @@ -37,7 +37,6 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t calle psa_handle_t handle = 0; psa_status_t status_of_call; boot_state_t boot_state; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; psa_outvec *invalid_outvec = NULL; @@ -66,9 +65,8 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t calle * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -102,18 +100,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t calle invalid_outvec = (psa_outvec *) memory_desc->start; else { - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - - if (val->err_check_set(TEST_CHECKPOINT_NUM(102), status)) - { - psa->close(handle); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) invalid_outvec = (psa_outvec *) memory_desc->start; } @@ -126,7 +113,7 @@ int32_t client_test_psa_call_with_invalid_outvec_pointer(caller_security_t calle } /* Test check- psa_call with invalid address for outvec */ - status_of_call = psa->call(handle, NULL, 0, invalid_outvec, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, invalid_outvec, 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i049/test_i049.h b/api-tests/ff/ipc/test_i049/test_i049.h index 90aa10b5..9dcdbaf7 100644 --- a/api-tests/ff/ipc/test_i049/test_i049.h +++ b/api-tests/ff/ipc/test_i049/test_i049.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i049) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i049) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i049/test_supp_i049.c b/api-tests/ff/ipc/test_i049/test_supp_i049.c index 23b52b8c..0d62b785 100644 --- a/api-tests/ff/ipc/test_i049/test_supp_i049.c +++ b/api-tests/ff/ipc/test_i049/test_supp_i049.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_outvec_pointer(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_outvec_pointer(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_outvec_pointer(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i050/test_i050.c b/api-tests/ff/ipc/test_i050/test_i050.c index 46f09b53..6418b6ef 100644 --- a/api-tests/ff/ipc/test_i050/test_i050.c +++ b/api-tests/ff/ipc/test_i050/test_i050.c @@ -37,7 +37,6 @@ int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t caller) psa_handle_t handle = 0; psa_status_t status_of_call; boot_state_t boot_state; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; addr_t *invalid_base = NULL; @@ -66,9 +65,8 @@ int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t caller) * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -102,18 +100,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t caller) invalid_base = (addr_t *) memory_desc->start; else { - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - - if (val->err_check_set(TEST_CHECKPOINT_NUM(102), status)) - { - psa->close(handle); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) invalid_base = (addr_t *) memory_desc->start; } @@ -128,7 +115,7 @@ int32_t client_test_psa_call_with_invalid_invec_base(caller_security_t caller) psa_invec invec[1] = {{invalid_base, sizeof(addr_t)}}; /* Test check- psa_call with invalid address for psa_invec.base */ - status_of_call = psa->call(handle, invec, 1, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, invec, 1, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i050/test_i050.h b/api-tests/ff/ipc/test_i050/test_i050.h index 0c3e1116..c946db92 100644 --- a/api-tests/ff/ipc/test_i050/test_i050.h +++ b/api-tests/ff/ipc/test_i050/test_i050.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i050) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i050) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i050/test_supp_i050.c b/api-tests/ff/ipc/test_i050/test_supp_i050.c index 9c09445e..cf8fb794 100644 --- a/api-tests/ff/ipc/test_i050/test_supp_i050.c +++ b/api-tests/ff/ipc/test_i050/test_supp_i050.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_invec_base(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_invec_base(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_invec_base(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i051/test_i051.c b/api-tests/ff/ipc/test_i051/test_i051.c index 0183fc98..2c44181b 100644 --- a/api-tests/ff/ipc/test_i051/test_i051.c +++ b/api-tests/ff/ipc/test_i051/test_i051.c @@ -37,7 +37,6 @@ int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t caller) psa_handle_t handle = 0; psa_status_t status_of_call; boot_state_t boot_state; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; addr_t *invalid_base = NULL; @@ -66,9 +65,8 @@ int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t caller) * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -102,18 +100,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t caller) invalid_base = (addr_t *) memory_desc->start; else { - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - - if (val->err_check_set(TEST_CHECKPOINT_NUM(102), status)) - { - psa->close(handle); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) invalid_base = (addr_t *) memory_desc->start; } @@ -128,7 +115,7 @@ int32_t client_test_psa_call_with_invalid_outvec_base(caller_security_t caller) psa_outvec outvec[1] = {{invalid_base, sizeof(addr_t)}}; /* Test check- psa_call with invalid address for psa_outvec.base */ - status_of_call = psa->call(handle, NULL, 0, outvec, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i051/test_i051.h b/api-tests/ff/ipc/test_i051/test_i051.h index 4f76c00b..ecd1c22e 100644 --- a/api-tests/ff/ipc/test_i051/test_i051.h +++ b/api-tests/ff/ipc/test_i051/test_i051.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i051) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i051) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i051/test_supp_i051.c b/api-tests/ff/ipc/test_i051/test_supp_i051.c index 0d3be0b6..42cda891 100644 --- a/api-tests/ff/ipc/test_i051/test_supp_i051.c +++ b/api-tests/ff/ipc/test_i051/test_supp_i051.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_outvec_base(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_outvec_base(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_outvec_base(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i052/test_entry_i052.c b/api-tests/ff/ipc/test_i052/test_entry_i052.c index ddbc149e..bf642a45 100644 --- a/api-tests/ff/ipc/test_i052/test_entry_i052.c +++ b/api-tests/ff/ipc/test_i052/test_entry_i052.c @@ -28,7 +28,6 @@ psa_api_t *psa = NULL; void test_entry(val_api_t *val_api, psa_api_t *psa_api) { int32_t status = VAL_STATUS_SUCCESS; - miscellaneous_desc_t *misc_desc; val = val_api; psa = psa_api; @@ -47,16 +46,7 @@ void test_entry(val_api_t *val_api, psa_api_t *psa_api) goto test_exit; } - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (VAL_ERROR(status)) - { - goto test_exit; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) { /* Switch to secure side (client_partition.c) and execute list of tests available in test[num]_client_tests_list from Secure side */ diff --git a/api-tests/ff/ipc/test_i052/test_i052.c b/api-tests/ff/ipc/test_i052/test_i052.c index f90a48f3..724ecd3d 100644 --- a/api-tests/ff/ipc/test_i052/test_i052.c +++ b/api-tests/ff/ipc/test_i052/test_i052.c @@ -67,9 +67,8 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(caller_security_t calle * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -126,7 +125,7 @@ int32_t client_test_psa_call_with_invalid_invec_end_addr(caller_security_t calle psa_invec invec[1] = {{valid_base, invalid_size}}; /* Test check- psa_call with invalid end_addr for psa_invec */ - status_of_call = psa->call(handle, invec, 1, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, invec, 1, NULL, 0); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i052/test_i052.h b/api-tests/ff/ipc/test_i052/test_i052.h index 32edabce..4b533714 100644 --- a/api-tests/ff/ipc/test_i052/test_i052.h +++ b/api-tests/ff/ipc/test_i052/test_i052.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i052) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i052) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i052/test_supp_i052.c b/api-tests/ff/ipc/test_i052/test_supp_i052.c index 31bc32b4..760ec0cb 100644 --- a/api-tests/ff/ipc/test_i052/test_supp_i052.c +++ b/api-tests/ff/ipc/test_i052/test_supp_i052.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_invec_end_addr(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_invec_end_addr(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_invec_end_addr(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i053/test_entry_i053.c b/api-tests/ff/ipc/test_i053/test_entry_i053.c index 014dfafa..0cfea2b1 100644 --- a/api-tests/ff/ipc/test_i053/test_entry_i053.c +++ b/api-tests/ff/ipc/test_i053/test_entry_i053.c @@ -28,7 +28,6 @@ psa_api_t *psa = NULL; void test_entry(val_api_t *val_api, psa_api_t *psa_api) { int32_t status = VAL_STATUS_SUCCESS; - miscellaneous_desc_t *misc_desc; val = val_api; psa = psa_api; @@ -47,16 +46,7 @@ void test_entry(val_api_t *val_api, psa_api_t *psa_api) goto test_exit; } - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (VAL_ERROR(status)) - { - goto test_exit; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) { /* Switch to secure side (client_partition.c) and execute list of tests available in test[num]_client_tests_list from Secure side */ diff --git a/api-tests/ff/ipc/test_i053/test_i053.c b/api-tests/ff/ipc/test_i053/test_i053.c index 025f5cd7..f08febcd 100644 --- a/api-tests/ff/ipc/test_i053/test_i053.c +++ b/api-tests/ff/ipc/test_i053/test_i053.c @@ -67,9 +67,8 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(caller_security_t call * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -126,7 +125,7 @@ int32_t client_test_psa_call_with_invalid_outvec_end_addr(caller_security_t call psa_outvec outvec[1] = {{valid_base, invalid_size}}; /* Test check- psa_call with invalid end_addr for psa_outvec */ - status_of_call = psa->call(handle, NULL, 0, outvec, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1); /* * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether diff --git a/api-tests/ff/ipc/test_i053/test_i053.h b/api-tests/ff/ipc/test_i053/test_i053.h index d1780df4..8efc2ed5 100644 --- a/api-tests/ff/ipc/test_i053/test_i053.h +++ b/api-tests/ff/ipc/test_i053/test_i053.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i053) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i053) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i053/test_supp_i053.c b/api-tests/ff/ipc/test_i053/test_supp_i053.c index 649e3c25..984ef259 100644 --- a/api-tests/ff/ipc/test_i053/test_supp_i053.c +++ b/api-tests/ff/ipc/test_i053/test_supp_i053.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_invalid_outvec_end_addr(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_invalid_outvec_end_addr(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_invalid_outvec_end_addr(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i054/test_i054.c b/api-tests/ff/ipc/test_i054/test_i054.c index 8f6f25fd..8c7caee4 100644 --- a/api-tests/ff/ipc/test_i054/test_i054.c +++ b/api-tests/ff/ipc/test_i054/test_i054.c @@ -61,8 +61,8 @@ int32_t client_test_psa_call_with_not_writable_outvec_base(caller_security_t cal * VAL APIs to decide test status. */ - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -79,7 +79,7 @@ int32_t client_test_psa_call_with_not_writable_outvec_base(caller_security_t cal psa_outvec outvec[1] = {{&client_test_psa_call_with_not_writable_outvec_base, sizeof(char)}}; /* Test check- psa_call with not writable psa_outvec.base, call should panic */ - psa->call(handle, NULL, 0, outvec, 1); + psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1); /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ val->print(PRINT_ERROR, "\tpsa_call should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i054/test_i054.h b/api-tests/ff/ipc/test_i054/test_i054.h index 74d4f468..48507261 100644 --- a/api-tests/ff/ipc/test_i054/test_i054.h +++ b/api-tests/ff/ipc/test_i054/test_i054.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i054) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i054) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i054/test_supp_i054.c b/api-tests/ff/ipc/test_i054/test_supp_i054.c index 75442576..ca8f4cc5 100644 --- a/api-tests/ff/ipc/test_i054/test_supp_i054.c +++ b/api-tests/ff/ipc/test_i054/test_supp_i054.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_call_with_not_writable_outvec_base(void) psa_msg_t msg = {0}; psa_signal_t signals; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -48,9 +48,9 @@ int32_t server_test_psa_call_with_not_writable_outvec_base(void) wait: signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) { goto wait; } @@ -60,7 +60,7 @@ int32_t server_test_psa_call_with_not_writable_outvec_base(void) /* Control shouldn't have come here */ val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); psa->reply(msg.handle, -2); - val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); psa->reply(msg.handle, PSA_SUCCESS); } else if (msg.type == PSA_IPC_DISCONNECT) diff --git a/api-tests/ff/ipc/test_i055/test_i055.c b/api-tests/ff/ipc/test_i055/test_i055.c index c5d72a74..16582f5f 100644 --- a/api-tests/ff/ipc/test_i055/test_i055.c +++ b/api-tests/ff/ipc/test_i055/test_i055.c @@ -41,15 +41,15 @@ int32_t client_test_psa_read_with_invalid_buffer_addr(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_read with invalid buffer addr\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } psa_invec invec[1] = {{&data, sizeof(data)}}; - status_of_call = psa->call(handle, invec, 1, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, invec, 1, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i055/test_i055.h b/api-tests/ff/ipc/test_i055/test_i055.h index 0bbd7d4b..0f949a0c 100644 --- a/api-tests/ff/ipc/test_i055/test_i055.h +++ b/api-tests/ff/ipc/test_i055/test_i055.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i055) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i055) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i055/test_supp_i055.c b/api-tests/ff/ipc/test_i055/test_supp_i055.c index 24867959..12439d7f 100644 --- a/api-tests/ff/ipc/test_i055/test_supp_i055.c +++ b/api-tests/ff/ipc/test_i055/test_supp_i055.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -36,7 +36,6 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; void *buffer = NULL; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; /* @@ -61,14 +60,13 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; } - /* * Selection of invalid buffer addr: * @@ -78,23 +76,13 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) * buffer = NULL; */ - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) - { - psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_DRIVER_PARTITION_MMIO, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; @@ -107,8 +95,8 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) psa->reply(msg.handle, PSA_SUCCESS); /* Serve psa_call */ - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); - if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { psa->reply(msg.handle, -2); } @@ -116,7 +104,7 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) { /* Setting boot.state before test check */ status = val->set_boot_flag(BOOT_EXPECTED_NS); - if (val->err_check_set(TEST_CHECKPOINT_NUM(205), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); psa->reply(msg.handle, -3); @@ -141,8 +129,8 @@ int32_t server_test_psa_read_with_invalid_buffer_addr(void) } } - val->err_check_set(TEST_CHECKPOINT_NUM(206), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + val->err_check_set(TEST_CHECKPOINT_NUM(205), status); + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i056/test_i056.c b/api-tests/ff/ipc/test_i056/test_i056.c index 2b1bee3e..f0697bca 100644 --- a/api-tests/ff/ipc/test_i056/test_i056.c +++ b/api-tests/ff/ipc/test_i056/test_i056.c @@ -41,15 +41,15 @@ int32_t client_test_psa_read_with_not_writable_buffer_addr(caller_security_t cal val->print(PRINT_TEST, "[Check 1] Test psa_read with invalid buffer addr\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } psa_invec invec[1] = {{&data, sizeof(data)}}; - status_of_call = psa->call(handle, invec, 1, NULL, 0); + status_of_call = psa->call(handle, PSA_IPC_CALL, invec, 1, NULL, 0); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i056/test_i056.h b/api-tests/ff/ipc/test_i056/test_i056.h index f93524e2..1c2dcfe5 100644 --- a/api-tests/ff/ipc/test_i056/test_i056.h +++ b/api-tests/ff/ipc/test_i056/test_i056.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i056) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i056) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i056/test_supp_i056.c b/api-tests/ff/ipc/test_i056/test_supp_i056.c index 3a863102..655d62a4 100644 --- a/api-tests/ff/ipc/test_i056/test_supp_i056.c +++ b/api-tests/ff/ipc/test_i056/test_supp_i056.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -59,7 +59,7 @@ int32_t server_test_psa_read_with_not_writable_buffer_addr(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -73,7 +73,7 @@ int32_t server_test_psa_read_with_not_writable_buffer_addr(void) buffer = (void *) &server_test_psa_read_with_not_writable_buffer_addr; /* Serve psa_call */ - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); @@ -109,7 +109,7 @@ int32_t server_test_psa_read_with_not_writable_buffer_addr(void) } val->err_check_set(TEST_CHECKPOINT_NUM(204), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i057/test_i057.c b/api-tests/ff/ipc/test_i057/test_i057.c index ca43cb9b..29953932 100644 --- a/api-tests/ff/ipc/test_i057/test_i057.c +++ b/api-tests/ff/ipc/test_i057/test_i057.c @@ -41,15 +41,15 @@ int32_t client_test_psa_write_with_invalid_buffer_addr(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_write with invalid buffer addr\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; } psa_outvec outvec[1] = {{&data, sizeof(data)}}; - status_of_call = psa->call(handle, NULL, 0, outvec, 1); + status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1); /* Expectation is server test should hang and control shouldn't have come here */ val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); diff --git a/api-tests/ff/ipc/test_i057/test_i057.h b/api-tests/ff/ipc/test_i057/test_i057.h index de59b550..8fa8a1de 100644 --- a/api-tests/ff/ipc/test_i057/test_i057.h +++ b/api-tests/ff/ipc/test_i057/test_i057.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i057) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i057) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i057/test_supp_i057.c b/api-tests/ff/ipc/test_i057/test_supp_i057.c index 2b0510e4..e6ad3661 100644 --- a/api-tests/ff/ipc/test_i057/test_supp_i057.c +++ b/api-tests/ff/ipc/test_i057/test_supp_i057.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -36,7 +36,6 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; void *buffer = NULL; - miscellaneous_desc_t *misc_desc; memory_desc_t *memory_desc; /* @@ -61,14 +60,13 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) * VAL APIs to decide test status. */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; } - /* * Selection of invalid buffer addr: * @@ -78,23 +76,13 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) * buffer = NULL; */ - status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) - { - psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); - return status; - } - - if (misc_desc->implemented_psa_firmware_isolation_level > LEVEL1) + if (PLATFORM_PSA_ISOLATION_LEVEL > LEVEL1) { status = val->target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MEMORY, MEMORY_DRIVER_PARTITION_MMIO, 0), (uint8_t **)&memory_desc, (uint32_t *)sizeof(memory_desc_t)); - if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); return status; @@ -107,8 +95,8 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) psa->reply(msg.handle, PSA_SUCCESS); /* Server psa_call */ - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); - if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { psa->reply(msg.handle, -2); } @@ -116,7 +104,7 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) { /* Setting boot.state before test check */ status = val->set_boot_flag(BOOT_EXPECTED_NS); - if (val->err_check_set(TEST_CHECKPOINT_NUM(205), status)) + if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); psa->reply(msg.handle, -3); @@ -141,8 +129,8 @@ int32_t server_test_psa_write_with_invalid_buffer_addr(void) } } - val->err_check_set(TEST_CHECKPOINT_NUM(206), status); - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + val->err_check_set(TEST_CHECKPOINT_NUM(205), status); + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); psa->reply(msg.handle, PSA_SUCCESS); return status; diff --git a/api-tests/ff/ipc/test_i058/test_i058.c b/api-tests/ff/ipc/test_i058/test_i058.c index a9a242e1..b1fc4fcd 100644 --- a/api-tests/ff/ipc/test_i058/test_i058.c +++ b/api-tests/ff/ipc/test_i058/test_i058.c @@ -42,8 +42,8 @@ int32_t client_test_psa_doorbell_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test PSA_DOORBELL signal\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i058/test_i058.h b/api-tests/ff/ipc/test_i058/test_i058.h index e08e5ae8..180a5ccb 100644 --- a/api-tests/ff/ipc/test_i058/test_i058.h +++ b/api-tests/ff/ipc/test_i058/test_i058.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i058) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i058) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i058/test_supp_i058.c b/api-tests/ff/ipc/test_i058/test_supp_i058.c index 9a01ef73..72b1bf95 100644 --- a/api-tests/ff/ipc/test_i058/test_supp_i058.c +++ b/api-tests/ff/ipc/test_i058/test_supp_i058.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -37,7 +37,7 @@ int32_t server_test_psa_doorbell_signal(void) psa_msg_t msg = {0}; /* Serve psa_connect */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -59,7 +59,7 @@ int32_t server_test_psa_doorbell_signal(void) } /* Serve psa_close */ - status = ((val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg)) + status = ((val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg)) ? VAL_STATUS_ERROR : status); val->err_check_set(TEST_CHECKPOINT_NUM(202), status); psa->reply(msg.handle, PSA_SUCCESS); diff --git a/api-tests/ff/ipc/test_i059/test_i059.h b/api-tests/ff/ipc/test_i059/test_i059.h index 0fc6fddd..a56dd8ba 100644 --- a/api-tests/ff/ipc/test_i059/test_i059.h +++ b/api-tests/ff/ipc/test_i059/test_i059.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i059) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i059) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i059/test_supp_i059.c b/api-tests/ff/ipc/test_i059/test_supp_i059.c index ed08784c..ef0b67ab 100644 --- a/api-tests/ff/ipc/test_i059/test_supp_i059.c +++ b/api-tests/ff/ipc/test_i059/test_supp_i059.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i060/test_i060.h b/api-tests/ff/ipc/test_i060/test_i060.h index f9813ed7..0cdc2bed 100644 --- a/api-tests/ff/ipc/test_i060/test_i060.h +++ b/api-tests/ff/ipc/test_i060/test_i060.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i060) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i060) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i060/test_supp_i060.c b/api-tests/ff/ipc/test_i060/test_supp_i060.c index 05b3b7fb..79d0a16f 100644 --- a/api-tests/ff/ipc/test_i060/test_supp_i060.c +++ b/api-tests/ff/ipc/test_i060/test_supp_i060.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i061/test_i061.h b/api-tests/ff/ipc/test_i061/test_i061.h index efd59e52..3c3344c8 100644 --- a/api-tests/ff/ipc/test_i061/test_i061.h +++ b/api-tests/ff/ipc/test_i061/test_i061.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i061) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i061) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i061/test_supp_i061.c b/api-tests/ff/ipc/test_i061/test_supp_i061.c index 15421142..8e78916d 100644 --- a/api-tests/ff/ipc/test_i061/test_supp_i061.c +++ b/api-tests/ff/ipc/test_i061/test_supp_i061.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i062/test_i062.h b/api-tests/ff/ipc/test_i062/test_i062.h index 13555c7d..ddd3cf39 100644 --- a/api-tests/ff/ipc/test_i062/test_i062.h +++ b/api-tests/ff/ipc/test_i062/test_i062.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i062) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i062) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i062/test_supp_i062.c b/api-tests/ff/ipc/test_i062/test_supp_i062.c index 30e2d5d0..6cec5372 100644 --- a/api-tests/ff/ipc/test_i062/test_supp_i062.c +++ b/api-tests/ff/ipc/test_i062/test_supp_i062.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i063/test_i063.c b/api-tests/ff/ipc/test_i063/test_i063.c index 1678877f..579d5f6c 100644 --- a/api-tests/ff/ipc/test_i063/test_i063.c +++ b/api-tests/ff/ipc/test_i063/test_i063.c @@ -37,7 +37,7 @@ int32_t client_test_psa_wait_signal_mask(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_wait signal mask\n", 0); - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); if (handle != PSA_ERROR_CONNECTION_REFUSED) { @@ -45,7 +45,7 @@ int32_t client_test_psa_wait_signal_mask(caller_security_t caller) return VAL_STATUS_INVALID_HANDLE; } - handle = psa->connect(SERVER_RELAX_MINOR_VERSION_SID, 1); + handle = psa->connect(SERVER_RELAX_VERSION_SID, SERVER_RELAX_VERSION_VERSION); if (handle != PSA_ERROR_CONNECTION_REFUSED) { diff --git a/api-tests/ff/ipc/test_i063/test_i063.h b/api-tests/ff/ipc/test_i063/test_i063.h index 867f1869..c5115a90 100644 --- a/api-tests/ff/ipc/test_i063/test_i063.h +++ b/api-tests/ff/ipc/test_i063/test_i063.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i063) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i063) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i063/test_supp_i063.c b/api-tests/ff/ipc/test_i063/test_supp_i063.c index d7555e97..ab7ccf37 100644 --- a/api-tests/ff/ipc/test_i063/test_supp_i063.c +++ b/api-tests/ff/ipc/test_i063/test_supp_i063.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -36,7 +36,7 @@ int32_t server_test_psa_wait_signal_mask(void) psa_signal_t signals = 0; psa_msg_t msg = {0}; int loop_cnt = 2; - psa_signal_t signal_mask = (SERVER_UNSPECIFED_MINOR_V_SIG | SERVER_RELAX_MINOR_VERSION_SIG); + psa_signal_t signal_mask = (SERVER_UNSPECIFED_VERSION_SIGNAL | SERVER_RELAX_VERSION_SIGNAL); /* Debug print */ val->err_check_set(TEST_CHECKPOINT_NUM(211), VAL_STATUS_SUCCESS); @@ -45,8 +45,8 @@ int32_t server_test_psa_wait_signal_mask(void) * Notify client partition to make SERVER_SECURE_CONNECT_ONLY_SID connection request. * This connection request act as irritator to psa->wait(signal_mask) call and it is used * to cover the rule - Signals that are not in signal_mask should be ignored by psa_wait. - * This means, during the following while loop, returned signal vaule should not be - * SERVER_SECURE_CONNECT_ONLY_SIG as this signal is not part of signal_mask. + * This means, during the following while loop, returned signal value should not be + * SERVER_SECURE_CONNECT_ONLY_SIGNAL as this signal is not part of signal_mask. */ psa->notify(CLIENT_PARTITION); @@ -56,8 +56,8 @@ int32_t server_test_psa_wait_signal_mask(void) /* * Rule - Returned signals value must be subset signals indicated in the signal_mask. - * This mean signal value should be either SERVER_UNSPECIFED_MINOR_V_SIG - * or SERVER_RELAX_MINOR_VERSION_SIG. + * This mean signal value should be either SERVER_UNSPECIFED_VERSION_SIGNAL + * or SERVER_RELAX_VERSION_SIGNAL. */ if (((signals & signal_mask) == 0) && ((signals | signal_mask) != signal_mask)) @@ -66,17 +66,17 @@ int32_t server_test_psa_wait_signal_mask(void) "psa_wait-1 returned with invalid signal value = 0x%x\n", signals); return VAL_STATUS_ERROR; } - else if (signals & SERVER_UNSPECIFED_MINOR_V_SIG) + else if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) { - if (psa->get(SERVER_UNSPECIFED_MINOR_V_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) continue; loop_cnt--; psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); } - else if (signals & SERVER_RELAX_MINOR_VERSION_SIG) + else if (signals & SERVER_RELAX_VERSION_SIGNAL) { - if (psa->get(SERVER_RELAX_MINOR_VERSION_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_RELAX_VERSION_SIGNAL, &msg) != PSA_SUCCESS) continue; loop_cnt--; @@ -92,15 +92,15 @@ int32_t server_test_psa_wait_signal_mask(void) * At the end, completes the starved connection * request of SERVER_SECURE_CONNECT_ONLY_SID. */ - signals = psa->wait(SERVER_SECURE_CONNECT_ONLY_SIG, PSA_BLOCK); - if ((signals & SERVER_SECURE_CONNECT_ONLY_SIG) == 0) + signals = psa->wait(SERVER_SECURE_CONNECT_ONLY_SIGNAL, PSA_BLOCK); + if ((signals & SERVER_SECURE_CONNECT_ONLY_SIGNAL) == 0) { val->print(PRINT_ERROR, "psa_wait-2 returned with invalid signal value = 0x%x\n", signals); return VAL_STATUS_ERROR; } - if (psa->get(SERVER_SECURE_CONNECT_ONLY_SIG, &msg) != PSA_SUCCESS) + if (psa->get(SERVER_SECURE_CONNECT_ONLY_SIGNAL, &msg) != PSA_SUCCESS) goto wait; psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i064/test_i064.c b/api-tests/ff/ipc/test_i064/test_i064.c index 9f8cbee0..05c4f791 100644 --- a/api-tests/ff/ipc/test_i064/test_i064.c +++ b/api-tests/ff/ipc/test_i064/test_i064.c @@ -38,7 +38,7 @@ int32_t client_test_psa_eoi_with_non_intr_signal(caller_security_t caller) /* * The interrupt related test check is captured in driver_partition.c as this is the - * only partition in test suite that holds the interrupt line. The interrupt test check + * only partition in test suite that holds the interrupt source. The interrupt test check * is invoked by client by calling to DRIVER_TEST_SID RoT service of driver partition that * hold the test check. */ @@ -46,8 +46,8 @@ int32_t client_test_psa_eoi_with_non_intr_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_eoi with non-interrupt signal\n", 0); /* Connect to DRIVER_TEST_SID */ - handle = psa->connect(DRIVER_TEST_SID, 1); - if (handle < 0) + handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\t psa_connect failed. handle=0x%x\n", handle); return VAL_STATUS_SPM_FAILED; @@ -55,7 +55,7 @@ int32_t client_test_psa_eoi_with_non_intr_signal(caller_security_t caller) /* Execute driver function related to TEST_PSA_EOI_WITH_NON_INTR_SIGNAL */ psa_invec invec = {&driver_test_fn_id, sizeof(driver_test_fn_id)}; - psa->call(handle, &invec, 1, NULL, 0); + psa->call(handle, PSA_IPC_CALL, &invec, 1, NULL, 0); psa->close(handle); diff --git a/api-tests/ff/ipc/test_i064/test_i064.h b/api-tests/ff/ipc/test_i064/test_i064.h index d26010ea..d89997b1 100644 --- a/api-tests/ff/ipc/test_i064/test_i064.h +++ b/api-tests/ff/ipc/test_i064/test_i064.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i064) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i064) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i064/test_supp_i064.c b/api-tests/ff/ipc/test_i064/test_supp_i064.c index 5c486a74..58d96385 100644 --- a/api-tests/ff/ipc/test_i064/test_supp_i064.c +++ b/api-tests/ff/ipc/test_i064/test_supp_i064.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i065/test_i065.c b/api-tests/ff/ipc/test_i065/test_i065.c index dbc492d6..9fe7e9f8 100644 --- a/api-tests/ff/ipc/test_i065/test_i065.c +++ b/api-tests/ff/ipc/test_i065/test_i065.c @@ -38,7 +38,7 @@ int32_t client_test_psa_eoi_with_unasserted_signal(caller_security_t caller) /* * The interrupt related test check is captured in driver_partition.c as this is the - * only partition in test suite that holds the interrupt line. The interrupt test check + * only partition in test suite that holds the interrupt source. The interrupt test check * is invoked by client by calling to DRIVER_TEST_SID RoT service of driver partition that * hold the test check. */ @@ -46,8 +46,8 @@ int32_t client_test_psa_eoi_with_unasserted_signal(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_eoi with multiple signal\n", 0); /* Connect to DRIVER_TEST_SID */ - handle = psa->connect(DRIVER_TEST_SID, 1); - if (handle < 0) + handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\t psa_connect failed. handle=0x%x\n", handle); return VAL_STATUS_SPM_FAILED; @@ -55,7 +55,7 @@ int32_t client_test_psa_eoi_with_unasserted_signal(caller_security_t caller) /* Execute driver function related to TEST_PSA_EOI_WITH_UNASSERTED_SIGNAL */ psa_invec invec = {&driver_test_fn_id, sizeof(driver_test_fn_id)}; - psa->call(handle, &invec, 1, NULL, 0); + psa->call(handle, PSA_IPC_CALL, &invec, 1, NULL, 0); psa->close(handle); diff --git a/api-tests/ff/ipc/test_i065/test_i065.h b/api-tests/ff/ipc/test_i065/test_i065.h index 7ea2eb07..c1e1af95 100644 --- a/api-tests/ff/ipc/test_i065/test_i065.h +++ b/api-tests/ff/ipc/test_i065/test_i065.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i065) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i065) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i065/test_supp_i065.c b/api-tests/ff/ipc/test_i065/test_supp_i065.c index 5c1d8e03..1ae6f689 100644 --- a/api-tests/ff/ipc/test_i065/test_supp_i065.c +++ b/api-tests/ff/ipc/test_i065/test_supp_i065.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i066/test_i066.c b/api-tests/ff/ipc/test_i066/test_i066.c index cb0c1ceb..af1797cc 100644 --- a/api-tests/ff/ipc/test_i066/test_i066.c +++ b/api-tests/ff/ipc/test_i066/test_i066.c @@ -38,7 +38,7 @@ int32_t client_test_psa_eoi_with_multiple_signals(caller_security_t caller) /* * The interrupt related test check is captured in driver_partition.c as this is the - * only partition in test suite that holds the interrupt line. The interrupt test check + * only partition in test suite that holds the interrupt source. The interrupt test check * is invoked by client by calling to DRIVER_TEST_SID RoT service of driver partition that * hold the test check. */ @@ -46,8 +46,8 @@ int32_t client_test_psa_eoi_with_multiple_signals(caller_security_t caller) val->print(PRINT_TEST, "[Check 1] Test psa_eoi with multiple signals\n", 0); /* Connect to DRIVER_TEST_SID */ - handle = psa->connect(DRIVER_TEST_SID, 1); - if (handle < 0) + handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\t psa_connect failed. handle=0x%x\n", handle); return VAL_STATUS_SPM_FAILED; @@ -55,7 +55,7 @@ int32_t client_test_psa_eoi_with_multiple_signals(caller_security_t caller) /* Execute driver function related to TEST_PSA_EOI_WITH_MULTIPLE_SIGNALS */ psa_invec invec = {&driver_test_fn_id, sizeof(driver_test_fn_id)}; - psa->call(handle, &invec, 1, NULL, 0); + psa->call(handle, PSA_IPC_CALL, &invec, 1, NULL, 0); psa->close(handle); diff --git a/api-tests/ff/ipc/test_i066/test_i066.h b/api-tests/ff/ipc/test_i066/test_i066.h index ce908aeb..fe246a0a 100644 --- a/api-tests/ff/ipc/test_i066/test_i066.h +++ b/api-tests/ff/ipc/test_i066/test_i066.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i066) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i066) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i066/test_supp_i066.c b/api-tests/ff/ipc/test_i066/test_supp_i066.c index 9b64caa9..357883bc 100644 --- a/api-tests/ff/ipc/test_i066/test_supp_i066.c +++ b/api-tests/ff/ipc/test_i066/test_supp_i066.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i067/test_i067.h b/api-tests/ff/ipc/test_i067/test_i067.h index 8e40820a..11e0bb6e 100644 --- a/api-tests/ff/ipc/test_i067/test_i067.h +++ b/api-tests/ff/ipc/test_i067/test_i067.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i067) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i067) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i067/test_supp_i067.c b/api-tests/ff/ipc/test_i067/test_supp_i067.c index aa5a8bf3..42029441 100644 --- a/api-tests/ff/ipc/test_i067/test_supp_i067.c +++ b/api-tests/ff/ipc/test_i067/test_supp_i067.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i068/test_i068.c b/api-tests/ff/ipc/test_i068/test_i068.c index b5038ce1..61a59f8b 100644 --- a/api-tests/ff/ipc/test_i068/test_i068.c +++ b/api-tests/ff/ipc/test_i068/test_i068.c @@ -61,9 +61,10 @@ int32_t client_test_instr_exec_from_writable_mem(caller_security_t caller) /* * Copy test_i068_dummy_func function code into data memory - * Assuming function size to be 32 bytes max + * Assuming function size to be 16 bytes max. + * Remove thumb bit from address if exists. */ - copy_mem(&opcode, &test_i068_dummy_func, NO_OF_BYTES); + copy_mem(&opcode, (void *) ((uintptr_t)&test_i068_dummy_func & ~(uintptr_t)0x1), NO_OF_BYTES); /* Point function pointer to data memory */ fptr = (fptr_t) opcode; diff --git a/api-tests/ff/ipc/test_i068/test_i068.h b/api-tests/ff/ipc/test_i068/test_i068.h index 48935487..f7ed66b9 100644 --- a/api-tests/ff/ipc/test_i068/test_i068.h +++ b/api-tests/ff/ipc/test_i068/test_i068.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i068) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i068) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i068/test_supp_i068.c b/api-tests/ff/ipc/test_i068/test_supp_i068.c index 6fa87d37..ec586827 100644 --- a/api-tests/ff/ipc/test_i068/test_supp_i068.c +++ b/api-tests/ff/ipc/test_i068/test_supp_i068.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i069/test_i069.h b/api-tests/ff/ipc/test_i069/test_i069.h index 64d06b56..574f4d87 100644 --- a/api-tests/ff/ipc/test_i069/test_i069.h +++ b/api-tests/ff/ipc/test_i069/test_i069.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i069) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i069) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i069/test_supp_i069.c b/api-tests/ff/ipc/test_i069/test_supp_i069.c index 29a3ca1e..5dd572c2 100644 --- a/api-tests/ff/ipc/test_i069/test_supp_i069.c +++ b/api-tests/ff/ipc/test_i069/test_supp_i069.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i070/test_i070.h b/api-tests/ff/ipc/test_i070/test_i070.h index 5cc30463..9da1c680 100644 --- a/api-tests/ff/ipc/test_i070/test_i070.h +++ b/api-tests/ff/ipc/test_i070/test_i070.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i070) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i070) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i070/test_supp_i070.c b/api-tests/ff/ipc/test_i070/test_supp_i070.c index 51090fad..62f2e172 100644 --- a/api-tests/ff/ipc/test_i070/test_supp_i070.c +++ b/api-tests/ff/ipc/test_i070/test_supp_i070.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i071/test_i071.h b/api-tests/ff/ipc/test_i071/test_i071.h index a18001b4..cb75dffd 100644 --- a/api-tests/ff/ipc/test_i071/test_i071.h +++ b/api-tests/ff/ipc/test_i071/test_i071.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i071) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i071) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i071/test_supp_i071.c b/api-tests/ff/ipc/test_i071/test_supp_i071.c index 7ce17d89..b96ac470 100644 --- a/api-tests/ff/ipc/test_i071/test_supp_i071.c +++ b/api-tests/ff/ipc/test_i071/test_supp_i071.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i072/test_i072.c b/api-tests/ff/ipc/test_i072/test_i072.c index 41e2b1aa..38fd78ab 100644 --- a/api-tests/ff/ipc/test_i072/test_i072.c +++ b/api-tests/ff/ipc/test_i072/test_i072.c @@ -36,8 +36,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -45,12 +45,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tNSPE: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -116,7 +118,7 @@ int32_t client_test_nspe_write_app_rot_variable(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i072/test_i072.h b/api-tests/ff/ipc/test_i072/test_i072.h index 565aae77..48eb9b7b 100644 --- a/api-tests/ff/ipc/test_i072/test_i072.h +++ b/api-tests/ff/ipc/test_i072/test_i072.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i072) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i072) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i072/test_supp_i072.c b/api-tests/ff/ipc/test_i072/test_supp_i072.c index 05cf9181..704fb10f 100644 --- a/api-tests/ff/ipc/test_i072/test_supp_i072.c +++ b/api-tests/ff/ipc/test_i072/test_supp_i072.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -40,10 +40,11 @@ server_test_t test_i072_server_tests_list[] = { static int32_t send_secure_partition_address(void) { - int32_t status = VAL_STATUS_SUCCESS; - psa_msg_t msg = {0}; + int32_t status = VAL_STATUS_SUCCESS; + volatile uint32_t *addr = &g_test_i072; + psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -52,18 +53,20 @@ static int32_t send_secure_partition_address(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tAPP-ROT: Passing 0x%x to NSPE\n", (int)&g_test_i072); + /* Send Application RoT data address - global variable */ - psa->write(msg.handle, 0, (void *)&g_test_i072, sizeof(g_test_i072)); + psa->write(msg.handle, 0, (void *)&addr, sizeof(addr)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -87,7 +90,7 @@ int32_t server_test_nspe_write_app_rot_variable(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i073/test_i073.c b/api-tests/ff/ipc/test_i073/test_i073.c index 01a0a2ac..8b8d8b67 100644 --- a/api-tests/ff/ipc/test_i073/test_i073.c +++ b/api-tests/ff/ipc/test_i073/test_i073.c @@ -36,8 +36,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -45,12 +45,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tNSPE: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -116,7 +118,7 @@ int32_t client_test_nspe_write_app_rot_stack(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, 1)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i073/test_i073.h b/api-tests/ff/ipc/test_i073/test_i073.h index 8cfdbe57..a2a4bb99 100644 --- a/api-tests/ff/ipc/test_i073/test_i073.h +++ b/api-tests/ff/ipc/test_i073/test_i073.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i073) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i073) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i073/test_supp_i073.c b/api-tests/ff/ipc/test_i073/test_supp_i073.c index 114b0a2a..a18ec3b0 100644 --- a/api-tests/ff/ipc/test_i073/test_supp_i073.c +++ b/api-tests/ff/ipc/test_i073/test_supp_i073.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -40,7 +40,7 @@ static int32_t send_secure_partition_address(addr_t *stack) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -49,18 +49,20 @@ static int32_t send_secure_partition_address(addr_t *stack) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tAPP-ROT: Passing 0x%x to NSPE\n", (int)stack); + /* Send Application RoT stack address */ - psa->write(msg.handle, 0, (void *)stack, sizeof(uint32_t)); + psa->write(msg.handle, 0, (void *)&stack, sizeof(uint32_t)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -78,7 +80,7 @@ int32_t server_test_nspe_read_app_rot_stack(void) status = send_secure_partition_address(&l_test_i073); /* Dummy print to avoid compiler optimisation on local variable */ - val->print(PRINT_INFO, "\tData value 0x%x\n", l_test_i073); + val->print(PRINT_INFO, "\tStack data 0x%x\n", l_test_i073); return status; } @@ -94,7 +96,7 @@ int32_t server_test_nspe_write_app_rot_stack(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i074/test_i074.c b/api-tests/ff/ipc/test_i074/test_i074.c index 210ab6a3..ce91843e 100644 --- a/api-tests/ff/ipc/test_i074/test_i074.c +++ b/api-tests/ff/ipc/test_i074/test_i074.c @@ -41,8 +41,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, 1); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -50,12 +50,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, BUFFER_SIZE}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tNSPE: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -121,7 +123,7 @@ int32_t client_test_nspe_write_app_rot_heap(caller_security_t caller) *(uint8_t *)app_rot_addr = (uint8_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i074/test_i074.h b/api-tests/ff/ipc/test_i074/test_i074.h index ad09a7ff..2b477427 100644 --- a/api-tests/ff/ipc/test_i074/test_i074.h +++ b/api-tests/ff/ipc/test_i074/test_i074.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i074) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i074) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i074/test_supp_i074.c b/api-tests/ff/ipc/test_i074/test_supp_i074.c index ff79d348..3b72f32f 100644 --- a/api-tests/ff/ipc/test_i074/test_supp_i074.c +++ b/api-tests/ff/ipc/test_i074/test_supp_i074.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -47,7 +47,7 @@ static int32_t send_secure_partition_address(uint8_t *heap) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -56,18 +56,20 @@ static int32_t send_secure_partition_address(uint8_t *heap) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tAPP-ROT: Passing 0x%x to NSPE\n", (int)heap); + /* Send Application RoT heap address */ - psa->write(msg.handle, 0, (void *)heap, sizeof(BUFFER_SIZE)); + psa->write(msg.handle, 0, (void *)&heap, sizeof(BUFFER_SIZE)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -106,7 +108,7 @@ int32_t server_test_nspe_write_app_rot_heap(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i075/test_i075.c b/api-tests/ff/ipc/test_i075/test_i075.c index 2aed38a7..84c1c237 100644 --- a/api-tests/ff/ipc/test_i075/test_i075.c +++ b/api-tests/ff/ipc/test_i075/test_i075.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -47,12 +47,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tNSPE: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -118,7 +120,7 @@ int32_t client_test_nspe_write_app_rot_mmio(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i075/test_i075.h b/api-tests/ff/ipc/test_i075/test_i075.h index 5fcb6244..a5a81885 100644 --- a/api-tests/ff/ipc/test_i075/test_i075.h +++ b/api-tests/ff/ipc/test_i075/test_i075.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i075) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i075) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i075/test_supp_i075.c b/api-tests/ff/ipc/test_i075/test_supp_i075.c index b98fffba..8c062a6e 100644 --- a/api-tests/ff/ipc/test_i075/test_supp_i075.c +++ b/api-tests/ff/ipc/test_i075/test_supp_i075.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -54,12 +54,12 @@ static int32_t get_mmio_addr(addr_t *addr) return VAL_STATUS_SUCCESS; } -static int32_t send_secure_partition_address(addr_t *stack) +static int32_t send_secure_partition_address(addr_t *addr) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -68,18 +68,20 @@ static int32_t send_secure_partition_address(addr_t *stack) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { psa->reply(msg.handle, -2); return status; } - /* Send Application RoT stack address */ - psa->write(msg.handle, 0, (void *)stack, sizeof(uint32_t)); + val->print(PRINT_DEBUG, "\tAPP-ROT: Passing 0x%x to NSPE\n", (int)*addr); + + /* Send Application RoT mmio address */ + psa->write(msg.handle, 0, (void *)addr, sizeof(uint32_t)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { return status; @@ -97,6 +99,9 @@ int32_t server_test_nspe_read_app_rot_mmio(void) if (VAL_ERROR(status)) return status; + /* Initialise mmio address */ + *(uint32_t *)app_rot_addr = (uint32_t)DATA_VALUE; + return send_secure_partition_address(&app_rot_addr); } @@ -117,7 +122,7 @@ int32_t server_test_nspe_write_app_rot_mmio(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i076/test_i076.c b/api-tests/ff/ipc/test_i076/test_i076.c index 765e502e..94510de7 100644 --- a/api-tests/ff/ipc/test_i076/test_i076.c +++ b/api-tests/ff/ipc/test_i076/test_i076.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_* */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i076/test_i076.h b/api-tests/ff/ipc/test_i076/test_i076.h index 2114ac56..6ec51f99 100644 --- a/api-tests/ff/ipc/test_i076/test_i076.h +++ b/api-tests/ff/ipc/test_i076/test_i076.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i076) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i076) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i076/test_supp_i076.c b/api-tests/ff/ipc/test_i076/test_supp_i076.c index c32ec2fb..eb87a0f4 100644 --- a/api-tests/ff/ipc/test_i076/test_supp_i076.c +++ b/api-tests/ff/ipc/test_i076/test_supp_i076.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i077/test_i077.c b/api-tests/ff/ipc/test_i077/test_i077.c index 4cbad88c..e714e80d 100644 --- a/api-tests/ff/ipc/test_i077/test_i077.c +++ b/api-tests/ff/ipc/test_i077/test_i077.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i077/test_i077.h b/api-tests/ff/ipc/test_i077/test_i077.h index 4a4133c9..eb88d392 100644 --- a/api-tests/ff/ipc/test_i077/test_i077.h +++ b/api-tests/ff/ipc/test_i077/test_i077.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i077) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i077) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i077/test_supp_i077.c b/api-tests/ff/ipc/test_i077/test_supp_i077.c index 03a42175..112d7e4b 100644 --- a/api-tests/ff/ipc/test_i077/test_supp_i077.c +++ b/api-tests/ff/ipc/test_i077/test_supp_i077.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i078/test_i078.c b/api-tests/ff/ipc/test_i078/test_i078.c index c600a9f3..a708eeb5 100644 --- a/api-tests/ff/ipc/test_i078/test_i078.c +++ b/api-tests/ff/ipc/test_i078/test_i078.c @@ -41,8 +41,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -51,7 +51,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -62,7 +62,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i078/test_i078.h b/api-tests/ff/ipc/test_i078/test_i078.h index bc44b596..0613f109 100644 --- a/api-tests/ff/ipc/test_i078/test_i078.h +++ b/api-tests/ff/ipc/test_i078/test_i078.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i078) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i078) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i078/test_supp_i078.c b/api-tests/ff/ipc/test_i078/test_supp_i078.c index 0b5f67f2..59297e30 100644 --- a/api-tests/ff/ipc/test_i078/test_supp_i078.c +++ b/api-tests/ff/ipc/test_i078/test_supp_i078.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i079/test_i079.c b/api-tests/ff/ipc/test_i079/test_i079.c index 323a5488..9cbbd792 100644 --- a/api-tests/ff/ipc/test_i079/test_i079.c +++ b/api-tests/ff/ipc/test_i079/test_i079.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i079/test_i079.h b/api-tests/ff/ipc/test_i079/test_i079.h index 507d0cb2..99e2855c 100644 --- a/api-tests/ff/ipc/test_i079/test_i079.h +++ b/api-tests/ff/ipc/test_i079/test_i079.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i079) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i079) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i079/test_supp_i079.c b/api-tests/ff/ipc/test_i079/test_supp_i079.c index 24a0f89f..57e7057a 100644 --- a/api-tests/ff/ipc/test_i079/test_supp_i079.c +++ b/api-tests/ff/ipc/test_i079/test_supp_i079.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i080/test_i080.c b/api-tests/ff/ipc/test_i080/test_i080.c index 4d4915c4..ccafd646 100644 --- a/api-tests/ff/ipc/test_i080/test_i080.c +++ b/api-tests/ff/ipc/test_i080/test_i080.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_* */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i080/test_i080.h b/api-tests/ff/ipc/test_i080/test_i080.h index d45c93c6..a78d6cb2 100644 --- a/api-tests/ff/ipc/test_i080/test_i080.h +++ b/api-tests/ff/ipc/test_i080/test_i080.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i080) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i080) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i080/test_supp_i080.c b/api-tests/ff/ipc/test_i080/test_supp_i080.c index cd022639..0b00be4b 100644 --- a/api-tests/ff/ipc/test_i080/test_supp_i080.c +++ b/api-tests/ff/ipc/test_i080/test_supp_i080.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i081/test_i081.c b/api-tests/ff/ipc/test_i081/test_i081.c index 027f9ae3..b1e4b9e8 100644 --- a/api-tests/ff/ipc/test_i081/test_i081.c +++ b/api-tests/ff/ipc/test_i081/test_i081.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i081/test_i081.h b/api-tests/ff/ipc/test_i081/test_i081.h index 6410d70a..cafee8db 100644 --- a/api-tests/ff/ipc/test_i081/test_i081.h +++ b/api-tests/ff/ipc/test_i081/test_i081.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i081) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i081) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i081/test_supp_i081.c b/api-tests/ff/ipc/test_i081/test_supp_i081.c index 0f844163..474230ad 100644 --- a/api-tests/ff/ipc/test_i081/test_supp_i081.c +++ b/api-tests/ff/ipc/test_i081/test_supp_i081.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i082/test_i082.c b/api-tests/ff/ipc/test_i082/test_i082.c index cb8a0857..4180f941 100644 --- a/api-tests/ff/ipc/test_i082/test_i082.c +++ b/api-tests/ff/ipc/test_i082/test_i082.c @@ -41,8 +41,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -51,7 +51,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -62,7 +62,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i082/test_i082.h b/api-tests/ff/ipc/test_i082/test_i082.h index 57c13ab3..37d1af5f 100644 --- a/api-tests/ff/ipc/test_i082/test_i082.h +++ b/api-tests/ff/ipc/test_i082/test_i082.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i082) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i082) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i082/test_supp_i082.c b/api-tests/ff/ipc/test_i082/test_supp_i082.c index 20a5b7a3..1095b5c4 100644 --- a/api-tests/ff/ipc/test_i082/test_supp_i082.c +++ b/api-tests/ff/ipc/test_i082/test_supp_i082.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i083/test_i083.c b/api-tests/ff/ipc/test_i083/test_i083.c index dd85cab4..3e95c8ef 100644 --- a/api-tests/ff/ipc/test_i083/test_i083.c +++ b/api-tests/ff/ipc/test_i083/test_i083.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, addr_t *addr, driver_test_fn_id_t test_fn_id) { - *handle = psa->connect(DRIVER_TEST_SID, 1); - if (*handle < 0) + *handle = psa->connect(DRIVER_TEST_SID, DRIVER_TEST_VERSION); + if (!PSA_HANDLE_IS_VALID(*handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -48,7 +48,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, /* Execute driver function related to TEST_ISOLATION_PSA_ROT_DATA_RD */ psa_invec invec[1] = {{&test_fn_id, sizeof(test_fn_id)}}; psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(*handle, invec, 1, outvec, 1) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, invec, 1, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; @@ -59,7 +59,7 @@ static int32_t get_secure_partition_address(psa_handle_t *handle, static int32_t get_driver_status(psa_handle_t *handle) { - if (psa->call(*handle, NULL, 0, NULL, 0) != PSA_SUCCESS) + if (psa->call(*handle, PSA_IPC_CALL, NULL, 0, NULL, 0) != PSA_SUCCESS) { return VAL_STATUS_CALL_FAILED; } diff --git a/api-tests/ff/ipc/test_i083/test_i083.h b/api-tests/ff/ipc/test_i083/test_i083.h index 8f584f75..fffd86e3 100644 --- a/api-tests/ff/ipc/test_i083/test_i083.h +++ b/api-tests/ff/ipc/test_i083/test_i083.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i083) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i083) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i083/test_supp_i083.c b/api-tests/ff/ipc/test_i083/test_supp_i083.c index e7bf8f51..893c291e 100644 --- a/api-tests/ff/ipc/test_i083/test_supp_i083.c +++ b/api-tests/ff/ipc/test_i083/test_supp_i083.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/test_i084/test_i084.c b/api-tests/ff/ipc/test_i084/test_i084.c index e21acd29..639a8ab3 100644 --- a/api-tests/ff/ipc/test_i084/test_i084.c +++ b/api-tests/ff/ipc/test_i084/test_i084.c @@ -36,8 +36,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -45,12 +45,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tClient SP: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -116,7 +118,7 @@ int32_t client_test_sp_write_other_sp_variable(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i084/test_i084.h b/api-tests/ff/ipc/test_i084/test_i084.h index ed1150f3..0465a4b5 100644 --- a/api-tests/ff/ipc/test_i084/test_i084.h +++ b/api-tests/ff/ipc/test_i084/test_i084.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i084) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i084) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i084/test_supp_i084.c b/api-tests/ff/ipc/test_i084/test_supp_i084.c index 3c663d34..87aecf0b 100644 --- a/api-tests/ff/ipc/test_i084/test_supp_i084.c +++ b/api-tests/ff/ipc/test_i084/test_supp_i084.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -40,10 +40,11 @@ server_test_t test_i084_server_tests_list[] = { static int32_t send_secure_partition_address(void) { - int32_t status = VAL_STATUS_SUCCESS; - psa_msg_t msg = {0}; + int32_t status = VAL_STATUS_SUCCESS; + volatile uint32_t *addr = &g_test_i084; + psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -52,18 +53,20 @@ static int32_t send_secure_partition_address(void) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tServer SP: Passing 0x%x to Client SP\n", (int)&g_test_i084); + /* Send Application RoT data address - global variable */ - psa->write(msg.handle, 0, (void *)&g_test_i084, sizeof(g_test_i084)); + psa->write(msg.handle, 0, (void *)&addr, sizeof(addr)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -87,7 +90,7 @@ int32_t server_test_sp_write_other_sp_variable(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i085/test_i085.c b/api-tests/ff/ipc/test_i085/test_i085.c index f389f009..07eb2ec9 100644 --- a/api-tests/ff/ipc/test_i085/test_i085.c +++ b/api-tests/ff/ipc/test_i085/test_i085.c @@ -36,8 +36,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -45,12 +45,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tClient SP: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -116,7 +118,7 @@ int32_t client_test_sp_write_other_sp_stack(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i085/test_i085.h b/api-tests/ff/ipc/test_i085/test_i085.h index 26795936..03d295b1 100644 --- a/api-tests/ff/ipc/test_i085/test_i085.h +++ b/api-tests/ff/ipc/test_i085/test_i085.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i085) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i085) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i085/test_supp_i085.c b/api-tests/ff/ipc/test_i085/test_supp_i085.c index 9922716c..607a4158 100644 --- a/api-tests/ff/ipc/test_i085/test_supp_i085.c +++ b/api-tests/ff/ipc/test_i085/test_supp_i085.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -40,7 +40,7 @@ static int32_t send_secure_partition_address(addr_t *stack) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -49,18 +49,20 @@ static int32_t send_secure_partition_address(addr_t *stack) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tServer SP: Passing 0x%x to Client SP\n", (int)stack); + /* Send Application RoT stack address */ - psa->write(msg.handle, 0, (void *)stack, sizeof(uint32_t)); + psa->write(msg.handle, 0, (void *)&stack, sizeof(addr_t)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -94,7 +96,7 @@ int32_t server_test_sp_write_other_sp_stack(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i086/test_i086.c b/api-tests/ff/ipc/test_i086/test_i086.c index 605adb1f..0be11bed 100644 --- a/api-tests/ff/ipc/test_i086/test_i086.c +++ b/api-tests/ff/ipc/test_i086/test_i086.c @@ -41,8 +41,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -50,12 +50,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, BUFFER_SIZE}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tClient SP: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -121,7 +123,7 @@ int32_t client_test_sp_write_other_sp_heap(caller_security_t caller) *(uint8_t *)app_rot_addr = (uint8_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i086/test_i086.h b/api-tests/ff/ipc/test_i086/test_i086.h index 2f729e69..794d5a1a 100644 --- a/api-tests/ff/ipc/test_i086/test_i086.h +++ b/api-tests/ff/ipc/test_i086/test_i086.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i086) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i086) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i086/test_supp_i086.c b/api-tests/ff/ipc/test_i086/test_supp_i086.c index 946273e1..efff3ad8 100644 --- a/api-tests/ff/ipc/test_i086/test_supp_i086.c +++ b/api-tests/ff/ipc/test_i086/test_supp_i086.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -47,7 +47,7 @@ static int32_t send_secure_partition_address(uint8_t *heap) int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -56,18 +56,20 @@ static int32_t send_secure_partition_address(uint8_t *heap) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, -2); return status; } + val->print(PRINT_DEBUG, "\tServer SP: Passing 0x%x to Client SP\n", (int)heap); + /* Send Application RoT heap address */ - psa->write(msg.handle, 0, (void *)heap, sizeof(BUFFER_SIZE)); + psa->write(msg.handle, 0, (void *)&heap, sizeof(BUFFER_SIZE)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { return status; @@ -106,7 +108,7 @@ int32_t server_test_sp_write_other_sp_heap(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i087/test_i087.c b/api-tests/ff/ipc/test_i087/test_i087.c index 6514fab1..f5ce74c6 100644 --- a/api-tests/ff/ipc/test_i087/test_i087.c +++ b/api-tests/ff/ipc/test_i087/test_i087.c @@ -38,8 +38,8 @@ static int32_t get_secure_partition_address(addr_t *addr) { psa_handle_t handle = 0; - handle = psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1); - if (handle < 0) + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) { val->print(PRINT_ERROR, "\tConnection failed\n", 0); return VAL_STATUS_INVALID_HANDLE; @@ -47,12 +47,14 @@ static int32_t get_secure_partition_address(addr_t *addr) /* Get App-RoT address */ psa_outvec outvec[1] = {{addr, sizeof(addr_t)}}; - if (psa->call(handle, NULL, 0, outvec, 1) != PSA_SUCCESS) + if (psa->call(handle, PSA_IPC_CALL, NULL, 0, outvec, 1) != PSA_SUCCESS) { val->print(PRINT_ERROR, "\tmsg request failed\n", 0); return VAL_STATUS_CALL_FAILED; } + val->print(PRINT_DEBUG, "\tClient SP: Accessing address 0x%x\n", *addr); + psa->close(handle); return VAL_STATUS_SUCCESS; } @@ -118,7 +120,7 @@ int32_t client_test_sp_write_other_sp_mmio(caller_security_t caller) *(uint32_t *)app_rot_addr = (uint32_t)data; /* Handshake with server to decide write status */ - if ((psa->connect(SERVER_UNSPECIFED_MINOR_V_SID, 1)) > 0) + if ((psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION)) > 0) { val->print(PRINT_ERROR, "\tExpected connection to fail but succeed\n", 0); return VAL_STATUS_INVALID_HANDLE; diff --git a/api-tests/ff/ipc/test_i087/test_i087.h b/api-tests/ff/ipc/test_i087/test_i087.h index 7cf6a82f..abfd6dbc 100644 --- a/api-tests/ff/ipc/test_i087/test_i087.h +++ b/api-tests/ff/ipc/test_i087/test_i087.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,i087) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, i087) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_i087/test_supp_i087.c b/api-tests/ff/ipc/test_i087/test_supp_i087.c index b59fb978..b1bee746 100644 --- a/api-tests/ff/ipc/test_i087/test_supp_i087.c +++ b/api-tests/ff/ipc/test_i087/test_supp_i087.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; @@ -54,12 +54,12 @@ static int32_t get_mmio_addr(addr_t *addr) return VAL_STATUS_SUCCESS; } -static int32_t send_secure_partition_address(addr_t *stack) +static int32_t send_secure_partition_address(addr_t *addr) { int32_t status = VAL_STATUS_SUCCESS; psa_msg_t msg = {0}; - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); @@ -68,18 +68,20 @@ static int32_t send_secure_partition_address(addr_t *stack) psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_call_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_call_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(203), status)) { psa->reply(msg.handle, -2); return status; } - /* Send Application RoT stack address */ - psa->write(msg.handle, 0, (void *)stack, sizeof(uint32_t)); + val->print(PRINT_DEBUG, "\tServer SP: Passing 0x%x to Client SP\n", (int)*addr); + + /* Send Application RoT mmio address */ + psa->write(msg.handle, 0, (void *)addr, sizeof(addr_t)); psa->reply(msg.handle, PSA_SUCCESS); - status = val->process_disconnect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { return status; @@ -117,7 +119,7 @@ int32_t server_test_sp_write_other_sp_mmio(void) return status; /* Wait for write to get performed by client */ - status = val->process_connect_request(SERVER_UNSPECIFED_MINOR_V_SIG, &msg); + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); if (val->err_check_set(TEST_CHECKPOINT_NUM(204), status)) { psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); diff --git a/api-tests/ff/ipc/test_i089/test.cmake b/api-tests/ff/ipc/test_i089/test.cmake new file mode 100644 index 00000000..ef76d06c --- /dev/null +++ b/api-tests/ff/ipc/test_i089/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i089.c + test_i089.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i089.c + test_supp_i089.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i089/test_entry_i089.c b/api-tests/ff/ipc/test_i089/test_entry_i089.c new file mode 100644 index 00000000..c50113bc --- /dev/null +++ b/api-tests/ff/ipc/test_i089/test_entry_i089.c @@ -0,0 +1,51 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_i089.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 89) +#define TEST_DESC "Testing psa_panic API\n" +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_LOW_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_client_tests_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_i089_client_tests_list, TRUE); + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->test_exit(); +} diff --git a/api-tests/ff/ipc/test_i089/test_i089.c b/api-tests/ff/ipc/test_i089/test_i089.c new file mode 100644 index 00000000..28987ef0 --- /dev/null +++ b/api-tests/ff/ipc/test_i089/test_i089.c @@ -0,0 +1,37 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifdef NONSECURE_TEST_BUILD +#include "val_interfaces.h" +#include "val_target.h" +#else +#include "val_client_defs.h" +#include "val_service_defs.h" +#endif + +#include "test_i089.h" + +client_test_t test_i089_client_tests_list[] = { + NULL, + client_test_psa_panic, + NULL, +}; + +int32_t client_test_psa_panic(caller_security_t caller) +{ + return VAL_STATUS_SUCCESS; +} diff --git a/api-tests/ff/ipc/test_i089/test_i089.h b/api-tests/ff/ipc/test_i089/test_i089.h new file mode 100644 index 00000000..b0bbec33 --- /dev/null +++ b/api-tests/ff/ipc/test_i089/test_i089.h @@ -0,0 +1,37 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_I089_CLIENT_TESTS_H_ +#define _TEST_I089_CLIENT_TESTS_H_ + +#include "val_client_defs.h" + +#ifdef NONSECURE_TEST_BUILD +#define test_entry CONCAT(test_entry_,i089) +#define val CONCAT(val,test_entry) +#define psa CONCAT(psa,test_entry) +#else +#define val CONCAT(val,_client_sp) +#define psa CONCAT(psa,_client_sp) +#endif + +extern val_api_t *val; +extern psa_api_t *psa; + +extern client_test_t test_i089_client_tests_list[]; + +int32_t client_test_psa_panic(caller_security_t); +#endif diff --git a/api-tests/ff/ipc/test_i089/test_supp_i089.c b/api-tests/ff/ipc/test_i089/test_supp_i089.c new file mode 100644 index 00000000..189a736f --- /dev/null +++ b/api-tests/ff/ipc/test_i089/test_supp_i089.c @@ -0,0 +1,82 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_client_defs.h" +#include "val_service_defs.h" + +#define val CONCAT(val,_server_sp) +#define psa CONCAT(psa,_server_sp) +extern val_api_t *val; +extern psa_api_t *psa; + +int32_t server_test_psa_panic(void); + +server_test_t test_i089_server_tests_list[] = { + NULL, + server_test_psa_panic, + NULL, +}; + +int32_t server_test_psa_panic(void) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val->print(PRINT_TEST, "[Check 1] Test psa_panic API\n", 0); + /* + * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to + * PROGRAMMER ERROR could be either to return appropriate status code or panic the caller. + * When a Secure Partition panics, the SPE cannot continue normal execution, as defined + * in this specification. The behavior of the SPM following a Secure Partition panic is + * IMPLEMENTATION DEFINED- Arm recommends that the SPM causes the system to restart in + * this situation. Refer PSA-FF for more information on panic. + * For the cases where, SPM cannot capable to reboot the system (just hangs or power down), + * a watchdog timer set by val_test_init can reboot the system on timeout event. This will + * tests continuity and able to jump to next tests. Therefore, each test who checks for + * PROGRAMMER ERROR condition, expects system to get reset either by SPM or watchdog set by + * the test harness function. + * + * If programmed timeout value isn't sufficient for your system, it can be reconfigured using + * timeout entries available in target.cfg. + * + * To decide, a reboot happened as intended by test scenario or it happended + * due to other reasons, test is setting a boot signature into non-volatile memory before and + * after targeted test check. After a reboot, these boot signatures are being read by the + * VAL APIs to decide test status. + */ + + /* Setting boot.state before test check */ + status = val->set_boot_flag(BOOT_EXPECTED_NS); + if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) + { + val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); + return status; + } + + /* Call to psa_panic shouldn't return */ + psa->panic(); + + /* Resetting boot.state to catch unwanted reboot */ + status = val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED); + if (val->err_check_set(TEST_CHECKPOINT_NUM(202), status)) + { + val->print(PRINT_ERROR, "\tFailed to set boot flag after check\n", 0); + } + + status = VAL_STATUS_SPM_FAILED; + val->err_check_set(TEST_CHECKPOINT_NUM(203), status); + return status; +} diff --git a/api-tests/ff/ipc/test_i090/test.cmake b/api-tests/ff/ipc/test_i090/test.cmake new file mode 100644 index 00000000..7ea50b6c --- /dev/null +++ b/api-tests/ff/ipc/test_i090/test.cmake @@ -0,0 +1,32 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +list(APPEND CC_SOURCE + test_entry_i090.c + test_i090.c +) +list(APPEND CC_OPTIONS ) +list(APPEND AS_SOURCE ) +list(APPEND AS_OPTIONS ) + +list(APPEND CC_SOURCE_SPE + test_i090.c + test_supp_i090.c +) +list(APPEND CC_OPTIONS_SPE ) +list(APPEND AS_SOURCE_SPE ) +list(APPEND AS_OPTIONS_SPE ) diff --git a/api-tests/ff/ipc/test_i090/test_entry_i090.c b/api-tests/ff/ipc/test_i090/test_entry_i090.c new file mode 100644 index 00000000..4d456984 --- /dev/null +++ b/api-tests/ff/ipc/test_i090/test_entry_i090.c @@ -0,0 +1,59 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_interfaces.h" +#include "val_target.h" +#include "test_i090.h" + +#define TEST_NUM VAL_CREATE_TEST_ID(VAL_FF_BASE, 90) +#define TEST_DESC "Testing psa_call with negative type\n" +TEST_PUBLISH(TEST_NUM, test_entry); +val_api_t *val = NULL; +psa_api_t *psa = NULL; + +void test_entry(val_api_t *val_api, psa_api_t *psa_api) +{ + int32_t status = VAL_STATUS_SUCCESS; + + val = val_api; + psa = psa_api; + + /* test init */ + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_LOW_TIMEOUT)); + if (!IS_TEST_START(val->get_status())) + { + goto test_exit; + } + + /* Execute list of tests available in test[num]_client_tests_list from Non-secure side*/ + status = val->execute_non_secure_tests(TEST_NUM, test_i090_client_tests_list, TRUE); + if (VAL_ERROR(status)) + { + goto test_exit; + } + + /* Switch to secure side (client_partition.c) and execute list of tests available in + test[num]_client_tests_list from Secure side */ + status = val->switch_to_secure_client(TEST_NUM); + if (VAL_ERROR(status)) + { + goto test_exit; + } + +test_exit: + val->test_exit(); +} diff --git a/api-tests/ff/ipc/test_i090/test_i090.c b/api-tests/ff/ipc/test_i090/test_i090.c new file mode 100644 index 00000000..8d70be35 --- /dev/null +++ b/api-tests/ff/ipc/test_i090/test_i090.c @@ -0,0 +1,108 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifdef NONSECURE_TEST_BUILD +#include "val_interfaces.h" +#include "val_target.h" +#else +#include "val_client_defs.h" +#include "val_service_defs.h" +#endif + +#include "test_i090.h" + +client_test_t test_i090_client_tests_list[] = { + NULL, + client_test_psa_call_with_neg_type, + NULL, +}; + +int32_t client_test_psa_call_with_neg_type(caller_security_t caller) +{ + int32_t status = VAL_STATUS_SUCCESS; + psa_handle_t handle = 0; + psa_status_t status_of_call; + boot_state_t boot_state; + + val->print(PRINT_TEST, + "[Check 1] Test psa_call with negative type\n", 0); + + /* + * This test checks for the PROGRAMMER ERROR condition for the PSA API. API's respond to + * PROGRAMMER ERROR could be either to return appropriate status code or panic the caller. + * When a Secure Partition panics, the SPE cannot continue normal execution, as defined + * in this specification. The behavior of the SPM following a Secure Partition panic is + * IMPLEMENTATION DEFINED- Arm recommends that the SPM causes the system to restart in + * this situation. Refer PSA-FF for more information on panic. + * For the cases where, SPM cannot capable to reboot the system (just hangs or power down), + * a watchdog timer set by val_test_init can reboot the system on timeout event. This will + * tests continuity and able to jump to next tests. Therefore, each test who checks for + * PROGRAMMER ERROR condition, expects system to get reset either by SPM or watchdog set by + * the test harness function. + * + * If programmed timeout value isn't sufficient for your system, it can be reconfigured using + * timeout entries available in target.cfg. + * + * To decide, a reboot happened as intended by test scenario or it happended + * due to other reasons, test is setting a boot signature into non-volatile memory before and + * after targeted test check. After a reboot, these boot signatures are being read by the + * VAL APIs to decide test status. + */ + + handle = psa->connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION); + if (!PSA_HANDLE_IS_VALID(handle)) + { + val->print(PRINT_ERROR, "\tConnection failed\n", 0); + return VAL_STATUS_INVALID_HANDLE; + } + + /* Setting boot.state before test check */ + boot_state = (caller == CALLER_NONSECURE) ? BOOT_EXPECTED_NS : BOOT_EXPECTED_S; + if (val->set_boot_flag(boot_state)) + { + val->print(PRINT_ERROR, "\tFailed to set boot flag before check\n", 0); + return VAL_STATUS_ERROR; + } + + /* Test check- psa_call with negative type */ + status_of_call = psa->call(handle, -1, NULL, 0, NULL, 0); + + /* + * If the caller is in the NSPE, it is IMPLEMENTATION DEFINED whether + * a PROGRAMMER ERROR will panic or return PSA_ERROR_PROGRAMMER_ERROR. + * For SPE caller, it must panic. + */ + if (caller == CALLER_NONSECURE && status_of_call == PSA_ERROR_PROGRAMMER_ERROR) + { + psa->close(handle); + return VAL_STATUS_SUCCESS; + } + + /* If PROGRAMMER ERROR results into panic then control shouldn't have reached here */ + val->print(PRINT_ERROR, "\tCall should failed but succeed\n", 0); + + /* Resetting boot.state to catch unwanted reboot */ + if (val->set_boot_flag(BOOT_EXPECTED_BUT_FAILED)) + { + val->print(PRINT_ERROR, "\tFailed to set boot flag after check\n", 0); + return VAL_STATUS_ERROR; + } + + status = VAL_STATUS_SPM_FAILED; + psa->close(handle); + return status; +} diff --git a/api-tests/ff/ipc/test_i090/test_i090.h b/api-tests/ff/ipc/test_i090/test_i090.h new file mode 100644 index 00000000..8ba91472 --- /dev/null +++ b/api-tests/ff/ipc/test_i090/test_i090.h @@ -0,0 +1,37 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ +#ifndef _TEST_I090_CLIENT_TESTS_H_ +#define _TEST_I090_CLIENT_TESTS_H_ + +#include "val_client_defs.h" + +#ifdef NONSECURE_TEST_BUILD +#define test_entry CONCAT(test_entry_,i090) +#define val CONCAT(val,test_entry) +#define psa CONCAT(psa,test_entry) +#else +#define val CONCAT(val,_client_sp) +#define psa CONCAT(psa,_client_sp) +#endif + +extern val_api_t *val; +extern psa_api_t *psa; + +extern client_test_t test_i090_client_tests_list[]; + +int32_t client_test_psa_call_with_neg_type(caller_security_t); +#endif diff --git a/api-tests/ff/ipc/test_i090/test_supp_i090.c b/api-tests/ff/ipc/test_i090/test_supp_i090.c new file mode 100644 index 00000000..438bfee8 --- /dev/null +++ b/api-tests/ff/ipc/test_i090/test_supp_i090.c @@ -0,0 +1,79 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "val_client_defs.h" +#include "val_service_defs.h" + +#define val CONCAT(val,_server_sp) +#define psa CONCAT(psa,_server_sp) +extern val_api_t *val; +extern psa_api_t *psa; + +int32_t server_test_psa_call_with_neg_type(); + +server_test_t test_i090_server_tests_list[] = { + NULL, + server_test_psa_call_with_neg_type, + NULL, +}; + +int32_t server_test_psa_call_with_neg_type() +{ + int32_t status = VAL_STATUS_SUCCESS; + psa_msg_t msg = {0}; + psa_signal_t signals; + + status = val->process_connect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + if (val->err_check_set(TEST_CHECKPOINT_NUM(201), status)) + { + psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); + return status; + } + + psa->reply(msg.handle, PSA_SUCCESS); + +wait: + signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); + if (signals & SERVER_UNSPECIFED_VERSION_SIGNAL) + { + if (psa->get(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg) != PSA_SUCCESS) + { + goto wait; + } + + if (msg.type == PSA_IPC_DISCONNECT) + { + psa->reply(msg.handle, PSA_SUCCESS); + return VAL_STATUS_SUCCESS; + } + else + { + /* Control shouldn't have come here */ + val->print(PRINT_ERROR, "\tControl shouldn't have reached here\n", 0); + psa->reply(msg.handle, -2); + val->process_disconnect_request(SERVER_UNSPECIFED_VERSION_SIGNAL, &msg); + psa->reply(msg.handle, PSA_SUCCESS); + } + } + else + { + val->print(PRINT_ERROR, "\tpsa_wait returned with invalid signal value = 0x%x\n", signals); + return VAL_STATUS_ERROR; + } + + return VAL_STATUS_ERROR; +} diff --git a/api-tests/ff/ipc/test_l088/test_l088.h b/api-tests/ff/ipc/test_l088/test_l088.h index 618d6131..fe916aa1 100644 --- a/api-tests/ff/ipc/test_l088/test_l088.h +++ b/api-tests/ff/ipc/test_l088/test_l088.h @@ -20,12 +20,12 @@ #include "val_client_defs.h" #ifdef NONSECURE_TEST_BUILD -#define test_entry CONCAT(test_entry_,l088) -#define val CONCAT(val,test_entry) -#define psa CONCAT(psa,test_entry) +#define test_entry CONCAT(test_entry_, l088) +#define val CONCAT(val, test_entry) +#define psa CONCAT(psa, test_entry) #else -#define val CONCAT(val,_client_sp) -#define psa CONCAT(psa,_client_sp) +#define val CONCAT(val, _client_sp) +#define psa CONCAT(psa, _client_sp) #endif extern val_api_t *val; diff --git a/api-tests/ff/ipc/test_l088/test_supp_l088.c b/api-tests/ff/ipc/test_l088/test_supp_l088.c index 1ca9fe6d..7510003c 100644 --- a/api-tests/ff/ipc/test_l088/test_supp_l088.c +++ b/api-tests/ff/ipc/test_l088/test_supp_l088.c @@ -18,8 +18,8 @@ #include "val_client_defs.h" #include "val_service_defs.h" -#define val CONCAT(val,_server_sp) -#define psa CONCAT(psa,_server_sp) +#define val CONCAT(val, _server_sp) +#define psa CONCAT(psa, _server_sp) extern val_api_t *val; extern psa_api_t *psa; diff --git a/api-tests/ff/ipc/testsuite.db b/api-tests/ff/ipc/testsuite.db index f8a30133..72216ed9 100644 --- a/api-tests/ff/ipc/testsuite.db +++ b/api-tests/ff/ipc/testsuite.db @@ -108,5 +108,7 @@ test_i085, panic_test test_i086, panic_test test_i087, panic_test test_l088 +test_i089, panic_test +test_i090, panic_test (END) diff --git a/api-tests/ff/partition/common/driver_partition.c b/api-tests/ff/partition/common/driver_partition.c index 1dff45b7..549b5c47 100644 --- a/api-tests/ff/partition/common/driver_partition.c +++ b/api-tests/ff/partition/common/driver_partition.c @@ -58,9 +58,9 @@ void driver_main(void) signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK); /* Service Print functionality */ - if (signals & DRIVER_UART_SIG) + if (signals & DRIVER_UART_SIGNAL) { - psa_get(DRIVER_UART_SIG, &msg); + psa_get(DRIVER_UART_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CONNECT: @@ -109,9 +109,9 @@ void driver_main(void) } /* Service Watchdog functionality */ - else if (signals & DRIVER_WATCHDOG_SIG) + else if (signals & DRIVER_WATCHDOG_SIGNAL) { - psa_get(DRIVER_WATCHDOG_SIG, &msg); + psa_get(DRIVER_WATCHDOG_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CALL: @@ -162,9 +162,9 @@ void driver_main(void) } /* Service NVMEM functionality */ - else if (signals & DRIVER_NVMEM_SIG) + else if (signals & DRIVER_NVMEM_SIGNAL) { - psa_get(DRIVER_NVMEM_SIG, &msg); + psa_get(DRIVER_NVMEM_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CALL: @@ -221,9 +221,9 @@ void driver_main(void) } } /* SID reserved for Driver test functions */ - else if (signals & DRIVER_TEST_SIG) + else if (signals & DRIVER_TEST_SIGNAL) { - psa_get(DRIVER_TEST_SIG, &msg); + psa_get(DRIVER_TEST_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CALL: @@ -381,7 +381,7 @@ int32_t driver_test_psa_eoi_with_multiple_signals(void) } /* psa_eoi should panic as irq_signal is provided with multiple signals */ - psa_eoi(DRIVER_UART_INTR_SIG|DRIVER_TEST_SIG); + psa_eoi(DRIVER_UART_INTR_SIG|DRIVER_TEST_SIGNAL); /* Control shouldn't have reached here */ val_print_sf("\tCheck for psa_eoi(multiple_signals) failed\n", 0); @@ -404,7 +404,7 @@ int32_t driver_test_irq_routing(void) val_generate_interrupt(); /* Wait for DRIVER_UART_INTR_SIG signal */ - signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK); + signals = psa_wait(DRIVER_UART_INTR_SIG, PSA_BLOCK); if (signals & DRIVER_UART_INTR_SIG) { @@ -453,9 +453,9 @@ static int32_t process_call_request(psa_signal_t sig, psa_msg_t *msg) goto wait; } - if ((msg->type != PSA_IPC_CALL) || (msg->handle <= 0)) + if ((msg->type < PSA_IPC_CALL) || (msg->handle <= 0)) { - val_print_sf("\tpsa_get failed for PSA_IPC_CALL\n", 0); + val_print_sf("\tpsa_get failed for request message\n", 0); res = VAL_STATUS_ERROR; } else @@ -473,15 +473,19 @@ static int32_t process_call_request(psa_signal_t sig, psa_msg_t *msg) void driver_test_isolation_psa_rot_data_rd(psa_msg_t *msg) { + uint32_t *addr = &g_psa_rot_data; + /* Send PSA RoT data address - global variable */ - psa_write(msg->handle, 0, (void *) &g_psa_rot_data, sizeof(addr_t)); + psa_write(msg->handle, 0, (void *) &addr, sizeof(addr_t)); psa_reply(msg->handle, PSA_SUCCESS); } void driver_test_isolation_psa_rot_data_wr(psa_msg_t *msg) { + uint32_t *addr = &g_psa_rot_data; + /* Send PSA RoT data address - global variable */ - psa_write(msg->handle, 0, (void *) &g_psa_rot_data, sizeof(addr_t)); + psa_write(msg->handle, 0, (void *) &addr, sizeof(addr_t)); /* Setting boot.state before test check */ if (val_driver_private_set_boot_flag_fn(BOOT_EXPECTED_S)) @@ -492,7 +496,7 @@ void driver_test_isolation_psa_rot_data_wr(psa_msg_t *msg) psa_reply(msg->handle, PSA_SUCCESS); /* Process second call request */ - if (VAL_ERROR(process_call_request(DRIVER_TEST_SIG, msg))) + if (VAL_ERROR(process_call_request(DRIVER_TEST_SIGNAL, msg))) { psa_reply(msg->handle, -2); return; @@ -521,21 +525,23 @@ void driver_test_isolation_psa_rot_data_wr(psa_msg_t *msg) void driver_test_isolation_psa_rot_stack_rd(psa_msg_t *msg) { uint32_t l_psa_rot_data = DATA_VALUE; + uint32_t *addr = &l_psa_rot_data; /* Send PSA RoT stack address - local variable */ - psa_write(msg->handle, 0, (void *) &l_psa_rot_data, sizeof(addr_t)); + psa_write(msg->handle, 0, (void *) &addr, sizeof(addr_t)); psa_reply(msg->handle, PSA_SUCCESS); /* Dummy print to avoid compiler optimisation on local variable */ - val_print_sf("\tl_psa_rot_data value 0x%x\n", l_psa_rot_data); + val_print_sf("\tStack data 0x%x\n", (int)l_psa_rot_data); } void driver_test_isolation_psa_rot_stack_wr(psa_msg_t *msg) { uint32_t l_psa_rot_data = DATA_VALUE; + uint32_t *addr = &l_psa_rot_data; /* Send PSA RoT stack address - local variable */ - psa_write(msg->handle, 0, (void *) &l_psa_rot_data, sizeof(addr_t)); + psa_write(msg->handle, 0, (void *) &addr, sizeof(addr_t)); /* Setting boot.state before test check */ if (val_driver_private_set_boot_flag_fn(BOOT_EXPECTED_S)) @@ -546,7 +552,7 @@ void driver_test_isolation_psa_rot_stack_wr(psa_msg_t *msg) psa_reply(msg->handle, PSA_SUCCESS); /* Process second call request */ - if (VAL_ERROR(process_call_request(DRIVER_TEST_SIG, msg))) + if (VAL_ERROR(process_call_request(DRIVER_TEST_SIGNAL, msg))) { psa_reply(msg->handle, -2); return; @@ -581,7 +587,7 @@ void driver_test_isolation_psa_rot_heap_rd(psa_msg_t *msg) memset((uint8_t *)buffer, (uint8_t)DATA_VALUE, BUFFER_SIZE); /* Send PSA RoT heap address */ - psa_write(msg->handle, 0, (void *) buffer, BUFFER_SIZE); + psa_write(msg->handle, 0, (void *) &buffer, BUFFER_SIZE); psa_reply(msg->handle, PSA_SUCCESS); free(buffer); #endif @@ -596,7 +602,7 @@ void driver_test_isolation_psa_rot_heap_wr(psa_msg_t *msg) memset((uint8_t *)buffer, (uint8_t)DATA_VALUE, BUFFER_SIZE); /* Send PSA RoT heap address */ - psa_write(msg->handle, 0, (void *) buffer, BUFFER_SIZE); + psa_write(msg->handle, 0, (void *) &buffer, BUFFER_SIZE); psa_reply(msg->handle, PSA_SUCCESS); /* Setting boot.state before test check */ @@ -607,7 +613,7 @@ void driver_test_isolation_psa_rot_heap_wr(psa_msg_t *msg) } /* Process second call request */ - if (VAL_ERROR(process_call_request(DRIVER_TEST_SIG, msg))) + if (VAL_ERROR(process_call_request(DRIVER_TEST_SIGNAL, msg))) { psa_reply(msg->handle, -2); return; @@ -662,8 +668,8 @@ void driver_test_isolation_psa_rot_mmio_wr(psa_msg_t *msg) } /* Send PSA RoT mmio address */ - memset((uint8_t *)&psa_rot_mmio_addr, (uint8_t)DATA_VALUE, sizeof(uint32_t)); - psa_write(msg->handle, 0, (void *) &psa_rot_mmio_addr, sizeof(uint32_t)); + memset((uint8_t *)&psa_rot_mmio_addr, (uint8_t)DATA_VALUE, sizeof(addr_t)); + psa_write(msg->handle, 0, (void *) &psa_rot_mmio_addr, sizeof(addr_t)); psa_reply(msg->handle, PSA_SUCCESS); /* Setting boot.state before test check */ @@ -674,7 +680,7 @@ void driver_test_isolation_psa_rot_mmio_wr(psa_msg_t *msg) } /* Process second call request */ - if (VAL_ERROR(process_call_request(DRIVER_TEST_SIG, msg))) + if (VAL_ERROR(process_call_request(DRIVER_TEST_SIGNAL, msg))) { psa_reply(msg->handle, -2); return; diff --git a/api-tests/ff/partition/ipc/client_partition.c b/api-tests/ff/partition/ipc/client_partition.c index 7be5a6cb..7ecea528 100644 --- a/api-tests/ff/partition/ipc/client_partition.c +++ b/api-tests/ff/partition/ipc/client_partition.c @@ -32,9 +32,9 @@ void client_main(void) status = VAL_STATUS_SUCCESS; signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & CLIENT_TEST_DISPATCHER_SIG) + if (signals & CLIENT_TEST_DISPATCHER_SIGNAL) { - psa_get(CLIENT_TEST_DISPATCHER_SIG, &msg); + psa_get(CLIENT_TEST_DISPATCHER_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CONNECT: @@ -97,7 +97,8 @@ void client_main(void) /* Server_partition requests client to connect to SERVER_SECURE_CONNECT_ONLY_SID */ else if (signals & PSA_DOORBELL) { - if (psa_connect(SERVER_SECURE_CONNECT_ONLY_SID, 2) != PSA_ERROR_CONNECTION_REFUSED) + if (psa_connect(SERVER_SECURE_CONNECT_ONLY_SID, SERVER_SECURE_CONNECT_ONLY_VERSION) + != PSA_ERROR_CONNECTION_REFUSED) { val_print(PRINT_ERROR, "psa_connect failed \n", 0); } diff --git a/api-tests/ff/partition/ipc/server_partition.c b/api-tests/ff/partition/ipc/server_partition.c index de0e7a42..94d55049 100644 --- a/api-tests/ff/partition/ipc/server_partition.c +++ b/api-tests/ff/partition/ipc/server_partition.c @@ -34,9 +34,9 @@ void server_main(void) status = VAL_STATUS_SUCCESS; signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK); - if (signals & SERVER_TEST_DISPATCHER_SIG) + if (signals & SERVER_TEST_DISPATCHER_SIGNAL) { - psa_get(SERVER_TEST_DISPATCHER_SIG, &msg); + psa_get(SERVER_TEST_DISPATCHER_SIGNAL, &msg); switch (msg.type) { case PSA_IPC_CONNECT: diff --git a/api-tests/platform/drivers/uart/cmsdk/pal_uart.c b/api-tests/platform/drivers/uart/cmsdk/pal_uart.c index 39643712..d31ffa3e 100644 --- a/api-tests/platform/drivers/uart/cmsdk/pal_uart.c +++ b/api-tests/platform/drivers/uart/cmsdk/pal_uart.c @@ -68,7 +68,7 @@ static void pal_uart_cmsdk_putc(uint8_t c) void pal_cmsdk_print(char *str, int32_t data) { int8_t j, buffer[16]; - int8_t i = 0, is_neg = 0, k = sizeof(data); + int8_t i = 0, is_neg = 0, k = 2 * sizeof(data); for (; *str != '\0'; ++str) { diff --git a/api-tests/platform/drivers/uart/pl011/pal_uart.c b/api-tests/platform/drivers/uart/pl011/pal_uart.c index 20ac237a..04de0ccd 100644 --- a/api-tests/platform/drivers/uart/pl011/pal_uart.c +++ b/api-tests/platform/drivers/uart/pl011/pal_uart.c @@ -69,7 +69,7 @@ void pal_uart_putc(uint8_t c) void pal_uart_pl011_print(char *str, int32_t data) { uint8_t j, buffer[16]; - int8_t i = 0, is_neg = 0, k = sizeof(data); + int8_t i = 0, is_neg = 0, k = 2 * sizeof(data); for (; *str != '\0'; ++str) { diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h index 00768919..8a8f0642 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_common.h @@ -37,8 +37,7 @@ typedef uint32_t cfg_id_t; #define PAL_STATUS_UNSUPPORTED_FUNC 0xFF -typedef enum -{ +typedef enum { PAL_STATUS_SUCCESS = 0x0, PAL_STATUS_ERROR = 0x80 } pal_status_t; diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h index 28713398..8c04b503 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h @@ -38,6 +38,9 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c index 204adfb7..2bbaad7d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_driver_ns_intf.c @@ -31,7 +31,7 @@ /* Using zero as NVMEM_BASE is a bit arbitrary - we don't actually need callers * to specify a base address but the nvmem function signatures have "base" params. - * Zero is the value used in our target.cfg file so that's what we should recieve. + * Zero is the value used in our target.cfg file so that's what we should receive. */ #define NVMEM_BASE 0 diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg index daef0dbe..1befaec8 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cfg @@ -43,7 +43,7 @@ watchdog.0.timeout_in_micro_sec_crypto = 0x0; // The implementation just uses an array in memory. nvmem.num =1; nvmem.0.start = 0x0; -nvmem.0.end = 0x400; // 1KiB +nvmem.0.end = 0x0; nvmem.0.permission = TYPE_READ_WRITE; // Miscellaneous - Test scatter info @@ -58,6 +58,3 @@ dut.0.ns_start_addr_of_combine_test_binary = 0x2003F000; // Is combine_test_binary available in RAM? dut.0.combine_test_binary_in_ram = AVAILABLE; - -// Level of Isolation -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_empty_intf.c index 578b4cef..0030ef04 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_empty_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_empty_intf.c @@ -31,10 +31,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. */ @@ -47,11 +47,11 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { return PSA_NULL_HANDLE; } @@ -62,6 +62,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -70,10 +71,11 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { return (PSA_SUCCESS - 1); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.c index 20ddd118..68af13d3 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.c @@ -32,10 +32,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. */ @@ -49,14 +49,14 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { - return (psa_connect(sid, minor_version)); + return (psa_connect(sid, version)); } /** @@ -65,6 +65,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -74,12 +75,13 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); + return (psa_call(handle, type, in_vec, in_len, out_vec, out_len)); } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.h index 3f5741e0..89b4da66 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_client_api_intf.h @@ -22,11 +22,12 @@ uint32_t pal_ipc_framework_version(void); uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void pal_ipc_close(psa_handle_t handle); #endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h index 28713398..8c04b503 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h @@ -38,6 +38,9 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_driver_ipc_intf.c index f8f773fb..139f04fc 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_driver_ipc_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_driver_ipc_intf.c @@ -33,20 +33,20 @@ int pal_uart_init_ns(uint32_t uart_base_addr) {&uart_base_addr, sizeof(uart_base_addr)}, {NULL, 0}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return(PAL_STATUS_ERROR); - } + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_SUCCESS; + } + else { - return(PAL_STATUS_ERROR); + return PAL_STATUS_ERROR; } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; } /** @@ -62,7 +62,6 @@ int pal_print_ns(char *str, int32_t data) char *p = str; psa_handle_t print_handle = 0; psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; uart_fn_type_t uart_fn = UART_PRINT; while (*p != '\0') @@ -74,22 +73,21 @@ int pal_print_ns(char *str, int32_t data) psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, {str, string_len+1}, {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(print_handle); - return status; } /** @@ -111,22 +109,20 @@ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick wd_param.wd_timer_tick_us = timer_tick_us; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -146,22 +142,20 @@ int pal_wd_timer_enable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -181,22 +175,20 @@ int pal_wd_timer_disable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -220,22 +212,20 @@ int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; psa_outvec outvec[1] = {{buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - psa_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -258,22 +248,20 @@ int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) nvmem_param.size = size; psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cfg index 79a845f1..1ec4be24 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cfg +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cfg @@ -52,6 +52,3 @@ dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; // Is combine_test_binary available in RAM? dut.0.combine_test_binary_in_ram = AVAILABLE; - -// Level of Isolation -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json deleted file mode 100644 index e3cec929..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/common/driver_partition_psa.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "DRIVER_PARTITION", - "type": "PSA-ROT", - "priority": "NORMAL", - "description": "Implements device services such print, flash read/write,. etc.", - "entry_point": "driver_main", - "stack_size": "0x400", - "services": [{ - "name": "DRIVER_UART_SID", - "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_WATCHDOG_SID", - "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_NVMEM_SID", - "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_TEST_SID", - "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "UART_REGION", - "base": "0x40004000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "WATCHDOG_REGION", - "base": "0x40008000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "NVMEM_REGION", - "base": "0x2002F000", - "size": "0x400", - "permission": "READ-WRITE" - }, - { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "irqs": [ - { - "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", - "signal": "DRIVER_UART_INTR_SIG", - "line_num": 37 - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c index 578b4cef..0030ef04 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_empty_intf.c @@ -31,10 +31,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. */ @@ -47,11 +47,11 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { return PSA_NULL_HANDLE; } @@ -62,6 +62,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -70,10 +71,11 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { return (PSA_SUCCESS - 1); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c index 20ddd118..c29938c7 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.c @@ -28,35 +28,35 @@ uint32_t pal_ipc_framework_version(void) { - return (psa_framework_version()); + return psa_framework_version(); } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. */ uint32_t pal_ipc_version(uint32_t sid) { - return (psa_version(sid)); + return psa_version(sid); } /** * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { - return (psa_connect(sid, minor_version)); + return psa_connect(sid, version); } /** @@ -65,6 +65,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -74,12 +75,13 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); + return psa_call(handle, type, in_vec, in_len, out_vec, out_len); } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h index 3f5741e0..89b4da66 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_client_api_intf.h @@ -22,11 +22,12 @@ uint32_t pal_ipc_framework_version(void); uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void pal_ipc_close(psa_handle_t handle); #endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h index 0a63b026..a03cd8d2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_common.h @@ -37,8 +37,7 @@ typedef uint32_t cfg_id_t; #define PAL_STATUS_UNSUPPORTED_FUNC 0xFF -typedef enum -{ +typedef enum { PAL_STATUS_SUCCESS = 0x0, PAL_STATUS_ERROR = 0x80 } pal_status_t; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h index 28713398..8c04b503 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -38,6 +38,9 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c index f8f773fb..862b9487 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ipc_intf.c @@ -31,22 +31,22 @@ int pal_uart_init_ns(uint32_t uart_base_addr) psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, {&uart_base_addr, sizeof(uart_base_addr)}, - {NULL, 0}}; + {NULL, 0} }; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return(PAL_STATUS_ERROR); - } + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_SUCCESS; + } + else { - return(PAL_STATUS_ERROR); + return PAL_STATUS_ERROR; } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; } /** @@ -62,7 +62,6 @@ int pal_print_ns(char *str, int32_t data) char *p = str; psa_handle_t print_handle = 0; psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; uart_fn_type_t uart_fn = UART_PRINT; while (*p != '\0') @@ -73,23 +72,22 @@ int pal_print_ns(char *str, int32_t data) psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, {str, string_len+1}, - {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); + {&data, sizeof(data)} }; - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(print_handle); - return status; } /** @@ -109,24 +107,22 @@ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick wd_param.wd_base_addr = base_addr; wd_param.wd_time_us = time_us; wd_param.wd_timer_tick_us = timer_tick_us; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -144,24 +140,22 @@ int pal_wd_timer_enable_ns(addr_t base_addr) wd_param.wd_base_addr = base_addr; wd_param.wd_time_us = 0; wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -179,24 +173,22 @@ int pal_wd_timer_disable_ns(addr_t base_addr) wd_param.wd_base_addr = base_addr; wd_param.wd_time_us = 0; wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -217,25 +209,23 @@ int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) nvmem_param.base = base; nvmem_param.offset = offset; nvmem_param.size = size; - psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; - psa_outvec outvec[1] = {{buffer, size}}; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)} }; + psa_outvec outvec[1] = {{buffer, size} }; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - psa_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -256,24 +246,22 @@ int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) nvmem_param.base = base; nvmem_param.offset = offset; nvmem_param.size = size; - psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size} }; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -298,7 +286,7 @@ void pal_terminate_simulation(void) { /* Add logic to terminate the simluation */ - while(1) + while (1) { asm volatile("WFI"); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c index 2af6fcc7..2f1f0086 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_driver_ns_intf.c @@ -53,7 +53,7 @@ int pal_print_ns(char *str, int32_t data) **/ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) { - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); + return pal_wd_cmsdk_init(base_addr, time_us, timer_tick_us); } /** @@ -63,7 +63,7 @@ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick **/ int pal_wd_timer_enable_ns(addr_t base_addr) { - return(pal_wd_cmsdk_enable(base_addr)); + return pal_wd_cmsdk_enable(base_addr); } /** @@ -73,7 +73,7 @@ int pal_wd_timer_enable_ns(addr_t base_addr) **/ int pal_wd_timer_disable_ns(addr_t base_addr) { - return (pal_wd_cmsdk_disable(base_addr)); + return pal_wd_cmsdk_disable(base_addr); } /** @@ -138,7 +138,7 @@ void pal_terminate_simulation(void) { /* Add logic to terminate the simluation */ - while(1) + while (1) { asm volatile("WFI"); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c deleted file mode 100644 index fd307839..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.c +++ /dev/null @@ -1,132 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#include "pal_driver_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - void -**/ -void pal_uart_init(uint32_t uart_base_addr) -{ - pal_uart_cmsdk_init(uart_base_addr); -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier -**/ - -void pal_print(char *str, int32_t data) -{ - pal_cmsdk_print(str,data); - -} - - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_write(base, offset, buffer, size); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_read(base, offset, buffer, size); -} - - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); - -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Checks whether hardware watchdog timer is enabled - @param - base_addr : Base address of the watchdog module - @return - Enabled : 1, Disabled : 0 -**/ -int pal_wd_timer_is_enabled(addr_t base_addr) -{ - return (pal_wd_cmsdk_is_enabled(base_addr)); -} - -/** - @brief - Trigger interrupt for irq signal assigned to driver partition - before return to caller. - @param - void - @return - void -**/ -void pal_generate_interrupt(void) -{ - pal_uart_cmsdk_generate_irq(); -} - -/** - @brief - Disable interrupt that was generated using pal_generate_interrupt API. - @param - void - @return - void -**/ -void pal_disable_interrupt(void) -{ - pal_uart_cmsdk_disable_irq(); -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg index a8f3700e..eafa7b09 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cfg @@ -52,6 +52,3 @@ dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; // Is combine_test_binary available in RAM? dut.0.combine_test_binary_in_ram = AVAILABLE; - -// Level of Isolation -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c index 578b4cef..0030ef04 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c @@ -31,10 +31,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. */ @@ -47,11 +47,11 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { return PSA_NULL_HANDLE; } @@ -62,6 +62,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -70,10 +71,11 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { return (PSA_SUCCESS - 1); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.c index 20ddd118..68af13d3 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.c @@ -32,10 +32,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. */ @@ -49,14 +49,14 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { - return (psa_connect(sid, minor_version)); + return (psa_connect(sid, version)); } /** @@ -65,6 +65,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -74,12 +75,13 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); + return (psa_call(handle, type, in_vec, in_len, out_vec, out_len)); } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.h index 3f5741e0..89b4da66 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_client_api_intf.h @@ -22,11 +22,12 @@ uint32_t pal_ipc_framework_version(void); uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void pal_ipc_close(psa_handle_t handle); #endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h index 28713398..8c04b503 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h @@ -38,6 +38,9 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c index f8f773fb..139f04fc 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c @@ -33,20 +33,20 @@ int pal_uart_init_ns(uint32_t uart_base_addr) {&uart_base_addr, sizeof(uart_base_addr)}, {NULL, 0}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return(PAL_STATUS_ERROR); - } + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_SUCCESS; + } + else { - return(PAL_STATUS_ERROR); + return PAL_STATUS_ERROR; } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; } /** @@ -62,7 +62,6 @@ int pal_print_ns(char *str, int32_t data) char *p = str; psa_handle_t print_handle = 0; psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; uart_fn_type_t uart_fn = UART_PRINT; while (*p != '\0') @@ -74,22 +73,21 @@ int pal_print_ns(char *str, int32_t data) psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, {str, string_len+1}, {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(print_handle); - return status; } /** @@ -111,22 +109,20 @@ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick wd_param.wd_timer_tick_us = timer_tick_us; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -146,22 +142,20 @@ int pal_wd_timer_enable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -181,22 +175,20 @@ int pal_wd_timer_disable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -220,22 +212,20 @@ int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; psa_outvec outvec[1] = {{buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - psa_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -258,22 +248,20 @@ int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) nvmem_param.size = size; psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.h deleted file mode 100644 index cef34ca8..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.h +++ /dev/null @@ -1,35 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#ifndef _PAL_DRIVER_INTF_H_ -#define _PAL_DRIVER_INTF_H_ - -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -void pal_uart_init(uint32_t uart_base_addr); -void pal_print(char *str, int32_t data); -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); -int pal_wd_timer_enable(addr_t base_addr); -int pal_wd_timer_disable(addr_t base_addr); -int pal_wd_timer_is_enabled(addr_t base_addr); -void pal_generate_interrupt(void); -void pal_disable_interrupt(void); -#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cfg index 23d5d1fe..97ac9c65 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cfg +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cfg @@ -52,5 +52,3 @@ dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; // Is combine_test_binary available in RAM? dut.0.combine_test_binary_in_ram = AVAILABLE; - -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/common/driver_partition_psa.json deleted file mode 100644 index 7010c9b5..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/common/driver_partition_psa.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "DRIVER_PARTITION", - "type": "PSA-ROT", - "priority": "NORMAL", - "description": "Implements device services such print, flash read/write,. etc.", - "entry_point": "driver_main", - "stack_size": "0x400", - "services": [{ - "name": "DRIVER_UART_SID", - "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_WATCHDOG_SID", - "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_NVMEM_SID", - "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_TEST_SID", - "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "UART_REGION", - "base": "0x40004000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "WATCHDOG_REGION", - "base": "0x40008000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "NVMEM_REGION", - "base": "0x2002F000", - "size": "0x400", - "permission": "READ-WRITE" - }, - { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "irqs": [ - { - "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", - "signal": "DRIVER_UART_INTR_SIG", - "line_num": 46 - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c index 578b4cef..0030ef04 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c @@ -31,10 +31,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. */ @@ -47,11 +47,11 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { return PSA_NULL_HANDLE; } @@ -62,6 +62,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -70,10 +71,11 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { return (PSA_SUCCESS - 1); } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.c index 20ddd118..68af13d3 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.c @@ -32,10 +32,10 @@ uint32_t pal_ipc_framework_version(void) } /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust * Service not present on the system. * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. */ @@ -49,14 +49,14 @@ uint32_t pal_ipc_version(uint32_t sid) * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service + * @param - version : version of RoT service * @return - psa_handle_t : return connection handle * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) { - return (psa_connect(sid, minor_version)); + return (psa_connect(sid, version)); } /** @@ -65,6 +65,7 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param -handle Handle for the connection. + * @param -type Request type. * @param -in_vec Array of psa_invec structures. * @param -in_len Number of psa_invec structures in in_vec. * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. @@ -74,12 +75,13 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); + return (psa_call(handle, type, in_vec, in_len, out_vec, out_len)); } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.h index 3f5741e0..89b4da66 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_client_api_intf.h @@ -22,11 +22,12 @@ uint32_t pal_ipc_framework_version(void); uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void pal_ipc_close(psa_handle_t handle); #endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h index 28713398..8c04b503 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h @@ -38,6 +38,9 @@ /* Are Dynamic memory APIs available to secure partition? */ #define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c index f8f773fb..139f04fc 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c @@ -33,20 +33,20 @@ int pal_uart_init_ns(uint32_t uart_base_addr) {&uart_base_addr, sizeof(uart_base_addr)}, {NULL, 0}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return(PAL_STATUS_ERROR); - } + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_SUCCESS; + } + else { - return(PAL_STATUS_ERROR); + return PAL_STATUS_ERROR; } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; } /** @@ -62,7 +62,6 @@ int pal_print_ns(char *str, int32_t data) char *p = str; psa_handle_t print_handle = 0; psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; uart_fn_type_t uart_fn = UART_PRINT; while (*p != '\0') @@ -74,22 +73,21 @@ int pal_print_ns(char *str, int32_t data) psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, {str, string_len+1}, {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(print_handle); - return status; } /** @@ -111,22 +109,20 @@ int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick wd_param.wd_timer_tick_us = timer_tick_us; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -146,22 +142,20 @@ int pal_wd_timer_enable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -181,22 +175,20 @@ int pal_wd_timer_disable_ns(addr_t base_addr) wd_param.wd_timer_tick_us = 0; psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -220,22 +212,20 @@ int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; psa_outvec outvec[1] = {{buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - psa_close(handle); - return PAL_STATUS_SUCCESS; } /** @@ -258,22 +248,20 @@ int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) nvmem_param.size = size; psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - return PAL_STATUS_ERROR; + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; } else { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } + return PAL_STATUS_ERROR; } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.c deleted file mode 100644 index 4d522071..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.c +++ /dev/null @@ -1,131 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#include "pal_driver_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - void -**/ -void pal_uart_init(uint32_t uart_base_addr) -{ - pal_uart_pl011_init(uart_base_addr); -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier -**/ - -void pal_print(char *str, int32_t data) -{ - pal_uart_pl011_print(str,data); -} - - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_write(base, offset, buffer, size); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_read(base, offset, buffer, size); -} - - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); - -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Checks whether hardware watchdog timer is enabled - @param - base_addr : Base address of the watchdog module - @return - Enabled : 1, Disabled : 0 -**/ -int pal_wd_timer_is_enabled(addr_t base_addr) -{ - return (pal_wd_cmsdk_is_enabled(base_addr)); -} - -/** - @brief - Trigger interrupt for irq signal assigned to driver partition - before return to caller. - @param - void - @return - void -**/ -void pal_generate_interrupt(void) -{ - pal_uart_pl011_generate_irq(); -} - -/** - @brief - Disable interrupt that was generated using pal_generate_interrupt API. - @param - void - @return - void -**/ -void pal_disable_interrupt(void) -{ - pal_uart_pl011_disable_irq(); -} diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.h deleted file mode 100644 index cef34ca8..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/spe/pal_driver_intf.h +++ /dev/null @@ -1,35 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#ifndef _PAL_DRIVER_INTF_H_ -#define _PAL_DRIVER_INTF_H_ - -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -void pal_uart_init(uint32_t uart_base_addr); -void pal_print(char *str, int32_t data); -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); -int pal_wd_timer_enable(addr_t base_addr); -int pal_wd_timer_disable(addr_t base_addr); -int pal_wd_timer_is_enabled(addr_t base_addr); -void pal_generate_interrupt(void); -void pal_disable_interrupt(void); -#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cfg b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cfg index 629efb53..20c1ab8d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cfg +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cfg @@ -52,5 +52,3 @@ dut.0.ns_start_addr_of_combine_test_binary = 0x28120000; // Is combine_test_binary available in RAM? dut.0.combine_test_binary_in_ram = AVAILABLE; - -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json similarity index 64% rename from api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/common/driver_partition_psa.json rename to api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json index e3cec929..7bc66491 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/manifests/common/driver_partition_psa.json +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json @@ -6,61 +6,58 @@ "description": "Implements device services such print, flash read/write,. etc.", "entry_point": "driver_main", "stack_size": "0x400", + "heap_size": "0x100", "services": [{ - "name": "DRIVER_UART_SID", + "name": "DRIVER_UART", "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_WATCHDOG_SID", + "name": "DRIVER_WATCHDOG", "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_NVMEM_SID", + "name": "DRIVER_NVMEM", "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_TEST_SID", + "name": "DRIVER_TEST", "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" } ], "mmio_regions" : [ { "name": "UART_REGION", - "base": "0x40004000", + "base": "0x50202000", "size": "0x1000", "permission": "READ-WRITE" }, { "name": "WATCHDOG_REGION", - "base": "0x40008000", + "base": "0x50081000", "size": "0x1000", "permission": "READ-WRITE" }, { "name": "NVMEM_REGION", - "base": "0x2002F000", + "base": "0x102FFC00", "size": "0x400", "permission": "READ-WRITE" }, { "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", + "base": "0x10300F20", "size": "0x20", "permission": "READ-WRITE" } @@ -69,7 +66,7 @@ { "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", "signal": "DRIVER_UART_INTR_SIG", - "line_num": 37 + "source": "UARTTX_IRQ" } ] } diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json new file mode 100644 index 00000000..c0fb05bc --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json @@ -0,0 +1,28 @@ +{ + "psa_framework_version": 1.0, + "name": "CLIENT_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Client partition executing client test func from SPE", + "entry_point": "client_main", + "stack_size": "0x400", + "services": [{ + "name": "CLIENT_TEST_DISPATCHER", + "sid": "0x0000FA01", + "non_secure_clients": true, + "version": 1, + "version_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART", + "DRIVER_NVMEM", + "DRIVER_TEST", + "SERVER_TEST_DISPATCHER", + "SERVER_UNSPECIFED_VERSION", + "SERVER_STRICT_VERSION", + "SERVER_RELAX_VERSION", + "SERVER_SECURE_CONNECT_ONLY", + "SERVER_CONNECTION_DROP" + ] +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json new file mode 100644 index 00000000..907aaa25 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json @@ -0,0 +1,70 @@ +{ + "psa_framework_version": 1.0, + "name": "SERVER_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Server partition executing server test func", + "entry_point": "server_main", + "stack_size": "0x400", + "heap_size": "0x100", + "services": [{ + "name": "SERVER_TEST_DISPATCHER", + "sid": "0x0000FB01", + "non_secure_clients": true, + "version": 1, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_SECURE_CONNECT_ONLY", + "sid": "0x0000FB02", + "non_secure_clients": false, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_STRICT_VERSION", + "sid": "0x0000FB03", + "non_secure_clients": true, + "version": 2, + "version_policy": "STRICT" + }, + { + "name": "SERVER_UNSPECIFED_VERSION", + "sid": "0x0000FB04", + "non_secure_clients": true + }, + { + "name": "SERVER_RELAX_VERSION", + "sid": "0x0000FB05", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_UNEXTERN", + "sid": "0x0000FB06", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_CONNECTION_DROP", + "sid": "0x0000FB07", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART", + "DRIVER_NVMEM" + ], + "mmio_regions" : [ + { + "name": "SERVER_PARTITION_MMIO", + "base": "0x10300F00", + "size": "0x20", + "permission": "READ-WRITE" + } + ] +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..0030ef04 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,95 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.c new file mode 100644 index 00000000..68af13d3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.c @@ -0,0 +1,99 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return (psa_framework_version()); +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return (psa_version(sid)); +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return (psa_connect(sid, version)); +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + * Note - Return -1 if PSA IPC is not implemented. + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (psa_call(handle, type, in_vec, in_len, out_vec, out_len)); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param - handle Handle for the connection. + * @return - void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + psa_close(handle); +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..89b4da66 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_client_api_intf.h @@ -0,0 +1,33 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_common.h new file mode 100644 index 00000000..0a63b026 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_common.h @@ -0,0 +1,116 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#include "pal_config.h" +#include "pal_crypto_config.h" + +/* typedef's */ +typedef uint8_t bool_t; +typedef uint32_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum +{ + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#ifndef IPC + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* IPC */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h new file mode 100644 index 00000000..640f56f3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h @@ -0,0 +1,94 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) + +/* Print verbosity = TEST */ +#define VERBOSE 3 + +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD + +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD + +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE + +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE + +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 +#endif /* PSA_CMAKE_BUILD */ + +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + +/* + * Include of PSA defined Header files + */ +#ifdef IPC +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#ifdef CRYPTO +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#ifdef INTERNAL_TRUSTED_STORAGE +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#ifdef PROTECTED_STORAGE +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#ifdef INITIAL_ATTESTATION +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ipc_intf.c new file mode 100644 index 00000000..139f04fc --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ipc_intf.c @@ -0,0 +1,293 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_INIT; + + psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, + {&uart_base_addr, sizeof(uart_base_addr)}, + {NULL, 0}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + int string_len = 0; + char *p = str; + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_PRINT; + + while (*p != '\0') + { + string_len++; + p++; + } + + psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, + {str, string_len+1}, + {&data, sizeof(data)}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_INIT_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = time_us; + wd_param.wd_timer_tick_us = timer_tick_us; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_ENABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_DISABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_READ; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; + psa_outvec outvec[1] = {{buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_WRITE; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..2af6fcc7 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + pal_uart_cmsdk_init(uart_base_addr); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + pal_cmsdk_print(str, data); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_read(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_write(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..ab11fd16 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,323 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_DES +//#define ARCH_TEST_DES_1KEY +//#define ARCH_TEST_DES_2KEY +//#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +//#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_MD2 +//#define ARCH_TEST_MD4 +//#define ARCH_TEST_MD5 +//#define ARCH_TEST_RIPEMD160 +#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +//#define ARCH_TEST_SHA512_224 +//#define ARCH_TEST_SHA512_256 +//#define ARCH_TEST_SHA3_224 +//#define ARCH_TEST_SHA3_256 +//#define ARCH_TEST_SHA3_384 +//#define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_GMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..443e0bc2 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_empty_intf.c new file mode 100644 index 00000000..2a28f397 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..1e61e8c3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,516 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; +#endif + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; + + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); + return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; + case PAL_CRYPTO_EXPORT_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); + return 0; + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); + return 0; + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); + return 0; + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); + case PAL_CRYPTO_AEAD_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); +#endif + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); +#endif + case PAL_CRYPTO_ASYMMTERIC_SIGN: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); + case PAL_CRYPTO_COPY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..671dfa0b --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,103 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c new file mode 100644 index 00000000..488c96b1 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -0,0 +1,343 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; + +static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, + size_t amount) +{ + return UsefulBuf_Head(buf, amount); +} + +static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) +{ + psa_algorithm_t status; + + switch (cose_hash_alg_id) + { + case COSE_ALG_SHA256_PROPRIETARY: + status = PSA_ALG_SHA_256; + break; + default: + status = PSA_ALG_MD4; + break; + } + + return status; +} + +static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) +{ + switch (cose_sig_alg_id) + { + case COSE_ALGORITHM_ES256: + return COSE_ALG_SHA256_PROPRIETARY; + default: + return INT32_MAX; + } +} + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) +{ + psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); + + /* Actually do the hash set up */ + status = psa_hash_setup(psa_hash, psa_alg); + + return status; + +} + +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash) +{ + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ + return; + } + + /* Actually hash the data */ + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); +} + +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Actually finish up the hash */ + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + hash_result->ptr = buffer_to_hold_result.ptr; + + return status; + +} + +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) + goto Done; + + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; +Done: + return status; +} + +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload) +{ + uint32_t status; + QCBOREncodeContext cbor_encode_ctx; + struct q_useful_buf_c tbs_first_part; + QCBORError qcbor_result; + int32_t hash_alg_id; + UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + /* This builds the CBOR-format to-be-signed bytes */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); + QCBOREncode_OpenArray(&cbor_encode_ctx); + + /* context */ + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + + /* body_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ + /* external_aad */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); + QCBOREncode_CloseArray(&cbor_encode_ctx); + + /* Get the result and convert it to struct q_useful_buf_c representation */ + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); + if (qcbor_result) + { + /* Mainly means that the protected_headers were too big + * (which should never happen) + */ + status = PAL_ATTEST_ERR_SIGN_STRUCT; + goto Done; + } + + /* Start the hashing */ + hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); + + /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() + * will handle it properly + */ + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); + if (status) + goto Done; + + /* This is hashing of the first part, all the CBOR + * except the payload. + */ + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); + + /* Hash the payload, the second part. */ + pal_cose_crypto_hash_update(&psa_hash, payload); + + /* Finish the hash and set up to return it */ + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + +Done: + return status; +} + +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) +{ + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; + +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); + + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + /* Import the public key */ + status = psa_import_key(public_key_handle, + attest_key_type, + public_key_buff, + public_key_size); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + public_key_buff, + public_key_size, + &public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif + + return status; +} + +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} + +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, + struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature) +{ + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); + + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; + + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + return PAL_ATTEST_SUCCESS; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h new file mode 100644 index 00000000..559a24c1 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + +#include "pal_attestation_eat.h" + +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) + +typedef struct { + uint8_t *pubx_key; + size_t pubx_key_size; + uint8_t *puby_key; + size_t puby_key_size; +} ecc_key_t; + +struct ecc_public_key_t { + const uint8_t a; + uint8_t public_key[]; /* X-coordinate || Y-coordinate */ +}; + +static const struct ecc_public_key_t attest_public_key = { + /* Constant byte */ + 0x04, + /* X-coordinate */ + {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, + /* Y-coordinate */ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, +}; + +static const uint8_t initial_attestation_public_x_key[] = { + 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F +}; + +static const uint8_t initial_attestation_public_y_key[] = { + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 +}; + +/* Initialize the structure with given public key */ +static const ecc_key_t attest_key = { + (uint8_t *)initial_attestation_public_x_key, + sizeof(initial_attestation_public_x_key), + (uint8_t *)initial_attestation_public_y_key, + sizeof(initial_attestation_public_y_key) +}; + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash); +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result); +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash); +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload); +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature); +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h new file mode 100644 index 00000000..56d624e3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -0,0 +1,80 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + +#include "qcbor.h" +#include "pal_common.h" + +#define PAL_ATTEST_MIN_ERROR 30 + +#define COSE_ALGORITHM_ES256 -7 +#define COSE_ALG_SHA256_PROPRIETARY -72000 + +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + +#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" + +/* Private value. Intentionally not documented for Doxygen. + * This is the size allocated for the encoded protected headers. It + * needs to be big enough for make_protected_header() to succeed. It + * currently sized for one header with an algorithm ID up to 32 bits + * long -- one byte for the wrapping map, one byte for the label, 5 + * bytes for the ID. If this is made accidentially too small, QCBOR will + * only return an error, and not overrun any buffers. + * + * 9 extra bytes are added, rounding it up to 16 total, in case some + * other protected header is to be added. + */ +#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) + +/** + * This is the size of the first part of the CBOR encoded TBS + * bytes. It is around 20 bytes. See create_tbs_hash(). + */ +#define T_COSE_SIZE_OF_TBS \ + 1 + /* For opening the array */ \ + sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ + 2 + /* Overhead for encoding string */ \ + T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ + 3 * ( /* 3 NULL bstrs for fields not used */ \ + 1 /* size of a NULL bstr */ \ + ) +#define NULL_USEFUL_BUF_C NULLUsefulBufC + +enum attestation_error_code { + PAL_ATTEST_SUCCESS = 0, + PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, + PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + PAL_ATTEST_TOKEN_NOT_SUPPORTED, + PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + PAL_ATTEST_HASH_LENGTH_MISMATCH, + PAL_ATTEST_HASH_MISMATCH, + PAL_ATTEST_HASH_FAIL, + PAL_ATTEST_HASH_UNSUPPORTED, + PAL_ATTEST_HASH_BUFFER_SIZE, + PAL_ATTEST_ERR_PROTECTED_HEADERS, + PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, + PAL_ATTEST_ERROR, +}; + +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_empty_intf.c new file mode 100644 index 00000000..faf3f493 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c new file mode 100644 index 00000000..83c1ebda --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c @@ -0,0 +1,56 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_attestation_intf.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + uint8_t *challenge, *token; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + + switch (type) + { + case PAL_INITIAL_ATTEST_GET_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); + case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token_size(challenge_size, token_size); + case PAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, size_t); + return pal_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h new file mode 100644 index 00000000..3ab7ebb4 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ + +#include "pal_attestation_crypto.h" + +enum attestation_function_code { + PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, + PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, + PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, +}; + +int32_t pal_attestation_function(int type, va_list valist); +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..133cfa9d --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..abfdc5d6 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,62 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..6db6aac6 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..ee9b13da --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..0dd07c57 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,77 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_storage_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..a338cdf7 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/spe/pal_driver_intf.c similarity index 100% rename from api-tests/platform/targets/tgt_dev_apis_tfm_an521/spe/pal_driver_intf.c rename to api-tests/platform/targets/tgt_ff_tfm_an521/spe/pal_driver_intf.c diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_ff_tfm_an521/spe/pal_driver_intf.h similarity index 100% rename from api-tests/platform/targets/tgt_dev_apis_tfm_an521/spe/pal_driver_intf.h rename to api-tests/platform/targets/tgt_ff_tfm_an521/spe/pal_driver_intf.h diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg new file mode 100644 index 00000000..9e50489d --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg @@ -0,0 +1,78 @@ +///** @file +// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +uart.num=1; +uart.0.base = 0x50202000; // UART2_S +uart.0.size = 0xFFF; +uart.0.intr_id = 0xFF; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +watchdog.num = 1; +watchdog.0.base = 0x50081000; // APB_WATCHDOG_BASE_S +watchdog.0.size = 0xFFF; +watchdog.0.intr_id = 0xFF; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) +watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 + +// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH +nvmem.num =1; +nvmem.0.start = 0x102FFC00; // (FLASH0_BASE_S + FLASH0_SIZE - 0x400) +nvmem.0.end = 0x102FFFFF; +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x281E0000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file +dut.0.ns_start_addr_of_combine_test_binary = 0x281F0000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + + +// ################################################################### +// Following Target configuration parameters are required for IPC tests +// only. Avoid updating them if you are running dev_apis tests. +// ################################################################### + +// Assign free memory range for isolation testing. Choose the addresses +// for these memory regions such that it follows below condition: +// nspe_mmio.0.start < server_partition_mmio.0.start < driver_partition_mmio.0.start. +nspe_mmio.num=1; +nspe_mmio.0.start = 0x00300F00; +nspe_mmio.0.end = 0x00300F1F; +nspe_mmio.0.permission = TYPE_READ_WRITE; + +server_partition_mmio.num=1; +server_partition_mmio.0.start = 0x10300F00; +server_partition_mmio.0.end = 0x10300F1F; +server_partition_mmio.0.permission = TYPE_READ_WRITE; + +driver_partition_mmio.num=1; +driver_partition_mmio.0.start = 0x10300F20; +driver_partition_mmio.0.end = 0x10300F3F; +driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake new file mode 100644 index 00000000..db9a4fa5 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake @@ -0,0 +1,105 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json similarity index 64% rename from api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/common/driver_partition_psa.json rename to api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json index 7010c9b5..6a8adf92 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/manifests/common/driver_partition_psa.json +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json @@ -6,61 +6,58 @@ "description": "Implements device services such print, flash read/write,. etc.", "entry_point": "driver_main", "stack_size": "0x400", + "heap_size": "0x100", "services": [{ - "name": "DRIVER_UART_SID", + "name": "DRIVER_UART", "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_WATCHDOG_SID", + "name": "DRIVER_WATCHDOG", "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_NVMEM_SID", + "name": "DRIVER_NVMEM", "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" }, { - "name": "DRIVER_TEST_SID", + "name": "DRIVER_TEST", "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" + "version": 1, + "version_policy": "RELAXED" } ], "mmio_regions" : [ { "name": "UART_REGION", - "base": "0x40004000", + "base": "0x40102000", "size": "0x1000", "permission": "READ-WRITE" }, { "name": "WATCHDOG_REGION", - "base": "0x40008000", + "base": "0x50081000", "size": "0x1000", "permission": "READ-WRITE" }, { "name": "NVMEM_REGION", - "base": "0x2002F000", + "base": "0x30017C00", "size": "0x400", "permission": "READ-WRITE" }, { "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", + "base": "0x10200F20", "size": "0x20", "permission": "READ-WRITE" } @@ -69,7 +66,7 @@ { "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", "signal": "DRIVER_UART_INTR_SIG", - "line_num": 46 + "source": "UARTTX_IRQ" } ] } diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json new file mode 100644 index 00000000..c0fb05bc --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json @@ -0,0 +1,28 @@ +{ + "psa_framework_version": 1.0, + "name": "CLIENT_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Client partition executing client test func from SPE", + "entry_point": "client_main", + "stack_size": "0x400", + "services": [{ + "name": "CLIENT_TEST_DISPATCHER", + "sid": "0x0000FA01", + "non_secure_clients": true, + "version": 1, + "version_policy": "RELAXED" + } + ], + "dependencies": [ + "DRIVER_UART", + "DRIVER_NVMEM", + "DRIVER_TEST", + "SERVER_TEST_DISPATCHER", + "SERVER_UNSPECIFED_VERSION", + "SERVER_STRICT_VERSION", + "SERVER_RELAX_VERSION", + "SERVER_SECURE_CONNECT_ONLY", + "SERVER_CONNECTION_DROP" + ] +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json new file mode 100644 index 00000000..5a1955ba --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json @@ -0,0 +1,70 @@ +{ + "psa_framework_version": 1.0, + "name": "SERVER_PARTITION", + "type": "APPLICATION-ROT", + "priority": "NORMAL", + "description": "Server partition executing server test func", + "entry_point": "server_main", + "stack_size": "0x400", + "heap_size": "0x100", + "services": [{ + "name": "SERVER_TEST_DISPATCHER", + "sid": "0x0000FB01", + "non_secure_clients": true, + "version": 1, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_SECURE_CONNECT_ONLY", + "sid": "0x0000FB02", + "non_secure_clients": false, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_STRICT_VERSION", + "sid": "0x0000FB03", + "non_secure_clients": true, + "version": 2, + "version_policy": "STRICT" + }, + { + "name": "SERVER_UNSPECIFED_VERSION", + "sid": "0x0000FB04", + "non_secure_clients": true + }, + { + "name": "SERVER_RELAX_VERSION", + "sid": "0x0000FB05", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_UNEXTERN", + "sid": "0x0000FB06", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + }, + { + "name": "SERVER_CONNECTION_DROP", + "sid": "0x0000FB07", + "non_secure_clients": true, + "version": 2, + "version_policy": "RELAXED" + } + ], + "mmio_regions" : [ + { + "name": "SERVER_PARTITION_MMIO", + "base": "0x10200F00", + "size": "0x20", + "permission": "READ-WRITE" + } + ], + "dependencies": [ + "DRIVER_UART", + "DRIVER_NVMEM" + ] +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..0030ef04 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,95 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.c new file mode 100644 index 00000000..68af13d3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.c @@ -0,0 +1,99 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return (psa_framework_version()); +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return (psa_version(sid)); +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return (psa_connect(sid, version)); +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + * Note - Return -1 if PSA IPC is not implemented. + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (psa_call(handle, type, in_vec, in_len, out_vec, out_len)); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param - handle Handle for the connection. + * @return - void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + psa_close(handle); +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..89b4da66 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_client_api_intf.h @@ -0,0 +1,33 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_common.h new file mode 100644 index 00000000..0a63b026 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_common.h @@ -0,0 +1,116 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#include "pal_config.h" +#include "pal_crypto_config.h" + +/* typedef's */ +typedef uint8_t bool_t; +typedef uint32_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum +{ + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#ifndef IPC + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* IPC */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h new file mode 100644 index 00000000..640f56f3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h @@ -0,0 +1,94 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) + +/* Print verbosity = TEST */ +#define VERBOSE 3 + +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD + +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD + +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE + +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE + +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 +#endif /* PSA_CMAKE_BUILD */ + +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA2 + +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + +/* + * Include of PSA defined Header files + */ +#ifdef IPC +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#ifdef CRYPTO +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#ifdef INTERNAL_TRUSTED_STORAGE +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#ifdef PROTECTED_STORAGE +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#ifdef INITIAL_ATTESTATION +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c new file mode 100644 index 00000000..139f04fc --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ipc_intf.c @@ -0,0 +1,293 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_INIT; + + psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, + {&uart_base_addr, sizeof(uart_base_addr)}, + {NULL, 0}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + int string_len = 0; + char *p = str; + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_PRINT; + + while (*p != '\0') + { + string_len++; + p++; + } + + psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, + {str, string_len+1}, + {&data, sizeof(data)}}; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_INIT_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = time_us; + wd_param.wd_timer_tick_us = timer_tick_us; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_ENABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_DISABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_READ; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; + psa_outvec outvec[1] = {{buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_WRITE; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..338df6cb --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + pal_uart_pl011_init(uart_base_addr); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + pal_uart_pl011_print(str, data); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return(pal_wd_cmsdk_enable(base_addr)); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return (pal_wd_cmsdk_disable(base_addr)); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_read(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_write(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while(1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..ab11fd16 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,323 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_DES +//#define ARCH_TEST_DES_1KEY +//#define ARCH_TEST_DES_2KEY +//#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +//#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_MD2 +//#define ARCH_TEST_MD4 +//#define ARCH_TEST_MD5 +//#define ARCH_TEST_RIPEMD160 +#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +//#define ARCH_TEST_SHA512_224 +//#define ARCH_TEST_SHA512_256 +//#define ARCH_TEST_SHA3_224 +//#define ARCH_TEST_SHA3_256 +//#define ARCH_TEST_SHA3_384 +//#define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_GMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..443e0bc2 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_empty_intf.c new file mode 100644 index 00000000..2a28f397 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..1e61e8c3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,516 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; +#endif + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; + + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); + return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; + case PAL_CRYPTO_EXPORT_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); + return 0; + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); + return 0; + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); + return 0; + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); + case PAL_CRYPTO_AEAD_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); +#endif + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); +#endif + case PAL_CRYPTO_ASYMMTERIC_SIGN: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); + case PAL_CRYPTO_COPY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..671dfa0b --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,103 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c new file mode 100644 index 00000000..488c96b1 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -0,0 +1,343 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; + +static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, + size_t amount) +{ + return UsefulBuf_Head(buf, amount); +} + +static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) +{ + psa_algorithm_t status; + + switch (cose_hash_alg_id) + { + case COSE_ALG_SHA256_PROPRIETARY: + status = PSA_ALG_SHA_256; + break; + default: + status = PSA_ALG_MD4; + break; + } + + return status; +} + +static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) +{ + switch (cose_sig_alg_id) + { + case COSE_ALGORITHM_ES256: + return COSE_ALG_SHA256_PROPRIETARY; + default: + return INT32_MAX; + } +} + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) +{ + psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); + + /* Actually do the hash set up */ + status = psa_hash_setup(psa_hash, psa_alg); + + return status; + +} + +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash) +{ + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ + return; + } + + /* Actually hash the data */ + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); +} + +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Actually finish up the hash */ + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + hash_result->ptr = buffer_to_hold_result.ptr; + + return status; + +} + +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) + goto Done; + + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; +Done: + return status; +} + +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload) +{ + uint32_t status; + QCBOREncodeContext cbor_encode_ctx; + struct q_useful_buf_c tbs_first_part; + QCBORError qcbor_result; + int32_t hash_alg_id; + UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + /* This builds the CBOR-format to-be-signed bytes */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); + QCBOREncode_OpenArray(&cbor_encode_ctx); + + /* context */ + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + + /* body_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ + /* external_aad */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); + QCBOREncode_CloseArray(&cbor_encode_ctx); + + /* Get the result and convert it to struct q_useful_buf_c representation */ + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); + if (qcbor_result) + { + /* Mainly means that the protected_headers were too big + * (which should never happen) + */ + status = PAL_ATTEST_ERR_SIGN_STRUCT; + goto Done; + } + + /* Start the hashing */ + hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); + + /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() + * will handle it properly + */ + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); + if (status) + goto Done; + + /* This is hashing of the first part, all the CBOR + * except the payload. + */ + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); + + /* Hash the payload, the second part. */ + pal_cose_crypto_hash_update(&psa_hash, payload); + + /* Finish the hash and set up to return it */ + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + +Done: + return status; +} + +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) +{ + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; + +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); + + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + /* Import the public key */ + status = psa_import_key(public_key_handle, + attest_key_type, + public_key_buff, + public_key_size); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + + /* Import the public key */ + status = psa_import_key(&attributes, + public_key_buff, + public_key_size, + &public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif + + return status; +} + +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} + +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, + struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature) +{ + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); + + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; + + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + return PAL_ATTEST_SUCCESS; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h new file mode 100644 index 00000000..559a24c1 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + +#include "pal_attestation_eat.h" + +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) + +typedef struct { + uint8_t *pubx_key; + size_t pubx_key_size; + uint8_t *puby_key; + size_t puby_key_size; +} ecc_key_t; + +struct ecc_public_key_t { + const uint8_t a; + uint8_t public_key[]; /* X-coordinate || Y-coordinate */ +}; + +static const struct ecc_public_key_t attest_public_key = { + /* Constant byte */ + 0x04, + /* X-coordinate */ + {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, + /* Y-coordinate */ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, +}; + +static const uint8_t initial_attestation_public_x_key[] = { + 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F +}; + +static const uint8_t initial_attestation_public_y_key[] = { + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 +}; + +/* Initialize the structure with given public key */ +static const ecc_key_t attest_key = { + (uint8_t *)initial_attestation_public_x_key, + sizeof(initial_attestation_public_x_key), + (uint8_t *)initial_attestation_public_y_key, + sizeof(initial_attestation_public_y_key) +}; + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash); +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result); +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash); +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload); +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature); +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h new file mode 100644 index 00000000..56d624e3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -0,0 +1,80 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + +#include "qcbor.h" +#include "pal_common.h" + +#define PAL_ATTEST_MIN_ERROR 30 + +#define COSE_ALGORITHM_ES256 -7 +#define COSE_ALG_SHA256_PROPRIETARY -72000 + +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + +#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" + +/* Private value. Intentionally not documented for Doxygen. + * This is the size allocated for the encoded protected headers. It + * needs to be big enough for make_protected_header() to succeed. It + * currently sized for one header with an algorithm ID up to 32 bits + * long -- one byte for the wrapping map, one byte for the label, 5 + * bytes for the ID. If this is made accidentially too small, QCBOR will + * only return an error, and not overrun any buffers. + * + * 9 extra bytes are added, rounding it up to 16 total, in case some + * other protected header is to be added. + */ +#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) + +/** + * This is the size of the first part of the CBOR encoded TBS + * bytes. It is around 20 bytes. See create_tbs_hash(). + */ +#define T_COSE_SIZE_OF_TBS \ + 1 + /* For opening the array */ \ + sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ + 2 + /* Overhead for encoding string */ \ + T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ + 3 * ( /* 3 NULL bstrs for fields not used */ \ + 1 /* size of a NULL bstr */ \ + ) +#define NULL_USEFUL_BUF_C NULLUsefulBufC + +enum attestation_error_code { + PAL_ATTEST_SUCCESS = 0, + PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, + PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + PAL_ATTEST_TOKEN_NOT_SUPPORTED, + PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + PAL_ATTEST_HASH_LENGTH_MISMATCH, + PAL_ATTEST_HASH_MISMATCH, + PAL_ATTEST_HASH_FAIL, + PAL_ATTEST_HASH_UNSUPPORTED, + PAL_ATTEST_HASH_BUFFER_SIZE, + PAL_ATTEST_ERR_PROTECTED_HEADERS, + PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, + PAL_ATTEST_ERROR, +}; + +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_empty_intf.c new file mode 100644 index 00000000..faf3f493 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c new file mode 100644 index 00000000..83c1ebda --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c @@ -0,0 +1,56 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_attestation_intf.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + uint8_t *challenge, *token; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + + switch (type) + { + case PAL_INITIAL_ATTEST_GET_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); + case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token_size(challenge_size, token_size); + case PAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, size_t); + return pal_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h new file mode 100644 index 00000000..3ab7ebb4 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ + +#include "pal_attestation_crypto.h" + +enum attestation_function_code { + PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, + PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, + PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, +}; + +int32_t pal_attestation_function(int type, va_list valist); +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..133cfa9d --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..abfdc5d6 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,62 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..6db6aac6 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..ee9b13da --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..0dd07c57 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,77 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_storage_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..a338cdf7 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/spe/pal_driver_intf.c similarity index 93% rename from api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.c rename to api-tests/platform/targets/tgt_ff_tfm_musca_a/spe/pal_driver_intf.c index 4d522071..1dfd9639 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/spe/pal_driver_intf.c +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/spe/pal_driver_intf.c @@ -35,7 +35,7 @@ void pal_uart_init(uint32_t uart_base_addr) void pal_print(char *str, int32_t data) { - pal_uart_pl011_print(str,data); + pal_uart_pl011_print(str, data); } @@ -75,7 +75,7 @@ int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) **/ int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) { - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); + return pal_wd_cmsdk_init(base_addr, time_us, timer_tick_us); } @@ -86,7 +86,7 @@ int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us **/ int pal_wd_timer_enable(addr_t base_addr) { - return(pal_wd_cmsdk_enable(base_addr)); + return pal_wd_cmsdk_enable(base_addr); } /** @@ -96,7 +96,7 @@ int pal_wd_timer_enable(addr_t base_addr) **/ int pal_wd_timer_disable(addr_t base_addr) { - return (pal_wd_cmsdk_disable(base_addr)); + return pal_wd_cmsdk_disable(base_addr); } /** @@ -106,7 +106,7 @@ int pal_wd_timer_disable(addr_t base_addr) **/ int pal_wd_timer_is_enabled(addr_t base_addr) { - return (pal_wd_cmsdk_is_enabled(base_addr)); + return pal_wd_cmsdk_is_enabled(base_addr); } /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/spe/pal_driver_intf.h similarity index 100% rename from api-tests/platform/targets/tgt_dev_apis_tfm_an524/spe/pal_driver_intf.h rename to api-tests/platform/targets/tgt_ff_tfm_musca_a/spe/pal_driver_intf.h diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg new file mode 100644 index 00000000..3535eeec --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg @@ -0,0 +1,78 @@ +///** @file +// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +uart.num=1; +uart.0.base = 0x40102000; // MUSCA_UART1_NS_BASE +uart.0.size = 0xFFF; +uart.0.intr_id = 0xFF; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +watchdog.num = 1; +watchdog.0.base = 0x50081000; // MUSCA_CMSDK_WATCHDOG_S_BASE +watchdog.0.size = 0xFFF; +watchdog.0.intr_id = 0xFF; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) +watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 + +// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH +nvmem.num =1; +nvmem.0.start = 0x30017C00; // END_OF_MUSCA_SRAM_S +nvmem.0.end = 0x30017FFF; +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x281E0000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file +dut.0.ns_start_addr_of_combine_test_binary = 0x281F0000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + + +// ################################################################### +// Following Target configuration parameters are required for IPC tests +// only. Avoid updating them if you are running dev_apis tests. +// ################################################################### + +// Assign free memory range for isolation testing. Choose the addresses +// for these memory regions such that it follows below condition: +// nspe_mmio.0.start < server_partition_mmio.0.start < driver_partition_mmio.0.start. +nspe_mmio.num=1; +nspe_mmio.0.start = 0x00200F00; +nspe_mmio.0.end = 0x00200F1F; +nspe_mmio.0.permission = TYPE_READ_WRITE; + +server_partition_mmio.num=1; +server_partition_mmio.0.start = 0x10200F00; +server_partition_mmio.0.end = 0x10200F1F; +server_partition_mmio.0.permission = TYPE_READ_WRITE; + +driver_partition_mmio.num=1; +driver_partition_mmio.0.start = 0x10200F20; +driver_partition_mmio.0.end = 0x10200F3F; +driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake new file mode 100644 index 00000000..756a0b41 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake @@ -0,0 +1,105 @@ +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011 + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/tools/scripts/manifest_update.py b/api-tests/tools/scripts/manifest_update.py new file mode 100644 index 00000000..65c693e5 --- /dev/null +++ b/api-tests/tools/scripts/manifest_update.py @@ -0,0 +1,111 @@ +#!/usr/bin/python +#/** @file +# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +import sys +import re +import shutil +from argparse import ArgumentParser + +driver_linker_pattern = \ +' ],\n'\ +' "linker_pattern": {\n'\ +' "library_list": [\n'\ +' "*driver_partition.a"\n'\ +' ]\n'\ +' }\n' +client_linker_pattern = \ +' ],\n'\ +' "linker_pattern": {\n'\ +' "library_list": [\n'\ +' "*client_partition.a"\n'\ +' ]\n'\ +' }\n' +server_linker_pattern = \ +' ],\n'\ +' "linker_pattern": {\n'\ +' "library_list": [\n'\ +' "*server_partition.a"\n'\ +' ]\n'\ +' }\n' + +def update_manifest_file(manifest_dir_path, sp_heap_mem_supp, add_linker_pattern): + """ + - Remove heap_size field from manifest if dynamic memory function is not supported. + - TFM needs special linker pattern field(other than PSA FF defined field) + in manifest to place partition code/data at appropriate places in the memory. + This routine appends these linker pattern to the available manifest files. + """ + linker_pattern_present = 0 + driver_partition_manifest = manifest_dir_path+"/common/driver_partition_psa.json" + client_partition_manifest = manifest_dir_path+"/ipc/client_partition_psa.json" + server_partition_manifest = manifest_dir_path+"/ipc/server_partition_psa.json" + file_pattern_dict = {driver_partition_manifest:driver_linker_pattern, + client_partition_manifest:client_linker_pattern, + server_partition_manifest:server_linker_pattern} + + for file,pattern in file_pattern_dict.items(): + print("Updating "+file+" manifest file") + f_i = open(file, 'r') + f_o = open(file+".update", 'w') + f1 = f_i.readlines() + for line in f1: + if (add_linker_pattern == "1"): + if (linker_pattern_present == 1): + f_o.write(line) + continue + if (re.findall('linker_pattern', line)): + linker_pattern_present = 1 + f_o.write(line) + continue + if (re.findall(']$', line)): + f_o.write(pattern) + continue + + if (sp_heap_mem_supp == "0"): + if (re.findall('heap_size', line)): + continue + f_o.write(line) + shutil.move(file+".update", file) + +def argparse(): + """ + Parse the command line argument + """ + parser = ArgumentParser(description='Utility to update manifest files') + parser.add_argument('--manifest_dir_path', help="Absolute path for manifest directory", + type=str, action="store", dest='manifest_dir_path') + parser.add_argument('--sp_heap_mem_supp', + help="Pass 1 if platform supports dynamic memory functions \ + for secure partition otherwise 0. Default is 1. Passing 0 \ + will remove the heap_size field from the manifest", + type=str, action="store", dest='sp_heap_mem_supp') + parser.add_argument('--add_linker_pattern', help="Pass 1 if platform is Trusted Firmware-M otherwise 0.\ + This updates the manifest files with TFM required linker pattern", + type=str, action="store", dest='add_linker_pattern') + options = parser.parse_args() + + if (len(sys.argv) != 4): + print("\n Invaild number of arguments. Refer help message.") + sys.exit(1) + + return options + +#main code starts here +if __name__ == "__main__": + options = argparse() + update_manifest_file(options.manifest_dir_path, options.sp_heap_mem_supp, options.add_linker_pattern) diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h index 243c5848..c9bcc337 100644 --- a/api-tests/val/common/val.h +++ b/api-tests/val/common/val.h @@ -177,6 +177,12 @@ typedef enum { TEST_ISOLATION_L3 = 0x3, } test_isolation_level_t; +typedef enum { + LEVEL1 = 0x1, + LEVEL2, + LEVEL3, +} isolation_level_t; + typedef enum { /* VAL uses this boot flag to mark first time boot of the system */ BOOT_UNKNOWN = 0x1, diff --git a/api-tests/val/common/val_target.h b/api-tests/val/common/val_target.h index 415c8f63..b450a330 100644 --- a/api-tests/val/common/val_target.h +++ b/api-tests/val/common/val_target.h @@ -102,12 +102,6 @@ typedef struct _TARGET_CFG_HDR_ { uint32_t size; }target_cfg_hdr_t; -typedef enum { - LEVEL1 = 0x1, - LEVEL2, - LEVEL3, -} firmware_level_t; - typedef enum { NOT_AVAILABLE = 0x0, AVAILABLE = 0x1, @@ -191,11 +185,9 @@ typedef struct _MISCELLANEOUS_INFO_HDR_ { typedef struct _MISCELLANEOUS_INFO_DESC_ { cfg_type_t cfg_type; - firmware_level_t implemented_psa_firmware_isolation_level; addr_t ns_start_addr_of_combine_test_binary; is_available_t combine_test_binary_in_ram; addr_t ns_test_addr; - is_available_t sp_heap_mem_supp; } miscellaneous_desc_t; /*val target config read apis */ diff --git a/api-tests/val/nspe/pal_interfaces_ns.h b/api-tests/val/nspe/pal_interfaces_ns.h index 0b506121..e017d193 100644 --- a/api-tests/val/nspe/pal_interfaces_ns.h +++ b/api-tests/val/nspe/pal_interfaces_ns.h @@ -40,10 +40,10 @@ int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len); uint32_t pal_ipc_framework_version(void); /** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. + * @brief - Retrieve the version of a Root of Trust Service by its SID. * This is a wrapper API for the psa_version API. * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust Service + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust Service * not present on the system. * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. */ @@ -53,17 +53,18 @@ uint32_t pal_ipc_version(uint32_t sid); * @brief - Connect to given sid. * This is a wrapper API for the psa_connect API. * @param - sid : RoT service id - * - minor_version : minor_version of RoT service + * - version : version of RoT service * @return - psa_handle_t : return connection handle * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. */ -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); /** * @brief - Call a connected Root of Trust Service. * This is a wrapper API for the psa_call API. The caller must provide an array of * psa_invec_t structures as the input payload. * @param - handle: Handle for the connection. + * - type: Request type * - in_vec: Array of psa_invec structures. * - in_len: Number of psa_invec structures in in_vec. * - out_vec: Array of psa_outvec structures for optional Root of Trust Service response. @@ -72,10 +73,11 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); */ psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); /** * @brief - Close a connection to a Root of Trust Service. diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c index 5d6da4e0..d6a2f1a6 100644 --- a/api-tests/val/nspe/val_dispatcher.c +++ b/api-tests/val/nspe/val_dispatcher.c @@ -484,7 +484,7 @@ int32_t val_dispatcher(test_id_t test_id_prev) val_print(PRINT_ALWAYS, "TOTAL SKIPPED : %d\n", test_count.skip_cnt); val_print(PRINT_ALWAYS, "******************************************\n", 0); - return (test_count.fail_cnt > 0) ? VAL_STATUS_TEST_FAILED : VAL_STATUS_SUCCESS ; + return (test_count.fail_cnt > 0) ? VAL_STATUS_TEST_FAILED : VAL_STATUS_SUCCESS; } diff --git a/api-tests/val/nspe/val_dispatcher.h b/api-tests/val/nspe/val_dispatcher.h index 173e8c6d..9763dd9e 100644 --- a/api-tests/val/nspe/val_dispatcher.h +++ b/api-tests/val/nspe/val_dispatcher.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -66,5 +66,5 @@ typedef struct { uint32_t elf_size; } test_header_t; -int32_t val_dispatcher(test_id_t); +int32_t val_dispatcher(test_id_t test_id_prev); #endif diff --git a/api-tests/val/nspe/val_entry.c b/api-tests/val/nspe/val_entry.c index f0a44dde..15aefb97 100644 --- a/api-tests/val/nspe/val_entry.c +++ b/api-tests/val/nspe/val_entry.c @@ -23,7 +23,7 @@ /** @brief - PSA C main function, does VAL init and calls test dispatcher @param - None - @return - status - error code + @return - status - error code **/ int32_t val_entry(void) { diff --git a/api-tests/val/nspe/val_framework.c b/api-tests/val/nspe/val_framework.c index 57cb0b6b..322f166d 100644 --- a/api-tests/val/nspe/val_framework.c +++ b/api-tests/val/nspe/val_framework.c @@ -31,20 +31,18 @@ test_status_buffer_t g_status_buffer; /** * @brief Connect to given sid @param -sid : RoT service id - @param -minor_version : minor_version of RoT service + @param -version : version of RoT service @param -handle - return connection handle * @return val_status_t */ -val_status_t val_ipc_connect(uint32_t sid, uint32_t minor_version, psa_handle_t *handle ) +val_status_t val_ipc_connect(uint32_t sid, uint32_t version, psa_handle_t *handle ) { - *handle = pal_ipc_connect(sid, minor_version); + *handle = pal_ipc_connect(sid, version); - if (*handle < 0) - { - return VAL_STATUS_CONNECTION_FAILED; - } + if (*handle > 0) + return VAL_STATUS_SUCCESS; - return VAL_STATUS_SUCCESS; + return VAL_STATUS_CONNECTION_FAILED; } /** @@ -52,18 +50,23 @@ val_status_t val_ipc_connect(uint32_t sid, uint32_t minor_version, psa_handle_t * The caller must provide an array of ::psa_invec_t structures as the input payload. * * @param handle Handle for the connection. + * @param type Request type * @param in_vec Array of psa_invec structures. * @param in_len Number of psa_invec structures in in_vec. * @param out_vec Array of psa_outvec structures for optional Root of Trust Service response. * @param out_len Number of psa_outvec structures in out_vec. * @return val_status_t */ -val_status_t val_ipc_call(psa_handle_t handle, psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +val_status_t val_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { psa_status_t call_status = PSA_SUCCESS; - call_status = pal_ipc_call(handle, in_vec, in_len, out_vec, out_len); + call_status = pal_ipc_call(handle, type, in_vec, in_len, out_vec, out_len); if (call_status != PSA_SUCCESS) { @@ -123,7 +126,7 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test */ if ((boot.state == BOOT_EXPECTED_REENTER_TEST) && (i == 1)) { - val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0); + val_print(PRINT_DEBUG, "[Check 1] PASSED\n", 0); i++; continue; } @@ -149,12 +152,12 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test if (VAL_ERROR(status)) { val_set_status(RESULT_FAIL(status)); - val_print(PRINT_DEBUG,"[Check%d] START\n", i); + val_print(PRINT_DEBUG, "[Check %d] START\n", i); return status; } else { - val_print(PRINT_DEBUG,"[Check%d] START\n", i); + val_print(PRINT_DEBUG, "[Check %d] START\n", i); } } @@ -172,21 +175,21 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test { val_set_status(status); if (server_hs == TRUE) - val_print(PRINT_DEBUG, "[Check%d] SKIPPED\n", i); + val_print(PRINT_DEBUG, "[Check %d] SKIPPED\n", i); return status; } else if (VAL_ERROR(status)) { val_set_status(RESULT_FAIL(status)); if (server_hs == TRUE) - val_print(PRINT_DEBUG, "[Check%d] FAILED\n", i); + val_print(PRINT_DEBUG, "[Check %d] FAILED\n", i); return status; } else { if (server_hs == TRUE) - val_print(PRINT_DEBUG, "[Check%d] PASSED\n", i); + val_print(PRINT_DEBUG, "[Check %d] PASSED\n", i); } i++; @@ -198,7 +201,7 @@ val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *test status = VAL_STATUS_SUCCESS; if (boot.state != BOOT_EXPECTED_S) { - val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0); + val_print(PRINT_DEBUG, "[Check 1] PASSED\n", 0); } } return status; @@ -236,7 +239,7 @@ val_status_t val_switch_to_secure_client(uint32_t test_num) if (boot.state == BOOT_EXPECTED_REENTER_TEST) { test_info.block_num++; - val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0); + val_print(PRINT_DEBUG, "[Check 1] PASSED\n", 0); } status = val_set_boot_flag(BOOT_NOT_EXPECTED); @@ -268,7 +271,7 @@ val_status_t val_switch_to_secure_client(uint32_t test_num) else { /* If we are here means, we are in third run of this test */ - val_print(PRINT_DEBUG, "[Check1] PASSED\n", 0); + val_print(PRINT_DEBUG, "[Check 1] PASSED\n", 0); return VAL_STATUS_SUCCESS; } @@ -293,23 +296,25 @@ val_status_t val_execute_secure_test_func(psa_handle_t *handle, test_info_t test val_status_t status = VAL_STATUS_SUCCESS; psa_status_t status_of_call = PSA_SUCCESS; - *handle = pal_ipc_connect(sid, 0); - if (*handle < 0) + *handle = pal_ipc_connect(sid, 1); + if (*handle > 0) { - val_print(PRINT_ERROR, "Could not connect SID. Handle=%x\n", *handle); - return VAL_STATUS_CONNECTION_FAILED; - } + test_data = ((uint32_t)(test_info.test_num) |((uint32_t)(test_info.block_num) << BLOCK_NUM_POS) + | ((uint32_t)(TEST_EXECUTE_FUNC) << ACTION_POS)); + psa_invec data[1] = {{&test_data, sizeof(test_data)}}; - test_data = ((uint32_t)(test_info.test_num) |((uint32_t)(test_info.block_num) << BLOCK_NUM_POS) - | ((uint32_t)(TEST_EXECUTE_FUNC) << ACTION_POS)); - psa_invec data[1] = {{&test_data, sizeof(test_data)}}; - - status_of_call = pal_ipc_call(*handle, data, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) + status_of_call = pal_ipc_call(*handle, 0, data, 1, NULL, 0); + if (status_of_call != PSA_SUCCESS) + { + status = VAL_STATUS_CALL_FAILED; + val_print(PRINT_ERROR, "Call to dispatch SF failed. Status=%x\n", status_of_call); + pal_ipc_close(*handle); + } + } + else { - status = VAL_STATUS_CALL_FAILED; - val_print(PRINT_ERROR, "Call to dispatch SF failed. Status=%x\n", status_of_call); - pal_ipc_close(*handle); + val_print(PRINT_ERROR, "Could not connect SID. Handle=%x\n", *handle); + status = VAL_STATUS_CONNECTION_FAILED; } return status; @@ -332,7 +337,7 @@ val_status_t val_get_secure_test_result(psa_handle_t *handle) psa_outvec resp = {&status, sizeof(status)}; psa_invec data[1] = {{&test_data, sizeof(test_data)}}; - status_of_call = pal_ipc_call(*handle, data, 1, &resp, 1); + status_of_call = pal_ipc_call(*handle, 0, data, 1, &resp, 1); if (status_of_call != PSA_SUCCESS) { status = VAL_STATUS_CALL_FAILED; @@ -462,7 +467,6 @@ val_status_t val_err_check_set(uint32_t checkpoint, val_status_t status) void val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield) { val_status_t status = VAL_STATUS_SUCCESS; - miscellaneous_desc_t *misc_desc; /*global init*/ g_status_buffer.state = TEST_FAIL; @@ -472,18 +476,7 @@ void val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield) val_print(PRINT_ALWAYS, desc, 0); /* common skip logic */ - status = val_target_get_config(TARGET_CONFIG_CREATE_ID(GROUP_MISCELLANEOUS, - MISCELLANEOUS_DUT, 0), - (uint8_t **)&misc_desc, - (uint32_t *)sizeof(miscellaneous_desc_t)); - if (VAL_ERROR(status)) - { - val_print(PRINT_ERROR, "val_target_get_config failed Error=0x%x\n", status); - return; - } - - if (misc_desc->implemented_psa_firmware_isolation_level < - GET_TEST_ISOLATION_LEVEL(test_bitfield)) + if (PLATFORM_PSA_ISOLATION_LEVEL < GET_TEST_ISOLATION_LEVEL(test_bitfield)) { val_set_status(RESULT_SKIP(VAL_STATUS_ISOLATION_LEVEL_NOT_SUPP)); val_print(PRINT_ALWAYS, "\tSkipping test. Required isolation level is not supported\n", 0); @@ -508,7 +501,7 @@ void val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield) } #endif - val_set_status(RESULT_START(VAL_STATUS_SUCCESS)); + val_set_status(RESULT_START(status)); return; } diff --git a/api-tests/val/nspe/val_framework.h b/api-tests/val/nspe/val_framework.h index 84e2bd0c..7e13fb6c 100644 --- a/api-tests/val/nspe/val_framework.h +++ b/api-tests/val/nspe/val_framework.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,15 +31,21 @@ val_status_t val_err_check_set(uint32_t checkpoint, val_status_t status); void val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield); void val_test_exit(void); val_status_t val_get_last_run_test_id(test_id_t *test_id); -val_status_t val_execute_non_secure_tests(uint32_t test_num, client_test_t *tests_list, - bool_t server_hs); +val_status_t val_execute_non_secure_tests(uint32_t test_num, + client_test_t *tests_list, + bool_t server_hs); val_status_t val_switch_to_secure_client(uint32_t test_num); -val_status_t val_execute_secure_test_func(psa_handle_t *handle, test_info_t test_info, +val_status_t val_execute_secure_test_func(psa_handle_t *handle, + test_info_t test_info, uint32_t sid); val_status_t val_get_secure_test_result(psa_handle_t *handle); -val_status_t val_ipc_connect(uint32_t sid, uint32_t minor_version, psa_handle_t *handle); -val_status_t val_ipc_call(psa_handle_t handle, psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +val_status_t val_ipc_connect(uint32_t sid, uint32_t version, psa_handle_t *handle); +val_status_t val_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void val_ipc_close(psa_handle_t handle); val_status_t val_set_boot_flag(boot_state_t state); val_status_t val_get_boot_flag(boot_state_t *state); diff --git a/api-tests/val/nspe/val_interfaces.h b/api-tests/val/nspe/val_interfaces.h index 8e9c56bd..944d4b14 100644 --- a/api-tests/val/nspe/val_interfaces.h +++ b/api-tests/val/nspe/val_interfaces.h @@ -38,10 +38,13 @@ typedef struct { val_status_t (*switch_to_secure_client) (uint32_t test_num); val_status_t (*execute_secure_test_func) (psa_handle_t *handle, test_info_t test_info, uint32_t sid); - val_status_t (*ipc_connect) (uint32_t sid, uint32_t minor_version, + val_status_t (*ipc_connect) (uint32_t sid, uint32_t version, psa_handle_t *handle ); - val_status_t (*ipc_call) (psa_handle_t handle, psa_invec *in_vec, - size_t in_len, psa_outvec *out_vec, + val_status_t (*ipc_call) (psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, size_t out_len); void (*ipc_close) (psa_handle_t handle); val_status_t (*get_secure_test_result) (psa_handle_t *handle); @@ -62,13 +65,13 @@ typedef struct { typedef struct { uint32_t (*framework_version) (void); uint32_t (*version) (uint32_t sid); - psa_handle_t (*connect) (uint32_t sid, uint32_t minor_version); + psa_handle_t (*connect) (uint32_t sid, uint32_t version); psa_status_t (*call) (psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len - ); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void (*close) (psa_handle_t handle); } psa_api_t; diff --git a/api-tests/val/spe/val_partition_common.h b/api-tests/val/spe/val_partition_common.h index fe32baae..0b1d6be3 100644 --- a/api-tests/val/spe/val_partition_common.h +++ b/api-tests/val/spe/val_partition_common.h @@ -33,10 +33,13 @@ __UNUSED STATIC_DECLARE val_status_t val_print (print_verbosity_t verbosity, char *string, int32_t data); __UNUSED STATIC_DECLARE val_status_t val_ipc_connect - (uint32_t sid, uint32_t minor_version, psa_handle_t *handle ); -__UNUSED STATIC_DECLARE val_status_t val_ipc_call - (psa_handle_t handle, psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); + (uint32_t sid, uint32_t version, psa_handle_t *handle ); +__UNUSED STATIC_DECLARE val_status_t val_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); __UNUSED STATIC_DECLARE void val_ipc_close (psa_handle_t handle); __UNUSED STATIC_DECLARE val_status_t val_process_connect_request(psa_signal_t sig, psa_msg_t *msg); @@ -84,6 +87,7 @@ __UNUSED static psa_api_t psa_api = { .clear = psa_clear, .eoi = psa_eoi, .rot_lifecycle_state = psa_rot_lifecycle_state, + .panic = psa_panic, }; /** @@ -115,20 +119,20 @@ STATIC_DECLARE val_status_t val_print(print_verbosity_t verbosity, char *string, } psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, {string, string_len+1}, {&data, sizeof(data)}}; - print_handle = psa_connect(DRIVER_UART_SID, 0); + print_handle = psa_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); - if (print_handle < 0) + if (PSA_HANDLE_IS_VALID(print_handle)) { - return VAL_STATUS_CONNECTION_FAILED; - } - else - { - status_of_call = psa_call(print_handle, data1, 3, NULL, 0); + status_of_call = psa_call(print_handle, 0, data1, 3, NULL, 0); if (status_of_call != PSA_SUCCESS) { status = VAL_STATUS_CALL_FAILED; } } + else + { + return VAL_STATUS_CONNECTION_FAILED; + } psa_close(print_handle); return status; } @@ -136,39 +140,42 @@ STATIC_DECLARE val_status_t val_print(print_verbosity_t verbosity, char *string, /** * @brief Connect to given sid @param -sid : RoT service id - @param -minor_version : minor_version of RoT service + @param -version : version of RoT service @param -handle - return connection handle * @return val_status_t */ -STATIC_DECLARE val_status_t val_ipc_connect(uint32_t sid, uint32_t minor_version, +STATIC_DECLARE val_status_t val_ipc_connect(uint32_t sid, uint32_t version, psa_handle_t *handle ) { - *handle = psa_connect(sid, minor_version); + *handle = psa_connect(sid, version); - if (*handle < 0) - { - return(VAL_STATUS_CONNECTION_FAILED); - } + if (PSA_HANDLE_IS_VALID(*handle)) + return VAL_STATUS_SUCCESS; - return VAL_STATUS_SUCCESS; + return VAL_STATUS_CONNECTION_FAILED; } /** * @brief Call a connected Root of Trust Service.@n * The caller must provide an array of ::psa_invec_t structures as the input payload. * @param handle: Handle for the connection. + * @param type: Request type. * @param in_vec: Array of psa_invec structures. * @param in_len: Number of psa_invec structures in in_vec. * @param out_vec: Array of psa_outvec structures for optional Root of Trust Service response. * @param out_len: Number of psa_outvec structures in out_vec. * @return val_status_t */ -STATIC_DECLARE val_status_t val_ipc_call(psa_handle_t handle, psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +STATIC_DECLARE val_status_t val_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) { psa_status_t call_status = PSA_SUCCESS; - call_status = psa_call(handle, in_vec, in_len, out_vec, out_len); + call_status = psa_call(handle, type, in_vec, in_len, out_vec, out_len); if (call_status != PSA_SUCCESS) { @@ -212,7 +219,7 @@ STATIC_DECLARE val_status_t val_process_connect_request(psa_signal_t sig, psa_ms if ((msg->type != PSA_IPC_CONNECT) || (msg->handle <= 0)) { - val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_CONNECT\n", 0); + val_print(PRINT_ERROR, "\tpsa_get failed for connect message\n", 0); res = VAL_STATUS_ERROR; } else @@ -248,9 +255,9 @@ STATIC_DECLARE val_status_t val_process_call_request(psa_signal_t sig, psa_msg_t goto wait2; } - if ((msg->type != PSA_IPC_CALL) || (msg->handle <= 0)) + if ((msg->type < PSA_IPC_CALL) || (msg->handle <= 0)) { - val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_CALL\n", 0); + val_print(PRINT_ERROR, "\tpsa_get failed for request message\n", 0); res = VAL_STATUS_ERROR; } else @@ -288,7 +295,7 @@ STATIC_DECLARE val_status_t val_process_disconnect_request(psa_signal_t sig, psa if ((msg->type != PSA_IPC_DISCONNECT) || (msg->handle <= 0)) { - val_print(PRINT_ERROR, "\tpsa_get failed for PSA_IPC_DISCONNECT\n", 0); + val_print(PRINT_ERROR, "\tpsa_get failed for disconnect massage\n", 0); res = VAL_STATUS_ERROR; } else @@ -328,12 +335,12 @@ STATIC_DECLARE val_status_t val_execute_secure_tests(test_info_t test_info, clie status = val_execute_secure_test_func(&handle, test_info, SERVER_TEST_DISPATCHER_SID); if (VAL_ERROR(status)) { - val_print(PRINT_ERROR,"[Check%d] START\n", i); + val_print(PRINT_ERROR, "[Check %d] START\n", i); return status; } else { - val_print(PRINT_DEBUG,"[Check%d] START\n", i); + val_print(PRINT_DEBUG, "[Check %d] START\n", i); } /* Execute client tests */ @@ -345,17 +352,17 @@ STATIC_DECLARE val_status_t val_execute_secure_tests(test_info_t test_info, clie status = test_status ? test_status:status; if (IS_TEST_SKIP(status)) { - val_print(PRINT_DEBUG, "[Check%d] SKIPPED\n", i); + val_print(PRINT_DEBUG, "[Check %d] SKIPPED\n", i); return status; } if (VAL_ERROR(status)) { - val_print(PRINT_DEBUG,"[Check%d] FAILED\n", i); + val_print(PRINT_DEBUG, "[Check %d] FAILED\n", i); return status; } else { - val_print(PRINT_DEBUG,"[Check%d] PASSED\n", i); + val_print(PRINT_DEBUG, "[Check %d] PASSED\n", i); } i++; } @@ -380,7 +387,7 @@ STATIC_DECLARE val_status_t val_execute_secure_test_func(psa_handle_t *handle, val_status_t status = VAL_STATUS_SUCCESS; psa_status_t status_of_call = PSA_SUCCESS; - *handle = psa_connect(sid, 0); + *handle = psa_connect(sid, 1); if (*handle < 0) { @@ -392,7 +399,7 @@ STATIC_DECLARE val_status_t val_execute_secure_test_func(psa_handle_t *handle, | ((uint32_t)(TEST_EXECUTE_FUNC) << ACTION_POS)); psa_invec data[1] = {{&test_data, sizeof(test_data)}}; - status_of_call = psa_call(*handle, data, 1, NULL, 0); + status_of_call = psa_call(*handle, 0, data, 1, NULL, 0); if (status_of_call != PSA_SUCCESS) { @@ -420,7 +427,7 @@ STATIC_DECLARE val_status_t val_get_secure_test_result(psa_handle_t *handle) psa_outvec resp = {&status, sizeof(status)}; psa_invec data[1] = {{&test_data, sizeof(test_data)}}; - status_of_call = psa_call(*handle, data, 1, &resp, 1); + status_of_call = psa_call(*handle, 0, data, 1, &resp, 1); if (status_of_call != PSA_SUCCESS) { status = VAL_STATUS_CALL_FAILED; @@ -484,20 +491,20 @@ STATIC_DECLARE val_status_t val_nvmem_write(uint32_t offset, void *buffer, int s nvmem_param.size = size; psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - handle = psa_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) - { - return VAL_STATUS_CONNECTION_FAILED; - } - else + handle = psa_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) { - status_of_call = psa_call(handle, invec, 2, NULL, 0); + status_of_call = psa_call(handle, 0, invec, 2, NULL, 0); if (status_of_call != PSA_SUCCESS) { psa_close(handle); return VAL_STATUS_CALL_FAILED; } } + else + { + return VAL_STATUS_CONNECTION_FAILED; + } psa_close(handle); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/val/spe/val_service_defs.h b/api-tests/val/spe/val_service_defs.h index b499b5d3..4b10804c 100644 --- a/api-tests/val/spe/val_service_defs.h +++ b/api-tests/val/spe/val_service_defs.h @@ -43,13 +43,13 @@ typedef struct { uint32_t (*framework_version) (void); uint32_t (*version) (uint32_t sid); - psa_handle_t (*connect) (uint32_t sid, uint32_t minor_version); + psa_handle_t (*connect) (uint32_t sid, uint32_t version); psa_status_t (*call) (psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len - ); + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void (*close) (psa_handle_t handle); psa_signal_t (*wait) (psa_signal_t signal_mask, uint32_t timeout); void (*set_rhandle) (psa_handle_t msg_handle, void *rhandle); @@ -65,6 +65,7 @@ typedef struct { void (*clear) (void); void (*eoi) (psa_signal_t irq_signal); uint32_t (*rot_lifecycle_state) (void); + void (*panic) (void); } psa_api_t; typedef struct { @@ -74,10 +75,14 @@ typedef struct { val_status_t (*execute_secure_test_func) (psa_handle_t *handle, test_info_t test_info, uint32_t sid); val_status_t (*get_secure_test_result) (psa_handle_t *handle); - val_status_t (*ipc_connect) (uint32_t sid, uint32_t minor_version, + val_status_t (*ipc_connect) (uint32_t sid, uint32_t version, psa_handle_t *handle ); - val_status_t (*ipc_call) (psa_handle_t handle, psa_invec *in_vec, - size_t in_len, psa_outvec *out_vec, size_t out_len); + val_status_t (*ipc_call) (psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); void (*ipc_close) (psa_handle_t handle); val_status_t (*set_boot_flag) (boot_state_t state); val_status_t (*target_get_config) (cfg_id_t cfg_id, uint8_t **data, uint32_t *size); diff --git a/tbsa-v8m/README.md b/tbsa-v8m/README.md index d27c48a3..1ef877d7 100755 --- a/tbsa-v8m/README.md +++ b/tbsa-v8m/README.md @@ -81,32 +81,34 @@ Refer to the [User Guide](docs/Arm_TBSA-v8M_Arch_Test_Validation_Methodology_and ## Build steps To build TBSA-v8M test suite for a given platform, execute the following commands:
    - cd psa-arch-tests/tbsa-v8m
    - mkdir cmake_build
    - cd cmake_build
    - cmake ../ -G -DTARGET= -DCOMPILER= -DSUITE= -DCMSIS_REPO_PATH= -DCMAKE_VERBOSE_MAKEFILE=OFF -DCMSIS_DRIVER=OFF
    - where:
    - : "Unix Makefiles" - to generate Makefiles for Linux and Cygwin
    - "MinGW Makefiles" - to generate Makefiles for cmd.exe on Windows
    - : target to build, as created in the platform/board directory
    - : GNUARM
    - Defaults to GNUARM if not specified
    - : ALL - builds all test_pool components
    - "::..:" - for selective component build or
    - \:\:..\: - for selective component build or
    - Defaults to ALL if not specified
    - : Absolute CMSIS repo path
    - If not specified CMake clones the CMSIS for itself
    - : ON - To get detailed build log on console
    - OFF - To get minimalistic log on console
    - Defaults to OFF
    - : ON - Build takes CMSIS drivers as specified in target specific target.cmake
    - OFF - Build takes non CMSIS drivers as specified in target specific target.cmake
    - Defaults to OFF
    - To build project
    - cmake --build .
    - To clean
    - cmake --build . -- clean
    +~~~ + cd psa-arch-tests/tbsa-v8m + mkdir cmake_build + cd cmake_build + cmake ../ -G -DTARGET= -DCOMPILER= -DSUITE= -DCMSIS_REPO_PATH= -DCMAKE_VERBOSE_MAKEFILE=OFF -DCMSIS_DRIVER=OFF + where: + - "Unix Makefiles" - to generate Makefiles for Linux and Cygwin + "MinGW Makefiles" - to generate Makefiles for cmd.exe on Windows + - target to build, as created in the platform/board directory + - GNUARM + Defaults to GNUARM if not specified + - ALL - builds all test_pool components + "::..:" - for selective component build or + \:\:..\: - for selective component build + Defaults to ALL if not specified + - Absolute CMSIS repo path + If not specified CMake clones the CMSIS for itself + - ON - To get detailed build log on console + OFF - To get minimalistic log on console + Defaults to OFF + - ON - Build takes CMSIS drivers as specified in target specific target.cmake + OFF - Build takes non CMSIS drivers as specified in target specific target.cmake + Defaults to OFF + To build project + cmake --build . + To clean + cmake --build . -- clean +~~~ ~~~ Note: @@ -127,6 +129,9 @@ The following steps describe the execution flow prior to the start of test execu 2. The suite execution begins from the tbsa_entry. 3. The tests are executed sequentially in a loop in the tbsa_dispatcher function. +## Security implication + +TBSA test suite may run at higher privilege level. An attacker can utilize these tests as a means to elevate privilege which can potentially reveal the platform secure attests. To prevent such security vulnerabilities into the production system, it is strongly recommended that TBSA test suite is run on development platforms. If it is run on production system, make sure system is scrubbed after running the test suite. ## License From ea3068835754a26787a699633bc0d0761730f92b Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Thu, 9 Jan 2020 18:20:19 +0530 Subject: [PATCH 43/54] Platform: Remove unused platform directories --- .../common/driver_partition_psa.json | 75 --- .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 93 ---- .../nspe/common/pal_client_api_intf.c | 97 ---- .../nspe/common/pal_client_api_intf.h | 32 -- .../nspe/common/pal_common.h | 116 ---- .../nspe/common/pal_config.h | 91 ---- .../nspe/common/pal_driver_ipc_intf.c | 305 ----------- .../nspe/common/pal_driver_ns_intf.c | 145 ----- .../nspe/crypto/pal_crypto_config.h | 323 ----------- .../nspe/crypto/pal_crypto_config_check.h | 223 -------- .../nspe/crypto/pal_crypto_empty_intf.c | 30 -- .../nspe/crypto/pal_crypto_intf.c | 506 ------------------ .../nspe/crypto/pal_crypto_intf.h | 103 ---- .../pal_attestation_crypto.c | 359 ------------- .../pal_attestation_crypto.h | 88 --- .../initial_attestation/pal_attestation_eat.h | 80 --- .../pal_attestation_empty_intf.c | 30 -- .../pal_attestation_intf.c | 56 -- .../pal_attestation_intf.h | 32 -- .../pal_internal_trusted_storage_empty_intf.c | 30 -- .../pal_internal_trusted_storage_intf.c | 62 --- .../pal_internal_trusted_storage_intf.h | 31 -- .../pal_protected_storage_empty_intf.c | 30 -- .../pal_protected_storage_intf.c | 77 --- .../pal_protected_storage_intf.h | 34 -- .../spe/pal_driver_intf.c | 132 ----- .../spe/pal_driver_intf.h | 35 -- .../target.cfg | 57 -- .../target.cmake | 105 ---- .../common/driver_partition_psa.json | 75 --- .../manifests/ipc/client_partition_psa.json | 37 -- .../manifests/ipc/server_partition_psa.json | 69 --- .../nspe/common/pal_client_api_empty_intf.c | 93 ---- .../nspe/common/pal_client_api_intf.c | 97 ---- .../nspe/common/pal_client_api_intf.h | 32 -- .../nspe/common/pal_common.h | 116 ---- .../nspe/common/pal_config.h | 91 ---- .../nspe/common/pal_driver_ipc_intf.c | 305 ----------- .../nspe/common/pal_driver_ns_intf.c | 145 ----- .../nspe/crypto/pal_crypto_config.h | 323 ----------- .../nspe/crypto/pal_crypto_config_check.h | 223 -------- .../nspe/crypto/pal_crypto_empty_intf.c | 30 -- .../nspe/crypto/pal_crypto_intf.c | 506 ------------------ .../nspe/crypto/pal_crypto_intf.h | 103 ---- .../pal_attestation_crypto.c | 343 ------------ .../pal_attestation_crypto.h | 88 --- .../initial_attestation/pal_attestation_eat.h | 80 --- .../pal_attestation_empty_intf.c | 30 -- .../pal_attestation_intf.c | 56 -- .../pal_attestation_intf.h | 32 -- .../pal_internal_trusted_storage_empty_intf.c | 30 -- .../pal_internal_trusted_storage_intf.c | 62 --- .../pal_internal_trusted_storage_intf.h | 31 -- .../pal_protected_storage_empty_intf.c | 30 -- .../pal_protected_storage_intf.c | 77 --- .../pal_protected_storage_intf.h | 34 -- .../spe/pal_driver_intf.c | 132 ----- .../spe/pal_driver_intf.h | 35 -- .../tgt_ff_mbedos_fvp_mps2_m4/target.cfg | 84 --- .../tgt_ff_mbedos_fvp_mps2_m4/target.cmake | 105 ---- 62 files changed, 6977 deletions(-) delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cfg delete mode 100644 api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cfg delete mode 100644 api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json deleted file mode 100644 index 3e2ec674..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "DRIVER_PARTITION", - "type": "PSA-ROT", - "priority": "NORMAL", - "description": "Implements device services such print, flash read/write,. etc.", - "entry_point": "driver_main", - "stack_size": "0x400", - "services": [{ - "name": "DRIVER_UART_SID", - "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_WATCHDOG_SID", - "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_NVMEM_SID", - "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_TEST_SID", - "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "UART_REGION", - "base": "0x40004000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "WATCHDOG_REGION", - "base": "0x40008000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "NVMEM_REGION", - "base": "0x2002F000", - "size": "0x400", - "permission": "READ-WRITE" - }, - { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "irqs": [ - { - "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", - "signal": "DRIVER_UART_INTR_SIG", - "line_num": 17 - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c deleted file mode 100644 index 578b4cef..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c +++ /dev/null @@ -1,93 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - * @brief - Retrieve the version of the PSA Framework API that is implemented. - * This is a wrapper API for psa_framework_version API. - * @param - void - * @return - The PSA Framework API version. - */ - -uint32_t pal_ipc_framework_version(void) -{ - return 0; -} - -/** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. - * This is a wrapper API for the psa_version API. - * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust - * Service not present on the system. - */ - -uint32_t pal_ipc_version(uint32_t sid) -{ - return PSA_VERSION_NONE; -} - -/** - * @brief - Connect to given sid. - * This is a wrapper API for the psa_connect API. - * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service - * @return - psa_handle_t : return connection handle - */ - -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) -{ - return PSA_NULL_HANDLE; -} - -/** - * @brief Call a connected Root of Trust Service. - * This is a wrapper API for the psa_call API. - * The caller must provide an array of ::psa_invec_t structures as the input payload. - * - * @param -handle Handle for the connection. - * @param -in_vec Array of psa_invec structures. - * @param -in_len Number of psa_invec structures in in_vec. - * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. - * @param -out_len Number of psa_outvec structures in out_vec. - * @return -psa_status_t - */ - -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) -{ - return (PSA_SUCCESS - 1); -} - -/** - * @brief Close a connection to a Root of Trust Service. - * This is a wrapper API for the psa_close API. - * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. - * - * @param handle Handle for the connection. - * @return void - */ - -void pal_ipc_close(psa_handle_t handle) -{ - return; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c deleted file mode 100644 index 20ddd118..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c +++ /dev/null @@ -1,97 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - * @brief - Retrieve the version of the PSA Framework API that is implemented. - * This is a wrapper API for psa_framework_version API. - * @param - void - * @return - The PSA Framework API version. - * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. - */ - -uint32_t pal_ipc_framework_version(void) -{ - return (psa_framework_version()); -} - -/** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. - * This is a wrapper API for the psa_version API. - * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust - * Service not present on the system. - * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. - */ - -uint32_t pal_ipc_version(uint32_t sid) -{ - return (psa_version(sid)); -} - -/** - * @brief - Connect to given sid. - * This is a wrapper API for the psa_connect API. - * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service - * @return - psa_handle_t : return connection handle - * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. - */ - -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) -{ - return (psa_connect(sid, minor_version)); -} - -/** - * @brief Call a connected Root of Trust Service. - * This is a wrapper API for the psa_call API. - * The caller must provide an array of ::psa_invec_t structures as the input payload. - * - * @param -handle Handle for the connection. - * @param -in_vec Array of psa_invec structures. - * @param -in_len Number of psa_invec structures in in_vec. - * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. - * @param -out_len Number of psa_outvec structures in out_vec. - * @return -psa_status_t - * Note - Return -1 if PSA IPC is not implemented. - */ - -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) -{ - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); -} - -/** - * @brief Close a connection to a Root of Trust Service. - * This is a wrapper API for the psa_close API. - * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. - * - * @param - handle Handle for the connection. - * @return - void - */ - -void pal_ipc_close(psa_handle_t handle) -{ - psa_close(handle); -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h deleted file mode 100644 index 3f5741e0..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h +++ /dev/null @@ -1,32 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CLIENT_API_H_ -#define _PAL_CLIENT_API_H_ - -#include "pal_common.h" - -uint32_t pal_ipc_framework_version(void); -uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); -void pal_ipc_close(psa_handle_t handle); -#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h deleted file mode 100644 index 0a63b026..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_common.h +++ /dev/null @@ -1,116 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_COMMON_H_ -#define _PAL_COMMON_H_ - -#include -#include -#include -#include -#include - -#include "pal_config.h" -#include "pal_crypto_config.h" - -/* typedef's */ -typedef uint8_t bool_t; -typedef uint32_t addr_t; -typedef uint32_t test_id_t; -typedef uint32_t block_id_t; -typedef char char8_t; -typedef uint32_t cfg_id_t; - -#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF - -typedef enum -{ - PAL_STATUS_SUCCESS = 0x0, - PAL_STATUS_ERROR = 0x80 -} pal_status_t; - -typedef enum { - NVMEM_READ = 0x1, - NVMEM_WRITE = 0x2, -} nvmem_fn_type_t; - -typedef struct { - nvmem_fn_type_t nvmem_fn_type; - addr_t base; - uint32_t offset; - int size; -} nvmem_param_t; - -typedef enum { - WD_INIT_SEQ = 0x1, - WD_ENABLE_SEQ = 0x2, - WD_DISABLE_SEQ = 0x3, - WD_STATUS_SEQ = 0x4, -} wd_fn_type_t; - -typedef enum { - WD_LOW_TIMEOUT = 0x1, - WD_MEDIUM_TIMEOUT = 0x2, - WD_HIGH_TIMEOUT = 0x3, - WD_CRYPTO_TIMEOUT = 0x4, -} wd_timeout_type_t; - -typedef struct { - wd_fn_type_t wd_fn_type; - addr_t wd_base_addr; - uint32_t wd_time_us; - uint32_t wd_timer_tick_us; -} wd_param_t; - -typedef enum { - UART_INIT = 0x1, - UART_PRINT = 0x2, -} uart_fn_type_t; - -/* - * Redefining some of the client.h elements for compilation to go through - * when PSA IPC APIs are not implemented. - */ -#ifndef IPC - -#ifndef PSA_VERSION_NONE -#define PSA_VERSION_NONE (0) -#endif - -#ifndef PSA_SUCCESS -#define PSA_SUCCESS (0) -typedef int32_t psa_status_t; -#endif -typedef int32_t psa_handle_t; - -#ifndef PSA_NULL_HANDLE -#define PSA_NULL_HANDLE ((psa_handle_t)0) -#endif - -typedef struct psa_invec { - const void *base; - size_t len; -} psa_invec; - -typedef struct psa_outvec { - void *base; - size_t len; -} psa_outvec; - -#endif /* IPC */ - -#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h deleted file mode 100644 index 61db8d8e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ /dev/null @@ -1,91 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CONFIG_H_ -#define _PAL_CONFIG_H_ - -/* Define PSA test suite dependent macros for non-cmake build */ -#if !defined(PSA_CMAKE_BUILD) - -/* Print verbosity = TEST */ -#define VERBOSE 3 - -/* NSPE or SPE VAL build? */ -#define VAL_NSPE_BUILD - -/* NSPE or SPE TEST build? */ -#define NONSECURE_TEST_BUILD - -/* Combine test archive or binary? */ -#define TEST_COMBINE_ARCHIVE - -/* If not defined, skip watchdog programming */ -#define WATCHDOG_AVAILABLE - -/* Are Dynamic memory APIs available to secure partition? */ -#define SP_HEAP_MEM_SUPP -#endif /* PSA_CMAKE_BUILD */ - -/* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 - -/* Use hardcoded public key */ -//#define PLATFORM_OVERRIDE_ATTEST_PK - -/* - * Include of PSA defined Header files - */ -#ifdef IPC -/* psa/client.h: Contains the PSA Client API elements */ -#include "psa/client.h" - -/* - * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service - * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation - * of this file. -*/ -#include "psa_manifest/sid.h" - -/* - * psa_manifest/pid.h: Secure Partition IDs - * Macro definitions that map from Secure Partition names to Secure Partition IDs. - * Partition manifest parse build tool must provide the implementation of this file. -*/ -#include "psa_manifest/pid.h" -#endif - -#ifdef CRYPTO -/* psa/crypto.h: Contains the PSA Crypto API elements */ -#include "psa/crypto.h" -#endif - -#ifdef INTERNAL_TRUSTED_STORAGE -/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ -#include "psa/internal_trusted_storage.h" -#endif - -#ifdef PROTECTED_STORAGE -/* psa/protected_storage.h: Contains the PSA PS API elements */ -#include "psa/protected_storage.h" -#endif - -#ifdef INITIAL_ATTESTATION -/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ -#include "psa/initial_attestation.h" -#endif - -#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c deleted file mode 100644 index f8f773fb..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c +++ /dev/null @@ -1,305 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - SUCCESS/FAILURE -**/ -int pal_uart_init_ns(uint32_t uart_base_addr) -{ - psa_handle_t print_handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - uart_fn_type_t uart_fn = UART_INIT; - - psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, - {&uart_base_addr, sizeof(uart_base_addr)}, - {NULL, 0}}; - - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) - { - return(PAL_STATUS_ERROR); - } - - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - return(PAL_STATUS_ERROR); - } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier - @return - SUCCESS/FAILURE -**/ - -int pal_print_ns(char *str, int32_t data) -{ - int string_len = 0; - char *p = str; - psa_handle_t print_handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; - uart_fn_type_t uart_fn = UART_PRINT; - - while (*p != '\0') - { - string_len++; - p++; - } - - psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, - {str, string_len+1}, - {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - - if (print_handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } - } - pal_ipc_close(print_handle); - return status; -} - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_INIT_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = time_us; - wd_param.wd_timer_tick_us = timer_tick_us; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable_ns(addr_t base_addr) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_ENABLE_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = 0; - wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable_ns(addr_t base_addr) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_DISABLE_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = 0; - wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - nvmem_param_t nvmem_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - nvmem_param.nvmem_fn_type = NVMEM_READ; - nvmem_param.base = base; - nvmem_param.offset = offset; - nvmem_param.size = size; - psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; - psa_outvec outvec[1] = {{buffer, size}}; - - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - psa_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - nvmem_param_t nvmem_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - nvmem_param.nvmem_fn_type = NVMEM_WRITE; - nvmem_param.base = base; - nvmem_param.offset = offset; - nvmem_param.size = size; - psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - * @brief - This function will read peripherals using SPI commands - * @param - addr : address of the peripheral - * data : read buffer - * len : length of the read buffer in bytes - * @return - error status -**/ -int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) -{ - return 0xFF; -} - -/** - * @brief - Terminates the simulation at the end of all tests completion. - * By default, it put cpus into power down mode. - * @param - void - * @return - void -**/ -void pal_terminate_simulation(void) -{ - /* Add logic to terminate the simluation */ - - while(1) - { - asm volatile("WFI"); - } -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c deleted file mode 100644 index 2af6fcc7..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c +++ /dev/null @@ -1,145 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - SUCCESS/FAILURE -**/ -int pal_uart_init_ns(uint32_t uart_base_addr) -{ - pal_uart_cmsdk_init(uart_base_addr); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier - @return - SUCCESS/FAILURE -**/ - -int pal_print_ns(char *str, int32_t data) -{ - pal_cmsdk_print(str, data); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable_ns(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable_ns(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - if (nvmem_read(base, offset, buffer, size)) - { - return PAL_STATUS_SUCCESS; - } - else - { - return PAL_STATUS_ERROR; - } -} - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - if (nvmem_write(base, offset, buffer, size)) - { - return PAL_STATUS_SUCCESS; - } - else - { - return PAL_STATUS_ERROR; - } -} - -/** - * @brief - This function will read peripherals using SPI commands - * @param - addr : address of the peripheral - * data : read buffer - * len : length of the read buffer in bytes - * @return - error status -**/ -int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) -{ - return 0xFF; -} - -/** - * @brief - Terminates the simulation at the end of all tests completion. - * By default, it put cpus into power down mode. - * @param - void - * @return - void -**/ -void pal_terminate_simulation(void) -{ - /* Add logic to terminate the simluation */ - - while(1) - { - asm volatile("WFI"); - } -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h deleted file mode 100644 index 6d71d2ec..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h +++ /dev/null @@ -1,323 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -/* - * \file pal_crypto_config.h - * - * \brief Configuration options for crypto tests (set of defines) - * - * This set of compile-time options may be used to enable - * or disable features selectively for crypto test suite - */ - -#ifndef _PAL_CRYPTO_CONFIG_H_ -#define _PAL_CRYPTO_CONFIG_H_ -/** - * \def ARCH_TEST_RSA - * - * Enable the RSA public-key cryptosystem. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_RSA -#define ARCH_TEST_RSA_1024 -#define ARCH_TEST_RSA_2048 -#define ARCH_TEST_RSA_3072 - -/** - * \def ARCH_TEST_ECC - * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 - * - * Enable the elliptic curve - * Enable specific curves within the Elliptic Curve - * module. By default all supported curves are enabled. - * - * Requires: ARCH_TEST_ECC - * Comment macros to disable the curve - */ -#define ARCH_TEST_ECC -#define ARCH_TEST_ECC_CURVE_SECP192R1 -#define ARCH_TEST_ECC_CURVE_SECP224R1 -#define ARCH_TEST_ECC_CURVE_SECP256R1 -#define ARCH_TEST_ECC_CURVE_SECP384R1 - -/** - * \def ARCH_TEST_AES - * - * Enable the AES block cipher. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_AES -#define ARCH_TEST_AES_128 -#define ARCH_TEST_AES_192 -#define ARCH_TEST_AES_256 -#define ARCH_TEST_AES_512 - -/** - * \def ARCH_TEST_DES - * - * Enable the DES block cipher. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_DES -#define ARCH_TEST_DES_1KEY -#define ARCH_TEST_DES_2KEY -#define ARCH_TEST_DES_3KEY - -/** - * \def ARCH_TEST_RAW - * - * A "key" of this type cannot be used for any cryptographic operation. - * Applications may use this type to store arbitrary data in the keystore. - */ -#define ARCH_TEST_RAW - -/** - * \def ARCH_TEST_CIPER - * - * Enable the generic cipher layer. - */ - -#define ARCH_TEST_CIPER - -/** - * \def ARCH_TEST_ARC4 - * - * Enable the ARC4 key type. - */ -#define ARCH_TEST_ARC4 - -/** - * \def ARCH_TEST_CIPER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CTR - -/** - * \def ARCH_TEST_CIPER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CFB - -/** - * \def ARCH_TEST_CIPER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CBC - -/** - * \def ARCH_TEST_CTR_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR - */ -#define ARCH_TEST_CTR_AES - -/** - * \def ARCH_TEST_CBC_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_AES -#define ARCH_TEST_CBC_AES_NO_PADDING - -/** - * \def ARCH_TEST_CBC_NO_PADDING - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_NO_PADDING - -/** - * \def ARCH_TEST_CFB_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB - */ -#define ARCH_TEST_CFB_AES - -/** - * \def ARCH_TEST_PKCS1V15_* - * - * Enable support for PKCS#1 v1.5 encoding. - * Enable support for PKCS#1 v1.5 operations. - * Enable support for RSA-OAEP - * - * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 - * - * Comment macros to disable the types - */ -#define ARCH_TEST_PKCS1V15 -#define ARCH_TEST_RSA_PKCS1V15_SIGN -#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#define ARCH_TEST_RSA_PKCS1V15_CRYPT -#define ARCH_TEST_RSA_OAEP - -/** - * \def ARCH_TEST_CBC_PKCS7 - * - * Requires: ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_PKCS7 - -/** - * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION - * - * Enable support for Asymmetric encryption algorithms - */ -#define ARCH_TEST_ASYMMETRIC_ENCRYPTION - -/** - * \def ARCH_TEST_HASH - * - * Enable the hash algorithm. - */ -#define ARCH_TEST_HASH - -/** - * \def ARCH_TEST_HMAC - * - * The key policy determines which underlying hash algorithm the key can be - * used for. - * - * Requires: ARCH_TEST_HASH - */ -#define ARCH_TEST_HMAC - -/** - * \def ARCH_TEST_MDX - * \def ARCH_TEST_SHAXXX - * - * Enable the MDX algorithm. - * Enable the SHAXXX algorithm. - * - * Requires: ARCH_TEST_HASH - * - * Comment macros to disable the types - */ -#define ARCH_TEST_MD2 -#define ARCH_TEST_MD4 -#define ARCH_TEST_MD5 -#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 -#define ARCH_TEST_SHA224 -#define ARCH_TEST_SHA256 -#define ARCH_TEST_SHA384 -#define ARCH_TEST_SHA512 -#define ARCH_TEST_SHA512_224 -#define ARCH_TEST_SHA512_256 -#define ARCH_TEST_SHA3_224 -#define ARCH_TEST_SHA3_256 -#define ARCH_TEST_SHA3_384 -#define ARCH_TEST_SHA3_512 - -/** - * \def ARCH_TEST_HKDF - * - * Enable the HKDF algorithm (RFC 5869). - * - * Requires: ARCH_TEST_HASH -*/ -#define ARCH_TEST_HKDF - -/** - * \def ARCH_TEST_xMAC - * - * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block - * ciphers. - * Requires: ARCH_TEST_AES or ARCH_TEST_DES - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC -#define ARCH_TEST_HMAC - -/** - * \def ARCH_TEST_CCM - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Requires: ARCH_TEST_AES - */ -#define ARCH_TEST_CCM - -/** - * \def ARCH_TEST_GCM - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Requires: ARCH_TEST_AES - * - */ -#define ARCH_TEST_GCM - -/** - * \def ARCH_TEST_TRUNCATED_MAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define ARCH_TEST_TRUNCATED_MAC - - -/** - * \def ARCH_TEST_ECDH - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Requires: ARCH_TEST_ECC - */ -#define ARCH_TEST_ECDH - -/** - * \def ARCH_TEST_ECDSA - * - * Enable the elliptic curve DSA library. - * Requires: ARCH_TEST_ECC - */ -#define ARCH_TEST_ECDSA - -/** - * \def ARCH_TEST_DETERMINISTIC_ECDSA - * - * Enable deterministic ECDSA (RFC 6979). -*/ -#define ARCH_TEST_DETERMINISTIC_ECDSA - -#include "pal_crypto_config_check.h" - -#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h deleted file mode 100644 index 443e0bc2..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h +++ /dev/null @@ -1,223 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -/** - * \file pal_crypto_config_check.h - * - * \brief Consistency checks for configuration options - * - */ - -#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ -#define _PAL_CRYPTO_CONFIG_CHECK_H_ - -#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_128 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_512 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CTR_AES) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) -#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" -#endif - -#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) -#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" -#endif - -#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) -#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CFB_AES) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) -#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) -#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_HMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD2 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD4 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD5 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_HKDF defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_CMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_GMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_HMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_CCM defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_GCM defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECDH defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECDSA defined, but not all prerequisites" -#endif - -#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c deleted file mode 100644 index 2a28f397..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested crypto function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_crypto_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c deleted file mode 100644 index fd2e0557..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c +++ /dev/null @@ -1,506 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_crypto_intf.h" - -#define PAL_KEY_SLOT_COUNT 32 - -/** - @brief - This API will call the requested crypto function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_crypto_function(int type, va_list valist) -{ - int i; - psa_status_t status; - uint8_t *buffer, *ciphertext, *plaintext; - const uint8_t *nonce, *additional_data, *salt, *peer; - size_t *length, size, ciphertext_size, nonce_length; - size_t salt_length, peer_length, additional_data_length; - size_t *tag_length, plaintext_size; - psa_aead_operation_t *aead_operation; - psa_key_attributes_t *attributes; - psa_key_handle_t *handle, key_handle; - psa_key_type_t *key_type_out, key_type; - psa_key_usage_t *usage_out, usage; - psa_key_id_t *key_id_out, key_id; - psa_key_lifetime_t *key_lifetime_out, key_lifetime; - psa_algorithm_t *key_alg_out, key_alg, alg; - psa_hash_operation_t *hash_operation, *target_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_key_derivation_operation_t *derive_operation; - psa_key_derivation_step_t step; - switch (type) - { - case PAL_CRYPTO_INIT: - return psa_crypto_init(); - case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t *); - size = va_arg(valist, int); - return psa_generate_random(buffer, size); - case PAL_CRYPTO_IMPORT_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - buffer = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - handle = (psa_key_handle_t *)va_arg(valist, int *); - status = psa_import_key(attributes, buffer, size, handle); - return status; - case PAL_CRYPTO_SET_KEY_TYPE: - attributes = va_arg(valist, psa_key_attributes_t *); - key_type = va_arg(valist, psa_key_type_t); - psa_set_key_type(attributes, key_type); - return 0; - case PAL_CRYPTO_SET_KEY_BITS: - attributes = va_arg(valist, psa_key_attributes_t *); - size = va_arg(valist, size_t); - psa_set_key_bits(attributes, size); - return 0; - case PAL_CRYPTO_GET_KEY_ATTRIBUTES: - key_handle = (psa_key_handle_t)va_arg(valist, int); - attributes = va_arg(valist, psa_key_attributes_t *); - return psa_get_key_attributes(key_handle, attributes); - case PAL_CRYPTO_GET_KEY_TYPE: - attributes = va_arg(valist, psa_key_attributes_t *); - key_type_out = va_arg(valist, psa_key_type_t *); - *key_type_out = psa_get_key_type(attributes); - return 0; - case PAL_CRYPTO_EXPORT_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t *)); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t *); - return psa_export_key(key_handle, buffer, size, length); - case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: - attributes = va_arg(valist, psa_key_attributes_t *); - usage = va_arg(valist, psa_key_usage_t); - psa_set_key_usage_flags(attributes, usage); - return 0; - case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: - attributes = va_arg(valist, psa_key_attributes_t *); - psa_reset_key_attributes(attributes); - return 0; - case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t *)); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t *); - return psa_export_public_key(key_handle, buffer, size, length); - case PAL_CRYPTO_SET_KEY_ID: - attributes = va_arg(valist, psa_key_attributes_t *); - key_id = va_arg(valist, psa_key_id_t); - psa_set_key_id(attributes, key_id); - return 0; - case PAL_CRYPTO_SET_KEY_LIFETIME: - attributes = va_arg(valist, psa_key_attributes_t *); - key_lifetime = va_arg(valist, psa_key_lifetime_t); - psa_set_key_lifetime(attributes, key_lifetime); - return 0; - case PAL_CRYPTO_SET_KEY_ALGORITHM: - attributes = va_arg(valist, psa_key_attributes_t *); - key_alg = va_arg(valist, psa_algorithm_t); - psa_set_key_algorithm(attributes, key_alg); - return 0; - case PAL_CRYPTO_GET_KEY_ID: - attributes = va_arg(valist, psa_key_attributes_t *); - key_id_out = va_arg(valist, psa_key_id_t *); - *key_id_out = psa_get_key_id(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_LIFETIME: - attributes = va_arg(valist, psa_key_attributes_t *); - key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); - *key_lifetime_out = psa_get_key_lifetime(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: - attributes = va_arg(valist, psa_key_attributes_t *); - usage_out = va_arg(valist, psa_key_usage_t *); - *usage_out = psa_get_key_usage_flags(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_ALGORITHM: - attributes = va_arg(valist, psa_key_attributes_t *); - key_alg_out = va_arg(valist, psa_algorithm_t *); - *key_alg_out = psa_get_key_algorithm(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_BITS: - attributes = va_arg(valist, psa_key_attributes_t *); - length = va_arg(valist, size_t *); - *length = psa_get_key_bits(attributes); - return 0; - case PAL_CRYPTO_DESTROY_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_destroy_key(key_handle); - case PAL_CRYPTO_HASH_SETUP: - hash_operation = va_arg(valist, psa_hash_operation_t*); - alg = va_arg(valist, psa_algorithm_t); - return psa_hash_setup(hash_operation, alg); - case PAL_CRYPTO_HASH_UPDATE: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_update(hash_operation, buffer, size); - case PAL_CRYPTO_HASH_VERIFY: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_verify(hash_operation, buffer, size); - case PAL_CRYPTO_HASH_FINISH: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_hash_finish(hash_operation, buffer, size, length); - case PAL_CRYPTO_HASH_ABORT: - hash_operation = va_arg(valist, psa_hash_operation_t*); - return psa_hash_abort(hash_operation); - case PAL_CRYPTO_HASH_COMPUTE: - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); - case PAL_CRYPTO_HASH_COMPARE: - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); - case PAL_CRYPTO_HASH_CLONE: - hash_operation = va_arg(valist, psa_hash_operation_t*); - target_operation = va_arg(valist, psa_hash_operation_t*); - return psa_hash_clone(hash_operation, target_operation); - case PAL_CRYPTO_GENERATE_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_generate_key(attributes, handle); - case PAL_CRYPTO_AEAD_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - nonce = va_arg(valist, const uint8_t *); - nonce_length = va_arg(valist, size_t); - additional_data = va_arg(valist, const uint8_t *); - additional_data_length = va_arg(valist, size_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); - case PAL_CRYPTO_AEAD_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - nonce = va_arg(valist, const uint8_t *); - nonce_length = va_arg(valist, size_t); - additional_data = va_arg(valist, const uint8_t *); - additional_data_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); - case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: - aead_operation = va_arg(valist, psa_aead_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_aead_encrypt_setup(aead_operation, key_handle, alg); - case PAL_CRYPTO_AEAD_DECRYPT_SETUP: - aead_operation = va_arg(valist, psa_aead_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_aead_decrypt_setup(aead_operation, key_handle, alg); - case PAL_CRYPTO_AEAD_GENERATE_NONCE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - return psa_aead_generate_nonce(aead_operation, buffer, size, length); - case PAL_CRYPTO_AEAD_SET_NONCE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_set_nonce(aead_operation, buffer, size); - case PAL_CRYPTO_AEAD_SET_LENGTHS: - aead_operation = va_arg(valist, psa_aead_operation_t *); - size = va_arg(valist, size_t); - plaintext_size = va_arg(valist, size_t); - return psa_aead_set_lengths(aead_operation, size, plaintext_size); - case PAL_CRYPTO_AEAD_UPDATE_AD: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_update_ad(aead_operation, buffer, size); - case PAL_CRYPTO_AEAD_UPDATE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, - ciphertext_size, length); - case PAL_CRYPTO_AEAD_FINISH: - aead_operation = va_arg(valist, psa_aead_operation_t *); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - tag_length = (size_t *)va_arg(valist, size_t*); - return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, - size, tag_length); - case PAL_CRYPTO_AEAD_VERIFY: - aead_operation = va_arg(valist, psa_aead_operation_t *); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); - case PAL_CRYPTO_AEAD_ABORT: - aead_operation = va_arg(valist, psa_aead_operation_t *); - return psa_aead_abort(aead_operation); - case PAL_CRYPTO_MAC_SIGN_SETUP: - mac_operation = va_arg(valist, psa_mac_operation_t*); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, key_handle, alg); - case PAL_CRYPTO_MAC_UPDATE: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_mac_update(mac_operation, buffer, size); - case PAL_CRYPTO_MAC_SIGN_FINISH: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - return psa_mac_sign_finish(mac_operation, buffer, size, length); - case PAL_CRYPTO_MAC_VERIFY_SETUP: - mac_operation = va_arg(valist, psa_mac_operation_t*); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, key_handle, alg); - case PAL_CRYPTO_MAC_VERIFY_FINISH: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_mac_verify_finish(mac_operation, buffer, size); - case PAL_CRYPTO_MAC_ABORT: - mac_operation = va_arg(valist, psa_mac_operation_t*); - return psa_mac_abort(mac_operation); - case PAL_CRYPTO_MAC_COMPUTE: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, - ciphertext_size, length); - case PAL_CRYPTO_MAC_VERIFY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, - ciphertext_size); - case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); - case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); - case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); - case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); - case PAL_CRYPTO_CIPHER_GENERATE_IV: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_generate_iv(cipher_operation, buffer, size, length); - case PAL_CRYPTO_CIPHER_SET_IV: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_cipher_set_iv(cipher_operation, buffer, size); - case PAL_CRYPTO_CIPHER_UPDATE: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_CIPHER_FINISH: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); - case PAL_CRYPTO_CIPHER_ABORT: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - return psa_cipher_abort(cipher_operation); - case PAL_CRYPTO_CIPHER_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_CIPHER_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_ASYMMTERIC_SIGN: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_ASYMMTERIC_VERIFY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, - ciphertext_size); - case PAL_CRYPTO_RAW_KEY_AGREEMENT: - alg = va_arg(valist, psa_algorithm_t); - key_handle = (psa_key_handle_t)va_arg(valist, int); - peer = va_arg(valist, uint8_t*); - peer_length = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); - case PAL_CRYPTO_COPY_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - attributes = va_arg(valist, psa_key_attributes_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_copy_key(key_handle, attributes, handle); - case PAL_CRYPTO_KEY_DERIVATION_SETUP: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_derivation_setup(derive_operation, alg); - case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_key_derivation_input_key(derive_operation, step, key_handle); - case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - key_handle = (psa_key_handle_t)va_arg(valist, int); - peer = va_arg(valist, uint8_t*); - peer_length = va_arg(valist, size_t); - return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, - peer_length); - case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_key_derivation_output_bytes(derive_operation, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_key_derivation_output_key(attributes, derive_operation, handle); - case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - size = va_arg(valist, size_t); - return psa_key_derivation_set_capacity(derive_operation, size); - case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - length = va_arg(valist, size_t *); - return psa_key_derivation_get_capacity(derive_operation, length); - case PAL_CRYPTO_KEY_DERIVATION_ABORT: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - return psa_key_derivation_abort(derive_operation); - case PAL_CRYPTO_OPEN_KEY: - key_id = va_arg(valist, psa_key_id_t); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_open_key(key_id, handle); - case PAL_CRYPTO_CLOSE_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_close_key(key_handle); - case PAL_CRYPTO_FREE: - for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) - psa_destroy_key(i); - return 0; - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h deleted file mode 100644 index 671dfa0b..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ /dev/null @@ -1,103 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CRYPTO_INTF_H_ -#define _PAL_CRYPTO_INTF_H_ - -#include "pal_common.h" - -enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_HASH_SETUP = 0x7, - PAL_CRYPTO_HASH_UPDATE = 0x8, - PAL_CRYPTO_HASH_VERIFY = 0x9, - PAL_CRYPTO_HASH_FINISH = 0xA, - PAL_CRYPTO_HASH_ABORT = 0xB, - PAL_CRYPTO_GENERATE_KEY = 0xC, - PAL_CRYPTO_AEAD_ENCRYPT = 0xD, - PAL_CRYPTO_AEAD_DECRYPT = 0xE, - PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, - PAL_CRYPTO_MAC_UPDATE = 0x10, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, - PAL_CRYPTO_MAC_ABORT = 0x14, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, - PAL_CRYPTO_CIPHER_SET_IV = 0x1A, - PAL_CRYPTO_CIPHER_UPDATE = 0x1B, - PAL_CRYPTO_CIPHER_FINISH = 0x1C, - PAL_CRYPTO_CIPHER_ABORT = 0x1D, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, - PAL_CRYPTO_COPY_KEY = 0x20, - PAL_CRYPTO_SET_KEY_TYPE = 0x21, - PAL_CRYPTO_SET_KEY_BITS = 0x22, - PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, - PAL_CRYPTO_GET_KEY_TYPE = 0x24, - PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, - PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, - PAL_CRYPTO_SET_KEY_ID = 0x27, - PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, - PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, - PAL_CRYPTO_GET_KEY_ID = 0x2A, - PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, - PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, - PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, - PAL_CRYPTO_GET_KEY_BITS = 0x2E, - PAL_CRYPTO_HASH_COMPUTE = 0x2F, - PAL_CRYPTO_HASH_COMPARE = 0x30, - PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, - PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, - PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, - PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, - PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, - PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, - PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, - PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, - PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, - PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, - PAL_CRYPTO_HASH_CLONE = 0x3B, - PAL_CRYPTO_MAC_COMPUTE = 0x3C, - PAL_CRYPTO_MAC_VERIFY = 0x3D, - PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, - PAL_CRYPTO_CIPHER_DECRYPT = 0x40, - PAL_CRYPTO_OPEN_KEY = 0x41, - PAL_CRYPTO_CLOSE_KEY = 0x42, - PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, - PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, - PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, - PAL_CRYPTO_AEAD_SET_NONCE = 0x46, - PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, - PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, - PAL_CRYPTO_AEAD_UPDATE = 0x49, - PAL_CRYPTO_AEAD_FINISH = 0x4A, - PAL_CRYPTO_AEAD_VERIFY = 0x4B, - PAL_CRYPTO_AEAD_ABORT = 0x4C, - PAL_CRYPTO_FREE = 0xFE, -}; - -int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c deleted file mode 100644 index 04fe5ef4..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ /dev/null @@ -1,359 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -static uint32_t public_key_registered; -static psa_key_handle_t public_key_handle; - -static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, - size_t amount) -{ - return UsefulBuf_Head(buf, amount); -} - -static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) -{ - psa_algorithm_t status; - - switch (cose_hash_alg_id) - { - case COSE_ALG_SHA256_PROPRIETARY: - status = PSA_ALG_SHA_256; - break; - default: - status = PSA_ALG_MD4; - break; - } - - return status; -} - -static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) -{ - switch (cose_sig_alg_id) - { - case COSE_ALGORITHM_ES256: - return COSE_ALG_SHA256_PROPRIETARY; - default: - return INT32_MAX; - } -} - -int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) -{ - psa_algorithm_t psa_alg; - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - - /* Map the algorithm ID */ - psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - - /* Actually do the hash set up */ - status = psa_hash_setup(psa_hash, psa_alg); - - return status; - -} - -void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, - struct q_useful_buf_c data_to_hash) -{ - if (data_to_hash.ptr == NULL) { - /* No data was passed in to be hashed indicating the mode of use is - * the computation of the size of hash. This mode is hashing is used - * by t_cose when it is requested to compute the size of the signed - * data it might compute, which is in turn used to compute the - * size of a would be token. When computing the size, the size - * like this, there is nothing to do in update() - */ - return; - } - - /* Actually hash the data */ - psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); -} - -int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, - struct q_useful_buf buffer_to_hold_result, - struct q_useful_buf_c *hash_result) -{ - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - - /* Actually finish up the hash */ - status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, - buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - - return status; - -} - -int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash) -{ - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - - status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); - if (status != PSA_SUCCESS) - goto Done; - - pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); - - status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); - if (status != PSA_SUCCESS) - goto Done; -Done: - return status; -} - -/** - @brief - Computes hash for the requested data - @param - cose_alg_id : Algorithm ID - - buffer_for_hash : Temp buffer for calculating hash - - hash : Pointer to store the hash - - protected_headers : Buffer containing protected data - - payload : payload data - @return - SUCCESS/ERROR CODE -**/ -uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, - struct q_useful_buf_c payload) -{ - uint32_t status; - QCBOREncodeContext cbor_encode_ctx; - struct q_useful_buf_c tbs_first_part; - QCBORError qcbor_result; - int32_t hash_alg_id; - UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - - /* This builds the CBOR-format to-be-signed bytes */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); - QCBOREncode_OpenArray(&cbor_encode_ctx); - - /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); - - /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); - - /* sign_protected is not used for Sign1 */ - /* external_aad */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - - /* The short fake payload. */ - QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); - QCBOREncode_CloseArray(&cbor_encode_ctx); - - /* Get the result and convert it to struct q_useful_buf_c representation */ - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); - if (qcbor_result) - { - /* Mainly means that the protected_headers were too big - * (which should never happen) - */ - status = PAL_ATTEST_ERR_SIGN_STRUCT; - goto Done; - } - - /* Start the hashing */ - hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); - - /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() - * will handle it properly - */ - status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); - if (status) - goto Done; - - /* This is hashing of the first part, all the CBOR - * except the payload. - */ - pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); - - /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&psa_hash, payload); - - /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); - -Done: - return status; -} - -static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, - size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) -{ - int32_t status = PAL_ATTEST_ERROR; - -#ifdef PLATFORM_OVERRIDE_ATTEST_PK - if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) - return PAL_ATTEST_ERR_SMALL_BUFFER; - - *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); - *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; - memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); - status = PSA_SUCCESS; -#else - status = tfm_initial_attest_get_public_key(public_key_buff, - public_key_buf_size, - public_key_len, - elliptic_curve_type); -#endif - - return status; -} - -static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) -{ - psa_status_t status = PAL_ATTEST_ERROR; - psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t ecc_curve; - psa_key_type_t attest_key_type; - size_t public_key_size; - uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; - -#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) - psa_key_policy_t policy; - - if (!public_key_registered) - { - status = pal_attest_get_public_key(public_key_buff, - sizeof(public_key_buff), - &public_key_size, - &ecc_curve); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - if (ecc_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Set key type for public key */ - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, usage, key_alg); - - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - /* Import the public key */ - status = psa_import_key(public_key_handle, - attest_key_type, - public_key_buff, - public_key_size); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 1; - } - -#elif defined(CRYPTO_VERSION_BETA3) - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - - if (!public_key_registered) - { - status = pal_attest_get_public_key(public_key_buff, - sizeof(public_key_buff), - &public_key_size, - &ecc_curve); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - if (ecc_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Set key type for public key */ - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); - - /* Set the attributes for the public key */ - psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size); - psa_set_key_usage_flags(&attributes, usage); - psa_set_key_algorithm(&attributes, key_alg); - - /* Import the public key */ - status = psa_import_key(&attributes, - public_key_buff, - public_key_size, - &public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 1; - } -#endif - - return status; -} - -static uint32_t pal_destroy_attest_key(void) -{ - psa_status_t status; - - if (!public_key_registered) - return PAL_ATTEST_ERR_KEY_FAIL; - - status = psa_destroy_key(public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 0; - - return PAL_ATTEST_SUCCESS; -} - -/** - @brief - Verify the signature using the public key - @param - cose_algorithm_id : Algorithm ID - - token_hash : Data that needs to be verified - - signature : Signature to be verified against - @return - SUCCESS/ERROR CODE -**/ -uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, - struct q_useful_buf_c token_hash, - struct q_useful_buf_c signature) -{ - int32_t status = PAL_ATTEST_ERROR; - psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - - /* Register the attestation public key */ - status = pal_import_attest_key(key_alg); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = psa_asymmetric_verify(public_key_handle, - key_alg, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_SIGNATURE_FAIL; - - /* Unregister the attestation public key */ - status = pal_destroy_attest_key(); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h deleted file mode 100644 index 559a24c1..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ /dev/null @@ -1,88 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_CRYPTO_H_ -#define _PAL_ATTESTATION_CRYPTO_H_ - -#include "pal_attestation_eat.h" - -#define ATTEST_PUBLIC_KEY_SLOT 4 -#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) - -typedef struct { - uint8_t *pubx_key; - size_t pubx_key_size; - uint8_t *puby_key; - size_t puby_key_size; -} ecc_key_t; - -struct ecc_public_key_t { - const uint8_t a; - uint8_t public_key[]; /* X-coordinate || Y-coordinate */ -}; - -static const struct ecc_public_key_t attest_public_key = { - /* Constant byte */ - 0x04, - /* X-coordinate */ - {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, - 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, - 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, - 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, - /* Y-coordinate */ - 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, - 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, - 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, - 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, -}; - -static const uint8_t initial_attestation_public_x_key[] = { - 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, - 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, - 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, - 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F -}; - -static const uint8_t initial_attestation_public_y_key[] = { - 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, - 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, - 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, - 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 -}; - -/* Initialize the structure with given public key */ -static const ecc_key_t attest_key = { - (uint8_t *)initial_attestation_public_x_key, - sizeof(initial_attestation_public_x_key), - (uint8_t *)initial_attestation_public_y_key, - sizeof(initial_attestation_public_y_key) -}; - -int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, - struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, - struct q_useful_buf buffer_to_hold_result, - struct q_useful_buf_c *hash_result); -int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash); -uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, - struct q_useful_buf_c payload); -uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, - struct q_useful_buf_c signature); -#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h deleted file mode 100644 index fae5434e..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ /dev/null @@ -1,80 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_EAT_H_ -#define _PAL_ATTESTATION_EAT_H_ - -#include "qcbor.h" -#include "pal_common.h" - -#define PAL_ATTEST_MIN_ERROR 30 - -#define COSE_ALGORITHM_ES256 -7 -#define COSE_ALG_SHA256_PROPRIETARY -72000 - -#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB - -#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" - -/* Private value. Intentionally not documented for Doxygen. - * This is the size allocated for the encoded protected headers. It - * needs to be big enough for make_protected_header() to succeed. It - * currently sized for one header with an algorithm ID up to 32 bits - * long -- one byte for the wrapping map, one byte for the label, 5 - * bytes for the ID. If this is made accidentially too small, QCBOR will - * only return an error, and not overrun any buffers. - * - * 9 extra bytes are added, rounding it up to 16 total, in case some - * other protected header is to be added. - */ -#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) - -/** - * This is the size of the first part of the CBOR encoded TBS - * bytes. It is around 20 bytes. See create_tbs_hash(). - */ -#define T_COSE_SIZE_OF_TBS \ - 1 + /* For opening the array */ \ - sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ - 2 + /* Overhead for encoding string */ \ - T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * (/* 3 NULL bstrs for fields not used */ \ - 1 /* size of a NULL bstr */ \ - ) -#define NULL_USEFUL_BUF_C NULLUsefulBufC - -enum attestation_error_code { - PAL_ATTEST_SUCCESS = 0, - PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, - PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, - PAL_ATTEST_TOKEN_NOT_SUPPORTED, - PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, - PAL_ATTEST_HASH_LENGTH_MISMATCH, - PAL_ATTEST_HASH_MISMATCH, - PAL_ATTEST_HASH_FAIL, - PAL_ATTEST_HASH_UNSUPPORTED, - PAL_ATTEST_HASH_BUFFER_SIZE, - PAL_ATTEST_ERR_PROTECTED_HEADERS, - PAL_ATTEST_ERR_SIGN_STRUCT, - PAL_ATTEST_ERR_KEY_FAIL, - PAL_ATTEST_ERR_SIGNATURE_FAIL, - PAL_ATTEST_ERR_CBOR_STRUCTURE, - PAL_ATTEST_ERR_SMALL_BUFFER, - PAL_ATTEST_ERROR, -}; - -#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c deleted file mode 100644 index faf3f493..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested attestation function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_attestation_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c deleted file mode 100644 index 83c1ebda..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c +++ /dev/null @@ -1,56 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_attestation_intf.h" - -/** - @brief - This API will call the requested attestation function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_attestation_function(int type, va_list valist) -{ - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; - - switch (type) - { - case PAL_INITIAL_ATTEST_GET_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - token_buffer_size = va_arg(valist, size_t); - token_size = va_arg(valist, size_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, - token_size); - case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, size_t); - token_size = va_arg(valist, size_t*); - return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h deleted file mode 100644 index 3ab7ebb4..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h +++ /dev/null @@ -1,32 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_INTF_H_ -#define _PAL_ATTESTATION_INTF_H_ - -#include "pal_attestation_crypto.h" - -enum attestation_function_code { - PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, - PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, - PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, - PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, - PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, -}; - -int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c deleted file mode 100644 index 133cfa9d..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested internal trusted storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_its_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c deleted file mode 100644 index abfdc5d6..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ /dev/null @@ -1,62 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_internal_trusted_storage_intf.h" - -/** - @brief - This API will call the requested internal trusted storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_its_function(int type, va_list valist) -{ - psa_storage_uid_t uid; - uint32_t data_size, offset; - const void *p_write_data; - void *p_read_data; - size_t *p_data_length; - psa_storage_create_flags_t its_create_flags; - struct psa_storage_info_t *its_p_info; - - switch (type) - { - case PAL_ITS_SET: - uid = va_arg(valist, psa_storage_uid_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_its_set(uid, data_size, p_write_data, its_create_flags); - case PAL_ITS_GET: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_read_data = va_arg(valist, void*); - p_data_length = va_arg(valist, size_t*); - return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); - case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_storage_uid_t); - its_p_info = va_arg(valist, struct psa_storage_info_t*); - return psa_its_get_info(uid, its_p_info); - case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_storage_uid_t); - return psa_its_remove(uid); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h deleted file mode 100644 index 6db6aac6..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h +++ /dev/null @@ -1,31 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ -#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ - -#include "pal_common.h" - -enum its_function_code { - PAL_ITS_SET = 0x1, - PAL_ITS_GET = 0x2, - PAL_ITS_GET_INFO = 0x3, - PAL_ITS_REMOVE = 0x4, -}; - -uint32_t pal_its_function(int type, va_list valist); -#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c deleted file mode 100644 index ee9b13da..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested protected storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_ps_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c deleted file mode 100644 index 0dd07c57..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c +++ /dev/null @@ -1,77 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_protected_storage_intf.h" - -/** - @brief - This API will call the requested protected storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_ps_function(int type, va_list valist) -{ - psa_storage_uid_t uid; - uint32_t data_size, size, offset; - const void *p_write_data; - void *p_read_data; - size_t *p_data_length; - psa_storage_create_flags_t ps_create_flags; - struct psa_storage_info_t *ps_p_info; - - switch (type) - { - case PAL_PS_SET: - uid = va_arg(valist, psa_storage_uid_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); - case PAL_PS_GET: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_read_data = va_arg(valist, void*); - p_data_length = va_arg(valist, size_t*); - return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); - case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_storage_uid_t); - ps_p_info = va_arg(valist, struct psa_storage_info_t*); - return psa_ps_get_info(uid, ps_p_info); - case PAL_PS_REMOVE: - uid = va_arg(valist, psa_storage_uid_t); - return psa_ps_remove(uid); - case PAL_PS_CREATE: - uid = va_arg(valist, psa_storage_uid_t); - size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_ps_create(uid, size, ps_create_flags); - case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_size, p_write_data); - case PAL_PS_GET_SUPPORT: - return psa_ps_get_support(); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } - - return PAL_STATUS_UNSUPPORTED_FUNC; -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h deleted file mode 100644 index a338cdf7..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h +++ /dev/null @@ -1,34 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ -#define _PAL_PROTECTED_STORAGE_INTF_H_ - -#include "pal_common.h" - -enum ps_function_code { - PAL_PS_SET = 0x1, - PAL_PS_GET = 0x2, - PAL_PS_GET_INFO = 0x3, - PAL_PS_REMOVE = 0x4, - PAL_PS_CREATE = 0x5, - PAL_PS_SET_EXTENDED = 0x6, - PAL_PS_GET_SUPPORT = 0x7, -}; - -uint32_t pal_ps_function(int type, va_list valist); -#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c deleted file mode 100644 index fd307839..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c +++ /dev/null @@ -1,132 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#include "pal_driver_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - void -**/ -void pal_uart_init(uint32_t uart_base_addr) -{ - pal_uart_cmsdk_init(uart_base_addr); -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier -**/ - -void pal_print(char *str, int32_t data) -{ - pal_cmsdk_print(str,data); - -} - - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_write(base, offset, buffer, size); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_read(base, offset, buffer, size); -} - - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); - -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Checks whether hardware watchdog timer is enabled - @param - base_addr : Base address of the watchdog module - @return - Enabled : 1, Disabled : 0 -**/ -int pal_wd_timer_is_enabled(addr_t base_addr) -{ - return (pal_wd_cmsdk_is_enabled(base_addr)); -} - -/** - @brief - Trigger interrupt for irq signal assigned to driver partition - before return to caller. - @param - void - @return - void -**/ -void pal_generate_interrupt(void) -{ - pal_uart_cmsdk_generate_irq(); -} - -/** - @brief - Disable interrupt that was generated using pal_generate_interrupt API. - @param - void - @return - void -**/ -void pal_disable_interrupt(void) -{ - pal_uart_cmsdk_disable_irq(); -} diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h deleted file mode 100644 index cef34ca8..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h +++ /dev/null @@ -1,35 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#ifndef _PAL_DRIVER_INTF_H_ -#define _PAL_DRIVER_INTF_H_ - -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -void pal_uart_init(uint32_t uart_base_addr); -void pal_print(char *str, int32_t data); -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); -int pal_wd_timer_enable(addr_t base_addr); -int pal_wd_timer_disable(addr_t base_addr); -int pal_wd_timer_is_enabled(addr_t base_addr); -void pal_generate_interrupt(void); -void pal_disable_interrupt(void); -#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cfg b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cfg deleted file mode 100644 index e4580415..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cfg +++ /dev/null @@ -1,57 +0,0 @@ -///** @file -// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -// * SPDX-License-Identifier : Apache-2.0 -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -//**/ - -// UART device info -uart.num=1; -uart.0.base = 0x40004000; -uart.0.size = 0xFFF; -uart.0.intr_id = 0xFF; -uart.0.permission = TYPE_READ_WRITE; - -// Watchdog device info -watchdog.num = 1; -watchdog.0.base = 0x40008000; -watchdog.0.size = 0xFFF; -watchdog.0.intr_id = 0xFF; -watchdog.0.permission = TYPE_READ_WRITE; -watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) -watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 - -// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH -nvmem.num =1; -nvmem.0.start = 0x2002F000; -nvmem.0.end = 0x2002F3FF; -nvmem.0.permission = TYPE_READ_WRITE; - -// Miscellaneous - Test scatter info -dut.num = 1; - -// Start address of 12KB NS memory for test ELF -dut.0.ns_test_addr = 0x2007F000; - -// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. -// Size of combine_test_binary = Summation of size of each test ELF file. -dut.0.ns_start_addr_of_combine_test_binary = 0x2003F000; - -// Is combine_test_binary available in RAM? -dut.0.combine_test_binary_in_ram = AVAILABLE; - -// Level of Isolation -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; diff --git a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake deleted file mode 100644 index db9a4fa5..00000000 --- a/api-tests/platform/targets/tgt_dev_apis_mbedos_fvp_mps2_m4/target.cmake +++ /dev/null @@ -1,105 +0,0 @@ -#/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# PAL C source files part of NSPE library -list(APPEND PAL_SRC_C_NSPE ) - -# PAL ASM source files part of NSPE library -list(APPEND PAL_SRC_ASM_NSPE ) - -# PAL C source files part of SPE library - driver partition -list(APPEND PAL_SRC_C_DRIVER_SP ) - -# PAL ASM source files part of SPE library - driver partition -list(APPEND PAL_SRC_ASM_DRIVER_SP ) - - -# Listing all the sources required for given target -if(${SUITE} STREQUAL "IPC") - list(APPEND PAL_SRC_C_NSPE - # driver functionalities are implemented as RoT-services - # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c - ) - list(APPEND PAL_SRC_C_DRIVER_SP - # Driver files will be compiled as part of driver partition - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c - ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c - ) -else() - list(APPEND PAL_SRC_C_NSPE - # driver files will be compiled as part of NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c - ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c - ) -endif() -if(${SUITE} STREQUAL "CRYPTO") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c - ) -endif() -if(${SUITE} STREQUAL "PROTECTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c - ) -endif() -if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c - ) -endif() -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c - ) -endif() - -# Create NSPE library -add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) - -# PSA Include directories -foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) - target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) -endforeach() - -list(APPEND PAL_DRIVER_INCLUDE_PATHS - ${PSA_ROOT_DIR}/platform/drivers/nvmem - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk -) - -target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE - ${PAL_DRIVER_INCLUDE_PATHS} - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation -) - -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") -target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE - ${PSA_QCBOR_INCLUDE_PATH} -) -endif() diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json deleted file mode 100644 index 3e2ec674..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/common/driver_partition_psa.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "DRIVER_PARTITION", - "type": "PSA-ROT", - "priority": "NORMAL", - "description": "Implements device services such print, flash read/write,. etc.", - "entry_point": "driver_main", - "stack_size": "0x400", - "services": [{ - "name": "DRIVER_UART_SID", - "sid": "0x0000FC01", - "signal": "DRIVER_UART_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_WATCHDOG_SID", - "sid": "0x0000FC02", - "signal": "DRIVER_WATCHDOG_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_NVMEM_SID", - "sid": "0x0000FC03", - "signal": "DRIVER_NVMEM_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "DRIVER_TEST_SID", - "sid": "0x0000FC04", - "signal": "DRIVER_TEST_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "UART_REGION", - "base": "0x40004000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "WATCHDOG_REGION", - "base": "0x40008000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "NVMEM_REGION", - "base": "0x2002F000", - "size": "0x400", - "permission": "READ-WRITE" - }, - { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x200AF040", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "irqs": [ - { - "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", - "signal": "DRIVER_UART_INTR_SIG", - "line_num": 17 - } - ] -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json deleted file mode 100644 index b93377bd..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER_SID", - "sid": "0x0000FA01", - "signal": "CLIENT_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID", - "DRIVER_TEST_SID", - "SERVER_TEST_DISPATCHER_SID", - "SERVER_UNSPECIFED_MINOR_V_SID", - "SERVER_STRICT_MINOR_VERSION_SID", - "SERVER_RELAX_MINOR_VERSION_SID", - "SERVER_SECURE_CONNECT_ONLY_SID", - "SERVER_CONNECTION_DROP_SID" - ], - "mmio_regions" : [ - { - "name": "CLIENT_PARTITION_MMIO", - "base": "0x200AF000", - "size": "0x20", - "permission": "READ-WRITE" - } - ] -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 146b8fbc..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER_SID", - "sid": "0x0000FB01", - "signal": "SERVER_TEST_DISPATCHER_SIG", - "non_secure_clients": true, - "minor_version": 1, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY_SID", - "sid": "0x0000FB02", - "signal": "SERVER_SECURE_CONNECT_ONLY_SIG", - "non_secure_clients": false, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_MINOR_VERSION_SID", - "sid": "0x0000FB03", - "signal": "SERVER_STRICT_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_MINOR_V_SID", - "sid": "0x0000FB04", - "signal": "SERVER_UNSPECIFED_MINOR_V_SIG", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_MINOR_VERSION_SID", - "sid": "0x0000FB05", - "signal": "SERVER_RELAX_MINOR_VERSION_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN_SID", - "sid": "0x0000FB06", - "signal": "SERVER_UNEXTERN_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP_SID", - "sid": "0x0000FB07", - "signal": "SERVER_CONNECTION_DROP_SIG", - "non_secure_clients": true, - "minor_version": 2, - "minor_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART_SID", - "DRIVER_NVMEM_SID" - ] -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c deleted file mode 100644 index 578b4cef..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_empty_intf.c +++ /dev/null @@ -1,93 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - * @brief - Retrieve the version of the PSA Framework API that is implemented. - * This is a wrapper API for psa_framework_version API. - * @param - void - * @return - The PSA Framework API version. - */ - -uint32_t pal_ipc_framework_version(void) -{ - return 0; -} - -/** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. - * This is a wrapper API for the psa_version API. - * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust - * Service not present on the system. - */ - -uint32_t pal_ipc_version(uint32_t sid) -{ - return PSA_VERSION_NONE; -} - -/** - * @brief - Connect to given sid. - * This is a wrapper API for the psa_connect API. - * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service - * @return - psa_handle_t : return connection handle - */ - -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) -{ - return PSA_NULL_HANDLE; -} - -/** - * @brief Call a connected Root of Trust Service. - * This is a wrapper API for the psa_call API. - * The caller must provide an array of ::psa_invec_t structures as the input payload. - * - * @param -handle Handle for the connection. - * @param -in_vec Array of psa_invec structures. - * @param -in_len Number of psa_invec structures in in_vec. - * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. - * @param -out_len Number of psa_outvec structures in out_vec. - * @return -psa_status_t - */ - -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) -{ - return (PSA_SUCCESS - 1); -} - -/** - * @brief Close a connection to a Root of Trust Service. - * This is a wrapper API for the psa_close API. - * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. - * - * @param handle Handle for the connection. - * @return void - */ - -void pal_ipc_close(psa_handle_t handle) -{ - return; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c deleted file mode 100644 index 20ddd118..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.c +++ /dev/null @@ -1,97 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - * @brief - Retrieve the version of the PSA Framework API that is implemented. - * This is a wrapper API for psa_framework_version API. - * @param - void - * @return - The PSA Framework API version. - * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. - */ - -uint32_t pal_ipc_framework_version(void) -{ - return (psa_framework_version()); -} - -/** - * @brief - Retrieve the minor version of a Root of Trust Service by its SID. - * This is a wrapper API for the psa_version API. - * @param - sid The Root of Trust Service ID - * @return - Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust - * Service not present on the system. - * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. - */ - -uint32_t pal_ipc_version(uint32_t sid) -{ - return (psa_version(sid)); -} - -/** - * @brief - Connect to given sid. - * This is a wrapper API for the psa_connect API. - * @param - sid : RoT service id - * @param - minor_version : minor_version of RoT service - * @return - psa_handle_t : return connection handle - * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. - */ - -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version) -{ - return (psa_connect(sid, minor_version)); -} - -/** - * @brief Call a connected Root of Trust Service. - * This is a wrapper API for the psa_call API. - * The caller must provide an array of ::psa_invec_t structures as the input payload. - * - * @param -handle Handle for the connection. - * @param -in_vec Array of psa_invec structures. - * @param -in_len Number of psa_invec structures in in_vec. - * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. - * @param -out_len Number of psa_outvec structures in out_vec. - * @return -psa_status_t - * Note - Return -1 if PSA IPC is not implemented. - */ - -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len) -{ - return (psa_call(handle, in_vec, in_len, out_vec, out_len)); -} - -/** - * @brief Close a connection to a Root of Trust Service. - * This is a wrapper API for the psa_close API. - * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. - * - * @param - handle Handle for the connection. - * @return - void - */ - -void pal_ipc_close(psa_handle_t handle) -{ - psa_close(handle); -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h deleted file mode 100644 index 3f5741e0..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_client_api_intf.h +++ /dev/null @@ -1,32 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CLIENT_API_H_ -#define _PAL_CLIENT_API_H_ - -#include "pal_common.h" - -uint32_t pal_ipc_framework_version(void); -uint32_t pal_ipc_version(uint32_t sid); -psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version); -psa_status_t pal_ipc_call(psa_handle_t handle, - const psa_invec *in_vec, - size_t in_len, - psa_outvec *out_vec, - size_t out_len); -void pal_ipc_close(psa_handle_t handle); -#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h deleted file mode 100644 index 0a63b026..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_common.h +++ /dev/null @@ -1,116 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_COMMON_H_ -#define _PAL_COMMON_H_ - -#include -#include -#include -#include -#include - -#include "pal_config.h" -#include "pal_crypto_config.h" - -/* typedef's */ -typedef uint8_t bool_t; -typedef uint32_t addr_t; -typedef uint32_t test_id_t; -typedef uint32_t block_id_t; -typedef char char8_t; -typedef uint32_t cfg_id_t; - -#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF - -typedef enum -{ - PAL_STATUS_SUCCESS = 0x0, - PAL_STATUS_ERROR = 0x80 -} pal_status_t; - -typedef enum { - NVMEM_READ = 0x1, - NVMEM_WRITE = 0x2, -} nvmem_fn_type_t; - -typedef struct { - nvmem_fn_type_t nvmem_fn_type; - addr_t base; - uint32_t offset; - int size; -} nvmem_param_t; - -typedef enum { - WD_INIT_SEQ = 0x1, - WD_ENABLE_SEQ = 0x2, - WD_DISABLE_SEQ = 0x3, - WD_STATUS_SEQ = 0x4, -} wd_fn_type_t; - -typedef enum { - WD_LOW_TIMEOUT = 0x1, - WD_MEDIUM_TIMEOUT = 0x2, - WD_HIGH_TIMEOUT = 0x3, - WD_CRYPTO_TIMEOUT = 0x4, -} wd_timeout_type_t; - -typedef struct { - wd_fn_type_t wd_fn_type; - addr_t wd_base_addr; - uint32_t wd_time_us; - uint32_t wd_timer_tick_us; -} wd_param_t; - -typedef enum { - UART_INIT = 0x1, - UART_PRINT = 0x2, -} uart_fn_type_t; - -/* - * Redefining some of the client.h elements for compilation to go through - * when PSA IPC APIs are not implemented. - */ -#ifndef IPC - -#ifndef PSA_VERSION_NONE -#define PSA_VERSION_NONE (0) -#endif - -#ifndef PSA_SUCCESS -#define PSA_SUCCESS (0) -typedef int32_t psa_status_t; -#endif -typedef int32_t psa_handle_t; - -#ifndef PSA_NULL_HANDLE -#define PSA_NULL_HANDLE ((psa_handle_t)0) -#endif - -typedef struct psa_invec { - const void *base; - size_t len; -} psa_invec; - -typedef struct psa_outvec { - void *base; - size_t len; -} psa_outvec; - -#endif /* IPC */ - -#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h deleted file mode 100644 index 61db8d8e..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_config.h +++ /dev/null @@ -1,91 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CONFIG_H_ -#define _PAL_CONFIG_H_ - -/* Define PSA test suite dependent macros for non-cmake build */ -#if !defined(PSA_CMAKE_BUILD) - -/* Print verbosity = TEST */ -#define VERBOSE 3 - -/* NSPE or SPE VAL build? */ -#define VAL_NSPE_BUILD - -/* NSPE or SPE TEST build? */ -#define NONSECURE_TEST_BUILD - -/* Combine test archive or binary? */ -#define TEST_COMBINE_ARCHIVE - -/* If not defined, skip watchdog programming */ -#define WATCHDOG_AVAILABLE - -/* Are Dynamic memory APIs available to secure partition? */ -#define SP_HEAP_MEM_SUPP -#endif /* PSA_CMAKE_BUILD */ - -/* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 - -/* Use hardcoded public key */ -//#define PLATFORM_OVERRIDE_ATTEST_PK - -/* - * Include of PSA defined Header files - */ -#ifdef IPC -/* psa/client.h: Contains the PSA Client API elements */ -#include "psa/client.h" - -/* - * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service - * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation - * of this file. -*/ -#include "psa_manifest/sid.h" - -/* - * psa_manifest/pid.h: Secure Partition IDs - * Macro definitions that map from Secure Partition names to Secure Partition IDs. - * Partition manifest parse build tool must provide the implementation of this file. -*/ -#include "psa_manifest/pid.h" -#endif - -#ifdef CRYPTO -/* psa/crypto.h: Contains the PSA Crypto API elements */ -#include "psa/crypto.h" -#endif - -#ifdef INTERNAL_TRUSTED_STORAGE -/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ -#include "psa/internal_trusted_storage.h" -#endif - -#ifdef PROTECTED_STORAGE -/* psa/protected_storage.h: Contains the PSA PS API elements */ -#include "psa/protected_storage.h" -#endif - -#ifdef INITIAL_ATTESTATION -/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ -#include "psa/initial_attestation.h" -#endif - -#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c deleted file mode 100644 index f8f773fb..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ipc_intf.c +++ /dev/null @@ -1,305 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_client_api_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - SUCCESS/FAILURE -**/ -int pal_uart_init_ns(uint32_t uart_base_addr) -{ - psa_handle_t print_handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - uart_fn_type_t uart_fn = UART_INIT; - - psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, - {&uart_base_addr, sizeof(uart_base_addr)}, - {NULL, 0}}; - - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - if (print_handle < 0) - { - return(PAL_STATUS_ERROR); - } - - status_of_call = pal_ipc_call(print_handle, data, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - return(PAL_STATUS_ERROR); - } - - pal_ipc_close(print_handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier - @return - SUCCESS/FAILURE -**/ - -int pal_print_ns(char *str, int32_t data) -{ - int string_len = 0; - char *p = str; - psa_handle_t print_handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - pal_status_t status = PAL_STATUS_SUCCESS; - uart_fn_type_t uart_fn = UART_PRINT; - - while (*p != '\0') - { - string_len++; - p++; - } - - psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, - {str, string_len+1}, - {&data, sizeof(data)}}; - print_handle = pal_ipc_connect(DRIVER_UART_SID, 0); - - if (print_handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(print_handle, data1, 3, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - status = PAL_STATUS_ERROR; - } - } - pal_ipc_close(print_handle); - return status; -} - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_INIT_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = time_us; - wd_param.wd_timer_tick_us = timer_tick_us; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable_ns(addr_t base_addr) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_ENABLE_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = 0; - wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable_ns(addr_t base_addr) -{ - wd_param_t wd_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - wd_param.wd_fn_type = WD_DISABLE_SEQ; - wd_param.wd_base_addr = base_addr; - wd_param.wd_time_us = 0; - wd_param.wd_timer_tick_us = 0; - psa_invec invec[1] = {{&wd_param, sizeof(wd_param)}}; - - handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - nvmem_param_t nvmem_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - nvmem_param.nvmem_fn_type = NVMEM_READ; - nvmem_param.base = base; - nvmem_param.offset = offset; - nvmem_param.size = size; - psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)}}; - psa_outvec outvec[1] = {{buffer, size}}; - - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 1, outvec, 1); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - psa_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - nvmem_param_t nvmem_param; - psa_handle_t handle = 0; - psa_status_t status_of_call = PSA_SUCCESS; - - nvmem_param.nvmem_fn_type = NVMEM_WRITE; - nvmem_param.base = base; - nvmem_param.offset = offset; - nvmem_param.size = size; - psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size}}; - - handle = pal_ipc_connect(DRIVER_NVMEM_SID, 0); - if (handle < 0) - { - return PAL_STATUS_ERROR; - } - else - { - status_of_call = pal_ipc_call(handle, invec, 2, NULL, 0); - if (status_of_call != PSA_SUCCESS) - { - pal_ipc_close(handle); - return PAL_STATUS_ERROR; - } - } - pal_ipc_close(handle); - return PAL_STATUS_SUCCESS; -} - -/** - * @brief - This function will read peripherals using SPI commands - * @param - addr : address of the peripheral - * data : read buffer - * len : length of the read buffer in bytes - * @return - error status -**/ -int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) -{ - return 0xFF; -} - -/** - * @brief - Terminates the simulation at the end of all tests completion. - * By default, it put cpus into power down mode. - * @param - void - * @return - void -**/ -void pal_terminate_simulation(void) -{ - /* Add logic to terminate the simluation */ - - while(1) - { - asm volatile("WFI"); - } -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c deleted file mode 100644 index 2af6fcc7..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/common/pal_driver_ns_intf.c +++ /dev/null @@ -1,145 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_common.h" -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - SUCCESS/FAILURE -**/ -int pal_uart_init_ns(uint32_t uart_base_addr) -{ - pal_uart_cmsdk_init(uart_base_addr); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier - @return - SUCCESS/FAILURE -**/ - -int pal_print_ns(char *str, int32_t data) -{ - pal_cmsdk_print(str, data); - return PAL_STATUS_SUCCESS; -} - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable_ns(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable_ns(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - if (nvmem_read(base, offset, buffer, size)) - { - return PAL_STATUS_SUCCESS; - } - else - { - return PAL_STATUS_ERROR; - } -} - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - SUCCESS/FAILURE -**/ -int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) -{ - if (nvmem_write(base, offset, buffer, size)) - { - return PAL_STATUS_SUCCESS; - } - else - { - return PAL_STATUS_ERROR; - } -} - -/** - * @brief - This function will read peripherals using SPI commands - * @param - addr : address of the peripheral - * data : read buffer - * len : length of the read buffer in bytes - * @return - error status -**/ -int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) -{ - return 0xFF; -} - -/** - * @brief - Terminates the simulation at the end of all tests completion. - * By default, it put cpus into power down mode. - * @param - void - * @return - void -**/ -void pal_terminate_simulation(void) -{ - /* Add logic to terminate the simluation */ - - while(1) - { - asm volatile("WFI"); - } -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h deleted file mode 100644 index 6d71d2ec..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config.h +++ /dev/null @@ -1,323 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -/* - * \file pal_crypto_config.h - * - * \brief Configuration options for crypto tests (set of defines) - * - * This set of compile-time options may be used to enable - * or disable features selectively for crypto test suite - */ - -#ifndef _PAL_CRYPTO_CONFIG_H_ -#define _PAL_CRYPTO_CONFIG_H_ -/** - * \def ARCH_TEST_RSA - * - * Enable the RSA public-key cryptosystem. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_RSA -#define ARCH_TEST_RSA_1024 -#define ARCH_TEST_RSA_2048 -#define ARCH_TEST_RSA_3072 - -/** - * \def ARCH_TEST_ECC - * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 - * - * Enable the elliptic curve - * Enable specific curves within the Elliptic Curve - * module. By default all supported curves are enabled. - * - * Requires: ARCH_TEST_ECC - * Comment macros to disable the curve - */ -#define ARCH_TEST_ECC -#define ARCH_TEST_ECC_CURVE_SECP192R1 -#define ARCH_TEST_ECC_CURVE_SECP224R1 -#define ARCH_TEST_ECC_CURVE_SECP256R1 -#define ARCH_TEST_ECC_CURVE_SECP384R1 - -/** - * \def ARCH_TEST_AES - * - * Enable the AES block cipher. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_AES -#define ARCH_TEST_AES_128 -#define ARCH_TEST_AES_192 -#define ARCH_TEST_AES_256 -#define ARCH_TEST_AES_512 - -/** - * \def ARCH_TEST_DES - * - * Enable the DES block cipher. - * By default all supported keys are enabled. - * - * Comment macros to disable the types - */ -#define ARCH_TEST_DES -#define ARCH_TEST_DES_1KEY -#define ARCH_TEST_DES_2KEY -#define ARCH_TEST_DES_3KEY - -/** - * \def ARCH_TEST_RAW - * - * A "key" of this type cannot be used for any cryptographic operation. - * Applications may use this type to store arbitrary data in the keystore. - */ -#define ARCH_TEST_RAW - -/** - * \def ARCH_TEST_CIPER - * - * Enable the generic cipher layer. - */ - -#define ARCH_TEST_CIPER - -/** - * \def ARCH_TEST_ARC4 - * - * Enable the ARC4 key type. - */ -#define ARCH_TEST_ARC4 - -/** - * \def ARCH_TEST_CIPER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CTR - -/** - * \def ARCH_TEST_CIPER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CFB - -/** - * \def ARCH_TEST_CIPER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - * - * Requires: ARCH_TEST_CIPER - */ -#define ARCH_TEST_CIPER_MODE_CBC - -/** - * \def ARCH_TEST_CTR_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR - */ -#define ARCH_TEST_CTR_AES - -/** - * \def ARCH_TEST_CBC_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_AES -#define ARCH_TEST_CBC_AES_NO_PADDING - -/** - * \def ARCH_TEST_CBC_NO_PADDING - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_NO_PADDING - -/** - * \def ARCH_TEST_CFB_AES - * - * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB - */ -#define ARCH_TEST_CFB_AES - -/** - * \def ARCH_TEST_PKCS1V15_* - * - * Enable support for PKCS#1 v1.5 encoding. - * Enable support for PKCS#1 v1.5 operations. - * Enable support for RSA-OAEP - * - * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 - * - * Comment macros to disable the types - */ -#define ARCH_TEST_PKCS1V15 -#define ARCH_TEST_RSA_PKCS1V15_SIGN -#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW -#define ARCH_TEST_RSA_PKCS1V15_CRYPT -#define ARCH_TEST_RSA_OAEP - -/** - * \def ARCH_TEST_CBC_PKCS7 - * - * Requires: ARCH_TEST_CIPER_MODE_CBC - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CBC_PKCS7 - -/** - * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION - * - * Enable support for Asymmetric encryption algorithms - */ -#define ARCH_TEST_ASYMMETRIC_ENCRYPTION - -/** - * \def ARCH_TEST_HASH - * - * Enable the hash algorithm. - */ -#define ARCH_TEST_HASH - -/** - * \def ARCH_TEST_HMAC - * - * The key policy determines which underlying hash algorithm the key can be - * used for. - * - * Requires: ARCH_TEST_HASH - */ -#define ARCH_TEST_HMAC - -/** - * \def ARCH_TEST_MDX - * \def ARCH_TEST_SHAXXX - * - * Enable the MDX algorithm. - * Enable the SHAXXX algorithm. - * - * Requires: ARCH_TEST_HASH - * - * Comment macros to disable the types - */ -#define ARCH_TEST_MD2 -#define ARCH_TEST_MD4 -#define ARCH_TEST_MD5 -#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 -#define ARCH_TEST_SHA224 -#define ARCH_TEST_SHA256 -#define ARCH_TEST_SHA384 -#define ARCH_TEST_SHA512 -#define ARCH_TEST_SHA512_224 -#define ARCH_TEST_SHA512_256 -#define ARCH_TEST_SHA3_224 -#define ARCH_TEST_SHA3_256 -#define ARCH_TEST_SHA3_384 -#define ARCH_TEST_SHA3_512 - -/** - * \def ARCH_TEST_HKDF - * - * Enable the HKDF algorithm (RFC 5869). - * - * Requires: ARCH_TEST_HASH -*/ -#define ARCH_TEST_HKDF - -/** - * \def ARCH_TEST_xMAC - * - * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block - * ciphers. - * Requires: ARCH_TEST_AES or ARCH_TEST_DES - * - * Comment macros to disable the types - */ -#define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC -#define ARCH_TEST_HMAC - -/** - * \def ARCH_TEST_CCM - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Requires: ARCH_TEST_AES - */ -#define ARCH_TEST_CCM - -/** - * \def ARCH_TEST_GCM - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Requires: ARCH_TEST_AES - * - */ -#define ARCH_TEST_GCM - -/** - * \def ARCH_TEST_TRUNCATED_MAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define ARCH_TEST_TRUNCATED_MAC - - -/** - * \def ARCH_TEST_ECDH - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Requires: ARCH_TEST_ECC - */ -#define ARCH_TEST_ECDH - -/** - * \def ARCH_TEST_ECDSA - * - * Enable the elliptic curve DSA library. - * Requires: ARCH_TEST_ECC - */ -#define ARCH_TEST_ECDSA - -/** - * \def ARCH_TEST_DETERMINISTIC_ECDSA - * - * Enable deterministic ECDSA (RFC 6979). -*/ -#define ARCH_TEST_DETERMINISTIC_ECDSA - -#include "pal_crypto_config_check.h" - -#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h deleted file mode 100644 index 443e0bc2..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_config_check.h +++ /dev/null @@ -1,223 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -/** - * \file pal_crypto_config_check.h - * - * \brief Consistency checks for configuration options - * - */ - -#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ -#define _PAL_CRYPTO_CONFIG_CHECK_H_ - -#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) -#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_128 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_AES_512 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) -#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) -#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CTR_AES) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) -#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" -#endif - -#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) -#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" -#endif - -#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) -#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CFB_AES) &&\ - (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) -#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ - (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) -#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) -#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_HMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD2 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD4 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_MD5 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA1 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) -#error "ARCH_TEST_HKDF defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_CMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_GMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_HMAC defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_CCM defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) -#error "ARCH_TEST_GCM defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECDH defined, but not all prerequisites" -#endif - -#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) -#error "ARCH_TEST_ECDSA defined, but not all prerequisites" -#endif - -#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c deleted file mode 100644 index 2a28f397..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested crypto function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_crypto_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c deleted file mode 100644 index fd2e0557..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.c +++ /dev/null @@ -1,506 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_crypto_intf.h" - -#define PAL_KEY_SLOT_COUNT 32 - -/** - @brief - This API will call the requested crypto function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_crypto_function(int type, va_list valist) -{ - int i; - psa_status_t status; - uint8_t *buffer, *ciphertext, *plaintext; - const uint8_t *nonce, *additional_data, *salt, *peer; - size_t *length, size, ciphertext_size, nonce_length; - size_t salt_length, peer_length, additional_data_length; - size_t *tag_length, plaintext_size; - psa_aead_operation_t *aead_operation; - psa_key_attributes_t *attributes; - psa_key_handle_t *handle, key_handle; - psa_key_type_t *key_type_out, key_type; - psa_key_usage_t *usage_out, usage; - psa_key_id_t *key_id_out, key_id; - psa_key_lifetime_t *key_lifetime_out, key_lifetime; - psa_algorithm_t *key_alg_out, key_alg, alg; - psa_hash_operation_t *hash_operation, *target_operation; - psa_mac_operation_t *mac_operation; - psa_cipher_operation_t *cipher_operation; - psa_key_derivation_operation_t *derive_operation; - psa_key_derivation_step_t step; - switch (type) - { - case PAL_CRYPTO_INIT: - return psa_crypto_init(); - case PAL_CRYPTO_GENERATE_RANDOM: - buffer = va_arg(valist, uint8_t *); - size = va_arg(valist, int); - return psa_generate_random(buffer, size); - case PAL_CRYPTO_IMPORT_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - buffer = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - handle = (psa_key_handle_t *)va_arg(valist, int *); - status = psa_import_key(attributes, buffer, size, handle); - return status; - case PAL_CRYPTO_SET_KEY_TYPE: - attributes = va_arg(valist, psa_key_attributes_t *); - key_type = va_arg(valist, psa_key_type_t); - psa_set_key_type(attributes, key_type); - return 0; - case PAL_CRYPTO_SET_KEY_BITS: - attributes = va_arg(valist, psa_key_attributes_t *); - size = va_arg(valist, size_t); - psa_set_key_bits(attributes, size); - return 0; - case PAL_CRYPTO_GET_KEY_ATTRIBUTES: - key_handle = (psa_key_handle_t)va_arg(valist, int); - attributes = va_arg(valist, psa_key_attributes_t *); - return psa_get_key_attributes(key_handle, attributes); - case PAL_CRYPTO_GET_KEY_TYPE: - attributes = va_arg(valist, psa_key_attributes_t *); - key_type_out = va_arg(valist, psa_key_type_t *); - *key_type_out = psa_get_key_type(attributes); - return 0; - case PAL_CRYPTO_EXPORT_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t *)); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t *); - return psa_export_key(key_handle, buffer, size, length); - case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: - attributes = va_arg(valist, psa_key_attributes_t *); - usage = va_arg(valist, psa_key_usage_t); - psa_set_key_usage_flags(attributes, usage); - return 0; - case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: - attributes = va_arg(valist, psa_key_attributes_t *); - psa_reset_key_attributes(attributes); - return 0; - case PAL_CRYPTO_EXPORT_PUBLIC_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - buffer = (uint8_t *)(va_arg(valist, uint8_t *)); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t *); - return psa_export_public_key(key_handle, buffer, size, length); - case PAL_CRYPTO_SET_KEY_ID: - attributes = va_arg(valist, psa_key_attributes_t *); - key_id = va_arg(valist, psa_key_id_t); - psa_set_key_id(attributes, key_id); - return 0; - case PAL_CRYPTO_SET_KEY_LIFETIME: - attributes = va_arg(valist, psa_key_attributes_t *); - key_lifetime = va_arg(valist, psa_key_lifetime_t); - psa_set_key_lifetime(attributes, key_lifetime); - return 0; - case PAL_CRYPTO_SET_KEY_ALGORITHM: - attributes = va_arg(valist, psa_key_attributes_t *); - key_alg = va_arg(valist, psa_algorithm_t); - psa_set_key_algorithm(attributes, key_alg); - return 0; - case PAL_CRYPTO_GET_KEY_ID: - attributes = va_arg(valist, psa_key_attributes_t *); - key_id_out = va_arg(valist, psa_key_id_t *); - *key_id_out = psa_get_key_id(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_LIFETIME: - attributes = va_arg(valist, psa_key_attributes_t *); - key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); - *key_lifetime_out = psa_get_key_lifetime(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: - attributes = va_arg(valist, psa_key_attributes_t *); - usage_out = va_arg(valist, psa_key_usage_t *); - *usage_out = psa_get_key_usage_flags(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_ALGORITHM: - attributes = va_arg(valist, psa_key_attributes_t *); - key_alg_out = va_arg(valist, psa_algorithm_t *); - *key_alg_out = psa_get_key_algorithm(attributes); - return 0; - case PAL_CRYPTO_GET_KEY_BITS: - attributes = va_arg(valist, psa_key_attributes_t *); - length = va_arg(valist, size_t *); - *length = psa_get_key_bits(attributes); - return 0; - case PAL_CRYPTO_DESTROY_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_destroy_key(key_handle); - case PAL_CRYPTO_HASH_SETUP: - hash_operation = va_arg(valist, psa_hash_operation_t*); - alg = va_arg(valist, psa_algorithm_t); - return psa_hash_setup(hash_operation, alg); - case PAL_CRYPTO_HASH_UPDATE: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_update(hash_operation, buffer, size); - case PAL_CRYPTO_HASH_VERIFY: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_verify(hash_operation, buffer, size); - case PAL_CRYPTO_HASH_FINISH: - hash_operation = va_arg(valist, psa_hash_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_hash_finish(hash_operation, buffer, size, length); - case PAL_CRYPTO_HASH_ABORT: - hash_operation = va_arg(valist, psa_hash_operation_t*); - return psa_hash_abort(hash_operation); - case PAL_CRYPTO_HASH_COMPUTE: - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); - case PAL_CRYPTO_HASH_COMPARE: - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); - case PAL_CRYPTO_HASH_CLONE: - hash_operation = va_arg(valist, psa_hash_operation_t*); - target_operation = va_arg(valist, psa_hash_operation_t*); - return psa_hash_clone(hash_operation, target_operation); - case PAL_CRYPTO_GENERATE_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_generate_key(attributes, handle); - case PAL_CRYPTO_AEAD_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - nonce = va_arg(valist, const uint8_t *); - nonce_length = va_arg(valist, size_t); - additional_data = va_arg(valist, const uint8_t *); - additional_data_length = va_arg(valist, size_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, - additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); - case PAL_CRYPTO_AEAD_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - nonce = va_arg(valist, const uint8_t *); - nonce_length = va_arg(valist, size_t); - additional_data = va_arg(valist, const uint8_t *); - additional_data_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, - additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); - case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: - aead_operation = va_arg(valist, psa_aead_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_aead_encrypt_setup(aead_operation, key_handle, alg); - case PAL_CRYPTO_AEAD_DECRYPT_SETUP: - aead_operation = va_arg(valist, psa_aead_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_aead_decrypt_setup(aead_operation, key_handle, alg); - case PAL_CRYPTO_AEAD_GENERATE_NONCE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - return psa_aead_generate_nonce(aead_operation, buffer, size, length); - case PAL_CRYPTO_AEAD_SET_NONCE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_set_nonce(aead_operation, buffer, size); - case PAL_CRYPTO_AEAD_SET_LENGTHS: - aead_operation = va_arg(valist, psa_aead_operation_t *); - size = va_arg(valist, size_t); - plaintext_size = va_arg(valist, size_t); - return psa_aead_set_lengths(aead_operation, size, plaintext_size); - case PAL_CRYPTO_AEAD_UPDATE_AD: - aead_operation = va_arg(valist, psa_aead_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_update_ad(aead_operation, buffer, size); - case PAL_CRYPTO_AEAD_UPDATE: - aead_operation = va_arg(valist, psa_aead_operation_t *); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, - ciphertext_size, length); - case PAL_CRYPTO_AEAD_FINISH: - aead_operation = va_arg(valist, psa_aead_operation_t *); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - tag_length = (size_t *)va_arg(valist, size_t*); - return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, - size, tag_length); - case PAL_CRYPTO_AEAD_VERIFY: - aead_operation = va_arg(valist, psa_aead_operation_t *); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); - case PAL_CRYPTO_AEAD_ABORT: - aead_operation = va_arg(valist, psa_aead_operation_t *); - return psa_aead_abort(aead_operation); - case PAL_CRYPTO_MAC_SIGN_SETUP: - mac_operation = va_arg(valist, psa_mac_operation_t*); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_mac_sign_setup(mac_operation, key_handle, alg); - case PAL_CRYPTO_MAC_UPDATE: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_mac_update(mac_operation, buffer, size); - case PAL_CRYPTO_MAC_SIGN_FINISH: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = (size_t *)va_arg(valist, size_t*); - return psa_mac_sign_finish(mac_operation, buffer, size, length); - case PAL_CRYPTO_MAC_VERIFY_SETUP: - mac_operation = va_arg(valist, psa_mac_operation_t*); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_mac_verify_setup(mac_operation, key_handle, alg); - case PAL_CRYPTO_MAC_VERIFY_FINISH: - mac_operation = va_arg(valist, psa_mac_operation_t*); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_mac_verify_finish(mac_operation, buffer, size); - case PAL_CRYPTO_MAC_ABORT: - mac_operation = va_arg(valist, psa_mac_operation_t*); - return psa_mac_abort(mac_operation); - case PAL_CRYPTO_MAC_COMPUTE: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, - ciphertext_size, length); - case PAL_CRYPTO_MAC_VERIFY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t*); - plaintext_size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t*); - ciphertext_size = va_arg(valist, size_t); - return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, - ciphertext_size); - case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); - case PAL_CRYPTO_ASYMMTERIC_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - salt = va_arg(valist, const uint8_t *); - salt_length = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, - ciphertext, ciphertext_size, length); - case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); - case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); - case PAL_CRYPTO_CIPHER_GENERATE_IV: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_generate_iv(cipher_operation, buffer, size, length); - case PAL_CRYPTO_CIPHER_SET_IV: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_cipher_set_iv(cipher_operation, buffer, size); - case PAL_CRYPTO_CIPHER_UPDATE: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_CIPHER_FINISH: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); - case PAL_CRYPTO_CIPHER_ABORT: - cipher_operation = va_arg(valist, psa_cipher_operation_t *); - return psa_cipher_abort(cipher_operation); - case PAL_CRYPTO_CIPHER_ENCRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_CIPHER_DECRYPT: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - plaintext = va_arg(valist, uint8_t *); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_ASYMMTERIC_SIGN: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, - length); - case PAL_CRYPTO_ASYMMTERIC_VERIFY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - alg = va_arg(valist, psa_algorithm_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - ciphertext = va_arg(valist, uint8_t *); - ciphertext_size = va_arg(valist, size_t); - return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, - ciphertext_size); - case PAL_CRYPTO_RAW_KEY_AGREEMENT: - alg = va_arg(valist, psa_algorithm_t); - key_handle = (psa_key_handle_t)va_arg(valist, int); - peer = va_arg(valist, uint8_t*); - peer_length = va_arg(valist, size_t); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - length = va_arg(valist, size_t*); - return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); - case PAL_CRYPTO_COPY_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - attributes = va_arg(valist, psa_key_attributes_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_copy_key(key_handle, attributes, handle); - case PAL_CRYPTO_KEY_DERIVATION_SETUP: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - alg = va_arg(valist, psa_algorithm_t); - return psa_key_derivation_setup(derive_operation, alg); - case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_key_derivation_input_key(derive_operation, step, key_handle); - case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - step = (psa_key_derivation_step_t)va_arg(valist, int); - key_handle = (psa_key_handle_t)va_arg(valist, int); - peer = va_arg(valist, uint8_t*); - peer_length = va_arg(valist, size_t); - return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, - peer_length); - case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - buffer = va_arg(valist, uint8_t*); - size = va_arg(valist, size_t); - return psa_key_derivation_output_bytes(derive_operation, buffer, size); - case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: - attributes = va_arg(valist, psa_key_attributes_t *); - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_key_derivation_output_key(attributes, derive_operation, handle); - case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - size = va_arg(valist, size_t); - return psa_key_derivation_set_capacity(derive_operation, size); - case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - length = va_arg(valist, size_t *); - return psa_key_derivation_get_capacity(derive_operation, length); - case PAL_CRYPTO_KEY_DERIVATION_ABORT: - derive_operation = va_arg(valist, psa_key_derivation_operation_t *); - return psa_key_derivation_abort(derive_operation); - case PAL_CRYPTO_OPEN_KEY: - key_id = va_arg(valist, psa_key_id_t); - handle = (psa_key_handle_t *)va_arg(valist, int *); - return psa_open_key(key_id, handle); - case PAL_CRYPTO_CLOSE_KEY: - key_handle = (psa_key_handle_t)va_arg(valist, int); - return psa_close_key(key_handle); - case PAL_CRYPTO_FREE: - for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) - psa_destroy_key(i); - return 0; - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h deleted file mode 100644 index 671dfa0b..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/crypto/pal_crypto_intf.h +++ /dev/null @@ -1,103 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_CRYPTO_INTF_H_ -#define _PAL_CRYPTO_INTF_H_ - -#include "pal_common.h" - -enum crypto_function_code { - PAL_CRYPTO_INIT = 0x1, - PAL_CRYPTO_GENERATE_RANDOM = 0x2, - PAL_CRYPTO_IMPORT_KEY = 0x3, - PAL_CRYPTO_EXPORT_KEY = 0x4, - PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, - PAL_CRYPTO_DESTROY_KEY = 0x6, - PAL_CRYPTO_HASH_SETUP = 0x7, - PAL_CRYPTO_HASH_UPDATE = 0x8, - PAL_CRYPTO_HASH_VERIFY = 0x9, - PAL_CRYPTO_HASH_FINISH = 0xA, - PAL_CRYPTO_HASH_ABORT = 0xB, - PAL_CRYPTO_GENERATE_KEY = 0xC, - PAL_CRYPTO_AEAD_ENCRYPT = 0xD, - PAL_CRYPTO_AEAD_DECRYPT = 0xE, - PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, - PAL_CRYPTO_MAC_UPDATE = 0x10, - PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, - PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, - PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, - PAL_CRYPTO_MAC_ABORT = 0x14, - PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, - PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, - PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, - PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, - PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, - PAL_CRYPTO_CIPHER_SET_IV = 0x1A, - PAL_CRYPTO_CIPHER_UPDATE = 0x1B, - PAL_CRYPTO_CIPHER_FINISH = 0x1C, - PAL_CRYPTO_CIPHER_ABORT = 0x1D, - PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, - PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, - PAL_CRYPTO_COPY_KEY = 0x20, - PAL_CRYPTO_SET_KEY_TYPE = 0x21, - PAL_CRYPTO_SET_KEY_BITS = 0x22, - PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, - PAL_CRYPTO_GET_KEY_TYPE = 0x24, - PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, - PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, - PAL_CRYPTO_SET_KEY_ID = 0x27, - PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, - PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, - PAL_CRYPTO_GET_KEY_ID = 0x2A, - PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, - PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, - PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, - PAL_CRYPTO_GET_KEY_BITS = 0x2E, - PAL_CRYPTO_HASH_COMPUTE = 0x2F, - PAL_CRYPTO_HASH_COMPARE = 0x30, - PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, - PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, - PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, - PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, - PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, - PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, - PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, - PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, - PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, - PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, - PAL_CRYPTO_HASH_CLONE = 0x3B, - PAL_CRYPTO_MAC_COMPUTE = 0x3C, - PAL_CRYPTO_MAC_VERIFY = 0x3D, - PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, - PAL_CRYPTO_CIPHER_DECRYPT = 0x40, - PAL_CRYPTO_OPEN_KEY = 0x41, - PAL_CRYPTO_CLOSE_KEY = 0x42, - PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, - PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, - PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, - PAL_CRYPTO_AEAD_SET_NONCE = 0x46, - PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, - PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, - PAL_CRYPTO_AEAD_UPDATE = 0x49, - PAL_CRYPTO_AEAD_FINISH = 0x4A, - PAL_CRYPTO_AEAD_VERIFY = 0x4B, - PAL_CRYPTO_AEAD_ABORT = 0x4C, - PAL_CRYPTO_FREE = 0xFE, -}; - -int32_t pal_crypto_function(int type, va_list valist); -#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c deleted file mode 100644 index 488c96b1..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.c +++ /dev/null @@ -1,343 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include "pal_attestation_crypto.h" - -static uint32_t public_key_registered; -static psa_key_handle_t public_key_handle; - -static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, - size_t amount) -{ - return UsefulBuf_Head(buf, amount); -} - -static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) -{ - psa_algorithm_t status; - - switch (cose_hash_alg_id) - { - case COSE_ALG_SHA256_PROPRIETARY: - status = PSA_ALG_SHA_256; - break; - default: - status = PSA_ALG_MD4; - break; - } - - return status; -} - -static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) -{ - switch (cose_sig_alg_id) - { - case COSE_ALGORITHM_ES256: - return COSE_ALG_SHA256_PROPRIETARY; - default: - return INT32_MAX; - } -} - -int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) -{ - psa_algorithm_t psa_alg; - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - - /* Map the algorithm ID */ - psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); - - /* Actually do the hash set up */ - status = psa_hash_setup(psa_hash, psa_alg); - - return status; - -} - -void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, - struct q_useful_buf_c data_to_hash) -{ - if (data_to_hash.ptr == NULL) { - /* No data was passed in to be hashed indicating the mode of use is - * the computation of the size of hash. This mode is hashing is used - * by t_cose when it is requested to compute the size of the signed - * data it might compute, which is in turn used to compute the - * size of a would be token. When computing the size, the size - * like this, there is nothing to do in update() - */ - return; - } - - /* Actually hash the data */ - psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); -} - -int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, - struct q_useful_buf buffer_to_hold_result, - struct q_useful_buf_c *hash_result) -{ - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - - /* Actually finish up the hash */ - status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, - buffer_to_hold_result.len, &(hash_result->len)); - hash_result->ptr = buffer_to_hold_result.ptr; - - return status; - -} - -int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash) -{ - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - - status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); - if (status != PSA_SUCCESS) - goto Done; - - pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); - - status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); - if (status != PSA_SUCCESS) - goto Done; -Done: - return status; -} - -uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, - struct q_useful_buf_c payload) -{ - uint32_t status; - QCBOREncodeContext cbor_encode_ctx; - struct q_useful_buf_c tbs_first_part; - QCBORError qcbor_result; - int32_t hash_alg_id; - UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); - psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; - - /* This builds the CBOR-format to-be-signed bytes */ - QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); - QCBOREncode_OpenArray(&cbor_encode_ctx); - - /* context */ - QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); - - /* body_protected */ - QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); - - /* sign_protected is not used for Sign1 */ - /* external_aad */ - QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); - - /* The short fake payload. */ - QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); - QCBOREncode_CloseArray(&cbor_encode_ctx); - - /* Get the result and convert it to struct q_useful_buf_c representation */ - qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); - if (qcbor_result) - { - /* Mainly means that the protected_headers were too big - * (which should never happen) - */ - status = PAL_ATTEST_ERR_SIGN_STRUCT; - goto Done; - } - - /* Start the hashing */ - hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); - - /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() - * will handle it properly - */ - status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); - if (status) - goto Done; - - /* This is hashing of the first part, all the CBOR - * except the payload. - */ - pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); - - /* Hash the payload, the second part. */ - pal_cose_crypto_hash_update(&psa_hash, payload); - - /* Finish the hash and set up to return it */ - status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); - -Done: - return status; -} - -static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, - size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) -{ - int32_t status = PAL_ATTEST_ERROR; - -#ifdef PLATFORM_OVERRIDE_ATTEST_PK - if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) - return PAL_ATTEST_ERR_SMALL_BUFFER; - - *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); - *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; - memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); - status = PSA_SUCCESS; -#else - status = tfm_initial_attest_get_public_key(public_key_buff, - public_key_buf_size, - public_key_len, - elliptic_curve_type); -#endif - - return status; -} - -static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) -{ - psa_status_t status = PAL_ATTEST_ERROR; - psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; - psa_ecc_curve_t ecc_curve; - psa_key_type_t attest_key_type; - size_t public_key_size; - uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; - -#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) - psa_key_policy_t policy; - - if (!public_key_registered) - { - status = pal_attest_get_public_key(public_key_buff, - sizeof(public_key_buff), - &public_key_size, - &ecc_curve); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - if (ecc_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Set key type for public key */ - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); - - /* Setup the key policy for public key */ - policy = psa_key_policy_init(); - psa_key_policy_set_usage(&policy, usage, key_alg); - - status = psa_allocate_key(&public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - status = psa_set_key_policy(public_key_handle, &policy); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - /* Import the public key */ - status = psa_import_key(public_key_handle, - attest_key_type, - public_key_buff, - public_key_size); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 1; - } - -#elif defined(CRYPTO_VERSION_BETA3) - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - - if (!public_key_registered) - { - status = pal_attest_get_public_key(public_key_buff, - sizeof(public_key_buff), - &public_key_size, - &ecc_curve); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - if (ecc_curve == USHRT_MAX) - return PAL_ATTEST_ERROR; - - /* Set key type for public key */ - attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); - - /* Set the attributes for the public key */ - psa_set_key_type(&attributes, attest_key_type); - psa_set_key_bits(&attributes, public_key_size); - psa_set_key_usage_flags(&attributes, usage); - psa_set_key_algorithm(&attributes, key_alg); - - /* Import the public key */ - status = psa_import_key(&attributes, - public_key_buff, - public_key_size, - &public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 1; - } -#endif - - return status; -} - -static uint32_t pal_destroy_attest_key(void) -{ - psa_status_t status; - - if (!public_key_registered) - return PAL_ATTEST_ERR_KEY_FAIL; - - status = psa_destroy_key(public_key_handle); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - public_key_registered = 0; - - return PAL_ATTEST_SUCCESS; -} - -uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, - struct q_useful_buf_c token_hash, - struct q_useful_buf_c signature) -{ - int32_t status = PAL_ATTEST_ERROR; - psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - - /* Register the attestation public key */ - status = pal_import_attest_key(key_alg); - if (status != PAL_ATTEST_SUCCESS) - return status; - - /* Verify the signature */ - status = psa_asymmetric_verify(public_key_handle, - key_alg, token_hash.ptr, token_hash.len, - signature.ptr, signature.len); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_SIGNATURE_FAIL; - - /* Unregister the attestation public key */ - status = pal_destroy_attest_key(); - if (status != PSA_SUCCESS) - return PAL_ATTEST_ERR_KEY_FAIL; - - return PAL_ATTEST_SUCCESS; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h deleted file mode 100644 index 559a24c1..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_crypto.h +++ /dev/null @@ -1,88 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_CRYPTO_H_ -#define _PAL_ATTESTATION_CRYPTO_H_ - -#include "pal_attestation_eat.h" - -#define ATTEST_PUBLIC_KEY_SLOT 4 -#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) - -typedef struct { - uint8_t *pubx_key; - size_t pubx_key_size; - uint8_t *puby_key; - size_t puby_key_size; -} ecc_key_t; - -struct ecc_public_key_t { - const uint8_t a; - uint8_t public_key[]; /* X-coordinate || Y-coordinate */ -}; - -static const struct ecc_public_key_t attest_public_key = { - /* Constant byte */ - 0x04, - /* X-coordinate */ - {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, - 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, - 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, - 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, - /* Y-coordinate */ - 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, - 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, - 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, - 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, -}; - -static const uint8_t initial_attestation_public_x_key[] = { - 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, - 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, - 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, - 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F -}; - -static const uint8_t initial_attestation_public_y_key[] = { - 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, - 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, - 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, - 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 -}; - -/* Initialize the structure with given public key */ -static const ecc_key_t attest_key = { - (uint8_t *)initial_attestation_public_x_key, - sizeof(initial_attestation_public_x_key), - (uint8_t *)initial_attestation_public_y_key, - sizeof(initial_attestation_public_y_key) -}; - -int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); -void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, - struct q_useful_buf_c data_to_hash); -int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, - struct q_useful_buf buffer_to_hold_result, - struct q_useful_buf_c *hash_result); -int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash); -uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, - struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, - struct q_useful_buf_c payload); -uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, - struct q_useful_buf_c signature); -#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h deleted file mode 100644 index 56d624e3..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_eat.h +++ /dev/null @@ -1,80 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_EAT_H_ -#define _PAL_ATTESTATION_EAT_H_ - -#include "qcbor.h" -#include "pal_common.h" - -#define PAL_ATTEST_MIN_ERROR 30 - -#define COSE_ALGORITHM_ES256 -7 -#define COSE_ALG_SHA256_PROPRIETARY -72000 - -#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB - -#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" - -/* Private value. Intentionally not documented for Doxygen. - * This is the size allocated for the encoded protected headers. It - * needs to be big enough for make_protected_header() to succeed. It - * currently sized for one header with an algorithm ID up to 32 bits - * long -- one byte for the wrapping map, one byte for the label, 5 - * bytes for the ID. If this is made accidentially too small, QCBOR will - * only return an error, and not overrun any buffers. - * - * 9 extra bytes are added, rounding it up to 16 total, in case some - * other protected header is to be added. - */ -#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) - -/** - * This is the size of the first part of the CBOR encoded TBS - * bytes. It is around 20 bytes. See create_tbs_hash(). - */ -#define T_COSE_SIZE_OF_TBS \ - 1 + /* For opening the array */ \ - sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ - 2 + /* Overhead for encoding string */ \ - T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ - 1 /* size of a NULL bstr */ \ - ) -#define NULL_USEFUL_BUF_C NULLUsefulBufC - -enum attestation_error_code { - PAL_ATTEST_SUCCESS = 0, - PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, - PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, - PAL_ATTEST_TOKEN_NOT_SUPPORTED, - PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, - PAL_ATTEST_HASH_LENGTH_MISMATCH, - PAL_ATTEST_HASH_MISMATCH, - PAL_ATTEST_HASH_FAIL, - PAL_ATTEST_HASH_UNSUPPORTED, - PAL_ATTEST_HASH_BUFFER_SIZE, - PAL_ATTEST_ERR_PROTECTED_HEADERS, - PAL_ATTEST_ERR_SIGN_STRUCT, - PAL_ATTEST_ERR_KEY_FAIL, - PAL_ATTEST_ERR_SIGNATURE_FAIL, - PAL_ATTEST_ERR_CBOR_STRUCTURE, - PAL_ATTEST_ERR_SMALL_BUFFER, - PAL_ATTEST_ERROR, -}; - -#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c deleted file mode 100644 index faf3f493..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested attestation function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_attestation_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c deleted file mode 100644 index 83c1ebda..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.c +++ /dev/null @@ -1,56 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_attestation_intf.h" - -/** - @brief - This API will call the requested attestation function - @param - type : function code - valist : variable argument list - @return - error status -**/ -int32_t pal_attestation_function(int type, va_list valist) -{ - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; - - switch (type) - { - case PAL_INITIAL_ATTEST_GET_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - token_buffer_size = va_arg(valist, size_t); - token_size = va_arg(valist, size_t*); - return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, - token_size); - case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: - challenge_size = va_arg(valist, size_t); - token_size = va_arg(valist, size_t*); - return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h deleted file mode 100644 index 3ab7ebb4..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/initial_attestation/pal_attestation_intf.h +++ /dev/null @@ -1,32 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_ATTESTATION_INTF_H_ -#define _PAL_ATTESTATION_INTF_H_ - -#include "pal_attestation_crypto.h" - -enum attestation_function_code { - PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, - PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, - PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, - PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, - PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, -}; - -int32_t pal_attestation_function(int type, va_list valist); -#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c deleted file mode 100644 index 133cfa9d..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested internal trusted storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_its_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c deleted file mode 100644 index abfdc5d6..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c +++ /dev/null @@ -1,62 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_internal_trusted_storage_intf.h" - -/** - @brief - This API will call the requested internal trusted storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_its_function(int type, va_list valist) -{ - psa_storage_uid_t uid; - uint32_t data_size, offset; - const void *p_write_data; - void *p_read_data; - size_t *p_data_length; - psa_storage_create_flags_t its_create_flags; - struct psa_storage_info_t *its_p_info; - - switch (type) - { - case PAL_ITS_SET: - uid = va_arg(valist, psa_storage_uid_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - its_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_its_set(uid, data_size, p_write_data, its_create_flags); - case PAL_ITS_GET: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_read_data = va_arg(valist, void*); - p_data_length = va_arg(valist, size_t*); - return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); - case PAL_ITS_GET_INFO: - uid = va_arg(valist, psa_storage_uid_t); - its_p_info = va_arg(valist, struct psa_storage_info_t*); - return psa_its_get_info(uid, its_p_info); - case PAL_ITS_REMOVE: - uid = va_arg(valist, psa_storage_uid_t); - return psa_its_remove(uid); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h deleted file mode 100644 index 6db6aac6..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h +++ /dev/null @@ -1,31 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ -#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ - -#include "pal_common.h" - -enum its_function_code { - PAL_ITS_SET = 0x1, - PAL_ITS_GET = 0x2, - PAL_ITS_GET_INFO = 0x3, - PAL_ITS_REMOVE = 0x4, -}; - -uint32_t pal_its_function(int type, va_list valist); -#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c deleted file mode 100644 index ee9b13da..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_empty_intf.c +++ /dev/null @@ -1,30 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#include -#include "pal_common.h" - -/** - @brief - This API will call the requested protected storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_ps_function(int type, va_list valist) -{ - return PAL_STATUS_ERROR; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c deleted file mode 100644 index 0dd07c57..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.c +++ /dev/null @@ -1,77 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - - -#include "pal_protected_storage_intf.h" - -/** - @brief - This API will call the requested protected storage function - @param - type : function code - valist : variable argument list - @return - error status -**/ -uint32_t pal_ps_function(int type, va_list valist) -{ - psa_storage_uid_t uid; - uint32_t data_size, size, offset; - const void *p_write_data; - void *p_read_data; - size_t *p_data_length; - psa_storage_create_flags_t ps_create_flags; - struct psa_storage_info_t *ps_p_info; - - switch (type) - { - case PAL_PS_SET: - uid = va_arg(valist, psa_storage_uid_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - ps_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); - case PAL_PS_GET: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_read_data = va_arg(valist, void*); - p_data_length = va_arg(valist, size_t*); - return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); - case PAL_PS_GET_INFO: - uid = va_arg(valist, psa_storage_uid_t); - ps_p_info = va_arg(valist, struct psa_storage_info_t*); - return psa_ps_get_info(uid, ps_p_info); - case PAL_PS_REMOVE: - uid = va_arg(valist, psa_storage_uid_t); - return psa_ps_remove(uid); - case PAL_PS_CREATE: - uid = va_arg(valist, psa_storage_uid_t); - size = va_arg(valist, uint32_t); - ps_create_flags = va_arg(valist, psa_storage_create_flags_t); - return psa_ps_create(uid, size, ps_create_flags); - case PAL_PS_SET_EXTENDED: - uid = va_arg(valist, psa_storage_uid_t); - offset = va_arg(valist, uint32_t); - data_size = va_arg(valist, uint32_t); - p_write_data = va_arg(valist, const void*); - return psa_ps_set_extended(uid, offset, data_size, p_write_data); - case PAL_PS_GET_SUPPORT: - return psa_ps_get_support(); - default: - return PAL_STATUS_UNSUPPORTED_FUNC; - } - - return PAL_STATUS_UNSUPPORTED_FUNC; -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h deleted file mode 100644 index a338cdf7..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/nspe/protected_storage/pal_protected_storage_intf.h +++ /dev/null @@ -1,34 +0,0 @@ -/** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -**/ - -#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ -#define _PAL_PROTECTED_STORAGE_INTF_H_ - -#include "pal_common.h" - -enum ps_function_code { - PAL_PS_SET = 0x1, - PAL_PS_GET = 0x2, - PAL_PS_GET_INFO = 0x3, - PAL_PS_REMOVE = 0x4, - PAL_PS_CREATE = 0x5, - PAL_PS_SET_EXTENDED = 0x6, - PAL_PS_GET_SUPPORT = 0x7, -}; - -uint32_t pal_ps_function(int type, va_list valist); -#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c deleted file mode 100644 index fd307839..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.c +++ /dev/null @@ -1,132 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#include "pal_driver_intf.h" - -/** - @brief - This function initializes the UART - @param - uart base addr - @return - void -**/ -void pal_uart_init(uint32_t uart_base_addr) -{ - pal_uart_cmsdk_init(uart_base_addr); -} - -/** - @brief - This function parses the input string and writes bytes into UART TX FIFO - @param - str : Input String - - data : Value for format specifier -**/ - -void pal_print(char *str, int32_t data) -{ - pal_cmsdk_print(str,data); - -} - - -/** - @brief - Writes into given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_write(base, offset, buffer, size); -} - -/** - @brief - Reads from given non-volatile address. - @param - base : Base address of nvmem - offset : Offset - buffer : Pointer to source address - size : Number of bytes - @return - 1/0 -**/ -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) -{ - return nvmem_read(base, offset, buffer, size); -} - - -/** - @brief - Initializes an hardware watchdog timer - @param - base_addr : Base address of the watchdog module - - time_us : Time in micro seconds - - timer_tick_us : Number of ticks per micro second - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) -{ - return(pal_wd_cmsdk_init(base_addr,time_us, timer_tick_us)); - -} - -/** - @brief - Enables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_enable(addr_t base_addr) -{ - return(pal_wd_cmsdk_enable(base_addr)); -} - -/** - @brief - Disables a hardware watchdog timer - @param - base_addr : Base address of the watchdog module - @return - SUCCESS/FAILURE -**/ -int pal_wd_timer_disable(addr_t base_addr) -{ - return (pal_wd_cmsdk_disable(base_addr)); -} - -/** - @brief - Checks whether hardware watchdog timer is enabled - @param - base_addr : Base address of the watchdog module - @return - Enabled : 1, Disabled : 0 -**/ -int pal_wd_timer_is_enabled(addr_t base_addr) -{ - return (pal_wd_cmsdk_is_enabled(base_addr)); -} - -/** - @brief - Trigger interrupt for irq signal assigned to driver partition - before return to caller. - @param - void - @return - void -**/ -void pal_generate_interrupt(void) -{ - pal_uart_cmsdk_generate_irq(); -} - -/** - @brief - Disable interrupt that was generated using pal_generate_interrupt API. - @param - void - @return - void -**/ -void pal_disable_interrupt(void) -{ - pal_uart_cmsdk_disable_irq(); -} diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h deleted file mode 100644 index cef34ca8..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/spe/pal_driver_intf.h +++ /dev/null @@ -1,35 +0,0 @@ - /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. - * SPDX-License-Identifier : Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - **/ - -#ifndef _PAL_DRIVER_INTF_H_ -#define _PAL_DRIVER_INTF_H_ - -#include "pal_uart.h" -#include "pal_nvmem.h" -#include "pal_wd_cmsdk.h" - -void pal_uart_init(uint32_t uart_base_addr); -void pal_print(char *str, int32_t data); -int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); -int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); -int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); -int pal_wd_timer_enable(addr_t base_addr); -int pal_wd_timer_disable(addr_t base_addr); -int pal_wd_timer_is_enabled(addr_t base_addr); -void pal_generate_interrupt(void); -void pal_disable_interrupt(void); -#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cfg b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cfg deleted file mode 100644 index 9a407b80..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cfg +++ /dev/null @@ -1,84 +0,0 @@ -///** @file -// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -// * SPDX-License-Identifier : Apache-2.0 -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -//**/ - -// UART device info -uart.num=1; -uart.0.base = 0x40004000; -uart.0.size = 0xFFF; -uart.0.intr_id = 0xFF; -uart.0.permission = TYPE_READ_WRITE; - -// Watchdog device info -watchdog.num = 1; -watchdog.0.base = 0x40008000; -watchdog.0.size = 0xFFF; -watchdog.0.intr_id = 0xFF; -watchdog.0.permission = TYPE_READ_WRITE; -watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) -watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 -watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 - -// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH -nvmem.num =1; -nvmem.0.start = 0x2002F000; -nvmem.0.end = 0x2002F3FF; -nvmem.0.permission = TYPE_READ_WRITE; - -// Miscellaneous - Test scatter info -dut.num = 1; - -// Start address of 12KB NS memory for test ELF -dut.0.ns_test_addr = 0x2007F000; - -// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. -// Size of combine_test_binary = Summation of size of each test ELF file. -dut.0.ns_start_addr_of_combine_test_binary = 0x2003F000; - -// Is combine_test_binary available in RAM? -dut.0.combine_test_binary_in_ram = AVAILABLE; - - -// ################################################################### -// Following Target configuration parameters are required for IPC tests -// only. Avoid updating them if you are running dev_apis. -// ################################################################### - -// Level of Isolation -dut.0.implemented_psa_firmware_isolation_level = LEVEL1; - -// Are dynamic memory allocation functions available to secure partition? -dut.0.sp_heap_mem_supp = AVAILABLE; - -// Assign free memory range for isolation testing. Choose the addresses -// for these memory regions such that it follows below condition: -// nspe_mmio.0.start < server_partition_mmio.0.start < driver_partition_mmio.0.start. -nspe_mmio.num=1; -nspe_mmio.0.start = 0x200AF000; -nspe_mmio.0.end = 0x200AF01F; -nspe_mmio.0.permission = TYPE_READ_WRITE; - -server_partition_mmio.num=1; -server_partition_mmio.0.start = 0x200AF020; -server_partition_mmio.0.end = 0x200AF03F; -server_partition_mmio.0.permission = TYPE_READ_WRITE; - -driver_partition_mmio.num=1; -driver_partition_mmio.0.start = 0x200AF040; -driver_partition_mmio.0.end = 0x200AF05F; -driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake b/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake deleted file mode 100644 index db9a4fa5..00000000 --- a/api-tests/platform/targets/tgt_ff_mbedos_fvp_mps2_m4/target.cmake +++ /dev/null @@ -1,105 +0,0 @@ -#/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. -# * SPDX-License-Identifier : Apache-2.0 -# * -# * Licensed under the Apache License, Version 2.0 (the "License"); -# * you may not use this file except in compliance with the License. -# * You may obtain a copy of the License at -# * -# * http://www.apache.org/licenses/LICENSE-2.0 -# * -# * Unless required by applicable law or agreed to in writing, software -# * distributed under the License is distributed on an "AS IS" BASIS, -# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# * See the License for the specific language governing permissions and -# * limitations under the License. -#**/ - -# PAL C source files part of NSPE library -list(APPEND PAL_SRC_C_NSPE ) - -# PAL ASM source files part of NSPE library -list(APPEND PAL_SRC_ASM_NSPE ) - -# PAL C source files part of SPE library - driver partition -list(APPEND PAL_SRC_C_DRIVER_SP ) - -# PAL ASM source files part of SPE library - driver partition -list(APPEND PAL_SRC_ASM_DRIVER_SP ) - - -# Listing all the sources required for given target -if(${SUITE} STREQUAL "IPC") - list(APPEND PAL_SRC_C_NSPE - # driver functionalities are implemented as RoT-services - # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c - ) - list(APPEND PAL_SRC_C_DRIVER_SP - # Driver files will be compiled as part of driver partition - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c - ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c - ) -else() - list(APPEND PAL_SRC_C_NSPE - # driver files will be compiled as part of NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c - ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk/pal_uart.c - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c - ) -endif() -if(${SUITE} STREQUAL "CRYPTO") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c - ) -endif() -if(${SUITE} STREQUAL "PROTECTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c - ) -endif() -if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c - ) -endif() -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") - list(APPEND PAL_SRC_C_NSPE - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c - ) -endif() - -# Create NSPE library -add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) - -# PSA Include directories -foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) - target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) -endforeach() - -list(APPEND PAL_DRIVER_INCLUDE_PATHS - ${PSA_ROOT_DIR}/platform/drivers/nvmem - ${PSA_ROOT_DIR}/platform/drivers/uart/cmsdk - ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk -) - -target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE - ${PAL_DRIVER_INCLUDE_PATHS} - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage - ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation -) - -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") -target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE - ${PSA_QCBOR_INCLUDE_PATH} -) -endif() From 03e358ef8cb7c4776880c874d2a29ecd8facc506 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Thu, 9 Jan 2020 19:27:20 +0530 Subject: [PATCH 44/54] Platform: Make manifest files common for all targets And remove unnecessary sub-dir such as common/ and ipc/ This would make easy integration of FF tests with TFM. Change-Id: I6eb903ae16136b9ce54430e03102524bc0afc83f Signed-off-by: Jaykumar Pitambarbhai Patel --- api-tests/docs/porting_guide_ff.md | 4 +- api-tests/ff/README.md | 14 ++-- .../ff/partition/{ipc => }/client_partition.c | 0 .../ff/partition/{ipc => }/client_partition.h | 0 .../partition/{common => }/driver_partition.c | 0 .../ff/partition/{ipc => }/server_partition.c | 0 .../ff/partition/{ipc => }/server_partition.h | 0 .../client_partition_psa.json | 0 .../driver_partition_psa.json | 16 +--- .../server_partition_psa.json | 4 +- .../common/driver_partition_psa.json | 72 ----------------- .../manifests/ipc/client_partition_psa.json | 28 ------- .../manifests/ipc/server_partition_psa.json | 70 ---------------- api-tests/tools/scripts/manifest_update.py | 79 +++---------------- api-tests/val/val_spe.cmake | 14 ++-- 15 files changed, 35 insertions(+), 266 deletions(-) rename api-tests/ff/partition/{ipc => }/client_partition.c (100%) rename api-tests/ff/partition/{ipc => }/client_partition.h (100%) rename api-tests/ff/partition/{common => }/driver_partition.c (100%) rename api-tests/ff/partition/{ipc => }/server_partition.c (100%) rename api-tests/ff/partition/{ipc => }/server_partition.h (100%) rename api-tests/platform/{targets/tgt_ff_tfm_an521/manifests/ipc => manifests}/client_partition_psa.json (100%) rename api-tests/platform/{targets/tgt_ff_tfm_an521/manifests/common => manifests}/driver_partition_psa.json (79%) rename api-tests/platform/{targets/tgt_ff_tfm_an521/manifests/ipc => manifests}/server_partition_psa.json (94%) delete mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json delete mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json diff --git a/api-tests/docs/porting_guide_ff.md b/api-tests/docs/porting_guide_ff.md index 4e5f6123..a224d5c3 100644 --- a/api-tests/docs/porting_guide_ff.md +++ b/api-tests/docs/porting_guide_ff.md @@ -36,7 +36,7 @@ An example input configuration file is as shown. 1. Create a new directory in **platform/targets/**. For reference, see the existing platform tgt_ff_tfm_an521 directory. 2. Execute `cp -rf platform/targets/tgt_ff_tfm_an521/ platform/targets//`. 3. Update **platform/targets//target.cfg** with your target platform details. Refer to **val/common/val_target.h** for structure details. - 4. Update the platform information available in manifest files located in **platform/targets//manifests/** directory with your platform information. The platform details must match the device details provided in the target.cfg file. + 4. Update the platform information available in manifest files located in **platform/manifests/** directory with your platform information. The platform details must match the device details provided in the target.cfg file. 5. Update **platform/targets//target.cmake** appropriately to select the correct instances of PAL files for compilation. 6. Refer to the **List of PAL APIs** section to view the list of PAL APIs that must be ported for your target platform. These API definitions are available in **nspe//pal_\*\_intf.c** and **spe/pal_\*\_intf.c** files. These APIs are written for **tgt_ff_tfm_an521** platform. You can reuse the code if it works for your platform. Otherwise, you must port them for your platform-specific peripherals. @@ -71,4 +71,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index deb09a83..75d11971 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -41,13 +41,15 @@ To build the test suite for your target platform, perform the following steps. 1. Execute `cd api-tests`. -2. Using your Secure partition build tool, parse the following test suite partition manifest files and generate manifest output files. The manifest parsing tool must be compliant with the manifest rules defined in the PSA FF specification.
    +2. Execute `python tools/scripts/manifest_update.py` to remove heap_size field from PSA test suite manifest files if your platform doesn't support the dynamic memory functions for the secure partition. Otherwise, skip this step. + +3. Using your Secure partition build tool, parse the following test suite partition manifest files and generate manifest output files. The manifest parsing tool must be compliant with the manifest rules defined in the PSA FF specification.

    The test suite manifests to be parsed are:
    - - **platform/targets//manifests/common/driver_partition_psa.json** - - **platform/targets//manifests/ipc/client_partition_psa.json** - - **platform/targets//manifests/ipc/server_partition_psa.json** + - **platform/manifests/driver_partition_psa.json** + - **platform/manifests/client_partition_psa.json** + - **platform/manifests/server_partition_psa.json** -3. Compile the tests as shown below.
    +4. Compile the tests as shown below.
    ``` cd api-tests mkdir @@ -131,4 +133,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/ff/partition/ipc/client_partition.c b/api-tests/ff/partition/client_partition.c similarity index 100% rename from api-tests/ff/partition/ipc/client_partition.c rename to api-tests/ff/partition/client_partition.c diff --git a/api-tests/ff/partition/ipc/client_partition.h b/api-tests/ff/partition/client_partition.h similarity index 100% rename from api-tests/ff/partition/ipc/client_partition.h rename to api-tests/ff/partition/client_partition.h diff --git a/api-tests/ff/partition/common/driver_partition.c b/api-tests/ff/partition/driver_partition.c similarity index 100% rename from api-tests/ff/partition/common/driver_partition.c rename to api-tests/ff/partition/driver_partition.c diff --git a/api-tests/ff/partition/ipc/server_partition.c b/api-tests/ff/partition/server_partition.c similarity index 100% rename from api-tests/ff/partition/ipc/server_partition.c rename to api-tests/ff/partition/server_partition.c diff --git a/api-tests/ff/partition/ipc/server_partition.h b/api-tests/ff/partition/server_partition.h similarity index 100% rename from api-tests/ff/partition/ipc/server_partition.h rename to api-tests/ff/partition/server_partition.h diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json b/api-tests/platform/manifests/client_partition_psa.json similarity index 100% rename from api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/client_partition_psa.json rename to api-tests/platform/manifests/client_partition_psa.json diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json b/api-tests/platform/manifests/driver_partition_psa.json similarity index 79% rename from api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json rename to api-tests/platform/manifests/driver_partition_psa.json index 7bc66491..2fa4550f 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/common/driver_partition_psa.json +++ b/api-tests/platform/manifests/driver_partition_psa.json @@ -38,27 +38,19 @@ ], "mmio_regions" : [ { - "name": "UART_REGION", - "base": "0x50202000", - "size": "0x1000", + "name": "TEST_UART_REGION", "permission": "READ-WRITE" }, { - "name": "WATCHDOG_REGION", - "base": "0x50081000", - "size": "0x1000", + "name": "TEST_WATCHDOG_REGION", "permission": "READ-WRITE" }, { - "name": "NVMEM_REGION", - "base": "0x102FFC00", - "size": "0x400", + "name": "TEST_NVMEM_REGION", "permission": "READ-WRITE" }, { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x10300F20", - "size": "0x20", + "name": "TEST_DRIVER_PARTITION_MMIO", "permission": "READ-WRITE" } ], diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json b/api-tests/platform/manifests/server_partition_psa.json similarity index 94% rename from api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json rename to api-tests/platform/manifests/server_partition_psa.json index 907aaa25..0608200d 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/manifests/ipc/server_partition_psa.json +++ b/api-tests/platform/manifests/server_partition_psa.json @@ -61,9 +61,7 @@ ], "mmio_regions" : [ { - "name": "SERVER_PARTITION_MMIO", - "base": "0x10300F00", - "size": "0x20", + "name": "TEST_SERVER_PARTITION_MMIO", "permission": "READ-WRITE" } ] diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json deleted file mode 100644 index 6a8adf92..00000000 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/common/driver_partition_psa.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "DRIVER_PARTITION", - "type": "PSA-ROT", - "priority": "NORMAL", - "description": "Implements device services such print, flash read/write,. etc.", - "entry_point": "driver_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "DRIVER_UART", - "sid": "0x0000FC01", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - }, - { - "name": "DRIVER_WATCHDOG", - "sid": "0x0000FC02", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - }, - { - "name": "DRIVER_NVMEM", - "sid": "0x0000FC03", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - }, - { - "name": "DRIVER_TEST", - "sid": "0x0000FC04", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "UART_REGION", - "base": "0x40102000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "WATCHDOG_REGION", - "base": "0x50081000", - "size": "0x1000", - "permission": "READ-WRITE" - }, - { - "name": "NVMEM_REGION", - "base": "0x30017C00", - "size": "0x400", - "permission": "READ-WRITE" - }, - { - "name": "DRIVER_PARTITION_MMIO", - "base": "0x10200F20", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "irqs": [ - { - "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", - "signal": "DRIVER_UART_INTR_SIG", - "source": "UARTTX_IRQ" - } - ] -} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json deleted file mode 100644 index c0fb05bc..00000000 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/client_partition_psa.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "CLIENT_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Client partition executing client test func from SPE", - "entry_point": "client_main", - "stack_size": "0x400", - "services": [{ - "name": "CLIENT_TEST_DISPATCHER", - "sid": "0x0000FA01", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - } - ], - "dependencies": [ - "DRIVER_UART", - "DRIVER_NVMEM", - "DRIVER_TEST", - "SERVER_TEST_DISPATCHER", - "SERVER_UNSPECIFED_VERSION", - "SERVER_STRICT_VERSION", - "SERVER_RELAX_VERSION", - "SERVER_SECURE_CONNECT_ONLY", - "SERVER_CONNECTION_DROP" - ] -} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json b/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json deleted file mode 100644 index 5a1955ba..00000000 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/manifests/ipc/server_partition_psa.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "psa_framework_version": 1.0, - "name": "SERVER_PARTITION", - "type": "APPLICATION-ROT", - "priority": "NORMAL", - "description": "Server partition executing server test func", - "entry_point": "server_main", - "stack_size": "0x400", - "heap_size": "0x100", - "services": [{ - "name": "SERVER_TEST_DISPATCHER", - "sid": "0x0000FB01", - "non_secure_clients": true, - "version": 1, - "version_policy": "RELAXED" - }, - { - "name": "SERVER_SECURE_CONNECT_ONLY", - "sid": "0x0000FB02", - "non_secure_clients": false, - "version": 2, - "version_policy": "RELAXED" - }, - { - "name": "SERVER_STRICT_VERSION", - "sid": "0x0000FB03", - "non_secure_clients": true, - "version": 2, - "version_policy": "STRICT" - }, - { - "name": "SERVER_UNSPECIFED_VERSION", - "sid": "0x0000FB04", - "non_secure_clients": true - }, - { - "name": "SERVER_RELAX_VERSION", - "sid": "0x0000FB05", - "non_secure_clients": true, - "version": 2, - "version_policy": "RELAXED" - }, - { - "name": "SERVER_UNEXTERN", - "sid": "0x0000FB06", - "non_secure_clients": true, - "version": 2, - "version_policy": "RELAXED" - }, - { - "name": "SERVER_CONNECTION_DROP", - "sid": "0x0000FB07", - "non_secure_clients": true, - "version": 2, - "version_policy": "RELAXED" - } - ], - "mmio_regions" : [ - { - "name": "SERVER_PARTITION_MMIO", - "base": "0x10200F00", - "size": "0x20", - "permission": "READ-WRITE" - } - ], - "dependencies": [ - "DRIVER_UART", - "DRIVER_NVMEM" - ] -} diff --git a/api-tests/tools/scripts/manifest_update.py b/api-tests/tools/scripts/manifest_update.py index 65c693e5..21447ae3 100644 --- a/api-tests/tools/scripts/manifest_update.py +++ b/api-tests/tools/scripts/manifest_update.py @@ -1,6 +1,6 @@ #!/usr/bin/python #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,64 +21,22 @@ import shutil from argparse import ArgumentParser -driver_linker_pattern = \ -' ],\n'\ -' "linker_pattern": {\n'\ -' "library_list": [\n'\ -' "*driver_partition.a"\n'\ -' ]\n'\ -' }\n' -client_linker_pattern = \ -' ],\n'\ -' "linker_pattern": {\n'\ -' "library_list": [\n'\ -' "*client_partition.a"\n'\ -' ]\n'\ -' }\n' -server_linker_pattern = \ -' ],\n'\ -' "linker_pattern": {\n'\ -' "library_list": [\n'\ -' "*server_partition.a"\n'\ -' ]\n'\ -' }\n' - -def update_manifest_file(manifest_dir_path, sp_heap_mem_supp, add_linker_pattern): +def update_manifest_file(manifest_dir_path): """ - Remove heap_size field from manifest if dynamic memory function is not supported. - - TFM needs special linker pattern field(other than PSA FF defined field) - in manifest to place partition code/data at appropriate places in the memory. - This routine appends these linker pattern to the available manifest files. """ - linker_pattern_present = 0 - driver_partition_manifest = manifest_dir_path+"/common/driver_partition_psa.json" - client_partition_manifest = manifest_dir_path+"/ipc/client_partition_psa.json" - server_partition_manifest = manifest_dir_path+"/ipc/server_partition_psa.json" - file_pattern_dict = {driver_partition_manifest:driver_linker_pattern, - client_partition_manifest:client_linker_pattern, - server_partition_manifest:server_linker_pattern} + file_list = [manifest_dir_path+"/driver_partition_psa.json", + manifest_dir_path+"/client_partition_psa.json", + manifest_dir_path+"/server_partition_psa.json"] - for file,pattern in file_pattern_dict.items(): + for file in file_list: print("Updating "+file+" manifest file") f_i = open(file, 'r') f_o = open(file+".update", 'w') f1 = f_i.readlines() for line in f1: - if (add_linker_pattern == "1"): - if (linker_pattern_present == 1): - f_o.write(line) - continue - if (re.findall('linker_pattern', line)): - linker_pattern_present = 1 - f_o.write(line) - continue - if (re.findall(']$', line)): - f_o.write(pattern) - continue - - if (sp_heap_mem_supp == "0"): - if (re.findall('heap_size', line)): - continue + if (re.findall('heap_size', line)): + continue f_o.write(line) shutil.move(file+".update", file) @@ -86,26 +44,15 @@ def argparse(): """ Parse the command line argument """ - parser = ArgumentParser(description='Utility to update manifest files') - parser.add_argument('--manifest_dir_path', help="Absolute path for manifest directory", - type=str, action="store", dest='manifest_dir_path') - parser.add_argument('--sp_heap_mem_supp', - help="Pass 1 if platform supports dynamic memory functions \ - for secure partition otherwise 0. Default is 1. Passing 0 \ - will remove the heap_size field from the manifest", - type=str, action="store", dest='sp_heap_mem_supp') - parser.add_argument('--add_linker_pattern', help="Pass 1 if platform is Trusted Firmware-M otherwise 0.\ - This updates the manifest files with TFM required linker pattern", - type=str, action="store", dest='add_linker_pattern') + parser = ArgumentParser(description='Utility to remove heap_size field from manifest files. \ + Heap_size field is optional feature and use this script to remove it\ + when dynamic memory function are not available to secure partition.') options = parser.parse_args() - if (len(sys.argv) != 4): - print("\n Invaild number of arguments. Refer help message.") - sys.exit(1) - return options #main code starts here if __name__ == "__main__": + manifest_dir_path = "platform/manifests" options = argparse() - update_manifest_file(options.manifest_dir_path, options.sp_heap_mem_supp, options.add_linker_pattern) + update_manifest_file(manifest_dir_path) diff --git a/api-tests/val/val_spe.cmake b/api-tests/val/val_spe.cmake index c921d8a1..be1e5504 100644 --- a/api-tests/val/val_spe.cmake +++ b/api-tests/val/val_spe.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,16 +22,16 @@ list(APPEND VAL_SRC_C_SPE # Listing common sources from partition list(APPEND PARTITION_COMMON_SRC_C_SPE - ${PSA_ROOT_DIR}/ff/partition/common/driver_partition.c + ${PSA_ROOT_DIR}/ff/partition/driver_partition.c ) # Listing sources from partition for client list(APPEND PARTITION_IPC_CLIENT_SRC_C_SPE - ${PSA_ROOT_DIR}/ff/partition/ipc/client_partition.c + ${PSA_ROOT_DIR}/ff/partition/client_partition.c ) # Listing sources from partition for server list(APPEND PARTITION_IPC_SERVER_SRC_C_SPE - ${PSA_ROOT_DIR}/ff/partition/ipc/server_partition.c + ${PSA_ROOT_DIR}/ff/partition/server_partition.c ) foreach(src_file ${SUITE_CC_SOURCE_SPE}) @@ -57,7 +57,7 @@ target_include_directories(${PSA_TARGET_DRIVER_PARTITION_LIB} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${PSA_ROOT_DIR}/val/common ${PSA_ROOT_DIR}/val/spe - ${PSA_ROOT_DIR}/ff/partition/common + ${PSA_ROOT_DIR}/ff/partition ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto ) @@ -74,7 +74,7 @@ target_include_directories(${PSA_TARGET_CLIENT_PARTITION_LIB} PRIVATE ${PSA_ROOT_DIR}/val/spe ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto - ${PSA_ROOT_DIR}/ff/partition/ipc + ${PSA_ROOT_DIR}/ff/partition ) target_include_directories(${PSA_TARGET_SERVER_PARTITION_LIB} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} @@ -82,7 +82,7 @@ target_include_directories(${PSA_TARGET_SERVER_PARTITION_LIB} PRIVATE ${PSA_ROOT_DIR}/val/spe ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto - ${PSA_ROOT_DIR}/ff/partition/ipc + ${PSA_ROOT_DIR}/ff/partition ) # PSA Include directories From 92e30cf7521c48a698b0d5e8b8a5bcf03184b25d Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Thu, 23 Jan 2020 16:33:11 +0530 Subject: [PATCH 45/54] FF: Remove infinite loop for psa_wait(..., PSA_POLL) This type of polling can hang the system if secure firmware doesn't have the some sort of time-slicing scheduling policy for secure partitions. Hence replacing the loop with PSA_BLOCK wait. Signed-off-by: Jaykumar Pitambarbhai Patel --- api-tests/ff/ipc/test_i002/test_i002.c | 5 ++- api-tests/ff/ipc/test_i002/test_supp_i002.c | 44 +++++++++++---------- api-tests/ff/ipc/test_i058/test_i058.c | 4 +- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/api-tests/ff/ipc/test_i002/test_i002.c b/api-tests/ff/ipc/test_i002/test_i002.c index 84630112..4177fe7d 100644 --- a/api-tests/ff/ipc/test_i002/test_i002.c +++ b/api-tests/ff/ipc/test_i002/test_i002.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -147,6 +147,7 @@ int32_t psa_call_with_null_msg(int32_t expected_status) } status_of_call = psa->call(handle, PSA_IPC_CALL, NULL, 0, NULL, 0); + /* Compare status code returned with expected status code */ if (status_of_call != expected_status) { @@ -172,7 +173,7 @@ int32_t client_test_psa_call_with_allowed_status_code(caller_security_t caller) if (VAL_ERROR(status)) { val->print(PRINT_ERROR, - "psa_call failed for status code=0x%x\n", expected_status_code[i]); + "\tpsa_call failed for status code=0x%x\n", expected_status_code[i]); return status; } } diff --git a/api-tests/ff/ipc/test_i002/test_supp_i002.c b/api-tests/ff/ipc/test_i002/test_supp_i002.c index 716b6b26..6e4ab00d 100644 --- a/api-tests/ff/ipc/test_i002/test_supp_i002.c +++ b/api-tests/ff/ipc/test_i002/test_supp_i002.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -107,6 +107,7 @@ int32_t server_test_accept_and_close_connect(void) /* Sanity check - if the message type is PSA_IPC_DISCONNECT then the status code is ignored.*/ psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); + /* Debug print for sanity check */ val->err_check_set(TEST_CHECKPOINT_NUM(205), status); return status; @@ -295,7 +296,7 @@ int32_t server_test_spm_concurrent_connect_limit(void) if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, - "psa_wait returned with invalid signal value = 0x%x\n", signals); + "\tpsa_wait returned with invalid signal value = 0x%x\n", signals); return VAL_STATUS_ERROR; } @@ -341,13 +342,13 @@ int32_t server_test_psa_block_behave(void) { wait: /* PSA_BLOCK ored with 0xFF to check timeout[30:0]=RES is ignored by implementation */ - signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); + signals = psa->wait(PSA_WAIT_ANY, PSA_BLOCK | 0xff); - /* When MODE is one(PSA_BLOCK), the psa_wait must return non-zero signal value */ + /* When MODE is PSA_BLOCK, the psa_wait must return non-zero signal value */ if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, - "psa_wait returned with invalid signal value = 0x%x\n", signals); + "\tpsa_wait returned with invalid signal value = 0x%x\n", signals); return VAL_STATUS_ERROR; } else @@ -369,7 +370,7 @@ int32_t server_test_psa_block_behave(void) int32_t server_test_psa_poll_behave(void) { - psa_signal_t signals = 0, signals_temp = 0; + psa_signal_t signals_block = 0, signals_poll = 0; psa_msg_t msg = {0}; int count = 0; @@ -378,29 +379,30 @@ int32_t server_test_psa_poll_behave(void) /* Debug print */ val->err_check_set(TEST_CHECKPOINT_NUM(219), VAL_STATUS_SUCCESS); - /* Loop to receive client request */ - while (signals == 0) - { - signals = psa->wait(PSA_WAIT_ANY, PSA_POLL); - } + /* Wait for client request */ + signals_block = psa->wait(PSA_WAIT_ANY, PSA_BLOCK); + + /* Debug print */ + val->err_check_set(TEST_CHECKPOINT_NUM(220), VAL_STATUS_SUCCESS); /* - * When MODE is zero(PSA_POLL), the psa_wait will return immediately with the current - * signal state, which can be zero if no signals are active. Exepecting following call to - * return immediately as none of client is making request. + * When MODE is PSA_POLL, the psa_wait will return immediately with + * the current signal state. Expecting following call to return immediately + * with signal_poll = signal_block. */ - signals_temp = psa->wait(PSA_WAIT_ANY, PSA_POLL); + signals_poll = psa->wait(PSA_WAIT_ANY, PSA_POLL); - if (signals_temp == 0) + if (signals_poll != signals_block) { - val->print(PRINT_ERROR, - "psa_wait returned with invalid signals_temp = 0x%x\n", signals_temp); + val->print(PRINT_ERROR, "\tSignal value mismatch\n", 0); + val->print(PRINT_ERROR, "\tsignals_poll = 0x%x\n", signals_poll); + val->print(PRINT_ERROR, "\tsignals_block = 0x%x\n", signals_block); return VAL_STATUS_ERROR; } - else if ((signals & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) + else if ((signals_block & SERVER_UNSPECIFED_VERSION_SIGNAL) == 0) { val->print(PRINT_ERROR, - "psa_wait returned with invalid signal value = 0x%x\n", signals); + "\tpsa_wait returned with invalid signal_block = 0x%x\n", signals_block); return VAL_STATUS_ERROR; } else @@ -409,7 +411,7 @@ int32_t server_test_psa_poll_behave(void) continue; psa->reply(msg.handle, PSA_ERROR_CONNECTION_REFUSED); count++; - signals = 0; + signals_block = 0; } /* Come out of loop as we reached required connect limit*/ diff --git a/api-tests/ff/ipc/test_i058/test_i058.c b/api-tests/ff/ipc/test_i058/test_i058.c index b1fc4fcd..c6e8a37d 100644 --- a/api-tests/ff/ipc/test_i058/test_i058.c +++ b/api-tests/ff/ipc/test_i058/test_i058.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -76,7 +76,7 @@ int32_t client_test_psa_doorbell_signal(caller_security_t caller) /* Clear the doorbell signal */ psa_clear(); - /* Is doorbell singal cleared? */ + /* Is doorbell signal cleared? */ signals = psa_wait(PSA_DOORBELL, PSA_POLL); if ((signals & PSA_DOORBELL) != 0) { From 2395f84cbd5ca5db4e9853488a4df4d95a87ca70 Mon Sep 17 00:00:00 2001 From: Jamie Fox Date: Tue, 28 Jan 2020 11:37:07 +0000 Subject: [PATCH 46/54] Disable crypto SHA-1 tests for TF-M platforms Disables the configuration option for crypto SHA-1 tests for all TF-M platforms, as TF-M plans to drop support for SHA-1 in the Crypto service. Signed-off-by: Jamie Fox --- .../tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h | 4 ++-- .../tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h | 4 ++-- .../tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h | 4 ++-- .../tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h | 4 ++-- .../targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h | 4 ++-- .../tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h index ab11fd16..4c398143 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -231,7 +231,7 @@ //#define ARCH_TEST_MD4 //#define ARCH_TEST_MD5 //#define ARCH_TEST_RIPEMD160 -#define ARCH_TEST_SHA1 +//#define ARCH_TEST_SHA1 #define ARCH_TEST_SHA224 #define ARCH_TEST_SHA256 #define ARCH_TEST_SHA384 From c7dc5ea293b90e8a900751fb01ff78a7c89633c2 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Mon, 10 Feb 2020 14:44:12 +0530 Subject: [PATCH 47/54] DOCS: Update to VAL methodology document for manifest dir change --- ..._APIs_Arch_Test_Validation_Methodology.pdf | Bin 593975 -> 590026 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/api-tests/docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf b/api-tests/docs/Arm_PSA_APIs_Arch_Test_Validation_Methodology.pdf index 258019ff12630e33f453cac5656a5f0b180fba40..49e0788dd5f3755b8ffc18308529e72ee7f6aa64 100755 GIT binary patch literal 590026 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

    $we)K{2nz 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%0A+@j8tiy5&7PKq5L_K?e~L8;oKxeRd% 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

    Vgdfwdk_gaJsLo> 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 nI)pB2oQRw6~Bg ziD%EksR~9oib+XPivii1o(WyV7OaTuWw%g@Q$2HXPpx4peiW|pt3)DJ-tqvbfrjXm zF!1mL>Oi_YWtJKgX5grTot};ZLp768VHA_*rUo3T;2StjZNq&`fCF|EXyIsddAnl4 ze-d1ZP%lO;XGjZZ!LoIg4i@xdb&|=3S_Kc?G>_nHxX}g5tNGmz-2deFW4yzcu)LYP{0ub-^Fo=0T1$IT zMKkZ8+}x}S<)f~Xe{F_|-7&)Cq3ynY{`LD=T_BVh01A+F8c$KQPlsote53BoyddaQ zp=j&}<->zYb~km{T$|tf9k;GeWX3B-b6~6*eT5<<7Geg_mt+I>(S5r^oC0|vEW_Rd zF(NaF!HUPR(=gLLr@CkPr>Y*xLYjF)OH_1_8sAce8kID|)1w?#dck7c6lZP%Gz8nG zM+15R#B}l{+cv6w=r4wAi1zkAR8Qm7tX_mREaD7a!>^o3=%>k`SzT4sSsZr%eoL$s zi+e4=evCSmB$FDkvA?_iDX-G&q>978b#y|H>KPkoj^mlj%qaO_^$|0M)*)lE)zw~r zfzX3$+dG3*m$#HM0X6oZfUtPp$JS$XQ2Ts7H-*KY)f8uftOb=_mhftBxnI{#VH(Ik z;F8|OJ=$D%XVFi1NA2d1od)f#F5WNq6y;`hi@g#rkl+E5Y+NJW$s-&LjR7U&1zxwA zNgu->HQ@Zl*U=TGQy#1ER*^>ldMDzI3B_liI;*NY@_aijtC;_shbw4a@0#Vc>|GpNb^O zYg*IKs`|X!i&hsBK(Yf896kv__Ye=~qHcooL`dLxTqatJ^6dot>yP9q7jw{KvN$YM z1l>j}x*!EQdjydh2nh*WHVVTJmv1=Toiv+t)LYR9=7?jp(8@}HB68t2B+5E1Nb8p8 zT|7?xrg8%SHi&_AUll_%O}D%8c~sc63$j+XgEHB-0D6WxPPJj2=6w{xpXBGj9BXtR zac-v$U!1-1P$d9iv$a+f^Fr$n>gD`P4l}Q?)gIT=mo#5YN;I%0D4|~&m$Hinks4g28EyB2)a}gebO3pBALdk($wyjv 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 z z`H2OCk#TsNBI3 z%CeBA+D2rU*P~PB0{w0MSaO(iEWtXztT%b(EUr=bd34u>;?^&54@D0yX}}rBKX9CC zyv!aT%!1zcEV|7ydLfgNajI*+`~q^R=Kl!<-`3)f&bOHq4QT%$ojqyprNso0kN^Yz z`GE&CsfHH5c!?}AmUq)E687rvTR6Vsbbt!Xm#sFhy_O@LtJh}&_6U{<{pxF;+rITo zc=N`(9Zv0j2`Tb&=S#9H;d|Ey!3^WjJKZR1Lco;>+JTvgK4e znElj>v8Uka&h3I5Y`SKFz^ITNkAP-Azye2JbWJJngmpf181Ehkg4oLq9l=UiI3CKh zKDhb8c)!j#I?l}F3lBfZ89_Ilab^mtDS&9?1vHna^86UQUBYloSSeI3q+HYA2F-Vx z5Mg9r^U0K5t>!L3@tqi>9#l$9KW<*aF$6T`TVf-8!w}wtIs{ZN}JqCZyO*|$y;n1^Kx%m2= z-4Hn8`x#vnP%O1o^5h8Ho@p~p?Q&|IvVP5Hn!)LLz{4rT{dcQE&J*{bWt=ZO+K6@h zrqQP7(Fh{ww(>5fw6e$VQyw07Y@}Xyyj1S|Q_GkWY)X;3m5yOob#qq;d>u}#DR**i zK&~a@S7tDQ-?ueILU@On+6>Lq=c;hU8>s&l(P_)WuwU5_oCFi(%(usUP*S6`jh9$c z@BaWnK)%0epy4l{OHc)CID(}5Hu*D;#vkwqxk6`orRLe`NV5uiW=}leYIKSj`;&UoS{XGa+{8-nz5H zkR1kn5@?rGFpI7-@q`E~TeO8(Jr6t!>MCHp%Oh)X@gj-}5dq>r1sHW8ca78P?&p1DTHb{b5D{p+(_7Zb1k9qRvT>jJB`Ju8I8k?2;tO);B)UADPgh(TP z2xVu%A_x1OxjzK<kSw4QJ&@X9XUOf0*k6QYVU<#~0&`UGQB56~du>+vps7}(x-l35 zi8?u#nTEUAk6?}uWg9d0A?VX_s7zmCg=tfvHb|(FBpSIy)HNvW@o|9iR3zKE16iFb zUjLMt*u0CaJS4Nkwdr0dkgaxO@Hj*ZInjJ$@|G0ot&;dk9zGx4#4LmvQ;h<)9P_NV zj6Qh$QH0!{Fq8&@DadT+pHpY($z@Xm)N{#hbebp;Y?KRt@>z9xs<6RDjjQ0pMQiMOWvRE*fw>Z11{kWWdY>bCPKXb z(f!y`PWm7Vn_y7Z7+X^skj4w7jq8*B(hOwt!lew>fDBtJc!#;d032N8N--8c1hkUQvGblZ%YKKN#X1MtRwAQ_F zSlW(I!Z;J-xfn$Hm@sl8_yEMdcP>nXtH!w_9%yL)?6kjI9Z$yj#1y5DSOuE`A;&Sa z^f8KCon&uIx*4F6m~74}f<0R|nL5`k&nswca2bBhdr3L`sda4)Nj?KIsF`(_EThwr zX|AL8JQn{kT6k=@tmyqx1B>f%)XCY12Ru^VaV(~~i31@4M;`n}Vf_A=x4Uey{6Yc2 zZuHBWaJJo;n*6|u``O*3P+6KW4Xnv|6w?1TV8dBbutFLvgOnI4tkEe}N_o`RhD~>O z!VjFu(m#P`qmgAt2klk?*_LDm4h>o4{20x&a&63$E%5y5lc`ViMKc#Dm~}d0FbKJ= zi(({+spKi&jTUa;*9HIeIe-O8a()xC&0P2goZErn?VnU#J@EdB${Bq5m8&V+^)&`&>wAFtJZ(z)#jUMj7Tl8zM8- z{cCh;G6pGt1J3i`$THzEG0bsTg9@i4-rjo57nZnw#poVRb>&IwR)Ms6tA$I~Njp18 zhSJTVJM(ujg(ODfs6FZA8`Xwl%DLaFEgIbA2U#mZ0#o_OrIt^8XBW0dbF&=zk5MLE zo+Jq8Oe*+5M04E1JuQ zZg9tF6WNYDO;!(ZN4i=wQL>K+p$yJ339GUb%iDo-Qff)X-gP6c%itNpNM<_+8Cjc#p_{9 z9C8>|Fq{!Dde%1+t0`^WxC9nkbKtXM@pVX3$!m`(QmvTTwD9`TFMZ%-^1OUFTs6lll*$%sDB{#GRZ_DY=7A1a^sS%Trg( zorB_7je@@KeGm#oGqK~PBD3*9)&aVrb9@vw83vni)xm0GHnlkwOs>*8x~5F85bnon z)>fm=na;+Mje)ovrz%v&Q9(8#2Nji@>L=?SO-2i!D7q5Fp(SDrGa0Np1+2*$y^L#(UzS<^5X|iVB#AxZG3Vh>PfTmsclpHR@BAqOAZyc z)S7_uC6A&7vPC{B4W&U|fO52BV~PG^BA~E%YV;oZ(FCc!0(6$Nq;n}*t%CS>ZN)8u z-&WH}G39$&wWyLm8FzF?-0@!AF0l&`^LR5~p%VZw0HjnwHB#mrfMskZ?_Gwk@l+3R zKK{wxbKpJL>B5~0;BP)fT?N8XX3yc`?_lOiemRF;o?*H7o9>&~+T3zCd^2KxK1tNL z39(fCXCOS4Ut${$(iDHe2E|pPwv@r(H2~>>vxN*|Np=Nieea6sNCOcG?;=x(NMu*W ztyJ7d1ewV|pmF+GG)MZM83)|j~U0K=ES{N6vVOa-IQCqLs zc!vX%aC~1wc}<&j1GSMRs)QeTi0>;C`E`?VAM-wPtbG|*pTDHBKIyt)9v%0tr=TxD zQuqaOHV$G#HxJP5vrLh5GyQy8*^4EmDX(FH7?)4XqWl_*?(W16QLAjN6ykd79+%V2 z5YdU~K*Emiu|2MJYNFJkc2VE#4K2<;2S49lTKtL=;aaWjIVpM|c9}r886OhqjWI6s z8$IF+eS95T5z91Nbu@n`P0 z!?N@=ORA9C^=Rsb%g8t|%56LaJt05xRC!pE3vVvudpwTC2=qz@Vzy>_YH;lghcST} zNOV3u=>y(`Q{FqnXl-7I@p&u<@ z)Y|d+8QP{+QS}__XxAPd-sOs&);t!+*yQ8e zK?GW(J;lyr@UY4?QP;v6=BmEwCkYyYF{&wRz?};za49~PkklJJjpml5^D_QghkRR& z?>6*qZEQYfCvr(;koEXC&SxXNUtN5k3(-77hdZc0Ch^K~xb2RMh!y{))c~GIQ4f$0 za(3jXwe6w)*{@`1CTNXw;CejJ(W&!iROT&PGsho`PymBt#hLtp`Km-xwCJDO$Dea3 zeD6guF-x2&iqVA=KNDIV>ZNEd7I`|e0l}r#>`e@|fb(yOCq@f$za9x7rWc3^h1+X2 z{vUpw*9b2{L}&J@Pb_+6V6K^c9bJSQgKC^cRM_6;%QOvG>tZ^v+nwA-%pkgAX3li* zL+Q*g{5J!;%@ENmW9m<#lP3>+u#{G}A}K?mq@hoH06tF=GlKs>QSU(<)5-hXp~rKI zu$X~w;1o#50h%y91F!y<m%y{sKA3&=&%isUCmUg+i z$|qneNRfo!YnK=AV7Q2;S9$tDYuIg?R@@bQwT}uJTP|sVU=v6vtzJ0~z-}q>9lO=w z2-+t@BsZ;}y@nqBOv`IW{v3S#yoisz@Xs(S2OoRF=2srzFu`l|_ulPjTt>|P#gh`o z;s&t?9@Rap3Lh_Nvv%OUqj{H{~^`S>UF<7A#U9n(qQJT^FhmpdD{7T`2tCBYx> zxQrBq@aAopl*#Px0ehato2_n+MM-=zF!}a7(Ync6MhbDIz=GU!CKZ^#l0;ubz4l9=p=r?RFS5&-r)?(JV{5f^|{%a$Y zZ$Moo`m?g4MpM_s|Z8S&So)Ru(8)*zdAT=!F#*A>j+*Bvc~be8q({E z76C&IVcObW++FyoF57S~9`lRZX@x>g9#oUzW?uq1c=ezG#k9v_;7Kf z`xnn~u3Jx4A$x81n;ZrU0dkPYm|6scemt~Wa|g#0+mAd(!^~p4Mogakp!X*pR0>?@ zK$y4(bAunNnj??s0-!!~F@ewPn@a)9PEt3dJG~pDg5R(-@` zhG+q&SN{I@k7U}V&CPNh+#7PvS7d5YlVVq%&2y)Hq=)(%H0D}xd&j*;=B4o%XiYG)iI z3-qLN#ML|_3u5yr^((FLMCd9bbC5jcuqbhWXDkxPUlSCyY(xu}G<$A~egjlzjI zwXOPqUPacHIA8G4ugn}UiZ5+W46$+<^QITYBI(kNz%6n$J-UPZaf=qnboaM(ScD~I zcue>$k9oc3yRv}XT#{g3gZnw-xu&9Zrha-m7lXPm_h=GjBJ<{}UD+|+pUN?w6WGB; zy@$vt&i~|ZmF$?Iz3)o4A(47j1Im_5a$wV>A{x0Ei7vU>#)pD_f5Qq4Q{w4~a9#6R z9rEH|_pnn5SNI!96;w-lU~UagEV~zD%*ny{8s80TcuqAk4?v^_J!FNtnqigI|5T7E z@&`h)NzwW6%($YW8;}YFx?Jm)H$~kGnB5BLEzXgxs|oOje7Gyt%r7C)q~9yYs`{rJ zA&o@>Yg)X0qDyg^52XklN+-wsA#M&m=m{&WVaAd;a!4fpnS01E(O$Futbc_IatlJ% zS(k!2LTLIdV>7EI;J)2qhACk9j~COC|BS+OPu+EcGZMjxDCjkZnZT*j8!}1#MUa93 zkeZPzPHi*<2eAFwF0$) zx(S69!g?TCRXZPdT-C+H27!F!t%NH*P%=M^XCl15(K%HIxZ}Wz`#+p5hOJY`&m?Wl z&05Z23Yy{1rnBmIkEFyi?F}w)nrDa3wM-|Y%y!ZpYh<_qW$Y0p&MD8Gc><8JS$CNR z{2WZlo1PX5#E=vrL3jTxV5Bu;BCrIZQCDVi!2qIW8xgE=v^3O3Rk0LiXsnHf^d59S zU0+I^6V%d9O;-q>c7}~F)E(AIr(x56m(59~MN2~GY4qu9SdB`#N0w?k5&8Vyyw|K6Km@vH@L*ND669~;nHI9j33_+BxUYvRV8SNq)tV1{gQn0@aY zin~t?N`6R`cAh9SuA^u2h7u4bt}a&7Ed|)#y93*$q1Z!uA{G^)fC(nE@#XIc?iwk( zs*LI+aK!p2x(_aGz{=LfI_GioMN4j&-IYzTbYOIoDrfJScBj)1Mzx>2b|&mCFEP}> z!49!jZhX+L{I9Y&t+#K`$(955iBeXz4|5WVVy{#jc)5F)^GxgEr#skG_ zgij?K*b)W~II;4Au+8IUNfotf#i^_^2iQj%qRNixYKT$Sztui46As5Yq z7_Aa6&+epYWMQg>LAK$2lWG96pLr9Ff62Y_sY5CgW$Sy-J#(j3?oV+{b*b6Wu%=Gc zUM;UU$?O?*oSWQP&t`0Fbpl^gC~D5I%{5F^b48?wHo9!_7l@?o($ z%eU{Mq@fzoEVp^?pLDR9akr>U2Ih7Uh$_UWRAPg*oR0g|cMmWBZ3d4_T8!h!yKoD; zSusGWt^U2U&P!{v+QYU||Lxdy41BWY$sfq=b{2QJOtUMz+minL#_mLu-2s-EaAfL* z7SYR*ApLwD*ARE^1Zh7!cCOKL)|SgPWY@FF`K`e~gmY@Q$j<5{xeDGZQ-{?wLwvXV zj<>Q{U2(#*4Qw5M70M1!EYGO8k)2bnqDh?JRldODhud$C|fAfD4&@0X0#B4}fz`O<*xgbuKMI zm8Y^9;fw9W207XVc##If9y2zuds(;B(l|uEeh0dMs#eQU!InLf;e>#oajy8O^{3sH z%5_nqxINP#1EJ6}5)=idpQ_x-e6;V-$?kdz8bWEubK05bk#ufZQqn9jPZ7NQZj*nW zU3E=> z<^cU4(>(gY8HM^Ct;t8H1+RUk=aoHl|YBUa-nM_n`@CwhFdOG^sQ zD5681Uh#^l)f$489OS!j#}*;L>1ku>HfQYNaaFMr?eY>*paKaU7uSKS{d8U(BKCHB zKz#!vOIR>uw0QNP#%}`t9wC26k)HjwNLd#I7qPM+(QZiC`W4L-aX=w!FAsiz74?xP z3vEoLI1H+^ae~>!EW7gNYwrG0uwjE4;Ox2aH)AHTV+J+`pCRi<^$MBE4+(Ag(T@zx zB6%+zx?wc4G6R$q8YPlW`OYu_kAK!t*-5#gct>|E!2#%xJIH~zecF1ou%!Gn>8|J< z6HZH(gy5Qgmta^e$ZVuAV3wizAwzJv!QQ*L0#;`im`tR!dAc7?Y}C>4!1~jY>yKe@ zsJ&*|hf#dKhb1cuNQWGp6|w+H46Q<5pFebU>>Skz#HGMFMo&>K0!25#3H@xZH)`nw zvo4Qp<&kTUQhcIaD=R<#R{G5QDrTv|w5ZFtIO+E(K-Ahv@8!zrg!Kc0kHuUJ%A*JTgrk!~s zc7}vTWQ5|a)h`&IElKR`opec$^_+1vN>Uorz16B8y0qzZd+1X+2wqecNy%wMx=>(HAO{M9*q z6OP4)Qcwo{ej%Qw^qWKaV3h4Y1Wglb@LTuTf#y&P4_Ak&cS=;SYtY^I6Zc(Ja?8tw z7VWo}hi(}=Z0u7|P%eBN>6dn}c=-UnSPhB^M5Ak|08}PA5)1-2l~KeC0E{L9tMG&* z^mot15kmE1X25RacqhM5_dF#03>DODc7TxIInw!WepmsG&fXmEnI3M=f6n;(A0q(~ z95aamPLZ2MLPr+i-d2iDDUMb4E;-jEfiBl|>}5z&L@7W(orvhY!q z4cseH)!2bu?XzjWJOPfrS?IQ1k<{{~1Qs3Br!s}uM@0O=BCd!=8qYYtQhbE@?!Ity z1`q`BB;-hxPVt>TA#FqP0?Z7S9^JMm5m+CvsVdW;K|;0zs^v-Z*S2>$cR_9^XK~`S zME{<@ROI4?2m7H7V8NVHg=l#og%NdGs6fVt z9_w=39@6j1M&a=hsy1P)& z#+ZYkqVm6k9r0ch-s4_~@)uH^Fky5^I%`W4@7Dzb!Y^UI|Oq{c{+j5 zFge0!FmsYf{4@5v$lW+$UcSZVYIdXA#VRddi&0CI;BqJN3*vQ}X&wCVBDh&kO&ASO zlhT~f-Rq-65$bq0{JehM3V0Pz54;R=;;8-N?c{*MwD!y3#G(^%)Nlzk^uxY`D_Hh! z)$04x^yI}Yns!}D|M%wgy19{xgdj~i=LcOZv>VU)XCq4=?<9AM)<9L`Be7c8v+;}z zsND7r3*8ch4uBpB+AoV(&$jB%gYDjFk zs5O72%7aGt^^hUOj1Gl#n@m$Ws{>VOAkGA{v=a0pS{PZz!)JN9^MGxgaZ6c#=K!!z zluv9b=*k;sF7~w(pmE8v>NUvRYHtX%p{_2kJkfC5aa}%tTv~<1f@}2;{jUI{$2m!M2%gfpivfUB ztoR18j0%%`43>N9BXlcPce;%R(MO59{*uq^S!DsG+C-VdR!hpy-HUJ(q`d^>2d?zf(FzwAEHvidN9)#2KYAV419OwfVd&^8}QIZ3zl;g85FiBKY=FPM#}|f4IMmRrL6C1 zwNw46zBo;$CO1?K6=6owk+kF6br5o8YuMrhOl!Ie0@4r-X?Js$!UP0e7zQZ5R)K+9 zD@Mzmjk48$5Vr#4i$+h=V>4u_CAn>-O;i5CQ#dwjTU2qg1HTb8ZZ4aC>#M8e}L zPv*QB*$uZe|LG7Mv|ALwMExd&D!i3tc)K2W$h*(kcx$1pAX8voXcY!I5qNmBIc@Ko zloR_T;Csa_rg<3bnEA_JW3@%cNo=ZF3RWFMb|`_@noNlkOJTFL@tC}dEdrdte;3@u zH><0>V{%*?kzUQoV669RyYz4;Stc!-Q*Abb9$mDD>mo>^_)Hi?d^Rm3copq+tv*~> zi=^le(5R(^|92*AySqpe@n8X)iS{sEVy;`Yg zEc09UBi6?;Xt-qr=CN%ll?`W`VJ80X6nO6yT#gv4)T+$Lf;P=yd2wdWS3);SKhQQ?YE=$bG(H?ub7@*tC~;D^GC7&r z!X80Q9-E|67x(D!=BG=rFe=z*amC@f)qwnt)i5adQEhg`rKcA;(=UCp@T7em;5Bvz z&XjWf)XC<1%Xn^WdF0qB1q;>acDP4Ola=jXye-X?@Lc-Zp2;Hmp&}o9b}v(XTz-1t z?8@g`rehPMlROpJz@wF4BE`wv=v7ZcLO2vqTEND%T4IA)A>ZF(@fp!<@}pWS(w7yh z8*z4G9MxR7=)sJesa?LCxr5b5kr<|=Q8Y1jfxn_DJB|j%CVCh`&VMA^Y(ur!_-uv@ z$VVrZJUNPih0vAWdUr~82HT${FYu8y;zxdqedEkt0Ac@#x)7~uU&s|iiT#7iOem~@KgV`jR}V?@P{MEQkkce1f0J>N$B33NX9l~`xII5<;C&5 z;_@zt8Z3{)Lw8kP_?^sE!FRv%r#r^ISdpV0fUlS@VeLOyj*tLaSg}L>Sa9>id#ewj za^4Z9TW`;mICod3ebD!#UK79eyvImAXM(nPcdF_okY3tZk5q#aWHF5LQ;9Og;lGg| z!mE3a5ldVfjC%q?c@V3vYdT6>aV0Sb4g`mO+Rioq3F;pI!&>_*mg;s~L6#nsv}NYi ziS6)XT5U%Po!2IVih#OW#A;~$F<)`RHapjND3cB%WkY(H92OViBuhMoMY~so#w?fU zg{}g3=mH!SWe-hz==f!uZ{R3c{a<5Z=e;BC*)Buvktw7@D-gZ!IK9QaN%ey5BCzc{ zKyd@GD=#>@0ZFY>l~<-B6%HmAD=p*ku;P|)o=)P}MDA3B*IZRaO2+Wcc_I4WS!E}h z>NEstohWY|nZZr#>-ID}w)GV@ALVW=W=a^=ONlp`KIa3<4cJ;_D_c6$W8+)&Y||Vm z0I&{lZ^_2)PhCvLxP1k(`{Ue#Ok%tYC%hIJ5w{@ckJphibw9VfJJf;xrH*jxOx_ny zFxB0?>q){#xl`E8ihAs1x*?42KV&eYSo7h?h`PI%RY6FhK`}ufYK%0#t)(rpRJQge z#)LNX_(%v3+LYS(nGT~y1p$;uU$_-RIW^}2Kk52R;Eq@4T3v_;vxoblkfwXwgCC=E3 zm7Yx~N8WyPBWs^mn|XDImBdM*mvv2YbC=ljsL|g*E`~-J42NV<+;X#dyV?{e~?(YaM(oXn4+o$=7FjHf8-nA zF;OOw7l{~(Yv_wJ)>d6q2kQqERRFh@m($~D7uDk{8s1XRAScIOU5M~FQPTUIXYz&~ z5>F|9>t!kyxMXl7Xbazp7Eg!9EiSE}O~WBYiUAjXLFOmYqAeyi;OIEh@JVG(%mZ+c zaeN9uEdm0WroJ{3hsW-Hj!;}4id0ZHM)#L96nb!%^SQu3pTWq%ay}oUT5BK45<*z( zaW#6(7x6}nV!bfEzzX3bM#?RpUsvS z2zJbO-bfSZForU_otOLPCJ_xGGsNPP_*uP(>DdQwzFV$yEPs#}|H}j-rbcM^r+rYK zReTqJGnM9tM6VC+B{KPmBUki4sMic+_1`N4h+q~P zI!{P=QN?bxF`lqJ=~&f_uD2-3hu%N0qs>^*#0LN+%_CG*jR1H+VFwC$p{+b{=Et#U z%27*A`i>Y-aT@yl zF;d_cW|3nz-3w*$d&q7&;oMt?M=dS{CaI8dr3&^Tcnw{d8+vztsY_H5i0_GqUfS93 zHFLc5Si@gBR@LrgCm7YdzkK0|b;L07TxPm!zlau{hu>q7N1r*3oDhcV$;2GmI@|$K znbc8pf?9f50}|lc1ho(^*Dp+Xq*#5d$W2M-iJS(CBcp%T zq>3J;!IHdd3{uY^lIr|v#Ud?m@7werb-a;s*PDW!5tl%BrdcC~%^Z4< z8)6EM;Lx&XezJyuH5@zhSm&#N{bBd$2g^$IV`)f+>P z)bm-i+rZOOM26QD#99NWlLOHMwWgE!-s${H4(91evG%W{`;d!Uc$g z+{x5tR+3sgyzt`pTB;iE57sVNL!wM9%0?3aCGOUy%BFYza%KVay|sZd{=`MxI5hPL zMoT#og1LaQdk?;6)mOrobjN~A&6mj;Z=W-JB>KCKO-r`t6(!~u05-HHzFCKCR;%T? zYNuJmLRC`@o%|iIh6?QNPUp+ggwRdl|2O-Y9Qv$*#P`J9MjQ?!K7){zxUL(m8Sc>4 zaxPeRMA^1LazescIfylk5w*^{$Ic7qvou+~z?!-tw6GF8(TBazh(6ixNC^Aj+$sY9 z^C31rUl-JV8cllR4QZiWx^zmE0?2(w(9 ze>R&CwAV)99&0qZ8gbd$M7hcAB7caSG~{;i`OO<1Ws@pf@ec(nt}dLIDxQ5wih-?B z7_AyM5T#3!%l7sfq!=B@8EomF8(t)Q@CFRT-o$!?ex$nnf$BMK$FiLkC=_v4=oPF` z0Yh%R1s^`lNdkbfqEq-?bK` z-g-8O&Y?!=eoE(A+-`W9wy#QgxG!t7olIR3*Qx*Q`h-j(6)aRyGQ7;mVJx+*8kEYr zQ5c9FuxhzRvHB>(uS3;ezSow`NeG@vl|m3{Q5IknNN3tvsMJo!z;?HA$R@br@u7{! z-l-^eIfB|HiFptupN2k@n?KkDb^T0Sb;gEJF`x@?KEu**wLjgLW1x0`1)E&QiBFon zP@$Pepwu+QcmNE~j&6cuuRFle_G)KCE=OcJ!DXbF&L;^0NzyhOI9qo!H{}6?FG4qL z(R`l|%TGrGuur9UcT8?q4D}MNzikfflawnMjb<(tqP z7%C&7%mA$!-8?&87`oj3E)_LBf!q;g zS~4=H0AgFxx~uN=h+DlgKqCaN*lWr&Ue<}qNu?wH1!zyC$DP%%*H{QL3K0ovf08xJ)9OV7Qz_3#MOD|-K1VI}KUtuC%9eMkx@;a+~8 z-d{9>2NqA@q&uq4xRu+)gbIb_<4GgwL?}?XIvr+_4EO}ol#KVnhTKk zGbz8&+NFK10(TXAdYEu{4nk5$vVcBc)|eFl)kqEx&0D8nzTB0jQk1UAG1VS^>GyM( z1QsOlQ?~h|Q(^v2eJf^$MLGbhg`4HauRd&x!?Pim97+pd%V=BEFvi&?kgNn%fm6<}v8>x*DN7rIqT4Z!lojCt_1Nvq6Da zATnTWF^7hV=L;oI&-PoIhMV}|`E^9<_$vm%jDgUW#RG)|AP%zQ(_y9mr}FI88?p%k z*rQDEpj!zjb-3@bfh2}rLMmC84*U@_Y3Fmn^f>(4NOTS7LmZS8U{aZ1EGcYsU3XAa z&c^tr`+E-hB?B|LvOeW-sAWL_gkg_`)<6G2ULalO`oXQ0w$4}u%}zf{YsFi#`N91= zb))ZNNkMO;kqL+;qY9lRg8T7c1?I>JYxO#(uXSUs`^q-r*IxgWhzwSLX--hq*D}uV z#(W%oNfvHdJ6%hqUU^BQJ)L89(ZXrx#iYxkgw7+0Mg3pRBF_GZz-kn&gz(Cw8NUPG zMkE`QDEo%_eXpRCCl|h2q3|GSW<7tu0QXprA=dZHN*OHq`J5>)&n`XI)YuCowS7`k zuoZ+N!>&4kdayvzNkNz>$p+;TX7&CQQ`#ff4!g@q7i|I=E^3$+r3R*ieA#fxG6-{G z0S~{;@eqr2^~=rxyU+~;rp<1yyk}oa=l(pQAEQDW#gsZ8N*GTUx3JS{b-40V10s~4y%=M1NQ0-THm1j05_yR3$wmI99pL( z_=fnY8g`h(v9a1KV-&Y-U-<(g_Ac-y;H%3zf3;=|pl^2OWC|mZDmJGI#Z8-ZUJDzh zs)5+q$o}Wc>QcG!bJ^ni6;7H~b78^vQ=Y2)}Muo~wkBflI0 z(|hkUDt8OuVP0rgH}8O;KSfx~hkkKSiq6ToxTy3(RTh5z$uYub(V&?mtZp1=3s{Ce zA0~GlKFZ76?fG*|9grTLPZLa(9H8O|rrB#%Nm*ayAY@uKqqrKE5z^tf|JHR;z)?Ir zHrH8K>ZUdEIT6{$TIIo1l2KDc8rYd6=q+V{NetB*>|azv>WKwRC59OgdWwPe{IA8# zOvpbiU6C;dy-c6q7;zRKh({M{e=QZEjdN+5g3_zweRt!(FN@?W(frklhFfOmFB?rA zqa*x^v}kPjN<|g{2a;m`PuvG$eFSO|@M`m%@_f68&WO|F!1(vwfnE-jB*-dFHJa@* z*ny+J)j}c^6Es;-XWU&0rFo{VaxXXzE{p6cO?raKY>9J+V__K!yZGfBzpd@A=YGzj zJL$kT4PEjuP0DA79IBU?zZd%?J196Cxp1}q%d?8ARO7>U?z4x{K@lbQ_K~>+wXci=4U0nINE%s6G892KY6OzjER;q< z($ijFE4b!xHmUh>P;uPcQjU6=tTUhPJliS=ko4_BpMWa*v@MM8kk8rzPl5ZcOxe-D z=<$^7og(*ZU~-)-Xg`wY+%EgvoOou}FpMY0RJY>7lq90N08?B=EijM}Yd+&X9k3q? z44Va8gN$%hOzkg=BVm1VI{gBsnj9nOY|^VI!_S))c8#Y0+Hod`gs?+!S)25Yq7ufI z;UhRHveMO5w{$Ai#kFQx4bd|^1hnj-as|7-hKCQ7J%{#YZCSrb*jw-2W8R}ZuxGL= z1gJc7Z_w3lub`y;pI}V&ZAxV=J@>Yh+LeNBdgVSREeb1k9nGjeO{{FQfG%{%@Poxw zitI{y^P6yD43@9#j$nKj$aaUXYZz4~Nu;McTe$3qTsM#{taJAX=dze={sQzII0BQ4 z2}Px*3p(;d2Lbv$)Mf)>{*g)^h>6nPoAO;Y&00G&Q2#QEP8a6+bZjix6p6ecwzyRQ z?jU+ht;4v5NRgB9K^)xEC!>ZIxFg`rML%9}WBmRB<1mfg5Zrb)r`V%yb1i(kPOAD-Rd*kcg*L=0B_xNu4|8i%y`^j4o1}iUVc+)u zFDNzQAFvQ94^wf|Q6&QXV}w;?8;Xb_VUuzvLftV`8+$uYpk|1-Jj4V!elO{zX9*Dy zUh9ES4fXxM%4Dh^l!E`8A78VD30KN{K8t(t{m8Zl_6qeCcMY-wC0fj_ZNiW173BNS zxQQmzAZ<#Og|~oCgAXg_C#f5^`FDXyKQEFeFLU5-FU_Gs*HBL*@!v)j+vYsWh*@1Z zM>$!*;gUNBY#}1)JcTGu%j)(fJc7vC_BSu&BUc9sR1tK%|8J81H!8$0)w{@<<-ma- zwm$&;ilPLU64C3}eHD!6S>0`WI30#Jp+hsGfZIiG&80$m%*PaHeI6h|ICzRcV&jA? zi}z+ThQ1y%w#3ZJ*20axoWMvN5s44&enn>MP%K6tqw!5%b#T;WsQPB@=j49d(P!K6 zibG#trR*t_PxDUFxhMB~1wFUIc*1H{Av(vD7qaWFMTF-#*i7b6iNI#D>fJ{lUZB6k zB=#*f_Umd8K^Y$;PM$q4NtPYemeJk{0Y7osSSk~J42h|Xr zB59p{u0(O^RXb+W4Q%rUWdgvHF@TMeuLXy;L=A51%f5`VhY&L-F)SQYJXg6PNCXP< zRNjU%OBB>%WoB-Ugbh=AykgvtYy)~64%!8!g(6@#p}d7@gLq%NzdGy+Qh;6u2)sde zr8j;7XY%x?8L^y!yOX-iF)P;so>NYe;F*T-d)LlfjX1L6$WUz48`2oIqta&W%y3t< z?^%A@6u4SX|Gx>1e|j0?rIjc3odtBJ=OwnPKbPa(*fsWMj<@o(aE;I8T)jDHf2R$81wmDKrAk@#IgCm0gH`>3s$&E? zZaj6>cYg`LUy?vp42>#uC}=cVMlzLu%GSLo{M!t#g|$0a zP)++ubOq!7G0a1wgZ5Yn;`oHgm>y$$H+5Gz{;))EyVIE9VjrI#G|0>RadVye8l~5P z)5R#Y;LmIMi&G)lbxr~NrcJ6sLYEE(6eFNdBxUgH(;qtsUpf-u_9qyS3$Nr@ocaIxfw zcIX7>7f_StKS zz{$#B?`ZoIJM<(<8b}x_eOdO06bd-zdJc4Z87CzP&*|mms-)P-&&8q=Q_5q>i72mV z+?lwy$c6*s{aMSCR`(>90cPE->qb%29qGK8Cwk%7QcC97Oenh3?ti&sx4(QP@%L9} z>g%{9`}h|>4;R&wcv@ud#1>~Q(%ZCG;_ofzaX5q{-n3q_Yi>v6&s!>Nd(341pJq<@ zDiI1=s(zh`sRYbioT6Dm-@FuQzJoiB;nW%CF%)vatcets=TXzi1O1Sio~5}Z821{5 z^c&e8p7S2Q!!iH+6b!jeuF$ufR?Sxg@xk1v*Fd7QWPUuNy;GAd2@XG=jSkEjo` zfJKV|@?$tmO_@*Z@2~Y3#oy^rlZ`~P_M)#c7)*Qs+`&|cxZDUr(XKHl*(p9clb^zgFftZt|`z~BPu5s0WHhFEE2(?9$#ROS!XbxEGje|a}Xr?w>M@`IOf1NWz zTeoi2vd4M3quZ1j_4wG_eyFyJmBC6eG(vPv|BrVf>Z0lPyq5$}`IMfOF-j~R1fyh>0P#F`2 z*`-3Ld}%g8RNZ1C{DlKdR*$MwbxknRRg!lIg?prjGv}N*TzfqNV*Aq)= zD9$zt7!pGXxFh#;PCFzW0NQ&8PaJBPjGfb(AkmUWi(R&D+qP}nw#_cvwr$(CZQHKt ztC_ht7v~jre7Q3-BL1~Te(M`WA_}KABys%KeHY~kY*R^%;?>L11CCNRe%^&^GLao2wBu+P z*VVZVKYrlC*0Nr0Oe@@*LKc=It1buM?IOfcC!o@h@KQ5xo(nNv20~c z;6zG`EPyw(B<36O+)G7nI7u33h&70(ZHq%G@FF{7r^QUU44TscoFGbTYl)9CpAj<( zQ?I8U__{{m>pPc}^L6DL05icQFQdMTxXuMCEK8xwWA_Vjp zS$5IRyl!jI3pI@}i2zBTcTB}?L_hx~g+7$1yN&wE#;mX5au(TM^BFR8K<&b`^iZ|) z4N^kS+by!v@aHTX5FCF+P&K~zjt4f zh1uPQ$P{c^nKblBzAgj|x~J4CarRk!Ydd<}$PPP3N8J>Ro!?j(L-7nx3DM)y&#j6F zH@&=uP@?NhmSz`yfAchJDN)1 z3}^s&0s3;Li+yFkLlCG;evC$5oKYLbn>qQ@+%4MCRWe+VPRZvhNQLIuwi@$PUbL4G z+XeNW$U{$n02;z%c}!2O`w3*){uFGeca;kS8dEWBl9R5UP2|&2c|v;mGi?n>2uCO3 zHr-zt;4BYvq!9&O)<}I*Ki+!S;M z3^-_oVB76FeuJBMgK>_<@%)v((VOtI3A?0BqsUHT+AjqT46x{Lp+tEzPZz^PqF`RJ zVS7DC#k%TG^-8b~7|umzrA*NKOQ|!exSVGX^~I&K^0i__=aA2x&&O%rG*%Xl_x^&4 z@7yX0erlIdLw4gD>RPln{@J>3jHDzU=UlatrjW|$V~p+K)nW8oEC2Z+o09*d)JNzm zzGHfmHlII|RPKTsot-eGG<;~N!uS}Tl=jDFPtHd9T{bO|9jLd6r()YQPPw#k?R?1a z6H7-k;G?$!G}TT|q;P5S>?Ea&ApQtQM9hU^Sp>MFU(Jiobfaf&WflDGV*vPAW~~5! zR9cLs@l{Dd8pJOh;*uBGU4~3{CD^(%Obtzh$1rTOJqT^E1P=Z)xms0=;b;a|w#uR= zXa<>LYj|s0c|@Y%Vhr54oIW*i#2H&|0Wi6Oa-C$TFRn|6=fi2DB(H?Ez!q&W z2(Ye!m)yMjwnD#7i1LlxMvosZ!^x922HUU#TG26+xh6z0|6}{p6_H2a{iFrcNq^WP zr~#R#nt-%OYJxD^BV!ve>>iKx!WFL=%7KO1Vk@B4drxs%vz8Thn6}l$x70TW>{D9ZllCO{G1anqCewc(40HX(3C z(4BN-AC97GDP1iKmkQ96)=8QBprKpd{Jw@G3G1rKv($1=C_^bWd;gd4S79TN{Ke3C zR+$sMbcL2tjK1nipAjajIhyFf7JKQ z$@+6f`f-X%T!GGCuAF3mu#6Oh@`;i>+Q=R{VZj5KZweI=rwO9@%grjJ`{F$NM8Jjd z7cQEGXi&ikW5n$rHx+Lgz|b56ZkXMMAc>?R8Ji2Ad%#{^k&hK3FN4;B8Udj6(HUN+ zz{@o90%;^b6JR@Lnk(;#QS zEIXJzrFL)oIv4};tdgPBJ2=F-$6E%f45G<4T_J z2}Wc}Z&{j?%fp|$eNIcA^EK)!X5!V7ZnaV5Wb02AYgYsbOhzJSOKIVSX=@!~>WQ=y zRHGK_h{z^MlY(P;o6Sisi-SAauNqLoO{?YFc$B{7wi?$*>W(AZeleFjJZKhdSA??l%rjbdzxaap8pp^ImCYs zw9#8k%BalIFOBJ$u&3WzmbnA)fNxhWsp^g)jDEY3#)SvpmK4f|aCPA2+SfZIMj0k` zg+tR7Mw}ZvM0Y99THmNY?Bj$m76bUpkQSgepM(9mtElRW65Q-K^nit>v{5e~Bb{I30xwE>hJu@;CIe8kEzfQ!E`-HLTomr`K#}a(`Yw$}^BlcXxJdWyRK;{e(fM9z=kXr;#-)6PRjk%vVpt@CTe0(6kvA9V4M&WEN`>?oHM%d?TeWE@5?d zvo1(XV@@%>>;sVDvj2thJiil~HD^HlTmR?Xc$q<8cQB(<7_;2F@8Hw`-mt$rE zp=^bLlEkTf%HuvFCPx_8Hca4+EEhaDXxw%^`Z@)_$a&?1QxW#Sp0h7=xD{{vE7y6i zwQR!g+-f&>jaI0v@q<5{D-O+rMm$2FlwE;~yYZiJtKmGnlz@BAhXb8pv?yf#kuQGb z87YmFzdHG~GDS3-Z&)FtI&20bG9v=2cuyA5t8Du+(5Lfk@)OM=evT<^m&(yK`}eEjRFZV#s!o2eD$yKDrFu z2?Jt!r;l-_T_3>$IWX-pMN4+8lAK_$+^!_k29|a>o!j(ia9PmKFfz2cmNk&p5(ydM z)JC!s?nd;grQzV*ql20@u3IUHX=B~c?J=3@OoU;HA)MG`m@|JOXZs+%K{|#(tnpSu zD8+;q!65^A_|Y}>w|wmY5Rz?klO;FpQ18a@7-dTp3sXrNcC1k%rofC_R+ta-LzTB5 z?lnqRelByjL7n9udqIHN9|$CZ`j|^fSrdGKa7*Zy+^Z=q_Oq_bOE&y`4L;bYwFn;A z&cHVl9##3rmrd$_)7bWS)nU4adc$RjlFGw%5stTQOYa4xq^owpKqu#evX$s>nn=<1LD&BJ5C5!ozX>h>xy2P{hdv3D$0G+`+ScdxepYVKEpT z{hOOwTJQ&!u#g1Ysw)#Y(no{nzvZ@l>FO=gmd(FWl!1VJS~dj=DPDLpv6}YuLVBm_ zG#!pIXc{)abq6|9wFz(WT<$huS#B^kKekiGn?Z8ZTQ@`MwQb#^i5|(fKcFxce!bom z<*cJVof^njKJPlHqh1qu{W4r8Q@qg2}Ag{@A&1N)SKjYq2>azQR(bfW14h6ioizsR%02;kWe-`p-g%IrcXF z9kf-wwGdz9=sf7{q!vQEowtd6#SO>jb}($1CqEBwIpOVk1mdhZEgJ8bY{GX;uyAYyI`vJZYo$Cq$XLw zahmny^#N6``3s(Qp;!k;KQA*-^9(nLQ`B4JKs1U8v-KF0*G|Ri)mQg)M1&E-a>_<4 z`@@0R8M?y17;t=a$O)rAMN4^u_8^hPHIbrl$#OQ1sjO{Lf0Rjtg+RrNPvw1*^=QxZ zdGu#~m3B9oN;O@=ASj;2WC!J5pZE_0v86Y`q=2qRDbDw&0h)`7;!X5cT#B?_C&*pT z43m20*TOdWS4rLSao0unULEC7v%#I?v8H+l&XB)y0C=zxDozfTQVZ5H@7!`~IkF?t zo^53dnrvb#L@Rydju+*pm82I=YE7sroX^i2w{Yo%4_-N$zRwB@S$4I4{|e#-eOEXQ z))p2|YKV~XybyI{MTH)KW7lh*_ie2CQdNNj{wop|Z^i4eZCUuUl7UcRYaGaVqcJ6^ zF6dZ_2~2c8wc1kD8dyOh2K`oY9#&CQo+gNoc{uYt&ob89)v)KwAj%uH9o?eKsh-={ z6Q+R3kRyLbOzo=Ythd>?Ge)m&Q*ek4bg#{bv8EWsLU=_lqQ#?(o*~g&u3POy9VSGu z&%)i0!O+3>Cx7fM!M2t?rAY5*<|5s-@W4g#eY*Kewd35;m}vqNiDZN$8eCPRxf{2W z=Ow-`x5qLgT#y zT}_De#s>)LUa#vCfYvZSmf$6y9D~eBIN1cbXmkaURI;<9xa97fu6n}UQnJy z1{5((N-EkLLe&fL5$Q%CK|VPhzFCvj>n3KPzcY1;I<$i4LlhzuONv!V3ToT#^9S z+OQ^_OLQDue*DO4bCmrqzvKzjSb6^DD}`)7-RsF=&<|>yt%`~V)bx#)2ItH?$z{Vv zPd7sTKhfF*L59f-*B)r@MSsDvQ>TGL!TXKdflYdmBNBIL^L>10eGVBj7D(>rBUS(W zWYx@tq2MIF<5u4%^8i~$BoE}UjHAlmMs6hiTyXQLF_l8A!V)?6`jF*?-wl;oLoSjY z_3h|;len}Fw2B6O_;xSW2~{f%j%eFm7dkFSNjUolny*f)r7vBXcOn6E+sKg_ag>DK+iWiiieZJQx@ z@v4-rGa{P&_gz<+lKX5UJs^{PpzT z(h;s{z`k^?gwzpL({W*1E>F=lhOZf7R(zgb|*h|t{F8|Y)%Z9rempTLCzGOfN1zs%Z(^^o- zK(ew`?5Vg9Ild7bAoG(p$l<8uzN|PZmf_^te@v$VATeh0y%)6nI-O&xu7)y8H@4oR z%M1x4T679;=#Uij<8-&dPC|MYpzYC{f^;A(0E$_cRI+e#I5Vn)UexMHU6O9c^!OkF zXs^rfV(>@xqID1b8WX$o8d4IGt_+|QBNkmUb?^Y>>W2%DzTUkLl{ritqWCr0nd=qY zMdN2B8$YEUVosxGuY)nf+Fv6|YF*&(pK;2(vrbPZj7Cg86JKk%l{okFF8IZH79H#^ z{|7hg0yAO}8=M%J3jl{7Y@EA2e8m(sq)OQ!b7H)77{sl{sbtmP=}_vtAD@XRf}+PO ze*KA3-vh3<7p5~IhnOH>{XYqw;SvHV8CzW7c-4xVl=$1kNkgBK^D!9n4GKK@V$rpB zE}D$Kit~MB+T8q57m9zC#1d;%??5E=_6-@NMvh%|M@dvIs&QqmT@f| zd`?4sD3P)bCR(gs(`s(YM@p53~OUqElBRRGf^TOo2| zxm^3LP)K~hnoANXoxT16_t!a;7vOOFvMAvW3sZv;Zn$29aqIZEV_z}T96`u!^UbcE zbZh6ko&iH$Pa0?FwV5j)Z@*HEH#=Riva}6u2)Nn**7g?wR%hPxs(?Rc>5T83%YDZl zci-oXUoq%FFB;V@>_(*C@;yZ7vg=ZN!G=SAwi!ytpUlU{&H;=Zo&0H{Y;TV7U}q3D z?1)0<+x;o}!99tTZ+<}MM$WY_&^3dN_X_&^JTw^;dCBlO(}#a+GPIj|1^%;RCyVWi ze5|(y7K)p*S2&o<#e8D&X#iyn(&*mix|>)7hJf_?eN<>d?E*99y6f>0cOFgb%#dF+ zBEJHAOV#OH@+g~A=VL?GP!cERKNz2Ifd314VaL999DT8y&i%%6;%_P(_fHS;R`DRs zLi`x}7EzTY!2xA6nkxE*iQiwFSb=iDq_6!gz3Dic46`{oD3xl{^*cF zTFYyjsgp5+zgq-yUx)08LVh!0>W}DIpw@w7v-@e{MpI)upRUqsQ|_nqVM&8Q3iQxo z%4t$it&Si?Isl94eMnUG+Ji>?wHLoZG{0E{HDug|Zn_3r_w&>cg6~6$jG(OJXndW_ zvv5H<70ZuGXN^R<(yls9tEn1KB23?amxZ3V|JtNFUJG&jv*_eriA#ogIjUtF0vCea zd>$vSUDKviYiyV|-=1J-N9Y7sc3JIIMHuLQnal}`zPM5`{y++VdZvvV#vJ6`ThPYqlm9LUwW=A z3ymz)Ed+b0W%P8KPYOPh>qkGfX&a=tt-!l%qJa@tN06vDeey4iaqb+27JL5Gn`pdq zL^{->bn_^(+h2J>nqjcOk21htLoa zgnJ&^R^EPR~VIPB}oZ7ek<>g6K;!Z82)}Oud@gp{`8Vu>n+SnvvT%f?#}a zQft>Fq(XE(9}86%_aV-9LElSSG^)*cR?_Q(C!E$(#h#4&o{iQ@av??}rUPwb4JoX? zeOyc~2IQGyrcqdCQ`H#A_$dC%{J>DQjcEgoNf$IDsBeG)pAnlbnR2-SDXUu}}8gXz1>_b&6 zbJ@J;4FP8Q6{v|yAF>Bh1dNc3m*TDf8YhGftPWPQGij|vWAvRTE__=SuvhJo#8zfkq{$W%h%BT(p>;jG>>F0c*lLYY!Wl+ zIOwY2tSHuTbFVXZ=EJ-4XB|=`LHY~$aYL6qlNQM&@n&kI=F$}FFyR34nOtYeOVzIigE2?$dBU_ZKyxmv~HI;y9&fn3?UPeAKvLh9P5CUju z$D=!OXsx0y*IfPpobKb+^xXF8pbWb z$K#(feZhd-GNpdKbKD(l!Blr?3CReTsjg5;!2E4gP$)$WLS zO}Vm=?uN<+U(be#f~;#>z{_+4az z1Ci-Dvvbm#5F@1LItjkT8$B}?TL%c-uFf=E&190!Z0Eo?mex~rnuTwiv>N{9^J7-* zufJ#<;lE!KI~azW?3J?t(rC4&y`IXT{*6&{R?A~!kMq)#Cn<-Qx&vOPquvlMr{6up z*t8tlhI_?7TsB{;K9oXR?$gbpKXGs(j!^S)53`F!d>bXHsX*^&n)KJs=-Qk2<4x_h zg&vq?h-<_##6DxIqnwrzE+UHfUP|Y5)7-LW>RHHBUwQ-$AK;2bQosTR!^=@6rH{9B z9^Ny`(CW*%-n#1|Gu4w*oX3*^-I2~cN|*j7&Zwx_#b^id0G3a#k@$PfJC*!tACU~Q zitwFtOu?8Bj#Nxh!M~PUJX1nM6dx67ly%`7WmP6f3BZdd?ov_r`5i~_>ZM634(RP|J_1l@cMvjgr7$5ePG-f;fT$z|Umy#uEBIky&1%5w{>+GCUi}tBq`3Ee}XfeCSZD?D}^V_3Z{GH&MS&yG-a|AJ+hjd+T}nd=QM&fYv1a z!`37yKsi-|S}rPZwFw=`r!QCZw1x;40CHvYozHk4CbQ)Ez&9A&qq-09UC#cf26M9@ z9pD1nKdmr+*>i1WVg*F$?&(6ovla%LW4*hRD#-@=#2|Ga?8R=n*pwKe5VP_TE44X6 zm*^-;=3#3OI0*GDGxL*++X1XCpL$qT<_19ehUMv3h;WBFLh`5^7%w7qytT_)T;TEV zSFa{UUN!8(!OsmtmXitOKs36g5s*g-rc*mUb!y0Ks>umP`l*tz9zw~9m~dU!{y5VT zX)P4vgNS4z#tWaop{2cZ*-S3o2H5BInpSo5jC}jS5DsFrcR{-o7Quz2$)Yr0s~&I{BnYXl5_qs5|59MKnc%=6#C#D$IA}_r*Ia z@72O5_sqi1Qs@nVO#xdwNZd&ENpZZ8&AF?gT+hH2H318~wW8Cv3Ke;+TotwA+{yfxx5GJGpkpgPAD|+cA9Gux$X?+F`DjIlV7xUYn zKs~frW`ysnHW}oX)PlYpsihieS5n#SY9PLO7gGjGHSKB4KNU*aw2j$~3P-yldtNZ> zqU(3jea$YCWHvH0A1%xna>{hZ+ldgJ_S~Q%bZmh~w+^=^=>#AB&%Wfk=&kQtauEB5f08 z+@6P0VN-d@J^qm5?b#2U7vu{gp(W)p+EwGP#j<5hchJW*k+ga+lBC_(2g?7s8Q#+K zGTmR#UOziFP_g@HPpNTNfNxZBl9Jw93?OTg-;Q{e{jnEd0m?K<#LwEnk>bIFFOMhb z^}WDBdJ-z0fTwtBeJ;Le4*AqX`lWW)VI|8*iVm+o`Do~A*;lQMMrM&2tcM}9@}xyX z1D1r_J{(rup$Zx(d`7FdNv0Mr*VR@ZqlIxtx?Gxpe-G;)WcQdSG-xOmN)CDkc=P4 z>-|89=tB@3GY_;QSyW;}pnWU9q$c9qFg$D#-GR*pOp?Vf|CKMtvd1+1+F`}Yb_Tdd z&Pj@|S)Tk3|*umpxri9E^%n(#5Jnj!tq3d#kIWE}EJ+nIkCi&2PZ>0s{Y|&g! z!G3X&WqHlb@~b+1x3fZOZrTAlG|+jGq)4^7`N!*!6>O#Mb1Lx^RLl40OlPDM!Qstg%O%X z5gp`Oi@)bwB?CuQ7NJ>amP;n%V@dmztV4IGa)nhN&qsv_pU?q;Ry#NEl8d9Hg@$r@ zF=&Zo&6L~HdP?ii`_Wu2yY%-3iiV#kNVqzTKP8#v3!;PlnQK8Uo1uHdbM6HRdLaW^8BdpB zEk5$XG5l>M_s;2P+9u~pQxc<^+^`glv1@^48iWRsF(CPTc#Zg~ws&3hb)9iL9PM#+ z1?f~~PX>E~QR_|oY+&=d_bvyYFA{s1h*9D<&MUHt3|dCT#zys^ANi+U$lrU*m+6)X zzSq+k#W5QUmbB#!Y=F5$5nI=fFwE-Yz!W^lHHR=`iLpm$No6K6(YI+%$P;U^M)6I* z_XXlo>8d40-HN;GNW}-|b>a&7zO5EHTJHw_p+`XhBc3g>B`%0mN_&KD2$YuRVb<7X z>4z00a$>l+s(eKj2g^!7{w}f8jyF;sw@B%4L%xtyHtlLU=ZdO5Ic1NI-)FfY?zhD-vnuq!e)HFp~o*lz9*%vycGFn3W_+7>(K!~_6 zGm@o~IpC!^Y`Ls_dS(nP5Q1j)KB$y7YmLrn}S_ohxXitmX`OunX%5Sy z98u|@Lu}BgY$Ezy2f=yYxwvO7AB~YU7mP{I`n|UpacAvb4rIMO2OGIqe;B7#0SeM* zQl|r5&fJt>95>-VT3~8 zOSRxiO6#ra_ptPQ8w>dReA^Qq&R{qk=hrAp#B-^Vd{uM(W-_2DG$P?uK_bn5@)H(2=e5tft($d+04*@^K!iVUI^VF~(_ zbjqgoPY1>Vz6iW`|QiN!qkAre{3KRT0?i1%9Rr2aA<+e{ms8miF1C;!`w;jtZ zo5!$xr;Fuy7AxM`dQMjTWpsAj9gR|)&woUM=9n!g+Q&~E8VilXS8a)eR;A*IQPpC* zl5^l}i!ele)d*bM%3jS%aK0KciRMHT!2JxY?fR>J3Mfxu!DLgZ2&v+#`Gp^1C*a}c zm_W0k->s8Q!ubTj&~L(9{E?i)@>DCaY?1ZJkkt%Gje0Nqhxa;va95v4Ld0gnfjGwK zcC%FsvGFrqXEqYA$TA?4O+9d5QP2jN5LA9tFORUO6s9ea8`u3)a~1o!_;i@RBkHP` zek{^@2Qmt$>I}cMJEQu8`-_5mX|LfWcqk=x(+<1HRFWhQ*IXM|@X3~ABf?Hai)KZ7 zBSthX>Y1OMf}7266z*S0D;W{;8l7ocKq{d~_52jFu^8fxr~2x0%+2KAqe2KfDLziu z5Z>}}O^^@_XX_a2F@vSI}&)(AuAOa4Byin4MT&t{>O`+~^wY z>?FuzPx|uds10iX&uRCXju(h#Y(gOfPv)GF1mXUKt6XUVGwapfJ znCR{uhltz_NJxLtbaC*9QMk#KCR-fisY5-8M8=pkATUN4*=|8`5t7)x+sG{o)*Ye@ ze%I95)tnA~;BC#Bg27=kenskNv9gj!wM5rQhX(Dc30mnc8k;AXvzOx;FYio`0L)&htSq_HR{970Fba78L<-Q+D`I zdQt}Z|4vWJ^nW^1M(n+%keycCZ;Ic&$o(v^Od@of2+)~U#7I}@ZG}nrQ3_lk9D8*P(LZmG;eott1TC5fq^r(V0wagi%Or2vY*6Ol z`nGQTBiZg}2HZguW)zF`*{{T^SYrwSqKp>Fv59*xj~<(sOS27vCm0_fMsQ>S^oUS& z$qJT`TSZjOVgQvt(H;4RpNYjoG9c`en?G4dXAs|UiwyyhreGyFGa z&BXHm{IyGqr2&21HG+TNQ4APt@TH^v-L6q?Lg@_53H``s8Hen@Fb`d;A%cyp0JmIgPET` z{~9bU)-&$p^Ne7}7GI`maSMFiKISm8VvqK-gZ}hM zr!YQ5`j;asLgWsWTy}4JQ`i$(Z!V42!t>xj=AhE%{SPObI zcpDLtOSI%*_7AdLS+YT&Jhxc9f7@>V0~hg#kqEg0bpq)0;`884R)syK*?%k&<9|~m z26|Q&=KuBeGH|f|f1|fY$-|aV+pvh5hT6tSO#Lx^oarINVWynaP|S1-m%f)-uo}cY z>E0Da9?OCkp5=<2RgWtIwBA~EAP+V=EeL~@q^-nCS~rrAwiKBHuY&ib?$)%brMVd# z+uySTStsV-cer!bD?=F%u2r?uA-qr#=!{;a4mCLr*QVIgnzP=`ax=N}ib(yM-rQJf zp8j{d*}?h>vR5i9{5qGy5bAy+&aSCIn1esjh0jDByL`HWo#4R7!DhlA?{sFn5eX^r z1zH1E=`92Ldk5F6V=8uC2o*Qy&*1WVuW8J@tY`)O0-EVt0Gy7V@3^jTVKd^JEe{Qn zMsAJ7n!S8xxvh7T^y8y%_uQt$U&Rnev4izrcpvhkJ%Am&yqD822A3$>NU0k~Q3`v8mjKJ8Db_qSX??am zGP*rC)@|pDBHExNxdc}3DmRA&h`rElXk+2GJl($AVko`=-Z!?lQLngjy-0e*Y*t>g z*4pZNs8)4*hgr269&g8TzzL@=@tlOetwZek^^+j5@ba5$ zKD&M!j1^gXz&?>?|tA@VZ^ntNrmaWS=~ZLG+x zaeab))ScK7A%_B4CH^ip69g+nALrfNVxn|J?Q$By?4_qvW5_07nML4Q`7C|x;N8Gb zge=nzEtU^Ap$s5XvC6Cn)-K4rWgk*;aGFT8~x6m5U{dF z8{$}7lL%S7Ex>Fauo++?Q1O#Eg0r@vOd(SJdqn1N)trDdA13r3rlhX_w(Cy$Ne$!s zK3+BGlxVa7ya&(M&vpg%0p)aK7Ue8537iw<)0Vy(F7p;J{`Tgc4-g3sitTm0(CWAu z8t3H}^8H8{K1XvDE%Pd=^C)}k^YB5OvS>FrKq7rcfjy-S11|QAA81z&*g+du7QgtI z?+po9oLq?(LJzF!nigfW_P6*)(F*o?R|T&5d1lA{X6E^HYe7Gc(GkP1h#T2}m@c!; z>!^s%aq~o3q&z7}X#9>paui54x+-Y(NBWh9VSz#)M0mTil}d?!V40#nn{{_Qs`p(* zw@Uyp`kUA}k%~{i6>sURw{+_*3L=arVvQefa(i;K-ZxEvZ4GQ6IkUs879L09#(iy}CUVK}YJqQTEMhd03w)IVE%74GxU9=Lv#GvntI7lnF; z#Gf9X#il*T!&{|TY_JbQ0_~NEV34{y3_W&<*SQu>U@^(FL}-gm+&<%Wpoe;CH}{pq zlNM94Cn5)Qn+&vh);)VOf4X8en@n|*Gg*MZ9(sUh1U3uo>sI=R40LF71mta%|M9US z(lVmbf3#-Pa153>=2$^Nqw6U=6^_$El>@;&MmyneT@%BFCY&k4Cy`VZ|pS$LB4PF0A^Q39c@0zz+K&==wzU+uN zMo^2Q=$~%Xl%MO?zYdqss-B~9Y|=Q%#k}%B9U0pMk6KK(9=FarT<-T$AbKaeVQ~!z zlGGk}O zrD!0_nlE|0p56cY2c`$sm)lkYo+c0}M6Q2t*BRNiNJ7|uY|G>F|=D28NOQ?)po zAI*G8P7u6YxK^5a3stvFy8Isw;P%t^F!FTH5-lszKwXzb?sZC$qA0ZMD*0PVx~ar` z>Fj8+lrkb$5?IRh0SlTCT zcBR>-QMYcTOGIBD*`UW&osZPogBs7n5xBBX4Y#iWxt|sKtS1FIWTF0$LyZ=+KQAuv z5ts?ZT-FN3ztSUS7T$<$4aW#>7Aq?cqKKJ2yGaj9iak_>bvpVN!_P?o3ydUXY_xe+ zxcg9Xa0Xo?6E1#K-iE6UzrnF*CpLFpsQ@bTG$o(cd?%0$BVa7&$!F_om15h_UD0)X zG8I6c>_V#Xfa029csc6h0A$5ph}LZ&ZZY@H0|7YgWyN+vZC?RhF5F3H|5yt*-F{cF z=>F`*ooFeQX!6`%S6yo`di@|87%6|ZqBdN~gU;!@^I}taVr542AKpzEF1!-gZx41K zZBScD3OZGP8Qx2-Di;q59$2YY&pPSQJx_qM0PN%y{RVBVC6%DK@XM;(Vr|;T-C(G= zs{T(h+-;btaCNvqeCHa*?l)v`KO`X%RzC?tUW<41{pfwbXD2MlWeT8VOuZ5fr|B`;aM)HrAgGWtBNFR>!5)!}YJL~$9oDqav znVx@SaBNfDa;Pn1PG$Bp)dM!XH;yu6F>x=24^}^NAT^Q}4<*7n_%`$f%SawRF#u4h zw<+6IXXS_Hz`5iih$|@`@S#j6%kjdOB>XviXY7I1xQTiM?r<|uZ7G=_?9@0ai+ozk z#}t5e=C&c9XX1CyZ-w)vbYwJXQ&25oO#%#wa0#o4fyHfCW5TXN*k|g4cKnU$L+ioOL6RNZjD?7BR#C#k4o&-oxs_^1y7Ef~oIRO`R z`_F#~siss$*nSm0=i6Z3X&9^Luz}i2owdC*`mWTIZ+JqY;MczlK~Glge~ObwDoG&| zgIOJ#Gg+IB3)Q~cA1D7!;~0BM7Si(LWUIN7KULjMzIR*i$1H3lC`{|yMw{6Abc zlg~mt_)3BzTNoHFjcRyO?(F$i(3QCHyTrqPjl7_GRY1iAqBQX@#@k<)G323Y5WJrM z+AP*=20U78c}#piZpBn>0qd7N-Oj2`cp%MPIq|zrqvuO2eem6zafuNYu(|9YWeqLP z{0xf;QYS<|y1p($TBn*YKo>J89I_(vBfTj+Guu~H@XfDG9?>A5>o3$RYf4tZVR^$? zLlWzcRK?h%`4eTAY;?o^9PJEhwtw0+fh-uqB<|~9G~9b~&g%cupB@2ie?-etQbf3k z8oMfVI*q(L8_j~qCS<0(tpD5lS3;#{5iApei<0PlmTrEQJ4FGA`nX2yW2?=86`2uc zgKyc7wpw@Hif9k#mRtD1!@YW}M zvroH)igtR5kyeZC8Ng#;Q~xF!@(z_<UWFuO8dzw=z`em(g z(L56cY{_RLQVRwAtZL^v;0Ju19Web%HeCUrYa3Q|w!lN-6xg%+gtyswUHo(@{y^-P z?m~tZ0#--ul|@+2RGSL)ih!H&jK?xsKEbM!J4XNW^zbj*j~);2l~W%sxCy|*RsThR zdy!^NorU{?ArB0idUlpVMy#?K<{-_cC3?gm*h1#&Hw};3BLYV53+R&55^gu-y>1r6N-Pser6ynj zW@;DgA1;{f)(p3ez{tr!4XEiSR!U*XRG!z5l39=+fPaw(qIDw(oPb`hlbB(}IH=Xk zoWzfy@f=o>L!K(tKnz$|KdspoQ@KWAhM_*tG=uXhA%Dvlnlx4col7#!f_8Ro3abQ$ z!}?u&dW)@u#3YjT!4Fp}7OO7RG(bjQQf`L({&4GFI47J)s>Z-5ey3LYvY#it{!gY5 zzg~Gbn^C$NG^-vu9Y8=l%5d4E{Vo}DD^XxZvMaNAn*CH&t&D+yD8c47AeZ}qQCFpo zRZ{S(UM9-v$M+GaO9Q zBQ6I#7G~tK>1#8U;v3XA&bX|LrtoX&L}Wx!jKO=sXTW9+`G5M$?_Bi;nbu)P(5Nm-f(ALCPw9Us zHyZl;+3|VarzA;qi8|6Ko`4ujctD!5z}Qmj0CqdSyO9jaQ9*w! zmcquQg|4)QO`n|#WZ>MmE+0j4+9(mR*~g^2^K; zAhYI2WdtYcu)>QuF6Z^*EYb7pC>g6sx+P@|czh_ODiBL2@1Y$unU#4Abj4bhhKkr> z5R2ND12d<#Ngf*_j-5``2?CmXys7@bSMpLW{CsPIt~b%ccGGZ^a-&ub7W zyrld_Nxn10T8a3{p@e>5hAsS~_cSi48LTLP$oL1v7f|UBfQ{a6NLZ`Q(8|;l&+gHo zyQ2!m+sp!c;5Xr)u$k>YnAL(|QbD{#y3n~~$Hy9EvdNnGDh2){Qc<^0<~K>G#PSG7 zD%-Rd;nD?HrJl3(?i)8Cp?+Uq?B(dElj!fMT*1oaU>URA4G*-#X%!8x9#?QlOgKV0z1Wu^) z!LzD(mM+;!YR_Pi_BBAqvO4P7^zT@uKA?@7nz*97ecN@=O-!37ZZ?av@>Y$V52Hxx z`sMZB2D>0ai(Llv&3@~;ZgNB^q9^f-VML45v(dq4m7oFh1~2MD{4FWHCu`x+f5pJb zE1Rb^uEUkO$Q;tY)BM^u|C(qY3dE1&Az**TO6qQLjO4O@K`!IaUzctcFR?($ZdwSK zhyHBKTy9?7ZO9!4<(jnKXiW;)5qtCy6T4s3n_J8wx42yElVX2hjJ8M|E*#>FZ%flU zb*6B0jsmN-W}c|tLY5N<>Yt{J zz4b~e;QkPX@|&3@^?1KAzUv@XNww=xC@r_%6v-U2>2{F?UJhH%dE~NM_|VYE4e~Hb zAK1M^1E2)1j#W21eyylem`13I)y)a5Miw;}lO4zfD`;%9BtB_hD+9uYS^4BYdI_M% zPmIK9Psf8zl__VJU5hfwkmk$eflem-Juacx$DTbf?}JFzbLNIVvtmByaclGor*n{A zYb~MEDCAVv5(fE?$iP+LsXvoYQKJHD=6X2L)Xnr6!t=4{8s$Sq1OA{ug z|3#WN*ILwI3E=RVzz zNqa4>63nJ6%5%-_9c;^YZ>6dnUQzP&tA+_c-N%mER>>yf)U~js!!~(LfCYINd@$w?(l4_lel-Lor!! zd!sz(wxT_GfoQerEP+y|Qr7(P=SP3)G-*4Qg-~m3i8F09>*u!#RHY>+z6$X{l9#bm zoV9u&pDhsIXsn8qQig>0O%%AEkFkR;yhim?B;bsp+@akcZEt1J&t}Z@?g)QYR;pX_ z=}D)rbs$(z;4<>#lQfrIQ4$bocg%e{6V0e?W}rOi_)eXr5`^XnY@?e3DrgTNDyK=# zf8DN`a-y#lL;ummOxrmXPNw;Wpf_e-x&$gM(1X9u=o}$sM|29aMgd1#reUmEf1zk) z<{jD<%Ny)&N3c(G1nyVuOy}?6vr`Tqkz=Djr)|kwr7`p~7{&-pq^}6Wqpvq^O4AhL zTgnHgki*c6Dlz288Vu@(|2)|v?=5lI4sdFOR**bf;SrT`>j5-#x0rW40Z#rIPG2`W zhY0Y;z)+qlK#s!;NQQabRSd~e-pxPYpsZboBG)TOt!3+Z{HKcaK z5F#7+s-K28maT5aroCSjpx*k`PaCE;7JugqbqnN5CUljj;l2CXkEm|`q)*Yb;wTvz zkUO#PrJ`j+JehpsuerwD=mdF0_ly%Z6B~nWt2^QrTYtp`F#X+;;aeT(_0wNphfzSNca3#tzB=e8(A26wgE3WCxDgZK{F8{f1if zn;sDAgJT%l-t`2DwCQ6FaKZ7Ps=8n2&M7Wbzn&{w@?*(qmn@6JTCk^ugPQw8-lCau zLMy^sYnnd$28jPVQ*`Z4$yahM@ZP;Kv_H#z-sn)q^u6~4#?+5Py9EkX*|ZNtY!@Kl z#FcGmM771qr>0iINNuGvRp1A8uf}SIIyMt2xyDc)4jEKHlh$5FY#Sjr z_n@9^YhsGqFGT&4(i1)X#{&@%cGW@f|BiO80i>_$Z3Vg zBS2BbV*D68XGY-*?(v*pIFRBXkW``oTe4L6&B{U~5pq>WmI$1((F5g@2O^4p^vQP1y?-_hYNB%)IoE>b9yp77gnWG zy!l4~j~V(rAVJa-O?41?_Q>V-jgtq=J`|aTF)-A}nlRn)oq_n=Rd`Ck6O^~empbb& zw#Z}CTb>y=vQ$$|S^wpePpF8E85e}OG7`JjqKf4G$(}>*<{*>U&8Eyn!zk;=OY8ReaNIYNyUb3H5LN$JhuWi;cd_PK9)!^_2aR!u@T+dWph zL26N(xYfhmJVZtu31rSsR*f+W-rWX^RpJUYPBvMzXjBm>z+Zasy%nEBrmRgmI&nBktcd`PjE}(eF->_pWm%xmoTK+QE6Okp&(~pC9x@) z4U1wvU65kpgY#kPfZ&J%bh?k{}u#(Ec;DujX|Llpir)*&ZPt~7yRpNCoK8)%#58F z46QH;q4iRx{G`P;?YNV0%M*Ol^8l@akCaUjsmQ?L{ebLO%Gnx0J|BXYRO?=#HIP0u zS7$-8`>mW@(115DpF}II6~d@Z`K>IV69Axk5y`$X*O1SV2e)FNe!hRWo&yPBLw>FM z^{x+6&2_z#iiT{#Lp#|y0K(uGF`C)i6iBXZAJ22B5HoDiCt|#(ADbx545CtpliB|o zK>=Ce9sH-4T-@iQ_c0b4RCp@YF*3v9d^w}@Sw0xT{-f*k z+0R{P9G1nWIX9~h=acS(pphOhQ20gj#0OYAYsm{9omsqOx009J5daU4w`aPLq3Qe6 zX2-v&&{f`!XR+KS{%QuV?lT;erake02waq#8 zoVcFSgCbnmlgedv>}qD8E`ih*<@C|AGxK_#mUVCpFo!jO;adYUimZnd(L)2W@hI0X zb3|n#_I_65dRoRRZbXokriLN)w7+#^dicw0gvT-REedZUyfmr1p(|wBXj!iV3mZ3- z-U0d_D36CbVyS&?hZU+Ie>cM$sd-nA_n2Pqu(xjw>zWc?H_=!g2mcif+(4%hHljQ! zsI;n&wjV$gRRZe$b8D#fL%-eyJU;b|f$>7o+45J@U`*Cyxjy?4T86nWJFPyK8+{7lA% z6Hby5X@#lf0;v;4-pC(psja|yJ&KIW9PZ3@*5GP~{cR)zD!e%Fl$f;>=n2l0CVo`a zqxVMeL#{&}Yy$$drUV$+SNZz%e#ABr=VrA9FzfhN_#Y?!3h*FfgLW5#t>rVxZnr|Gt_26{v*TX%^HgmG5{b)vl)%rN3DTPjt*hlvc z^VTh`9lZdp6Xhi)b|Ni`Z_jSK;Fc@^WL>kU?bOBWPdy$_!dA=$eNl!KSdm60nfPFm%_<9d?5YcNzPLSG5O0*hboFdjMP4xhD@&NlWv@a&1QQxz5DnTF% z7%+gWknJwI%;45!tFyAM<0QwaU$;^6KkJm>Sx{udV=!DxDpUvBm>yTjZ8a{f)Z%u4 zPm4u@-YDIuhd3|WCHL(Qn2nT>raeh^=CS}z;L0`nv-TFSVrClHTn67WClSTtL(*_= z`-KWcu6ZKl-3~>4n%&T;ok|S+Ho^S*O!2iabFQ@$9XBSGPx0p;AZ9(F$XT1T46UbXk9Ds`83>Kl zdLT(g<;@1BI^p>Gy4hcuk4d72cxG*-f4y2x>AiL&PYsBLB}q?+0Z_aja7>|){h%p# zdL5((>jZ#ne_ zuUo(m60RSNeqX~Of>Asj_S;y1@Ob{Vuz)JlO)ZS0te#yx#I#&Lp|a&v*w7q+g#TyW8)O^wfdG%ZiXLd^6nR)y zknfkwDKEPZS36iAL6x#S6<{-L=n3S#9>fkFLa8t?Jui0jq z(TnE?@eTWrH>{IlJfiNKk$StjyU20eEu&poxY)EQ4fj7BB%-ZP>R)O4$r|MGJ6~#f zeHQ-C0k>Pf$C&3MT-%&HI0K-&`qeT(j))qja%VvEo*w(a4EAFDNLu6w>%>LrCwIPe zOQ}o(!Sz&BY(I2XvURe&?mJ#V`a6N!nLqdrs6#5Zp>wxHNqn?UYK)Qz282R`>Rgxf z5Qgpv1j6asq3*f6AwNbPM}3fcSDa{Q&hIJ&}}~_>(lhiDSFG2M%FQG*B+$2v%J;Z$4IJ=wt`F#P3_3wi~^v@J|gl~Hv1pk$)e(LvfhKJUwdE{o)t7I2DFWF zJQ7I{I4(KtLpVS4^IAfMKd}mkRxPB zM(9s0(QaI7`TLuD)A+`50D3wZwFc3g&WYD>EjQ%>XNq77JVx_09@URbkPhhJ&|FR< zL<@Nw0%o~4Uj0<0bQN_nQ=y*iBlk8)EEP?$i>v7L2u~y@rJex{KeTP@nt=7F{CD{R z&g33Z3G5jUg4UU{prEp@L_mh`S?$XPWRWCE=}M!VCR{thk05r6e^=_G6Df1h6WV_9Zkd#WcLq-f!w9MjU2HmTac2e|7$&*CC)oC*^$oG#D^-n z0q9n^a+i~pcjXl3TN8e2+(Oiej8>%NUxeP90>Ud;Rhd7isjV|i)@-U;!vH`9 z<|E`TYG4Dgk8eJu1qO5!#VUJ}MmIW7CcKb1O;?)=&cQIxrdKAmx9y-jOqiD+49cphGQDmlN41MicqiIP*z*9VVz zg!}l-K?of0=Cfe(ycQ5B&IIVM)8wwlk4=hxdtUk(DB>OSEO%8k&W?93%@4{WqN{qp zT*%1-|MkIH{-+2359)feAMwQT7>5pM{p=}{12iOB#O3I}PGfK1Ghqi#-M?>UKs5qU{lTNg5s<~%c2QMDC$UH|V z#-0ur(WX^imdi6N(}W}foR-A4#A-8q3qN_zU&Wj7iUxVgm}%9(j^DBgk~rF?6^CoT z%=pjoSWsa$sfo82PQ&6bLh6zU;&C{k{kk)VOEe;tg7au)84k3hz;?frhM1qCiDMJO zv%l8iwCsKm;GIalYj3+y-t_o4>z%e(26EG1n$;bo<>4TSF~ zypWj1w3Lq~y+W#7)*RQ!!5~j*(GlfPG#@8n;yG=8e3mkXq5f?D#)q(3woHJjDZ_a5 zRcKi0i`QHwXe7G9k-*O6o~Pafo^!Ca(7v02ClQJ& zpe9iWqQ5Qy86cSjw28?FJffjiG`sp*94xEtjSP|xU2#U~hHYy=#=p{%zoRd}3)_FQ zpqD%92}gRWY0Zg+f@Q`=TlyMt=PlYyG;r-GsaKWxuLmCpw#j$DeV5o#WK=@B;->Y_E(4| zX4EkdMsg-6sShU{I9uA44~vx5K8m>UTdo*6dKq@k4Go8nq-|Ay)4f)U{@qUJzGPnN zt*{Ix=z72XF$00uLCrL&i$r|RjuD6DoDm-%q5%su_lkvw8MM=TAH>z2#MnppkRLQh zWk=M1t~}eBb_IxZ69S_}$sG2YH!GoW0iuLkw>H}5{p3NfU`y2>;>q@b$v2aPw>D~`q6Fx3{1+#-;^Rj zpFYKzVxW`eCpREw+pn!tmK?U+lxSZbl2=VU0qT;H%Cg)RFn6X=K75|rcsYr zU$Swq>h`pcWWMiy4hQsMLWhZ4dK}rvY3HXn7w2bTHE3Wvo^_GIdL^J%p(*mR?*(a+ z!@Tok2(pa<9SIF};D5pAIe(2l(J5*=v=i?=8y~c725nhgcWcF%#-l z*$f)Wq&MfB`oc0bl%=d^zhy$U1At!xkW{BUZ2TFiz`ZOahadB>;%@VlE!(nBYG(58 zakP_6)$-xmiUO688dr8mqo}S&3A6C?#_24OdTCcqsU_Z$MN_11hP#t^qws)PyX7v* zoiXv=%vX7WIS0zA=lsyUj_`pm;|!WZbP-cE8^|ANbK{q;zg3O<8#rb$)?f{d*ZfvqD|nGvT~m z(uYXes}=$2=Bnb~eRaF-;RDs>pd5wYXIj1_IK_AnxvT=s?1);6}g zxoH#H&kt4m4g2p@-}36{xJlq>|FbP%(m)+-l$$aT-60#Uv?*%dCu}m3qS)xIqpS@h z?r=s<=mKAj$8oH$f}TlTl?$j_;n+5J)kIWhxp#F>75+~yXmLi8(|Q2Y$%QTfa@{uA zoRjv`b7ihCZB9|W^rvxOC=8GB917o<48)z4=7s}?HCcVts$rGXDi*4U9pjB}-Jr4! zK|!}$tm7)YVTS))d=K$7-vt;c+Y_il-{+G4xTpK#@oW;+YerXJ33)L=L{eUa68T*1 z)KxCKZXMpI+d3X6Ipv?^&241L(r`BE$YlgktMN;fn&S>MH8Kya*UeXQRpOddlMxw+ zM*!^(SybiCW{mH^79eLrJ^+qf)#A}3C}#`b=%H`LH+G~Vj+&8l(As>~y%jy`8ZQEl zHQVV}`77qV|MT(~(JLBH_+k@<`0paU>Tfwa3up+jb)a^l1QCI(ue;AwkP~dGVFXD5 zSp2RD9}aD^$K#mQ2&z%XJCQP21yjiZ8p`8ctVZtl65qY8-?7a+z>0oku)0teJkR-UkY(om#dV}*B#26Sae_AVuGySZNSIOJ#h}gQh*>Nmt5PfLi6x0 ze@>!dSdx5r^z{(W{dfqqQNK!9b z%|FIg^!-H;LfZS!Hzos;N)(J(vNODJDY!9AjObqERleVC_33IZRglN@mxWu$rNCK! zJOHdA0`a)GJ|C;@`4e+yV!+RO47xkX-$mG_R(NQpFK|4qHxM`%xvE46C|LRRGsr+P z@X2av2@JquzXr`)yyjK>!UStaYtzg*$@zgfz?-#Nsi$&kBP55F%R-DL(=i=+^mcPn zYmE%*{19Aj!1Hz-^=gUbSFxAzoPQ~}q?kkqXX4|=pm`d#*ywXmmA54Yn?=aIIwmdn zNxhDMYR6^=3fm;tW^Xx;&*F3^iX zZ6O7C*2)L@`$dAgRnOSkIcBd->iss(!S!1Wv;2iwutTjjn7Med8LOXdhWEuZbe`|g zQm$|snHPA5ar20JXnQVE`OV1Ap)TRK>c+wahswLAP9W^J)0<^?TUE)Jca?@%5h($g zgI$oV+~#}lO$|R=@HFXu=VK0J8gMD^CeY=jt@sPFKC=8G7(SRzyYj6{|5>C4MwjCs zblzJ5dq*J{`H_(#MooL&YWKI@&MxAkhIVsGJXu-%m^qfJpjMT-nv>Z+V8|SyLDxZw zs?YSiB2}}k;e#o=+Yj&UX4+JIkKGnrQ$6yt{oHw@?8i$w$0f(V$tnE}%5xuud$>)z z*Xl;Vf#p|)_W7yB>Gq91W1ZR=Aym}=+?*S4{6P}+e?=tYw`pFsR8SR{2f=>Py|Qmz zzhCT46osCBE?#^-@ru#VF>@20yRAUgnQ#Lvx~aY#u>F@L(|bjOqFs2~V0|9Na`LpE zp1v$6Wg?V6O2+Wx#QiZu&Ry-PG}HAIW@q%1V`-d<>62+ZKJ%1E|F3>Ay;V4fJ-q1P zwC#M^B#bhaJgkm;-^RZ`sh%EwB;FxsF5SKxAYMw0bV9oQ#Fb?6Y#DYuYl^GI^;cLV zjEhvD-YV^&!l2OB=UJ7*oWf9Ma@=L}mB4#%JAa#6h25nxRgnhUJkJdkn=A7+lv;Cp zyfc)g^|XTw31ztUZ`(_Pn25MD^jxQjnxfSX|NGc>kie*ZIe>S!t9%|G$S(~`giP8# z9w6NJ3JOOF(WeuZ9-|SQ3!T@^Wn2^nWQqg%xeq=eKne7@;Kzb^7gie_{XN56ueq=v zj9@d8X!v^Kn7pKFf+z6(E;^~r61NrgBEKPIQUz4iI>h3L07WUdBj6Zw2&vBQL(!Ab z6PlR*c3k*w+=iU54nc)piUnMDg}gScpOTjd@Uk z-K1J;a>qlxVCWLBUMA8!anL&5PZq6Q5* zFP=t_EA=tq_juA<58D?j{zdZ|k$yDHiEvC%tYX)ozXJg}wd&Zg7rd;7N(iTdSR_B+ zAybgCC8H|9G`0$a;B0>DIF_S7bvg1UTTT_>KdZ@xZuWW4tIgI=pIIr z1l;`5TAqfr%soSNlgi!P*B??qRnQd*~Zbcx%%JYBjL{3JFT2!qtUFBc-~Bu`ew>ed#!405wg6*``n4Z@Vy3Zl#ES|yJ=#~F5|7r1 zL<&-cJ_pVAuWgZL2MWpvnSZO1&M|wqFoE8 zQ!l}_o%bqV?nNrNksG+GYcjvQ4RjZu4bS`^2GK(>u8QPZ&1pQk!~Fy@(@5qbr&dTW zH@GS2Ky|cm^MX`OfDQR3$9{Xup=r$@R6N06Zw4(mfK{`@ALbaVi@$WauLFhbbpTy< zTDIAcBd~`x~)t#3J@I-ohj|+1!IMcpyRoRf;imm~(^&6fy>Y}0pf>vi)1c5% z-ka%3#y2Q|<-I9m@&w(}GsAbtXw2n|ED#1*-@+oDQsn>4HAaQAa_n%~znx#zW3G2+ zf+qW`C;_|+@D)R1N8lb;Gq9+}cLhSejk7y}x1&zIVrPu#`!TX&M}}sAW29>7{LXrf1Zq#WaO5uTYiZvnz<@#jDb9j9=>KawUaS(eL*lNVp( z>jqd)I+b*CLYiFk$25akY;sZzR%2?y@7v37%A&E$6=C?x?!Nw@zEV4%)H>8or@A`* zR`HWV()5Sdm(c;6CFFp#(KPvl5&m?>6@g?a2v~xCsMXLK5v_wUPW51V} z&%`D!a^v9HMnloXt*zCTP;3AGH6^9MN&e#!7+|G9lC>lnd;usM_nGlDSJlSzU}^GE z45N+B_#k8K+tDE*2J?5P1qs}rJQRDBVcsM7?Y&h-_K6o$TUX3_qg;rwM`M;LG#@<- z*d7j#XFE1-oqke{AAVK=w+eylv8<7P3nVA} zlR7D>WLr=pXXWUfM!=p058WFEe{2_yo6|=-C(WWWB`ZOXj@Qmkw-n?NLZ$BM^G|>q zlalwm`SH;>Q#Ddz43&OBPG2ltfYSzI0?sVJS!Z!W z8Z&|1K76s6Y+z@zy5sg!VT_F@N7!v5N8%QCS=3=Sh0&KOI?W6!$Fluub50=->7sRYn2H0KPiUFzDUydC0r!u69St=h zqkN8lNV$_ljDV3s+l#GY@I?JE9U?6*{&iGgLr_O^+zABT}-LW_p;@L04WFu~W^~);e7wgr3sQtI(oFrE$)y!zQRXGzVf{jOlrlQq2@2=} zG^>J*O+Y~c(d({!5iRw{`&_^5ER3WV_;!cCvcn)%^Kn~_)XK7Jd|Xcn#m9z0(9%;( zN`uV}(vy~#cU)}Kdzy!`SVH{%)IWULDM~uLQ=_bOQ@f0(D$;^vV;O1~0vPFs?WF$_ z?!?%UY=M_-Wx~20B(F?4gZpQbRLtQgSw;%MOpd_;un;OVA?~Vaokk&0dY|vOjTl+h z0Pk1Ix1O?1t8CcoO~Wn&tvy z_~9EvBOpKO4NaVj!?do$L#K-5~^&QWhsUMg-7D9pJP}@(}AD;9KFDmeUrtlKczZ|qn>|eQd0pM)k;(G)m71S~E zo!dr$Q)3NlqmXfmvJ^Ue2;Bw+b`lTn*(#80IOVU3{#6F`x{u?Fy>J?w4G{_4+(3)I zq!m6*U(Uqt=fY(G7*(rh{}jI2mtjb3tXy73sn=j7K<~19x`KIq+yaN zLsP5|QiZAIzM+-qpw0w{dP_jsu0%o19j<{GR(i4#3?r?&8#DTs(_3*t!DL^nqaItA zi7M2>OUfv9j{@&RU*xvXyJHq#m`z7)WPpJ_EHn08dwS}W?yK35Rlle#<8QSd51)PO zE72m2ebiMR0q2w}W3wArY3{Puqyej_kDMcnzy)EZ8J%{2e_K-W*zVS4=P>8UTAaX@ z9y(rv_YY-p(TZ@@Ko(O$>C6OXs^!S~J?rvX?0p%ydWZr;F~}-q7DRn-;(W}z@u&kD zA^gXn7zSM;*YsIEa&gj_@K}hGbR?lynMGp}iUT63(!FPyAAL*BAG%|HP$zXS8NBkM=NnO_r~nE@K|ue;383lLpl7aR+#vk?3-IyC z(~l-A3&ZeGTd#f0E@0`CyZM<@`$L=ste%qs8ymFyK+2Vq+)|5$d%|B62il{55dk&f zodt`Lc>R%1f~jv|IO_LHW1dUgBkhAf;}&ITqD9^O{z@}1BEz*~%zyj!%9U}=K=Jp2Qlc@Mm~^@LcYV($Pf zhnswlypupmJ&+u=s^6T`Sw_hq6smq^_ho8426OSxoJ%%DZp zc;K`;C->ljTDk5kQgbr7IX|L!AMK3G+!LAhm3EWz!gH*-)r8*7 zREKQFOK)5DB5MjeiMufDNd@u^r@T6s{a$i?#`YN7K(8Z%f1B~KCh~BhotTt)B|!lU z@2*3UmD?&yNy^T8PIUX0D+Wb5ENFxWHlaygmy}<$E*$pIeQD~T*3#>6x9T-u6#}et zTrnyNnI6?~{@pjbi}59T!rI#y8GIUT=QT0E2;rq+*_B!Jw(MSYPnXer?$gY)L@p~4 zGF1>=H=Zgw=XSe6A|L@Ibl_(l5tlCfNrI1Jy(;WPZ;#F8re-vS)+eR?12f^;^h-DB z(6DstgBtucHpNSGp1!Ic9_n$)kZ65-Q<`Z(uW^HgdNsKMOW2=6xo30J6qOuDlm(qB z_NyE+|IGh_&GvV8ol?fVL7cEQMgoKTyPW_q&V^{v3|pLF-EE3@x=dv7hVk%DzdmZY zM*aRn-ILL}6s=CQEw5ykQzoEb&Tuza{dVM7@DL0m1Li2AeCAOH5VNG$0bG8Lf&}eT zM$VcfI;)H9KEg?`I@9R z{zSyPL=?^bDNjD^Gc;^y;&Fk~c1$mDPkj+ZH(ErV7ALH~q2H&#MuW?xHf+`+YDbve z8|tHbPFYZuc2N=h0EVNhnu*}rxF9_!Ro#shwkY<2SNM{Qh_+X&yjU?I&T~bz7@ImtRS+YzuhcusrO)Aj89QYF=ucP4u?y}$OJ0kQVBdq3YKcq zaiT6JwpiAUxGx@A3nGX9!N$-}cMqpDS33EOq4*%1B0f>IK1C!U+EwRPG-T(izBVT9 z$=a44E2NW)`K_0_M!D1860wzkh4dBFt8`yN!SQuAi2@&rysJ5Y!?$QF&wC^*DvwE$ z|Kic4a+h2}@G_t!lE?4P6Kt$j*;sANj!|nVTK-Zw1MgCCtna+&Z=49hv`QxpDRQxY z`CH4(a^EmFa(rE44ivw(RmGCfGR6le_2I%Xi767w zCL{JuwhI^!++aCaIF7vKeN6_Q8*%yYY@S4A%?HlnzRMHFdLfPiq&0IOf~~qQp76~; z5=6qZt<}C4b%i)in?sLXAg&~}3BUE1@m!cH;(3-lEK`CALvejL+?WhT>7;EYsktfq*p!dFHS^pdH(sMXEf)3 zzQnQzENj<@%^2S$JIgBJJalYS`##YX`u3t#T@3t@tuuXJcA=MgG&$Ee6`})@T%2Bb z{#|V3jH;Zq@S<(5KovmNltIO`YfNJtKVEa#g$Fg!U0cIr|6<8}U9PmyOW22PiexvWjNJ-Vdi9Sv8gXCvt|A+_KLPe4BIQ+aV;Pj;cK1T3 zDB55`74X=UYsB$x2n%73B&2KdX`sqg^{ZjLqPtO`7sSYTO9IQC>#xbXo0=;yi?!rP z>~sj=%3FvdE*lvgo=DR!5po6!aAuCr%TB{|m;GZdCphrHZkgioDf74dQ8r_CmWh;a zOZXV0cshuvEA)zMQJbTeNr5Pf{n-|Ny1=Jw2NyuYc$tg*Lh1wJPJ-@)m^&^M73(p! zyTQJohlIT*!O01z=aVru*7O+#!*`~dWFBkbPN`@8iJBVY>taKK$}P0y`(PBu@A-H_ zEe+t}`a(?y9L0CP*?)WX1hgs#T9sIoaffwzHT^r2ONDA}#+AT_7|H zc{0hqQ_4>H%Z4ZEFxBU>Y;;1--go!`c*75SygfE1r6#+`HFeBum>o$ z0+C`MJe@3fRFMEM*hyf4vHBdVhVE8Sq4l0ku>j1al`0l`>Lry7aB>yqQdG@x|>HmhQwZliZ&H}v7AM^BX z$5MSiPLeqj5~m!d4h`B+0(33NJG-Xt8o@dsdTW~mKQ0p9MB>InvacUPKj8j+M>Iod zlzwM{@Wf7wjU(~+wsk*cR`nu63gmPX`z3%3|2E%S&5DN$QMRq5LQtthAVR^kqUM$I(+Bs+RbvCWobHfi-Vu=8^Vc5(ADtBa8x0@G zZ_3^jCbV>3UBoAeNXqeD-69<(E6WVW#hmQor%T3F#m1C4|3)|gePx)J^l(?>%H=_NJ)^D<3s;v^er|3+O3sT*dxpDu!nkNno3o^Vf) zJnJzp%HjD<=-lWg(uhH#@DW!)RVnBGEyG0XS`(6#?14{Nf|i(2=wb^6iB7!WH2)9x zmCH6`P;RA5YF*f#wBm;?gYg6a-}3O-sl$}dN>^| zGu_!g%D0!1hw$f{R_WjyU*QVVheH{boxlBN7W6qk9ySHLD$ylML9Y>hLj6jXhoUuj ztTu|CE^11$8#WQd+h@Zs^%fXAPg)-P_~b;FkT0w9@c&QieO?}y@lnOR{ z%F*urbkVk+Z9Cm~BArFT@{G!&bv#$WKKPc1*nIvA1W?ig)oD72yaI$tG*-%SjK)b1 zgNWrZC;a|j!30VK0qs=em{|p8Z}cbA4q<2dPH|l0Ra%^A0Q3s|8>-FgyS$Nm&%a*6 z{@&&8r8^_Xz^1OXW9`v5#In}=iSFVx>@|uLmfWO^4hL`}y{H4(xnoP0qT)QT0pTE1 zc&Q4Sfg(N3hrp zY69{1DY8Ki#{tJPN}!?)XlMtT=yC&altVj5o2;|x(+$sCwkfF|=dmv9D41a>QX|NT z@;>ZyjH35MudUn0;cXWr?GFsaG-)+h;y>q+iDC>#{6Z&zhkdI>@}FXeY4;XK7QGg~ zQmbxMYjqFDFRNTTnig$9qPh|~wq4H9Np{#})XRcHL~Y#Tq|yYnRt zknY|0y^SBCd-(beem-H6$;G<-Y3Utrd|~nYA*%?2iQQou|h4^#at3;XXJYy8ZdtsEg^#)kC6$%U!%P zx5v=C5&rbrH^#K9BYH|-{;gjhUR?oc{X}%LmnG7(KDs0)PH_WKqv!Nlciime#FmBQ zs19QCVPH92W1-FTO`#b)nOY4GT@l8Wr>?JI)AJzvlaaI(bTWQHzyOL9gv75Yt9tF9 zXr=l<4v(y2;alOFA7*)W+2VHXTtU}BSB{H=YQ|)$wJ2kydLt7z{P{Dg>yAvboBe83 zNt2GQ4hV0b=Mm5mNeWi{{ej!f>B82fm-;WP1s16d6oRgeE%wqiPUd#MaJzZT)ok zJAN%!*92$=ZK@=e`R(xbFbV!cg|Z3zUQiH;A5C8P@^o%tvc%rzJi@@%ki6(~rc46r zs``%2TL#34jdLcDMc>z>MH^JE;!D!p9Dj$5(u`zK&!t7Qsc|~4O-~BmRO7S)PGB&d zwt*$GG_hRib6)=27kr<88(|(qpU7MVuOz&j-C17QQvvHIzvswMJEYM)dK2E;!1mE= zqF*$pJ-&(cY`8@!s+dA@K2Kj_#0-%G;YnNs!ns4R`sfa7&DLLL6u(jqJ||PK26P45 zqAorMCWbnUKDwKsaP-6)$14SqYb&x{*21;9Pfsv!_nOb2Al*QH ziij8bP77#Ei0;Bb>R!`SC#M}MmCsQIQUpNge7k~JDljb|->9alx;4E(8~(be z$Vpr@Vjz9Hp-P|rVBm0hex;oI$JoMP9<{?1SLE3|!@g?d{w1;otnR zv&5t&HK=_?LevdfkcowVh(-u&+G=S4@)Znq`R z5A4!wrb!RZO#&4GqV2OTn=NpSjX`jdF0H7U`LHXLSztl_%tvOT65D16+Qanjb9I%x zAjqv)qJS;XEDv-MM-v3vk47wGuo`GTJXH>egbo)!G(O?8EoBh!CH%X(-)TO@znOD` zE}xIg(fwpt3BBz}Ah}up@s5#T#I^KDyaU#%3?08Z-9m zCk`!)lvAdPvX~}U+9{z$L3LpV+-9IU)HGRK#>4s}o%h<^g8z!Ll&G}LI3fDB4m1Sz zGkK@;CdnLXdFiWjzI4IIBfbWPn{|jvwScbz0Bv|Vb83wKAod@Kx;tVww+# zA~Ba}`g-RGBwU&qR~R0YF0ei~$e|2#uvU0j_JZQE(-t=Lu-trt1h)HTXcA0bFo{|# zTPJTXBu3j|cWR;WZk~EoV1K5MKbPSOgNBwf6&TozaAyr7vT&;pmIHO3kVfDpdUP6O zo}3R+8)TyFPBac!})$qNg3|Tq*G% zAmzP~VdJxb)!bRugrSPSWI$*bv(WJCOS~wv6@(gT0hC(`Z~*!J@@`~e^XbZQjb-$~tL;q{E@r~4Q2>M&yZtk#Cb9yGO_#WMa61YL~{>dHI%D_XO&#l-d)N+yi5KVE2OzrLMCDLFPEHmSQ{=Ly!Ka9^&-YsQKy=l zL+{ax#GKd#_K!Fq)9w_C|CrtWTA!==u(6xv(xXR*Xghxz%Hsp&BL(fM)X4sWYyrD4 zc^$5LII__CLvFm-tBf0?*r+Sk!vr&L=lr+$6%h=+{~)EOcxyu|sS1Ly!azn%)+*M% z1{))Akgy&u%uL|;ucSB^TMD((Tp}TjejC%gaftCsM3MKh02ASc=C)u-gn&G-y9v%; zyjN_8pOB>HdVZ@g$Lg_XN`vqt5o=Kt{m*|s4)&x9td7$|9$0v<^nUvBwcojeKtzz# zj7D-;`bTPz!q3&5#G2S)giqPHk>i=WEXO;zpIrfNI z0d^VwYxn{^e9;FmUSEuicBO=XI@9iYk&d=w1ENS|$eaXWaOjd)25xbMn&YD6^WWZH z4DKYqP0E0qJxKt;@*=l42hW$)=#hwV(w!zdG&#>C2a}oc?8P~%$l9O?Q1F%K))Rzo zg==Ai;$pkLCmqWy&b}d#mqkp4NTk`e`hUt6M@X;vMnKkfo(XMM_LEZ3k2W3VM)BMy zug-lQ^pL~mXxR0A3R_qg;fFxUl4A~=u&51WXm2_$3x{_zM%eB*G@WI@fV zLw2MbLvkg%ceM$JH5yJa4CNtDlN7wg;Vrslq;MsRsDF#YP~ajkACgyQCSZgOwoFys z>#Y@~94q_4&~}4h9EmiNE&PUJC=?HFi+lN zi9iJ3{TOZGrrtcYhvwV@Yb7DB$S7IBl!5y-)i&e|Z`X4nQ$WO#e-B$WTwkFtN6ZE(jQVW$Is_&6L z>@g1l?jH1tharWv#-M{7(%+}M!|a?ZkCj~l-x8tZB=C`H0tcHLC2yi@YnT*0KG0^T z`PR=R>@Ja{4!mc-pNFAOmi_e2$Os_xNlvDY{m>K_hV+V*{*8tiw8dsV8#V z-*%L_b>4&UoR7k)6~NO8asVx0GEwY?mpD7qA^DSATNFK8o>RFF=7@^QqSn7Fj$=Z2 zwqvE>01$OY1eNh5Q5#WJ3u>qSgNsP2uQfo6AQ{WMK3lmV6P2tL%m}@Gr!$@NTA`h4 z{3qRpNQ@p{%J1+TmJ6wzmP}0e7v6>`bkgwJPbYav7btk6%xlhhhjENsDFh6+mo$dR zA`hnKz2055*dAV4Lkl|%tmKRo+UTPE4O$6)0EN{&unx^?chc+?GLaSW=$8H1!Vo$B ztzM(X_popzfkf>EL#q`AfE7mS!1n=^O)ca+CbE5zz@A{;2Ek>?QMjhUZsC2e#O$do z*D;bOa;sh({&fSiLuTK!PBsMhB7jMQn#N+46jiHiecn`s*#CZ(msA-CiyL|L`%Vt3^`7%6SSxHAZRKyw*=vI(#mPa98Hhk(m<R%pvui9t_eu&8r0J&oiquk=i277s7ImA?_QLTi(5$ z_gFhCSk`f|dKe@JADW{c@VLY{Er_<8UTk%yVb@{C{sfu5@-X)(@X4U}ycXlI?H>`O z^aM=3J8ii|LU9K_7D_7{Y$s{8zGC4qkwur&8GLwL+^7ZzLbCTpi19y_QtDVcwEDcT%c`hq_;{?mPIzuK~Pdst1D78Qb z;22Ux0wkU8snpF>u96sBRa>T6%ennOx@_qlTY~`60Fn)IdBuk#h1@^hsPlD5j*VYT zs@VOl#z=HZY&`Tl?1P_j$uvOYN0p=8&i_Q)zt(Y^7{{oZSj;sDuSVDxwBJ47IFBf* zAk5m63=QZVJLU<8yCMPc@Zw%QJ;a~W{{)~aFZ-7M zps;FDQ0=PB>*67O*+ozNT(xmoXwz8bC$*G$(X(XJZ2AhHeK_M+=w7^>hLYP2BJr9! zh+*e-j-O)h1Fx}=K*gbNq1-p`k+0y^ z&N2JRC8uVE z$mvy-eY>NIu$Hi)IipF4&bWsy$miBG%UxQ1qd-03e&6tgPqJ3D3kV7f(2?}rjYA!n zud-tMzobzbiH+q7l>EKd=qeTQ9{MGO9ENWPKRH+fM|8eX&T*n#fsU$_d@09^a@TMi z3a;3GhUt9y%5Mi7O}st<)-^!1dVTZgTnku{*9~!ws2VV8K*1{zY@da3W_=N=(onfE z3Uz)8{a^|rZ%%~WiH1)?bp5Nd`S?Fj2wfU*i+n^0gFRPnEd@v1kG@RkYAS4MyrMy4s8(X;GQqUNz;(u~nf{{3`1E@S;y zu8tpaADClRZ@hZt0iis&1R1cytE zQs9qkn<~kVRRlr%bAfY+zrGl3bBDxxucnpuC~#sJxQm>bnglUm4*k*#xM{Hx!KK#5 zrbhkxHFX*{kQ~LqGz62fJe6f`6ud>t+}C;33C5xW!hOt85bP0dLEFB?lgO*BH;^Ko z>-+fWU}1x<;UDkfWm53qGp<8%&YkE;#+9yjz$DnLGI>9ROCthZp48caMwNg2J{Dv7 zyA#W49Yc^EFlqI;)lf{w@l*#@6$2_y!OB%NyDR1Xf+W$_>X;wnYE|<^S{VlCzx8Uu z#@1RECpoX^#Jh@r%tS$V`}w>QoSQAoGK}sTAJTO(`Oet^%!9#Xg&3?5U1T74J0IW4@I2L!G1|7a zn_5^)oHkGEXV+$LF?Jwx_}!e4HyqFo^D8hdTIn4ug$0p}CX(+kUO@6L#XXlu|3)!r zGd{76K=iPbWvq8hL{{S5U?M@Z-QNzNl0HWT$O73MFd;4p%mGuc6OXC6+Zks4q?2;U zf_o|FN{{bP9@?3T2sPBDIv?35{bN$%bDS5aZsUs?NP%Y7Igg`I{U@0$x;#Ko*h3hm zM5g6G7QGrw9axrO#CTkgnM3rZVs5kls$`#^Q6i8zTA{Xmg_Hr!H+=o=)4A3Idt$vQ((b z>WPsYVzee(h*aIm%p7LsFg~fV+9mluyNQTM_STfRVru93yQ$Y)6gdz*=Cr;b`EjvA zG}oqOBw1G>$X$M-Ipm+S< zk0FMm+tAKk?SAY|*Scgr;+dJ@XL%&1LtYYsJCO%4-b)zK@bufBtE220|Fbq2S@M_^ zTN2$jUpW{+h&fFBi~KA2Z;vfhE9kPWSTftM{JNLQbfj~K*eM3A_HNl4A`a$e$!VW6 zZb!l9;c?LM600YfT>)8>dspWBgw$f+fPJ!E)+N0&M&k^|q^(s}W+zN*S%F>*+_hLB z92#nQ-Y>uuR(TL)zS`Wjb9?nvF)pn7J%cp=>H{>~k(t&xV}J6Vyir3j_3&V$&kISY zI&Ir8Lkj`s3E=qVgK_GYxn)B6&4kOE2N=0bRaG~$r&>GbdB*b=rL}@$a4Y~*0n*x!6-t9g4ud8{{ot8Lba83(* z0v0Q@LVSkFy%`&9Sw!n1Y**wp{3iQS^b(Gtan;bZg)LJ4ocCx;+El6~}-D!JAAZkxQ zF?~q@oCD%S>ZZX>3}(ZoQslY&kn?I9zC9qJg)5JTEF5j`tQzdC2%u^XjE5J^YV#QRTiL9H0dI2VhCnY#@S%nD|7jVK07$9oHYmn% zHpJT6>uVh+VR-mntBBM}c&awl7e2KDDiW9C;uktU^Hbc34z|lpG14h=O67@T{y~}R zOuTelpwGa*16W50kIX)9w_uVa^@^sFx*O|a({Qu5t;>^^Xg~+DQB)2KbU-{Gpy?-q zFb6)b+MN&xqc9lpzTsnv_HLxEh$H5#K}K!awDjLS4ai8VXZUw>%b9WS1eUErvi z?be4k71FCAG3n6C@`!47Py3_$aJ~l*c{vk7ljY=g1*rbFa1qxjDIM=o+-FVu19*Cy zbB-e)ZZw;xhTf-P%5zNLb`r&g?}e@J(9NAarngs~V!|&|7m4``kc_VGZAxUE_h>_@ zV1Sm0{-h^m7TFgeg`j46`)-|_BX}Rf=0KbC<+j&EXLSO3FJ@n}c#z6w-X!NYIdp8C z^|3pBH_&hEk~^3hQs5CA6tZplx!eoG0qJat4uCbL!v%1)sK)e>G1D2krS$K<`}vi| zW-WlSdRlC-i^ZHAKIB*5I$eC8V+K3b2!=__0-$bApN2r~FL$EEBJP%10Zti(Oi&~= zX(^SNy)1=DeDiQMN(zO!N_DD2!PWY_p@4OH%$Y+JqU` zZEA9f#|^xTZe)$Tb+89NJ^nQ1Ghqky%bM^`BpAsEC~Wk1zmXSC-3uC4OCkc7<9u}e zu;_%MOFq(;roc5Cr!nyoUxrjfY0+s?ZPXnHD;IJo@-Rzcqg2w;2N*9tViwv zZ@#@4pMOanV+W3HQV1C%xTC(!l@2DQysRu|@qq^I`~i<&_`u5qlg%gB4JDe2QrPJZ zFma5@@rM_}I1`LY#-&Yo&$Z|XCv;n>Mv z!1_!%j}c#j>jkT!H7Aw%Yyyk2h@9Es+ral}_J1y?N`E=o?|kkVy~NW86+PxF{6 zwwwkk4vY1%z_pmgltoj+xWD?$U`KyE@Z_%Al6qWm`^0t}PJwsWyxia70!|!lS)eiu;!d;4!mrNz?ZALILh^3Ooad zUR=r|@ngf(=%?S0J7Dq7x3Aje=MXKMdSkOpTTxE|X>^`0^2#G#B9|MQPGAJfmV_UGKSnYiBBov-fyXKR{dOUW;nZs7{fIf zL5m3X^Ae^MbuAAuXsm?+o78g4fej7l8ZHk8ggwz(7zv}Iw14c*p=uJ-1D}<5Z<{u) z%pJb2))6j3#`$CDWPHv(r+cl+WN@NVA;q<>&PdGFqRWY&L>z3(Ssd*P8D?YV<-%1b zjK6YC^oGrDl7VGfG;3akY)}RmkO}Yiraubyt_|8=?X68v#`Uu28BP3rJ&4X8GSe^% z>7ACvUuwE|_eBCX-D`#&(HQYIIyxC44HCv_yxAtf77CD;{o-7BafyGH(8^f2@_?X2 z+4OY_#eeFbz-1-Bx>vPnQlL&GI{AnbpLJGxFvKm4*bsh7(4oe2f;@Lx{>Z1)YKYYM zmAJrI!3Mr=8o`W36ek8EuQ?TSoQx`n+9LBE@pbba+~A5qZIJ3^<5)#`7v01E(gBZv zr)gMG-H6hgvG%3ZBS_0^{?l;mZTg)O=;zh_-)V5Ed=d}ycG2^d3iM934x!VgFx7;P z?ffy7%}51fv&JUkOtIHFg{eS46BkXaTZzZ&Rg+K9pi%VTcCcvOS5Uj18%_YpJNCse`{yVv-(*>?ae|F3 zDgV956`9dGyi$#`9iNIl`xom{DNGp)dMj~SQZUdhWjE05K5-0-<;ZJ=q0>^05Zb#p zmxa|;XRAJe$4r|52% z(Q#MjE4d(_WJ6Tzd`};*z~H$l0&Q`MQnsiSd2zi#l9*_{xl?Q3ep;DyKj&5S_t15m zA7d4Ew;R6$i(cbk0mt7d~&xf9a?VfJfG~Hgb|P7?I0)Af!sy=Y@rC1 zyiK<-<&_;zHfqjMqY-=XsqG0^nmnHtLt#;%A!UZ;FCSs327*D0Rnzzu9sKOVkZYC| z10N8GmXRhCA-W(BiNZFsS3IH$8zqE@$N@#^Ft|s5Ye;z|*J9T$`5IrTcO~bbf>PC>SI@oXeQL{SkIe8bqAL0+XY(k;jfLK_b7XkF}`m7 zj{K58Pa@>oU)hIATG{ti5h~$rx&t9wCcG*%jjV%ap5n-=CmI22ukK3Rdlp}83l;(+ z4Z|Lyf%NpCAQm3<-883EQ8V+eumTtqCPyj+u~qgt2NJZszm047lHg%qYxnpkh zk@(ZfgUnDh@J$!KUJOI%!58&o@W>`Q>MOJ=h(v$^9c4n!w*C@B(dOk=f3z9OLlFE+ zd06(v4ivEdH9wP6g#&=7Wb^*|8MypsIrk?F8NHT6IJR^{V-0(@<1H|O!>PQ4EYYD< zO5UyZV3=Fi<_V3lRrazP<1029nDkRSP6JJ(T!47lo>c zY?T8CUy>f}`~|K^Z-CGN5Z0INP>Quf2frltp5}_#TV(awIvahz0p+XUW@;mQnFo-& z;a?c7o+`7u{N6Z-!H-ddiWsVIZ}$!FpkQ_rj*lAlnt&2*Tbd8+M-GgLU#GdpXX-?! z;qX7C3rk%<%dJ!vfZ&KKnJZ9XbyXonEq*O~!1ql%bNj1*LiJ5y3vKakm$h#H#ZC06 zla9NCBfv#z34b@x9buFN}Cj3>Q1ORxUAjY{5OLUj!yt+?WE{slryyW;WX96Y$hX2pmh=7rWota*ifQgx2 z*~8w1Ue3@`$=T+A46_25R$DGvgAS%HnOz7O9AnsR^F!g>+@2#f5S>?U3On!HgFF?y zk<;@^Xs@h6R?C%J6UVMG%=ns(QZzdd$`1X@p@tj13I))ZHPAnCJYozo6ECo2>?jsv z668Ss5{C`x)}9~aii!06-0D{`u3MVk9lbV3S7|9~$4^A^9YHfFbl-_co@*IlaY>HH zV+*MOfD!yl7jL{AL-*2uO2RJVU@m1A z0Zi0hMPMom+m#X}Yg1*_i7i)hUJdYR^DlSEn@|)sJzwmhORw-i6f3Ww&8?`j>k2uy zBS|ezG;JJm*(vUUJ7b0xo$Puks-k>(2(Ik{5e1OogBwup7ojlNWl71=tI01x@e=B>Z-4-{f%9%bCRsh1Pj$ zWW$e=pZDxJV3&{ehEluKKnSImURPVO{=4vDY@K*}H%EB}i;J8G8IScT#}7rR`-BV8 zEtySxR!m&%ZU)3FgY4wDwOxhw@bg=2alZN zcMaxur6ijLUB$;cWdv~a!8?Kos?@ftVyMEaK7FS-BwptOTGm-sKhywIpjjh*LyY089QXf zYec?885eB>@T;i5w8`9WB@H$0`?=2O;K45{(8xC2?LtY_Uuat)d zdn%)@bFC==yrxXzFXh7(CM}{WHP=p5avs3|&@A<{nkTRR%xW~u|40J7vRYX0$1w;W zOm8e>aUPFeVL!>6!37YrjA4VW8Skn^gQ3`q2cfKW5J)W=pz{9b&=M|N^~+Yd7mky- zF(cA^_Y%UHc9H~hb3rCBEY9Wc%iz|E1ac4?_PsRi?S|-?)E}MmdO?{?U^fMf?s}CM zrfnNMxK;#Wiv6!~1C&rT~0ygQyNX$}jXymLKO=VMD zehPy4^hoGX>U!?M8&Yx+u0K8!G7mp95M9Nh6ZY>cYy!gsh%$llc1<`@7)BOLQzECv z1=#U3=>7v9QSD!V$P~BSX-*fa2JQtVQ-Wu(DvNyL{3y1R#Up;hq>RMs+-sq566_mr z>F0?i*h9;2D)H;;HvPRNxhyq24*qd>&>=crF#PV-=%QuMSjG^F`@sT*4N{Xyj?lDz z0pDS5C`~7vBej9^v)chijd=i>30TY+)=(h=xEUm^UXlX#GIpFL@2q^q+S=GgNeNC{ zEdPwam6#xKH4hSl`WBACAXM(Ci-5ztKjZGLM;hRIn@2AL)Pe`a-&(gxj$z_s;TGUB zqx;wdYxMMIhp$0Z+ElXKBS)jZz8%9=)plzyE;ZsZJ4gr7@UCrQ3b4%w)##=An?^0! z>Tx@IU+-z_HfQ2zxK=VjE-}PR^^+*DdY7Zahx$5S;a> zGWaVix8!axp#V*|gqN=wB?A((k+PNOu$Pj9X1~ECkU-St&&3+x%@6ho`^#e%Y0t=> z6G3rL{d#U5ulLDZr!aRD!efrIQ46qNd#d8=HZfW7WZ{!r1KKC6cUgN~L~_}-h=yhGe1 z!3JFO2nB0U^DXm!jYu&$gfl6`(vcP6Jh zY&hmC%^rxqp0kaX<6YhyKnDy3PlefRs51~;({?L}ozqr|eUZtSr8ja%Avxi#E&EeX zTOfb^=3Z^{p3O+8fW_8zc%&5%7D5ksDc1FiR2sYC%gKlu`$Cfvcws}=a`2A$dU)KR zu5bPUlZKJIK-I&^OJib-9{CQlqGgI%G?Edq~;o~3_v@Smv zGILR?y(=kQRCJ6o^fVnVPsn}|0e;B>FpTHmOf~#qrB4%X_|?%&(Ms{wERD8UDTd0#w=*wfgE=K98aQ`GE!99`~&$LOT+*-~12z`{;f zSPPTM8R5I_QHDY_Ja&$ahrzO~X5&B<;G(cZh|koQ1@@$?RHjE%&SSJXB-Bk$LM7i0 ziW;YlsZ{E=^{FkJ`x&iPgf}hoFoG8*>@ZX=7?bg(TGz5*UfTW43Sg3Eh^$Q=FPW~n zZsgMa$kN<+o>OXpO%&ei1~I)6gxajDA3+SGkh!)!V9H3V3`@^CiIq>OCiJNds9t+b z-Xh}UanINiA#gsPtkg=W(n$;aREOUiBbRZo?&0d8s&(!Ky3v9Fq;`_UMJvGwHY{WF z4{WBLQH|~D`&{mz4&_=&l;%gKeaMpJ3_A%u;bz&;2yCvyc%n8ok_6e3J`&P1z61#R zOWx%1{Icc;*Y|5GkihmXxR1>j(PMvh;+tOCk!#Sf=Uc^>i2v=tV$UJu^U1m)b07EXi zU)&DWHmeaJuQZ1{>+g5%VFp3AX$S&E6T1EB^6qaJ{eXe#X(SlxAVTqw0@9I`gOR@D z!BxL4I=J_VP(#|gYc^Fu|WB zi)^b5In8s!(?}GJrieA(p2E1GNw`_|*bfb9p$1l*Ny2)kdiGkss+4nwY=tJ zAVDaN3Mrh{zVA{93sidSu5cVFFu(uM(J7Ta(|K@{}60ix;dC7q(j zU5>r8!miW_H>UD;Wz=rm*EJA0Uk3>y!r>Ivw6P4xNy^UMcdzNvhz=B9 z*fK!M63gbHs2-Df3jETpqlnF_T7=KC5vci8f%!=xeeaGou=*{!{~~xA9XgE1;$UVQ zOrWR8jHLu#S^47v-<58)ZM-zspeZ%FfO5BxUz1GB5{`~+|+h=bcr$du(}_I+Sx?|!cp z7u-qDRwWp2AprdtLtY$AeS|XsxTq|tfOMWyLwnr*Xif9SpFcXDk%YVzA z$7AroAsu8{;HfIEMXjEtO1yq$^QFJm;lq|x3@tkhcCK_KjmGF|(zo-J669kaN)7R7A50C}Zr9#z`!w?jJIxqKQ&fkFb)kYWz^S&7pGm~N- zBZqRS5S8fwLGH$L!ZU*L8hs)Ku=9RKX1t4;s`Xy=W9xYmxrVkOL`lr~KsWt<>DrxGH7iNhjE0~?Z^JcVI$ zqfs4`0J97?<8jh1FKI+$oJQl>{=xURZW5OS)+>Gd=ax5mG%Zb27>5YB7F!S93Q>4Q z_HR2f__dK*#B}xD9=(AH5ai#|O3!g`Sq?laF@zF4yhnR>sImUH%0$B)Y{s7G zCrQh&MqJ$4FMXn3uQqogXDRBKRKH5|JUutM!IA+~yOR}!@OVzD$Iuy6Wk%U}RymzL zmzvJR0}^QaMVpETz4vLdkfes?bXi1>BiD{+dai;Fsdm&g%8=de~Y`wabOYnwCU3epvs70S?C5P#30QXyHvn`jO50eLq3? z#%qkw+Kt5}(W)qZ=m(me_?6X!iJj9oyMD#hkXz4_NHexS#80~Tg%hhCr#ML&s1 zKi&v+@dyR~8gB-%xrwd<_JOqIS~aYfn!C{V(#3LnF`B+@QKmf8oF(+f@^G4~QC0C> z-EhGEoA3LdiBx0nM_ucu?@u}7x5~a`X|k)0>8S{}pHUpOTBWF%6s!C_N$WT%igb`4 z%^ul-Pe!}f!V=r7Meg2#q$(EYspl1YEBBT2$j11eNJ$=>^}_hJm6IWrr5%ow@|{2r$o*7XFbZvShk^O`r{=XeeMLmJvFy_9{GYV`zWOb|c% z-wgU>#Sx+PM39ZG$HCU4I(s+$cjinCqTLJmIGzIm5@U%H$lL;aeRz_U;P34U|1O#z zBvHI?)Y3I_dfh1t9K9xU^3%O`^_kU-Zl2u|Lm|fb=te`BN?a$6$Wu6mx$ccp&orN`Y4U>fF-=Z1I1=g}<2G=5D8HN*ICi$yrwH?tY?%6eGC&T=UDqiyMh%6@rd_ZJLzJvq{a6h}YT z-=m@jn^D1+ZNDSI+%6&qiz4I*EztiiW5XnKwGP}LNJ&+XhrGcSUKav$Q|bQ86eKIy zh{_bF;Tp1jV^a`9dd^dn@r_eB?Xwxjwp@cyjxc%=9D7ECS@~+(X>f`&YH=VtG!Qo2 z8mv5pL$b5`q2S~PzWKQu+y+kIkVBh<=+bC)Nzw%dk^l*!i@kG{O(MVK+oQL#gc%DA zLL*0intZ@zS&KM-22ZBnrOCqeT-38q8UJbEh_cnKYYF-MyPpa76`jO`fFV4EwK^0t z(ESp_>M!7qvi>}oK(C~18C4l>#;4k*n?imymfe)gU{Z0&5fymj>IGEZeAs}Iv|osy zf7D7{ll-%*RA+U)3_fnfth9uAg)C@lhG6U>Y5+lm^TkGx1dxkbDPUG0d<$3U9;sYv zcFIvXff_Nc=g${pOg|>Rz*%6_p$Y};o5}CvMNNxFb-V0fk)QUl5GLEn6%*5cZSF0fp@Y+_#FrYIh5j~0n zO3}z>k$bYBq*}0y#6jDTjFh>&G4xSeAz;2c)G$57^EfsTBoSCsN#lz5?Ju?E|c`4=7#*J4&l% znfiK0iOqVrK(2SpURHXf#9gj(st2QsC3c59UZtg{A?^>%9Uhy>HNW9;y&^_qDiT-K z6v!1s3!h789qDUp$m>tm4x=XUT-~8+2h?6S_mW2uW4U^#w2x*Kex{NdihSkG%-K?& z9+p6oluk>0#imVz8e%@OX6X;&u6W74<)F#8w6bnT;-eA`yhVbkjoc{Z-67jyIQ!vc zqZJLxBq==A+YzlZAdd6i5t64(U^O60R^F#y8|9}%xE>J|W zPIBb+M_)(kA-&CpJXXx z+4yM|u%keglIUnVcZ#_>v*teOb%^0PG4(?7)ft?|rl7^U^!5vVHgv=M7^U^W;bQ*X zc{ojw{Rq4xqAjg)Lz{Wq@u-?~5QeTq5NO^CScpS4L`*mIMYfb4x%UkIzPqg6( zR`a3wDjg2$N7t2?qWr$1YhA9mbYKe*@o!@u>bsKfW`IIT7O<-A(pIl?+WH3*Ah!l@*mkoRx>KtGXt=4C?yu9=iTFakue5rCZ9cWq`ZUrp%xsFRm27*r z@`!gZ1K=HSWyQV<(90n*s5|W2gOP*qkY7|?s0X$ess;34Q(2kj+0g5|fTjY$_wHzF zT97oG7NOQk23!?$iVP$buRg?{1$G-BuV=PLsOMce*l2~i7N(c(1 zJPLc#iO1SR!sZ19`quDPn*8FQICx8OO~|&$YI-{BoRkRNK0^wEo{bj7$8k1qA%x$) z6fFtCDiI75#Rzbcp-a=90UZakHF9G(wibu{$?aKBU?yBkL1mAHsmebN#9Ke4~bMaC5>PBmltPhl1-@x^a-D@C)4rkz&pq``gQ9q<(~UALVfg; zRTA!!V&e?>2OI2cC4J@NkZTOL#4h=i8g$ngxfx6BNHV=oM*j02HxaQqHr_FpK_hjr zg+y(J+o?^eLdtk6tH8acE=;Lcmy1Il!Z}JkxbRsdlU|Lit3L&u?e6IF8?v#w>@Seumydq#7cq*=2DJ@|cDF~@rJd)bPdX8uTv_3F zY5BR#@2=VARhIwFWJzwJ$`B6loB>*ya&JMMF%(uVGMY)C9^eX>nJoOYk_vP441gHT zR`FO^VBve#CsevR!x(N2iRA-kr>THql|sjdtcRY9wpw1IB(}I9@##`|<_KRplpm6! zCMxbzLXH)Nub#734VJ4AHBDf5HR4XN9&!}Hc3~nOr06EEYedNK=iZc`N4v;|Ee0za zM$b&Hna`MuFTJgB(`G*y7H7wkIA93d%6!k0Nk#sqqLb)ya1&TLQCf+grlhDu5+Z!} zm||?50n6h4H?1c*xu)eda+o)aa`yy*Nw!}%k;jD;0*8`yxhh*bb{scROoM3ak8025 zrz_78_I}G2#IiN^@Zj=J(YUz8ZY7mj#Oa2@X;QB=nR`)vmam2pX&l=XMjM}+d2Uue zW37NzYFDNqtP?j}(w{Dd{`D{S-H0)}>8uNqLPbxlR5hcm3)MToC8tZ62YRKXhV8~1 z$VzD`rm#ICUfttKe=Bb%J? z;E7kAos~-lnYjs;uXO*SHQqmp`A_hU{q(-ak2he#;ra>IKLeU zG06l~X-1SE)gTs!D-2Asn4fEh4=3jCz$YZte~VSvpupT)Zx$3)Gr8!R&5>kC2C|`m zz(V(sW4pVd(H!9Uy#~S$;1_#xwHiOj8LCaKlimhTWaCvAA|+4#XFU9TT}vE|2*XfJ z%7gB+?&$svDxVOy{>BC<7)FPy#Uj-G=ys2NYY05@%;kurC1_!^9Zx+Vw#b|e!BEK#g7T?bNqMgFFEceD(=;|1*%FSqOT`a!UxPcbB+ZyDIj zopo-guD8!d7LKtp+H}L5-BEL_*I&J0YG*KO;^yz& zrZ1&rTCRNjt@K)I$Be>>Nw?MKKf1Gg?c=N)O4TtDPCfHDgQb?)o@Ab%+PlZOctghV zHIM(KKY4HB{Ibv>)WoU(^p^YWFXwJid!her-XF77_vh|6S>E;ga}bBLbyaYF7j0oj9(nm=evxbfuDbX5!43mW#ESv{;W?_<`pZL>IW31rer3U1b(Y>SkzYY3kzUYT|5UYG-3^=xFL<SSVJY;0!a zVqt1xX6j-WtM8eYmJhTDbnjabET@>580rV*=Yt#oT4xiaADmg03gnnV5=cZ)YMOp{ zw4nlU2W>23&?@8Jn@Ro}E`cJ)?$^FQ+cPus-%`Oqu^SWCtn}3EY^_gBG;~wq_SFnK z%p|>Wt5jxA#0j^XU0YMUlUgG^f`p9~&(C>3wV2oUvWQw`_xknsZNJ}nKd(Hr)h@In zz$@_bvdLHC9ktv%*0O)FjmTxrY>;Q=pO6)<(5q0Zu=)d2&CDx1Jy#`cEfL$(>^U>| zmDurDN-J|2|Fu|0zjNH?ILqU!Z)AGpe9E|ENFgAN(>!;i?P!iQ@%}IGoN-Z#b#ltgs|Wi_MO4lVj9xhWtsM>+<&> zkX>zP`1z^J%I4!fP1D!tEsd`*YBZmjw&qs0+RwbJ?>41wkgojd^EBY|9RKv_SFg8} z`2*(swfc+XRE8h$b(iD2u4D$TtpQF%ecyMkaPvE;e=! z4i;f%F*Y_9PF7}qUJfxv7G^dfRu<-OB0_Ae!a_ovtYVB}!oo~!Vyx`KO#Ipmk~T)h zZkm4~!N&U6Hxt`0x2*qgD`RY9>SPAsm%m5N!Jues`&VQf|7fE0g%^O8iHkwm z-OiXnUD4QtK~0khzye_ULd4O@!C2oK9>#3Lz`#fkNl(u}Pj4PHHcIUqsW4x11q5+Q zQ=mj4m0m1y^~k9nn?1k*n?xP2&qS*pOyWb=Bi%nd*8iG89UhcK|MxCt4K*aubC$pT zg|HtGDA1D?LI^y}7v%qR@=x#`o%9`?+#HNe;9(fyVaUit<;CD({xc!}$2B|*E7N~u z=quA4?Ee*T02dcC!#^S6U}E{28C>j)3`zh_4#s~EmG;$+id3G`L|Zdqj7c+d6S8Zt z#z=4$%D%Ao5@X&tqydiMq+Y#E12~q=Mhx?abUp}sn}H3P!(Mco0?4emr!8t0Zig3pJ7m4OjE!sgaAs%V2eRK$wbI zF|MHdjlzzUXb5fyHJ_oWAFKBOX-xgW9!tNj9L`wrwiH&5gX$RLL!@#1q!AZrriumJ>+|1GE76;3tp^jwMuDU03$W|N;k zTFO|Bd<_I793t&m2W{268YzB3BQ?G~z4HTk2OImCb(3HrQIW+e0@R5f zQ`g*)xZYS_z<#9Ce18yCYUz@s`P+(biHsob)XRME8inZGZWYO!W^!%|kgjA!PXAQ)3t*~K<{d$o|my_d7T>Qu`3 zDAP#Mo8j*5NqJ%m`(IAlr3KX=V#$Lc?V+(pM30_i(lz8fO=y&GSTUCs>vS5+9jVb5 z-0M7&L@e>Id9c;DOnT`QwOR6x_f5v{7&9S zn}{&kutG(*G&4i*Bm})w$_*Z923CilTUa^p_RPF~bbJs3W7)E_tZa^J<%gPMUadggGkQC~_*x*sR@Jhd3lJn3v@4bl!QtHi${NYEGY{q8KyEI> zLUpViKa!vofFA~hJX}n-;T`@T;m@I?p|1K9McK)y9Usa{#q;F%S?_l(=Vq#+EWRR!aF%qv19y2M+l8;0;VJhSq zO*wPTmK@*2A9w%)W5uMQVo(6kF)^~RGbjRBzdT!u{q6qi)8Sv2DwLJi%ADkV^aWa! zrG#X5{)ow1l$~-qa?TOojDX}+KVN{Ms2EfMtp8@~zlrQ$5}F2RA4($mv@fI|5iZxc6tlM*qF4x z6vM{p3+BHf`P-_ngRR~Fvxm5Yt+U-S00>-B<>d{!WN=h&9O+4YxG@AyW@55jK82B)JMf9>K z-#>7_K!omQ41iI7QXVl2l0|;Nzg7ov56BJ_Hh%zx0=(}m8>v{ zM%!IwMVxuKQ>A#09R2MhJi=QkQk-ER`O0@uXR5Qjf)de<7@fj6qzNnTn6S8BYkJd^ z_Pau45Dw~%#z%kmn;zIBBbW{HMQKwXP?|tBJ(g1@5CKGdldF+;hSu!gQB#g71I@(S zf4Du;z4Aqv)R!71kPQ`~pedp1$VE*96`%m|3vBQQzf=1l-Z9EQ#DzYwS4nBX+{B!p zfpyuZ5N^NK5{{Zm7o2XtjW|$W4BBttTx7iNC0D*HmNx=62_G)mRS$GI{M4{+a)mIg z5ypOzXg(RGxWw?z&1RZS{d!dx#P3TKAwGXTfE#k;*U6aYc);6b-HoE1&5QRm3kr9C z^9(g~z!06J)=+phqm_i(EKW1Y3hc%)?BY*_Hrl|7JRqN_fq@OTAoZ^F^Zg$kEG?O;j!lQEod)P8H(%yR`!|02u#ay7eg zV&h<~N66@ZBTSCJ3i;;^vn{ zc6V)r^sYx0h7=-$lPe(|0_0)iQ>;`crSZyxvZ;7xRl6T}ElTN0h9GYg>6bpN^~%m6 z_(|_&X$Iil=C@1UJ58Tx$8?QJ`{NgDAD{yF6t~A7BBnh+X4^;xDoGuX#!tS^s}#Wz zK+je`tL*Wq$8W)`NgHTmZm!(NY5PabZEmjeCd@vh#*s=6e=Ko#x8Yg|RF%_dK!Y(} zPpq1pM{(;lx2rp9P6I#Vi<4_eEA`{g#-IHp_DNywz5;gHLlN2EwD=W`l~f?~(30~r zqyzK}gw*As$Klp)&6l(aX%}b2B!`)ut$Lp48W%%+5V)@ zo$SRhr~nMxq22VAEP-hy?qu0aZ#tC<4e49iACuc$DYHlH5sZZs5mF?}EGN6<|C$q~ z|DT*Nb8-DUC-@`K49m@$ke7U_N6uIB*34{q4LTwq`zL#)FYg}ZF8n&sv$v1YlcMsa zl99f?Z3F!j{B{XXpnVpNmTD$g$n8chtu+6=Vk%a*G|@b3Bk@4fL~w-k%4_8 zc}?GaUCnf>CQNIiJR{_s$XIY{)7*q!%_7h;YrRGo4`0t2Euhf%dVl{>3g}7KjQX#L z|D^=~V-+wlv2*+za#8A0?h|QIth)4=Dh)UoDsI?xFTWm92Kko*v5n&8p1#B3cs7{ z=D;X8z~YWoEatOT>P6n-1x>&V2 zaRy_7{^FolGD-~<+^FfOMsW9yfOGJ!a_JmpHikJEHX(N4^cibRml==pd&5h|_rB-~ zrvBq;aKM#xMJAL*IB`fwpwud*T|-NdiyLa^!$qn6RdAUF?NR~ZC!TM}pPrp7c1JgS zc^9n?teCuJ=Azy$u!<}9{a|Ux@Hdixc2g4bt~YK^fIgBfcD=gw%`%dHiA75I_9_^^ zU+VqTYxcvS-wa*U$nhC<4{J2xjE+I%GwVVKux=iTNTIdrz@ooctz+88^9 zAgmsjV$;n_^XT4tQd+&Dl)43{cXA)gBk2a%-%Hp%E1!Q?r~w#Iy@cF)XTs{s#%%Z4 zIy_rBRy7ymQ58bUU&ZtQu&&=Ma~a5F8O)aCusv(|SiM`KBil1(ZsRTQPY0HUeWF9xsR-++=<9A5 z-R%)-JZn*Uv6>nVmoBjGM)B41OJwW9s9EGQrXNG0@|OPD&RIr(n>CEdHoH<=o0fgC za9=d-*h@wh+k1od%EoD+?`c0?npsH5&7LA=9s zRw`m4P?JNk(<|X)b#rS8BqCzc_F58usLj-<0`Ev*Bb zU-E}sV2~KT+PH^=t>n*}?6sne=>$Qm*2MK1&O^f7wo+J;^fdP6+0)1FxZX6{KKo8H zX;)SswpUizkiW38795Q%!pWcQGLc+a*>l z;cTpvsE6&ZkoNPbVG#T3bU2RNWLNRIti>wj&*{EyaInOT__|GDaA0(@;sG5*I= zq6OBT`xhS8NaTT{<^&7#GMjFhjd3LC?2|DtiNcXC8i_v60B}1{UbB!?dJFPHvE>Qr z`Bk#%<&$ASsbqod5nTaJ0MSOr;dg#%cop%A$$oxVGa}S5wco!-gS&06kz?E-m-s4l zwb#;=;Ev8ye&@25-CbwrYWzybH6h?mdZ91pKXo8Iwl#z8<~Y_(t?N5xM=~-9MIGh# zsrZEw);pu^rS`158y`H}a(LuLhN~HNfZ0V4ywQY66Fc8MqBz49T{RhcD~6W+dc|&M zBxUUSB%F%Q3Mcy^!~Wjz{qqW@`OeoIlrcN9TZms{vwyWPzB8X2<#)Z6qjElQ#l2Ss z^WLSW*^GNjlX4)nC2us?YCg3&I3%^JV5ze8nDfh>SAO-e9vU?ey5NFCp}O<#uEo!b zz~fl}9XD~iq?UyFV79M5;JlFfDR8aXaD$9?_Om!C08Ib|HIi1OWbZD|OQs}ljU-K; zDz;iy`K}iDj|@zI7EvnU%gYIV5B9vO3$n2Is*ZgaIrt$X&NR|w7j8=Rq-X#5NEeXo zAM5g41LTEm=W6%u65BS+eW{CVa-q|Rgc_S{@Q5jKfM5|0rEPhMxIQ*uI=AnU1X^C4 zW4XTX@~40>>T+!eiZlCr+6Zz#mKn06R)FUbI3wDPw2f@@-C9t00yNV1PU1~-K@^Zz zzx#fg9&O#U^;@2fZI0v?Yeyc~l!N;_=i;6y)6G6ByfC6)p&m}HURv`kmtaN4K-VSi~c{lN$o_`HncnJHR+v4GyUUDinKYdeQq=@u)rFKm=+yWiBr z)PKmJ8Q$O&%g4(Mdgc)~fTwHXtqf@N&ZExQm2j?+K1jNpsYuPwvpFaHxV{i`XY>z6 z0;>JNuVOh+P~5mPy*i&i0pk}J2#lwthdpw;zk9|prU zH$~hW;vwA0ns7sL_6^Fh^hHxZSk4SLsKUhn-Ke0`C?_d~((KaO=w+Mn8lMFKBL8h({}rVO0ik z%iE~pu;TQo)>Lmg1LL&lkWkTSw?GUDyaWx4Kd3`nujXz%ILz?Bfw-m_J!hU(n`a|m zp(HgckN1MFWABrLFJ>nq5{suNH|g|H>-Ftzz0(&s4UT_6Xwndb0>m$uP2*V{xCi7W zB>6kW{k*AQIDtH4C*rv&ClQ%js6Y5fSmH(MgX3n6#l9P%4sn=<=ohE;_4qU5Ph8SU zR45xzK#tm4=3ovFJtf7YpyIk0)zsgi4>xxu3mPoiaRBxt<(Yeq5;eCkt$9huti+8U z`5pYrnb8x&$e9F&#Z_iaD(qG#H1Yz=1g0#O$Y1K#hkmBvtjHMC75Kyu00hHB-An1~ zOGMx4^2dup3Rhicla#uP$ef{?aEOmAjP@gN&7E!eE53msj#di@jWMwWTPBAk4D?57dxm>);By(Pad-`A~B?6I_;B{TSr^v2PrBLyXAT>qUrWnrCorW1@O>>4>f$OThq+q zKuF`W$+slFC;ZQ@gE<3C3ip@ME^OL%>feceQuUOuMUhZNuW;yt`HiYP{{6{~1AD#(w*6Gl}91{%J&eV{m@b{kmN{T~o9AvX!fNH)> z0(c24LW~%bkB!fWmtuN;K~8{V&@07rt`+UN?aG7@6zYAseX}bQ6p`zUv0rZbM$dDy zySn+GTUc+2Ej_gElCHwAvL%L4CY?eA7Nz;|_2NshNVCb*a9EUa{#G2K#2$Ho;Ixy9 z`%wRW>uU<9#XH-y_y>5gu(Zn``t9~I!k@K0DmhqjV@;ACOf8b|e=xc&xu1x^f#*8$ zC0h3|m7zdD+Qf*b`J%$CQ^!7ki?S~J_+b75?YnF%$@YXKwDc%f>MRo*UizilNP(#*NF~1oaLI3>-oITg?h-*~ zI$PB|gR4F8W)S1WReYQNBk54XpVW3-6$<$CUVlhI;ztQY%fm3%P0tL_YW1vF1o)xl;l!T)W2MawZ9}hk3i8zDfa<1PK%Q7sc8|u? z%T;jvo$EdG7RY2u)ZzR|aBZ?NB0mn#I5H%9!3pjy$@horYkiPtvjNuiR7$39^@JD_ zV4dWy&rc`Jtncn)6I>{EJ1A9jY%Xm~;=3s-nN}%O^SeCGy0FWw?v*@{_Zddt(X~b& z%eK+&h*=kTscv#)8v5A?qtKpG3^s3;mEFP?@@QP3f+^K9#}8EKegIZusL3((@=wRP zlfaWZ+c6BD(uA4P^cVZIv`}jeW!|lVHXy4z^p`G=YlvjnO)}skgTN2)IiPy^aev5g zC??<3uOZBB9nf$|$_+D=kmCl%?@p!VSQir(F{|~($trF)F&Rttgmh6;$x^lz8U|F} zJH7#TJ~PjlB7}f>-;7C8EqD$~dyvGr{|I$4)U<;QuubKtJq7Px9o!r4{6KTxBBqW* zM@Ni&EuzLW;G-u6gp~sZt?t1P`<;WmP|NfVSR^Z`2pYKjYHO$U%OZMq20ynOTGT6=j zU8wS2@|AjqGdGo(7iFnLec1cR2D3;%0r3J$q1M}qN1dStHqPx6A}l6*u`@mqVrBNv zh>CUY+pO#X)p%|>NZp}Ur!>=V2O$}+lj9G$fU*s_{gLn=EP{AtG;8&^&;!-X#m@+} z1yrsmOlY_+yiXI)qbitFpBu3O_EVDHjGf;Ji)!!EVr ztrj=&j#)4}2q6%a*m%=Oazriys4|o>t--Nm9Ot(e9FWLM43S;C6iY!G&AK~64(T1d zCd|wdNkvJ!Jj$8qYkw>W3y8+ZOu;V_4CXT_#OP3-LlWyoa+%T>H;y zZ72ZN4`xaOFWCUH77$^>3$7Ya4}xT=rigi((z&Q&R!vlM&hAMe?+1>+FS)PWfJa}s zLvy&_N*}}ZNnIiaMxxU02mVcc-D>E;+ScN`BUf%oTH;74zM)OgX}xQK{av$Idb{2= zCC9pVGLk3O(?)}XS|lrC!%{=f?t2S5YMRT;1IvII7DDmlmV`97fMsoyfe`C>wZIiC zdp)fWEdzbSLiePf;aG3SS-ERu0eqL`m))4ec{D-YjD0{ycN-#i{*1Zxn z5N_pAv#7~v{$QkNA0LH9H$$i`fS}gflD)MsUCjnd7OPX%>FkhjoC;)234#`>(Yi(Y zC0GJ1=~!r%224VK5vb@nk8mXeLA6DbWKIBu@#}?h-i)lCCl!fx|2DX#gkwzotktoI z6Aj1Mkqo=6(D&(pU|iySSH;$k*NNT7-)b&SERlC_4FCz4ftByh8r4fAx_gypwKhi8 zUlY#|u=<53uJbiAe|LmLCMpqc*?1y4>%{DRcQORa-&!ZN_eo7Wh~=?UH5g$)jCZCE zcKgAQKu1j3^FM<#_Y+s%2Kn8$Qas+~zRz>`3r|(G_Zq&6Ar~vifB6oF|4--L}+2F?k9(Ll=!L^op6R8Rs4(v|`62p5pTwpiYF^ z+aYhO!Ia(uuHq@K@ZeW)CRz&w{3g3986*;bc2Cv(XM)hdubLo!|N7wFmnfrN*?~J| zxj!Y_;|F>|yBnFdT}PCa<+Kq7FPB(Paeu!6F)`@owyBwtk-2a7HJ+!OAX2XG3mm+J z;<}V35y@$Q4MX1Ro~_rJx!H~7hxg%rbrda(26kghPB%p`ee!JbhM=bH1f+}p6fN*f zZ+1W=csEbp#q?9B?`jHQmb4#Z15E+qOQ}&HyW0}3z?tRKVy=gkGoYmvXOl5^j)h5z zT_DCUiHLREa?e!4L}xDpvZU)m6d}mqNn#08R^(9V64ken(PLEqA^hg3)IsjB74eO# z?bl^4v#+TiB<*?Dd=R*%g5&HT0uNd?TszAchj@`bf!51qo1T2R41!8}ttBOHQm?Tg z8Wc!|98BgVX1PX?&%0hDx|q4t{dg_+)~IRPt6#2^`GM0I6(g}!Ad=%hlTf(8vXW zhMM!l3%#w6^^R@q1Uh+jHa_EZ0UADBEugtO#x&kCw3Q7tXk2Wy`uM$?tGX^x>lKVw z+36WlE(OOP2yaaVv1Cq+B*4huFl%q%861%%9PZ7%_@W-mtW%B9wKl+M_vzR%y8FgG z?ayCX(m3}&Da|W&jwzWZ1uY8g)}qrU%n*(0#jE08T&#xR`3m-hCm5gNTf_tn`~%|$ zP_vPF$9kA6pf=C8ja`!!^k9~RpO^fd0lHM%en0knK zo4^gAz1q6t%`+;emp@aZ+Zz&BvX5i@c4+i^Vbz@ChvNQN`rPaB#3|t@QKlgF4dqaSqctQEt%zEf7Cth4`hE)V*eIU>2;WUpMYLfAcsi| zXZ?gqO4J}$y-*+thf`4oy_13?6OAn;GNu%!CCdI1ujy|hjDTX7pk=a>*G_c=o(qtQ0xLGF7;j| zsU%@0&+O$@hfHo@+$Cx@U+3wGh^2%oe;;SG-J||BDg()8@e$m~5iH`&jvfVseGtSh zvT{&Onrhi>K?83cZE&Z2M@aYgf!H3vZv+)$_Mj#w@+rcbP5pt_0q4i7ET&xIw}hOg zhEVumD|Cm3kP=v7nf%ifVbLO#poJ{culxn<0VjE}}ojucrN|PK#0=%Nd z3$!l&qjy5%ETu<6`hliO^wY+>3dxHP8R@BYxb#Cut;U!jsOhrkCA+RfJ<)`M?)-V7 zOWI~lRt_A~Wi;nc!9f?FaJ%;DHp4W-xj4T|dcFMBZh^GKDUa|3y&kn?6KuPu4yhz7 zZU!c2rI!lC5doj-x&fmN5cml>5btAG%~$UPyCe*N%=8+OkgIIv95|Y042a}Z$FveykK^n{{2_k`(q`(}gs9@lUJ|-%92Wg(juAjd9y+I%pXVmu zW$?#L=I+nyq#V;mTsyo$jvZVm-P&)bK;<<|0L1MkYavf3$6ld3*Dx4RwFAV_3(aSu zr|Lw-C#U4tKnlvCZ@Hb)eBg_S%&5wJwvbQJ*lIE8K92@PU0H4kvL`F`^W!qDjk^}{ zj|c}7tZ1%ZVj^s9wLMYI-!lrPqSVL zmKd6U5-4NKWg{%oqG<7HxaaI&8ufS9w45~~N+t#2q1|^_B-%}n!|RAp7gDapHBOu! zRfWl}@R7DMQgsbG3`_n|$a%t)D2$BLzi=v1b8ORqgJSzgqji1fq^o(wm!!zLLB>eK zdq{#S4dk%ih!Fq%tGOEo(PwCT=@#_KpvYAt#7b>N0pgB2p7&xx=$WbOl7gy^r^Jmg zNa=+>ujV|*?`+GNFea$*ECwpCaJ+63WCS~ohPX3C6lX`_s( z^j2z1d+(YXC>DbPD2(e6`?E@AZlb@u(Odp1Vd_Ylu_3df`neLq^U4Zq_+F-jV5YCwuD`Sm9&6D)k!cCm0_Pi6iM!-9p( z0_O9vWeM;qtG@623zZ2#MlhJG2=1mg)*l`~A<&<74*f7uOxClaBk!3i;g7*T!wLtF zdz|)5-9hVBEJ=*4cZF@b0dit>Bg*dc-JHpyQ&-4r<~!%+!zy$m%g^q#*6haFQoKMpB- zRJ82_6pnMK5}D9FfD{AMKmlJ5Jr*v#Eu*7>RpVAuO#H$K#PKY&oseP=^I+ej0?-Xi zs6851#5GPwud>ji-=fVTr(vv$Q#6W-vpf?tAT$+EpK?8Z@ik0f*H0=RF=A+$g{b(s zs|{h@a50$wKA_B?C)qV9dE0GyTQB_43_b_3of*{G=_|P)V6g8~2A!mN%40$9B16a2h$ps)qowusK-Yx8=Qd5ZD=ic83?$E= zIu{)U)?VD+v|9=je~8aNrSGrkHoTB>GxkS2Ihz&E*i;oM zIJClHUExqmPrv(dUgF^o@|u>5#;)TQr*%dp5!+a6iD==7p3ts!>&UcB&4|^!vPG6) z)@Gd(I1E^OzF$1v)DhQaB);xJB{YUk%+iR&$YRECeAF_144H;HQQR^|1qiXq}U` zV8fs1(PNzP%_DDpQq!5_1H^t<-Fbfs1&7X4CHUBzjlpMbYkxZ<-RK;pa-EKgo~*{3 znIfF*tDci4VG4G(UVq{{)hE$z*i~bjq{VX)mYj7?`dLlf^XKg|jGO@=#e*Z$SA9~sxdZm8EWXV-&`si-%hXs2I0BS8OVb32O2L!xCCF7x z7T?e2-?oS`Gg6xH2SM688J^oB=Yct=;4O?coMiDo9oPqmV-OZ3D~`;(hLepJn#^ed zoQMm%#M~WclKbd|2Mv=5i`$o$y%Hmxt z|4!X?V&bJuA&2j6Tcr2Fo=exKXNRipyWW2EmR|Pf!h`Sjw(WIEGVWCFTQa5uY3}Xwp^x0;N%+ zbAaA3xN*NfC(js53y}g5Cw2x(GlpsMo4tm6i|}4eg#>}xj05Z>vW`=m-hhfs|5gxG zej)#?m0MQR$budQg_qu&Fjg8Y)Y5mtBn2m8)ukzVA>hgsE2e>D=7C3DneCr$S^D^8 zG^RrFFHcGpOJv-=(8ea^a+Cy?vasLOl+Ti6x>Lgl!!P1g5WiFJ>=3AW^l}r#(xRgr zF0$G9t&3l>@p)p1m18WA7a_=7$15o}&taepbc?S=ppyNlq6|uGvfB0v-OmGtC4N?` zF&ICNjEZX>uy4#;4q7CTD4<8~aB`Z>mei%{XzZu~rDi)1NB}qGr&~+w2x0bs)Ib4E{jOg1LWLlrPruZ1pZrHjZBHn(SDV)X;i@|7^#s+xw#{ z?$V}Yx{a1)<>8>C9^AoL;W#OsVsu&MZkP=cu6+r;`8aea+Jv2(;fBY0afK0F2z}$d zV|4LRb=!P^1_Flq^%ZkHq|U1L=qgpFHl=vnH7-li!Y#?xhVgq%FD2{N5y?H+^@IW! zW`rB5UvA+!eyfz{>RE%WM*5r}<>97L!U%U1j0o$WUXxM?6``}#O?t63QCk}}n%)*@ zn>HiHY@Dvukjgk*J%m-eO1EQjoPl(9`5vJB_PzJM@`q_V>Pf{ks^@CW{GSvqs+D37 za+)cla+&4))iHc4xQrqpEcNVJXltOyKhm)7>&g3dN^2EB*LF`8v{p zKzNL#Ky$Xd8gPz_<&>v}$>X4jeoG!Ju<9=ZL!=K-Dpv3ay}#f$=qNsUegm`KM#sg6 zz)%hh6|AnX4V2#DZbrdq9Sj7jKo6W3GpJcjU2; zNihP`%E9m>HmjR(2`oc27GH0#1qi?X!OTOsRKrTM=YN3Mu2eudQ&KC7ExT@V<(D)w z2EvfkqdX||EZ#!~s`4u8W+OEW5&7Yb@*e)bKy$ZtL zXVoYs^v4#gJ%?_2&Fz9FO>3W;$m1YR-z5k;rpU*#*bARKo@R9m@(-mgaOOtV#+HvZ z#HQXRcZOF5x|C9XY0<1FCU4R~nx9RW&ym{VAnt+Ga>Q)w%NzeBV2Hz;J z7Y#USyHDO1Hm@TM{-{lk3FL)8pI~9^3EFevulyGJ`kUjTFomJ;$$GZZ%sYAhkBX7^ zPN`-~J#6hj)y(<)0&zDKeYb9FRLy|#wFokkr8YwTqJ&x1PDSIgw+i(5LA|SJ;PrJxY9!_y(so z`A;0fW-Uktf^eh{?PD#?)y`r6n{HNYcL(4VZCp0J7rTAO{n1&5?h$z7%7TOC1LFrf zCPQgXTM=^t54oKH*@XuX(E8sqzGhKzNyBNgKAK8q^+8)9$MKpYusHOolsXT>f{4G4*3Kw5j; zr%IwI(yVkg3JY$lT~YYSZS>c9l#$mppf3%SdxLJF)v_f0G~Nfb&Dw5MZ6 zgX5XD9LAz1J5bChs8}VKqdg&5M|1PezhS^_LZ9z)%y7pPEvS?zV07N3 z)9>$NcNK{6!qqd9m}teq$ofpgPu{}49u1gZ)gjPyupYZ~2>wCy^U(xvslwv|)_8gk zI4$H|yk>>NSU4nCA8E6a;6A3|m8n7xdPOM3i$xk=7LU5#ZIzdQmNm#>-^Al$)(eY;G zq}k%M1DfsF+S8OI6;#wt?b#%XmikT6&rIps4_R8`Kc987zB_o>)-9tVEH$#>%4!Uq6Wu&?V9sICpkscWyG9e`~LO^=vP=`N9q+h0o@;IRWo!^;71nmN5Hn5|T_ zhPy@O?W}lRzj_*tmc^LOE_r;JSTFpxVKzpd#W1PU915sCX5mr>S90Hsejk52j0zFP zR*{(g=^@F^Dd4+uhZ5`)1b9mmL`98^w&m}Y6k_Z?xF8T2?c9%1Z9o|M*m?dui2SaE zNj8cU=Kki5Zm|1t*j~6y5Nr@nF)6t*!RfGe2f=Du&`K9L(wb>|i0uwuoNLjelt|QL z3?EsH#IQDQoB$mmhb;5d+&T{KBU1i>-f{7Gjzuq(U11464_w3!o{q86Vp(e_%)uK= z+ko|kPU2+>l7y8yNB8vt*t(SQio*5isZ^)^v^8bMWm)oRciYR*B#KbC0yrq}0v2sr zPGfdB2dtm}&Qv3k716h47}SvM9gwgnpZ|-Uo0#ES8z2Lsp?L}?evyF5GXZi0(?f!~ z_2);ZC=)T{H*XPGQm~I2jKq14vz6!2ww)b$euRMLAA|TC^wuzldz>!t!{VUHO z8|&59iD%(`hr4dr?>_)rWRTX6x4%>FY`Q)~uxe+O34}NE?Hxc9=MYZnI453*Oimx| zg2)j>op;s=N!WV7yTHEhKnGU5mY*o!l&`bq;s=h2y-uS&viBB>oe0g<&Ov*aco;91 zMUPtdSw*Mp2j^7*M(uj@erO3GJe^EtV6=S8oX(dm&@!l3W8iowp}4=1iiJG`om)As z+R8aSwn(xYMoSIHxvVk!t*8^9BaS~Hr2H*ui>HGbc%~o5ew?0Yxknt!l665ddea_Y z7aYRjSrJ*qpl8|`It0l_i&$0NcJpnvmI-$8v<=iWQVOqmLZEQp1v9KVsf=V;$A)!N zO`lEcdi8M*{c6Ijq3d8Oao)2}PFY$;Vp#mS?NCJ6s69?f6js=6>-{bo4+{=>k$At+ zE-yNHy-B$m!0Q2fHgM$*efh+MJYO6-bY!%qe;yg>m678s-Lg*DkJ*k@lT`Zd-mV)L z6XB{U(+^Y{q&2WZ#S-*htRh*LNc3$TX#kXbvJGvK*L7qmX952#q*CSpCUe}0gnUz0 zQ+WToaY6%_x72g$TMjay&*`<#;d}M$1N*UlJBSDy{apU7&N&tK&?D{RIYK(idJ}jin)SD zCp>y0Y{qexc!Mz;l))!_=a~w*{g$+fJd8i@4`vWwVOrDEeD#WI!S2?x-Z}RKW&9LB zz@xC{q9b;yMt_34YVf@rYX`rf-s|{o@_(8gRYRLqPL^N7N}_dAWDJRZPzO(OZSM~G zC#aNjzJp=My1+7DOAGyaNaPiVo#DLhZ5Ob|;jg@)T`wauEUzaY2rTHC-o9 zlE8EBO=Mr7UJ~yXOg)26;#~TnSmt~NihAi4>KQuGH5iKerVC+HDYEc>8UyOv#i;zF zb~cSWf>hE2t93fL=>e}DF-*oO#Ro`p3)WeEPxPl5o?<3)CZDsY^F?LTuMZ!l;Qot{;acv_qz?7vI@NWS?7& z>$S%jbdf|pUU@hCfLvsvp}Xo)#54jrZKx+o+HMsy-DR`LZ0owN7|imE6D?#qBLh$? z5(T_*SY!>FV)+Wz8dOdYM$t}PK~Hg39|c76nY(dFaxdqORjk#P#_d@vN)ljX(1UPe z1F_;>gdST0>aI6JOSuAQd*E#u#zZfLr8S zl(*7Tac}ESk^E>QY-lwKT@((LbQOpk3ai4$fLU}41Y?1-MXk~74A%*SwdYjJn%abv z|Kk83>(XFA!JDUOv308kGT6jFJ?H5TC_a#dvog`!vEI&0qYlOtsOPpdTwr_bnc#M{ zvTt-C6F3@E2v1BDJD8aayE##*%9^69)FUK|QV2|;B|3BU4d5!VU+MB6GvFXvVCgoW zq3cs7sBQwac`RaXTDn}tq)5_B8v{%z$06&} zXNn;D7pjLKD=hmt!mzUonb_U~JzfZcMiVwY1m*q?OzMh1<~4bxlzg*Iie!s^LvC2Q zY!4H#$RUv6#r;JyO{EF`*hd*_a)=G;WawyZL*GPu59x)HJH+XynB6ZW7e6Z;N^Sbk zz7;X^Dfd7Nb)M#vCzFVHXAo7a)<$rGDDC!QTxCjw8D?76XgTUw&OWbufb&>0T|TGy4e2G zaA#vPmrGZjY{~@<+Tlm<0O9`K{JwBWk1YGVNsC@Z#naA4=iIBl=$lk2A1^7#N4O2f z_X9n-6K)=^;TX;7b4C>PI6Omk<*(2jRS2^g~S~8V0 z@@E{iB@D%#E_dl#>Zebb&x5FxaTW{Pmq9n-O%)oCW$;Pl%JS42*Utr~GZ; zh$XYYdvYzLPltGsC>S2uV&{(IW-G(F&)yNSIK};yR(`>UK`7=Bfq>{`&>v++7wk*V z&r=qG=PIix!s@fn#W2R--aJAZ1I{p($O8J@{Eu{oNWMd{1 z`rUwo-8&4#{O_bj2L|+z8K0F^*(c+}O>fe)YR?&uOhVm}xQfskb|-a~US#KD!Gk;b z132>itec~HCs7braSV_O#Sd(~f;x+d{Ldjm1_)i|Zw~yGQj!da2F>3LGRH7F~WipAS$%!++pjwdAl9@0eorl+Kysa58|M znYU5NCkEe@ACJzt{uv;;S}u;6V%J58`gwz_oL8$uQ4Unl5_US#vj33BJoNJvvgCF{ zd=(`GCp8feB#5MKawYN!g8)WCeb}tH9?mN{%SUdK$+8fzZ2@*w-=a|qoP8=s!2R7$+3rK*oJUX>2gxSREETHi%Snj7Kzm!E1zy*2Zkp* zR1pNk+DLrp>O(h|^fAu+^0EX@HV@lE4CCeVCE{#k#F`Kx_iD8p;$p-GW+xJOsE z-0oH8tD{T$T; zU@h|98Ny&fD3hqfy5cMSRFU&ySwIHi?R;;W2C-v4#a!7dBg+hF_Z1{iTOcI-BgOz$ z#EF_>t*u9bTQ_*|YM4Bt50@sns-1cacJzEM2J( zu9vXHH!6fvGCZ5TCnN(jnQ4jRt{a%61l-8D6rH%d9k}2^9`p{|YlY9w8EDD>1v@~* zzp!gkUWY*>XwpEFKvryee|=JWBP_E#m&$@NYK$}w)P1}tOgBG42RB0Ok@lDWP7&ph zLRn?=cG;m;V&dQw&GZaZtzKF904Y3DSr~=JXxUXo1dUpXtk=as} zn3gKO2yE&vKEXmvf0nncPXO0&Y(N1|r$;%SQKJ(MU2x&|VXg=AY3^qs4 z2h=9IhJuY6_2i}qwZ%;7VJujg{^>(=TtB7lLr=fiEi7XfNn7yc%uwkK*=TFa`PoBK zSZ`owmR+6XMX-r39spwZ8sZ>-FuZG(#E%5+WnjsjvwE40N%DU zZ*c&ZEe35j3?FeE+ZMf6DIVRJOADb5{0XQjrZ4*3ZWP}E zLjkK=kDUtyf=+&@%IA-Ml%HzBx(P8JA?R@NoHl#w{VdQ1H;XN;k7fU+mG55`R&1z{ z-}Z8WXua&;3Zj}467W9_1L%@G(2_oBt&*ACyUNR22X$$b@wVzjZ3IwUf@NhJZgalc z{;E0{I;}uPMa|9&+<#imvenV{*?IsB5gUp7?D;!jQO=~|qW8%6?fAYO9S(ZC>zS3y zi69HRNsW<%udNOe!QcLVjDG zLz)uD1YpAP)Z2GE19iAYWoulUh$HD=Zzq4>1rE2)`iOVcZ_c3aQ8<8PrSem}t6%8p zpu+g|8cf6Rmrw~cXwxmp@nc*@38RL7x18Jk^Kc!8og`=AtRVh2O$g>wPnhZWiaDlF z9{+}(;ep(#QeGwQHNcQ@xAO?0&0X01o1!f*%wkhbr4gLs!f4i(uK^OHaEIzLC7S0e zvZn1(2E%tI6ID^KbpZiy9h0a-Wb03(%fP}f(W)#)W_Zu*QVGwR*B&@Ox5U-8v|gNq z$#US2VxU-}(yi5nwCg%`=NFb5(}AX(9!Jh9ah>UBOw~C`0fWKlo)KU7xhuklt$$3v zHNk87%h;{RC&w8h5!5K`k;~O3L;oQryjx9Fhk&-m+S!;GT*1x0?b220wBG~2FRv87 zn$&2;W_lPZr3T>5BxQM8HoYV%znf%OngbW1n+lqE3;&;2#4a?u?(owz9tZ)gw78^k zjK_5?c0D4qCt)$0@aIb_7a4_t(omVe?NYWqUXu_SV~wLkh~CV68*0(yVj7d#>fCiP z?{0#!%UGHt%Eycd(WirKSa0iOs+*v=+A-~_@Aoq<_C{ba>>Kcy91!4h+G1gyuK#1i zc{Y-Wk4=fh-;|I##q(lr@$Vy}OUF`}L{l`!W}NV?(Ka9vrMg%@X25x3_G>kcSr2+ga^p0&pxgdKe10rqCl>U)9<{BrsT!>Qy}O%1HkNn)N6^cXy|5rtF3dq}K&|q`m-I|7oI9v*lUdt0(fboDE|ZsM zcJ%Ja2mUBMc!Y^EcY{@koQB^4d73;7Y^>z()6``ZWntp%Q9euGeiP?+zcc@#6xNF0 zugwqIdUh62wf3COljZ4wl2BCW;<;}sH+`gEN-^}We|bB4%__ub>REsQyL^q9^b0Tm z)D>b*}I!Wi{V(PE}Y!O{mRYGfM+z4RlVx^q6E*v zrO6vD|1->)40jR<@y^>o%4+u$1sokyA3@SG(M8Td8c#U~hDdsR@ifw{ev;lh#}7Sq z?=+4oE&=&;i|0X8!sa1v@nnGxbNZtXe_R@Eo&t{;v7J0JWr(X(sA*X7cZmd^%_K6} zY(+=rR91{?{i$AC0KpJ?F>9mSze|y%mioy{KzK<{8&05zsZS;L)caR{WAoH16m|b2 zUSgYDMtcMR4xF+)pjDHeB9?Y%ET;yS z8L~vBTG!sSk0&l;3%qmAEICN zr6P*YkSGZ=5qWWYN+C(bKu4w~_|&V+BfflCQ<9|DxvPH3S!>Wc67)$QZaYb$g2z}C zYmuo?@kQ=oCAS|{V)cK?*WFhYqg#FTuTuj`#tScHT1s9bjNC{X>rohNa^eUQ4v zCRWIhn*M<`&us1=t$tA5JRoH3N~Nk2mPU(pyl|ICU%Gvp&Omd`GY9cZJok5#O~k-s z^NuO!;nC)24x+Y9NK`}~3fgQ;mjTUk_D$%7x5Z-J;Q}Y54p~~}TjlB5Xsm>4c<%{? zCSf*We6x-0#VsDqhx69hN=chuN@xW|un+YNuA#rTLTj?H317SW!5hy5piGGI@EZ! zPvNO5T5pC8qs8xB6VWHIyYU3A{m0%N+Y0onh@ZFlr5{_VH26i>K%uVF`?se~?1K^Wj!Bus7)q|+jc9w^5S$X4-JF7=Wuf4#|cEMurNa>5`n}s0y8mqQewo=(% z%t^0_=eqaD8w{u5HkO18`7wQtdlgQ6VQLt~=z|AwJv`7GR*s!<`ri~eO{B8h;ABHz zY4xRmCnF7f_j@f;}329v{brAP!q>5Lpj@)jk zka>%d7gKJ~2?KiB$gkNy=1vL_Q6_>o6%he0V|y3l=CMB=2fasfH-#3X2j)MH4ea%5 zcVIu{G@H<&isC8ymcsg^K~&xa5_3=}>0I+1U(T1{x)o7I(eNc5WzC(`Guw({7rfD`+v3K#`-O zYIf8UD+Ik8PSq}2>%e-@4A#oEhV@$C^5X%3*#5#|?IzN3xC-zIm^?!+qj+@)?TIN2 zbe=Gj;X+ojK~f4q+saPyMJ?d4k`@oJSOefcn!*$#AQhmbsk}a1@13(nUcFn0(suyi zAt)rrU#9V1RX*SOE{drLxnQHpc({o44Hfm5FkqUIRV1}-9F>2am)`E!eGKe(Y4mHm z49d8HU9g)4vp4iPwo=PmQI#^P2H=OMufvOwLjV-{g$F*#GYG%Ex?+jbzGQ-z6md2> zspkMJkVy^AO;jFqMY%1H3QbAj#dXQR-;zo5DWR%Xt{m(*bD5LfT0X8|#y%C{1s#A1 zWFQKYNB|GP{>zG&8p?Wxa1V@*_o1c`@p+F}fYXTW52w1#I(I+Hs=m??Pb#s1h$XS7 zg9NGlYwi#IhRjodEBrpB_?N38{&uH2RDczGn}v%#uo!CF#*dW-;f6D7b`{Be-4Hyd zwvla#|GY~Lm+v4kew*t60@-c_D}oD2h2 zU>Rj)?*J&yf$$_Gj%IK0P@!%qVE!3R29OkC^vBkQJb#7n!C#?8mQtF`_VIx^gxLF} zalmhAdrF;hk4ik-9>uzn@U9(^0_;GqkyU_-N=Os(KA3>*Nfv9lDb1r1ZgCgVBRhEv zT*fKuv6Kv*pe|pVSCR-O;ugW|x+0b55Qsg8HDZjpFxo9=Sm0n;CA7xNa!mAPAnFk( z3Uo8BF9XO0d4M`=zSJPjF|uPKCK8hgH{~IC`L{T9ENNV;06ukl_bCa&vP|yHygDtD z*xDKm$jzAFJp*w2@Mtnavvu2qg;;Mmvr#DDgDW#)V&_of9gRm?y74CJc^`Q&=jrvg zp(1gb0QlQQ4Z^W8*d5L>X|nzlpFhOr~h8qqpeWX>T*KRsVyekBU00~Q7u9ab^E2~MrPlSb-ipC|KD%A z|G-9KmIkxYGM6-5xyec< z5>rY@0|$>q&s1GuiJjgD+b=q+8XIj@-y0tybAfgPb-ZuWS}lT zX@qO?tnd#@4f%9hPfNuTJ;dhP>><5iW>~zXa*$F8-E?ivi$nM15oiW;j#FvttT~}0 zXDg+aRuJ&;F0M;%kN$Pi;OU2q398;G^~1VoK?<%Xpx0(Q@w)XkgsPsD+KOxqKO?$& zT~fCL`TCTd`*^JGTffQ7;SaNK58;7X{e_w)M*#%1VuA%BYD7Dafm4k|mE4Smi0gOl zr*z*=L#26!x$pqu9G+981!>F&@*{eLcPgfrD|RdU{m zlxbQP{}S@hux|+ejQdMx*dZc)Vw%I=P1NFfy-CULO2jZV!@3QWGice$Y{#?%5(S;B z0~NQ@-uy2xDy_lR;jYn>yn3(-mpa`QqHosA zMXF8TbWKD~AAX&w%=h9gfPs|ROp|40F>H2spg)nQt@~8P?l564{>K76&(nWwSY)Z` zi{kE*h9c#;-D+I7Z1>``}1z&fP}1Rlul^9}Z{yU#EH*Rz`%Q=+h-593?W6d{Kj z?|j9;VU><2w4b8`J(_#*)JcC{<({zOPP=N#}{qPdmlo@)0RKqxvy>n(Aj0{ zi3a!2jx3PS;|!TOK)58|;H>!uVq4Tc*7X~u`J7CbJ$Y?rfM7;dsg$4z`}p&l`1fgq zR8v22h=Hy7BHtUTWQO#CIyDgRE-{@8Uzyn}e2cipj*Gxy9kTwzKY1U=<6WJ1%+5O1 ztFU<)s$N|QK>@jPA7N0r%%ma@y6J6t7o(SOW-)?X3b&Mg;sPN-{u}PL<_k26v>z8lUPatjrm|1 zKN$RKGfKo$efMG(H^aq+1*|Elgh(NUPJULX{9QGg*|Nqd9xQQX\JU|Q2%cU!{6?)@{#eoR2a?p0DmCepH=@QSNciwidX~IWNMTz{A!XM z;2+Otq&sr`Z;hm4;hQ=7q0DkSbDPGgi4`vtE~;DLzEi(1{U_|;C-Nq}Lij`$=!yHQ z;G(Q5inY|3+M1KUdtO1k*AFTv3S`3t-AlAk;`9_%?hN%4W-IB<1Cn);NZVXMQ~J{p z`jfyr(fg2@>mWMx4`eBfSi#IPotGI)EfGV-zGEXjx0ahhQ&524joUfLyt_eK9T-dS z*1y(2(WdgGis&;#KuErT&tbq+Lj6%*0x(hDF68ABu*$dC%dEkpW>mkATU1fY`uow> znH0Xrj>8o|NHEN^Ttf=MMMSG2kEm*Gr0IX-_ z>IQGxJh=}W%QJUCNGWtzN!;St4~i(9fCA)_^lfeEx&@E2FMnVj;MbfowLw8)T!wT% z!OYkw@)xDLopBFEtvR~Z#fXuipeXf>;&2c#WWX@^S z8@+xD<6ZNGQ4BI_EO}v55sL+UKX_Gg5cPUH7fTgpC3LFy74G&7kqDdcu(nsawy8U+ z{u#%-v+5Gd=p5%T(9eBi3pLQJEY1=nAW58mN>+^9&N3dJ=CoM=XWvWY*+Va0D?)QJ z;&M;s;}&w}EvU)AGo-a-(!ALBBLspvuU}orm7;4W5ey%ioO$%>b3U^~U!f?4a-Gc2=gp8>AT0`Wmh?7yO_gm}$&%hZ=VA zR4oTD22&%ynIqcvrs9)7;O1R7hLG%?2^*JEwTon=aS(sE7Tk0(C`5arCSeaEEvU#O zHGrv)jhKXbDz?p#wP8S0}MdPkyfM3`-=x;>dVM z^jO#;z&D_|^;)gx+Oylvqk9~852k>*g#sKvoMbR=yfo-uFfDTR|4H_qA~PX_aqe3n z0sU`A((Goy$qKTlh1rixidVV=y}FUJL3vjbv3y9kvR5}}>+otQ*EH2WrDUV9k4_fU z^y7Gb7zf^J*2Xp@^tu6w^PL;aq)L15Lei=9t7?oQS@8=?VwPv^5xCDqk}MQr|I26E zewF3ejTsV$Y*t{etqBL73jqXVLm{ego+H%AyQbZ#RD|G?_Qdyiy%u>eJ#*v8+DDL= zXJ1R7&cSjs9u_&@1&dnKcsX4YyO;rMTz1kBWi=Kp*K*3y%Y|DV&Hryd*@ANrK^7wT z3o&mEy$i0>U;j>gVlP9abw75aHQqZVsJyW+$RZ7pYi7Lesvo?-Y6%H#oLX?X9Ts0u z@Jbl^)<|^+eorY$hlpvd@y{YprV|Q^N^5_wUJ?G307A4-n)UMH>!?ISkl{jX3ufoW zWg#~3U7Ogwlv3QBO5QI%LBZ>`$2%pabE1T*uVQoA#SydTsOj_Gqo?bZ12kZLi8tONy%pRqoy|@3011up)k^Q5Jx6H^Qte?t-m(H{>jW zhH7kxZVf+aYU}pLl*#;vg>QSJ!ZCQ1aUXCUjw?}6o2B8x`*7xEUV@Z~cn{i~hHZZH|-hN&o{`&5si)6pK7E||@!Q->)CqYkdi~7!u zX@M|59i%7RW2?3N)_XrhK~es!__6ws{rpZ;(CxjvA)?VsrpfE&(+g8~Oij!ZHKDbg;6SEpyWq4NlK>aTe9c}6G!u(fM z@F<8x>s(!A5pfB_;2yA10~vR7%?^A$*( zrcpS+1b~p7IQP{+4#siJI_@~fv9flM8{M1>iyOyS_Xb;P!XZ3R<){S)?cw>m8qUbX z!1IK5-7*kd;DBaL0}bc3_({JY9UX%=_|1B^F0_}fACQqHi*%DuxR8}|$l+v5Tps@1 zQO&A5vITetCdRnYt4eV*#4>1>hLB4_{A&V!k#!cDbdw`~l)ZFkSuPRjtr#K9qY8r> zudtxlF^=!CX|QC^5Z6@O$pBF44U3|?@7Q<%PaB$*F=}5vI0N`|gAN>-HizmIeT3Ec zp?ODR4Tg~VIRY1{yP~4qs?So5t6&}-CzojrokU7c-u;{zJdwwqg&0nzv{jSoC!5zp*Jzc^|lWPOfB;)PrK>Dtw- z8!7@$-sAqgaWEkL`T~~_eGZAM^Jm!p4L?E}?LKDQ-vnzT8N)#j%@59XbICuAyX!WL z?JsfzNQvtw!g8c}Q(58iYI`cdPd2J4?bW2ryqrlO?l!6u9`!wcJ@wvtB~nAcBp_VY zm5H5dL@`-KkcFhB;HZ0)8BXiv@@23fy+lu3l!(^{jJ3zxYZA%Y*QYZopVUada+hR5 zK$5R`9I!mklKAjpGM2ZiDAE`-hNqg+W@osLD2ByQv?>d2a*5Q2b30_OBrL!0BRwkN zcYlHRO9wure)iytMs@O zK3kAo1K=~QG5_iq`K;q5$f1Wn4HneYa|i4$nDk?St_sfErT9ag^V^mexc!>SKdqld zr_HS730LD9I_{-7+WdFT82@s?%lJG9lW)<~me|2LY0z*^*d%n^`W+qD2Sz z6p^QicEu|-d$?egZYy06Uz-IEa}4JZpmZYl+YURnQGt+_4q0n9V<}cm0V;_#knj-X zgk~mf^LQURnQ?88DW4p3X3?JbFhRE@HLM;@Ys)6o=CS>OHk4-ZZ>zY)kEV^!H@P8g z4Q&K6YN}WHw8w}fjE+EdIwnA(6p^~TgX2Nj9Zwm=&3>+Mlu9!eLDmmFvao%eqIN)> z=C@UXJ_pHyS62JoHXZl`he>R?AW%`&>U$IvH@+7rB(AxMM?hFefjVZNy`C!0-7jW8x{XY<9n^>1LWzfTQ7FdEvcAu?jkMa0e*!)8 z+)@6C+>4svF7W|Eh5tA_B+9=KhIR7aXyc=e+N8ue`b18P)CE1@fQ6 zzd_!=*&keUVhr_gkY9V1Q7*X%mMrlmPdz2469#cv+NsdWuSFJ4h7KEu@FR?^45qBzV;bw#3S7IG8h5sJHP}p!;Hz@SXY>-QMU@r zU5W3_eEuCD91X)3yQ)e8Z9X^KvT~lB_@N|)D4B3Q{Bqq?Eoy6qpk~id^SPT*zaRDJ zay|~Qm*$JR41 z8{(hGx{aCtM1W?AfJ2{?P6^%)^iTAL`{Qr*70iW-&wC6gKKW!}sjFerqAUV> za+TZQ-rZk(h;{VBkp;ar+8Ri z$i%^mXm6&!&oBLx{{2<|%fH^$yEx;hQI5zxt}texY1f#IY$FO{w_AEe8BDhBG+~YM9U35WCc!3G&M)qsVQJ&D zJu7FIGd#sXy)t76&TXCkHWGIeF^aQ)>C+ZWeBDVSnHuHpigZz@B%LV74-sYmF{v;| z7{Bmcz0#_l`wX_fG&~umwZiYvMt?exytx!bA%+VL9EIUU+j#M#cS4|@PV-Zll^4Y$T++p|!|Gj0_GDQ-v3u1v0AEN)3Z zeG)XChIg#wwY8^FpKu&OslSr)RN5Htc;3f!%dl8aa(T~D`i_~2-EsG*sQhJa^27lm z-Oo?NQzx&HVnnxkDD`>(dR!59r|RH6+eKwX4ev7u-F@#f9UOBpfFDJXA>F6M?3iEE zkPgX1*!v_Nf{1i$U~9Z zCaBcdj2jItwv{H{XgSM?Xf_D2-e}iIa_eRfzN~bZw36Jiqr%3bI^3*Vzoh~WxDG`M zRI#Nl@D?rI+CB;AvaW(?wx$89Egg4LB(vA@ByJScnajmq?XY_(?9V>Gy2mD!cd!qP z;@CF-O|w3qS~f$I)8Qqflf&L=2-S9nwr{KRVj`vHX9V}dJ%qA&GvC|Y1|LmJ?NHcy z@aDp%r+Rj?sjFP>+2dYfhz(G3zWoEEL-Zx0K|__=sp5-qO}6z;G16^?ScA`B%`aTi zUjmqX87w&A=FKhc3DE_@G|;Yu=+5g;+UF`jvhUI zR?steGFA8QQ$k09=jv-Hl&CZK0ZQE4dIq11@+sM>_Ew`rY=N*BIFGd!2&5x!l4tFw zn=tsXLm$Zb9O$MP;!-^hU>olEe^UCFt=$d-j70k$JRf}FUWg1;P^qn`21VRQtT=)q z6VZ!Zq*cN4;DH@h3d^=)9ZSu;$NJ=n^xO%0=dxXi4V#!S?KwYXf7u@&o@epQihrLQlKI~gM581I&)5jTGIU zp7pF)>v@4c7^S zMYc*b1Ebmd*)Z9yp)kVd10BHbv@&=3W2{aSC0-I&k*tn#ZR-&@X5|lR$YwGQPi>(; z^-o81-#2p^lL?c&@L0R++mxOnl%#68JtHbG$rO|%TVIQ|XK=EMb`A_xx>b=tz(bhQ z&C*qm%g^r8U&l5Ljo}qKCj@Bf9r5YMp0ZBMn{o;zs?V}=9N3s>Hmbs9i;!3LNt*Y3 zS9K5)G>g!eD+gxSSZud=X*<;&j!|l6?fz` z#pd+Mb5z^dSa^kzJgOfon1aZrF~pcPcW2*J?2G0azl#SbkJOGo&`mjj)S1LQM!>!p zvvxCXmIqAUp0RjwEZS7`?z_OLvEUL0t7eP#^*AFrysN;W((HyrE_2_Bj>Sb8rYA=f zM8OokQor7o1%6Ig?%nj7TcKZwj)qSLAC9EkCXvq*|i06`~<4Frgi@_gL#)+@-(*olJit z%eHU~NP76=HMu{V>#CTn#|aSb?IM{7SDitTTDHP!Ork` zs_N?Oq2~6&kB`J@x}(5PBd@b`S2!?DKCysyE0_Icsu3AbJ#(dg1bh=Ps;*N8ohVnH zbgWVAo?_5MA428XyEz_-HB*3%YwzmxQD4#6wY4$bu0!unP+giv!x$Y3*e?(@SaJIWS6 zz&y-E&Gd6;L*|L@r?x)#($u1pj zEvf&AGal&xg8r$0V%?#kU zjINVD90bT7dk7e-_->Hcr5}}sIgg&HlTHW!1}6{J6fg@)So=cgNsD9EQ<%UrD8<}}Z`tK#*gMLU$XQqz;vqfWN#m$s zF}MSibKtCTcEJZ-k%el94D-D-T9HqZZw&T4=4s`H-bEtSo9W5U2@WNjiT?LqHlX`2 ze$L{#I(C|^79^Iv|4D{?m}0~647p5?gN+#)K;X2hO=6`M%JXzG z+7+Jw!#F+@^*U+qj9Fs10NP^ob+_hIarJIsuq@g|AF0y~06O-`t+G%d_6?^<+~Nym z-y|WOZP6H|T#Jh}6&6|AjM8#Y4{Y+rT=uOAJzB*o=0{*;L1?xh>!_n42SEMy)h2%~ znrLIK9&{D%SqbdaG_&Ys(P=*ivCkY;Dg8TQ4+gK1gZWRksYoq77$Ts{^D~er!#FBU z@J8NS5)DcO#%dcT5so?SZLVO$k1IknA7m;EN={tZ{qHOd%+h*V6+2y?aPn6W&Ccz5 z0gIOp39B##P;TkP0f&=fSW9xH_n!`&fZ$SstF642S@0E0-$2XwpYW^ zpOOBt&I3wv|2WqM>W=+I4jcs8n{?+>&LE!QAfGU5Z`VBPB*99sg%32xnhL2?Z?wt%d$uw6*}lW!$T3V_UolrG!96kjlbzWQ1DXw{Su7pE z8@_5J>fSZARX8arqoUKq?8(ZyEb+uv9CHi!{zgt+CvY7#{^rkQ-U~tiU$W?f;ti|& zD`=?s`ZK!eayiyfUGetzOxF(HBu4Yr(0$cZgopdTwdg085?_|}@r2yTk;1zakuHqKa7Y45m3~z#R(xATIZJ} zJNP;GHf&jF9Y!lOH7W{KVHuXyY5@9LChqn6X2WmFaI~nVjL)3H?Y?wenLOHS898t0 zTK5LzY_<(iUhk?&naZ@a5ampayVjR2jSikI=tb}0Q-e32{T`2vF=urcW$;gk^SfRe zl%7v{Z9`;?;S9bn$dBtX3~$~VH#Hbp3!+CFi`hole$nI%j0ZZZo=5g8Jd-UsI8vwo zD29;xO*v_wfa)YPj>X|s>chNyWVa&2i{ya6;|RPlFyKab+~{a`6nk})FlQ}ICd=0F zgPd>4;`k*(z}n{hTzk@ix(`3(P0Eujq>G+tPM{g1#v1>KI2kS?4bPcihOm%WbCmUN zcza|Tyc{I?RDquiaRqG;-!8$yEE{9b@2;Kcd!(1v_O+dyEQRF?MJ_WrY7^2PL@obi zJLSy!&vTakt_AR=MY|u{D0cYC(pOQRjcN9bsgmkXL`*P2AahZnJU0T}J3z6fkA+0Z z3(~rJ0Z8-@*Ydc};^dQ!ID!fQNA(q)JW~W*rVcpqJS3w>lPtJ#*ET-|t zBP$uc{sV~j;CnWfT%_tNai8w+7-0AlhnT-t-4j8AO8k${r~%qUfY9Xz&m65|3^UQs zzil$4?Q~?PXA4`qLu}G6#f9D5N8l2<+|AffZT}WQT>)mpG{$Z@*^RRajw=k$?mKX~2$xIDcQCf+~ zHD=P+z#P{V^`tFu9&cb4gyZx!(iSpc7~j>e6}J^Q1VEg<3!UTQrg&|LvmJ0CLQT>) zlZ43c^WLn>Ppf&W3`FdJNkqk(`A1HcYohvkM;=z#e|V0z3RMkZJ#Fm*#>}RK2Xv5r zq%l|*Hag~bJ-?-c6X(32;m;<6EMgmSKkLofKEH)4!l2!Y+pGipQ~}Pm%Ixd#Grz*8 z?um445)))lFa4lsBS5vG__@@`<8eg9yHObhilfQY|5i9FmpfaXZ;+B%3*Q0w5qnJ? z)46%^<>(p*QXuM)ySjc~Hg%YGm)d_x@V=#l3!Ak_o1^Sfqp(obmUGE}#SRA}XO|PL zGu%iIpnpny;ZtqYE)j(DvuI%Xt8Nscd{HiC;4ODOVpgx;Ak+!j1V4GVbsGn-Rm{?| z1!YwSc`o!JHYRkEwjU+ph1AAg{R6qWpQ#of%AaVzz<-#8S1n}wTo;ODtyC>UPU6+I zW|K*xTF=l^{t@JP$8)S%=E9@urVs}&xf(3?!aUtPz+b`gEBWVNZgd#zMzCoG!d&{= z*s&9|@612;?r2!aYTz2^i=$OENxz+6|%grnGud8(_o!{?J%IG06CfMN1 zEi<^PIKT%?60*Cp@Im=Ws3XxHjDYYGs;Pto1~nD}@}hR#R{?BUD2>m<#!N5`&^j+n zg&@o*^Ue7Ga4K<@m?}qu+~NrgxMEc8dvp&=%HsuMP>+Aa(DFIWsSmtwF57zrU!E1IGTq5k?efn)l>2jkdP zKkg2;CFlQjh<0u@C_9R$;q!S?KsDne#~=i=IfW!BHy8^@J8Sudc-b_BD0EJ4fs)b@ z5lj+k3xy20DP8}~$L!>%l9ei16gjK@vPsvF$Iqwbw@>-hU7if-L6%(cQAkWbzuAKLRnQZPE4~ssDB0an3fo6fNs$Hpw!|4 zzPV8ro-e406~V?i=F{SK!gz<`Fch*g3U4p8K z+jf$J+_zz07B+G~L+X_1KSe=r!T%ow^GMBvL$eK**y0*uuF)sOjP4!vDM`Q!Bu`$S zor@TDLe*pKkuA{NzH&D@%8!lJHeCv5LzYZSkXj2x(m*kr>-q^!O6~NIw69dwr0V8+fF+zFkEKTfn8XK^2FxS`U)0aBe(gAC_E)*d^)GR9H|qj=wQ2PX zAD}Yz=d@p--F18e%DUpE?TUOo73EJ;L;YC@OR!MKRJQp&sr}yr2n5FDpm(DU*FoR2 zJzEye;&Bt*5m*r*R>BEuXha`BS73YP={zE$%IoDo~woY9)-Mu zdX6m8LrUN||8T2;cU1XEWt*dUNMOHH3K3=Z&8hIuZ#TbSEE@RT1;ZjCz0joqgT@lS zg9INmvmG?})G4-FQ9zqSN*qZF)ho*FN~5WbvnY0mMOJ`kJYHE2dVafg#1R?iKD7{I zB;~3p(;|1POs0s*MXxUW+%T}lNNoQ0K94kKf7$od>-a($@Pu-D zxS}0?LI%gER+O7EA!S5!4rJ@jExU@;Za>?ov}~+|2dWVifjq(1pg_JJtm_rfSQ`VW zZrRO<&SHAE-!yIuzbn*1s%TJyQX1USne-OKBcE*Qt|~IBVXp5!nPic?<${~M)2vK7 zihGxEn}Ocy5zizjpEc*y>8H8k09qK>i!ZcWWz#AHs*GTH1wP`v$|qM`B6g*HC>qu6 zEt((6H18}5rb$Vz0yhnuWPJJ#E}(5J+RqG0WcwB~Q`ccI@_(xnQ#>>yxX33ON3;E~ z)6(G`HzD-ej-i|)irJi@AGFFnh!92&5$#5Es&5&H$a?lVag%%^z0^0}bG`bd4=%`k znl18U90vR-UcttbE$fVvPcz!$rw2sSS-)Du!;F!ZG<~Y049y|xo8k4{_|7yf3zz41 zD7IMQqexR^^pZo&5XScH%AoSzJTJLHMR12vuoiyr0XVdYPEEJJ$qbe_R>H8FLQ7vU zz`W*xHjBS#17<(D)>)c?rung5C$5@nhCVH}c)XX(n5cvx7JvQ_R~%;4ISD!}AH)b@ zM);jz2#@@4%P^cM^?wx9sdNjDG{ z+|>~KGsOe-u?^sVh>2-!bfZx|02%8-HBY0*Jlaz?DVw40A>a0hz~~0LW5#m$B#Rv( zNXWwN)vsCf6I>YEw{t9?yfi3~^I~#ki{R`UQv(n$Y9nxhauv_DS2ER7X26b-{I-p4 zKerXx&s3K!pz*~0{Vto@uy{Sx?*MMIs)?a5h3cBJ45uytArH}U%*Nx$6vti_%PWCu zPpDJ53#4M*I(&9u~{!=r<9v zSa0KIJw}-GD}6gD?0u?MgIpVBPp6*aG8BVVfI5!-aC`0$Po}mGZFA_rcy^0~x{X0A zU+#MdwRa%Pi2IYhkYH|w|65Y0_*2{=B=;TLV*A3o%t)=ii`yoZXGda;BztCnQDST3 zXa~n&T6oF0uCHyhh34m{gldw!8b+~7FQVX9`e-=Vh}+LZ?sIG3-i*D@F2Fp~XY;n{ zcFRF5K;}UxYtv{*Hhm}fyUY1y0gswSm(!l|MeZo^#KaK zYFgyj!EY7@I`_*w%dfJd0yHJ|=bz`$o;YY+Q3QogUvM>1;Cj#KOG--_HX(&J)^0Rv$=+%!b3yCrBEa_U^e$fuGqxPWN|y;DS~t6k|VoY?L7o3WTc z<1gK2LED)ND*VatylYL?$vhvL~xL)#rz&R@}%Dhuv?&RAea~V9pP!R0kN_XlMySS|oxY12X{L;=IDo+2Y< z^{Cn4Tdf^VA|y|vc0&{3|{T$P=m)W@$Kgz3QNPqCkB88}MhjIOy6ymq{% zx?v7T(1V7zob^5BjD16}C`z#8v2EM7agS}=wr$(CZQHhO+tz;*@grt4i`mttyA~ZC zUDcVD`PeF0;oepl&Wd{lf>;nAYZ~+Z?wc^jsp{BG&jIp4#3oNI#nd#lRf3N7%#&23 zIb$Sk-We@wGvZvIUh}q)ZVoL@GV7+%&rf-jE3lzp`uV0rAj%G&A z|I7Pe^Fe6}$hO8VOy$@FjK+XRKtk`F0Xru4O0subMAjQK9kYf^e8yzDo^j}-_3bQ{ z39XfHW*~(l5(ZUV%R!qU?3^UlDdEpGgNT zWdxLV4)^)7OEm2|+ZIm@H^0j~T}@s3zqyntWoc3I^Bt0b#-)M)3PIL>hk$ApGm$(g zDnEm@hrQ&Sw^O};i>}zD9=|Zq1qfsZkfKf5aSLhYOcSFN6|}Be0ZHQGWZ3CeUVO4? z%u(R4;Z?)``L)y-W<{S@K3hYv~ zk;wVx0cWH|jD}u=4(SQZL*z0C`B7lGGmwE&=EVCsq zt?uL*7QQ_)CG#MC$obfe??3-G#?AVC>%IlR{k8(K&Vmm+(JTov}K}SQwxnO zASbT?sQ6kl+#p^zMvNODhq%VKSoIzqpR)iJfFOs@ivqRXl*)$DS!gl4q=4p~taYV7OcX%_u2ed!ILIJ|G%BlkRXp6uwWA8QXHBmCV+o{CmcbP=7W%Q=Q2J&w+MY zif?zqZgYle=y_Ig$IBAyh8QFIgJGY0_u3FK<9af(aU)va2AqF{yW<+lzdEVBa@`{i z@BX4yLFJ8hXj8t+f%o}>YUgHnUU*mdCIK{5^;(1LqvPrl?%#sUWpv<_szWs;6<2V> z6f4~?|FR+1GjzkhW6vX1xZXw{H7#U zae6Yb&rC|p%+|fBELuJ@zf!xHAlLF_cSo3VBC;>SOFX`XU*QRzs^n1AbsrL{VQ!QW@zheT4|?mbhH~E0*lPvfy>8;hN4bnX zbr7afj!J@NLd>o;rbx92$23FJY2bgfkgg&EV{U|#hX{(o(BNONV<3s~sj&W%+wYdE zVlkt0EhLE~&hnq3$dVJ%rN9y<`=Y7L4tYQ#3???*LQ+e6sh?(eJfHGK6`74=w&pf3 zV}vby2(J?TQHHx6F;HA`WR(^fA+dt4l6TfU!0`g#ke8qawO5-b^f|J%SLvIGaT1X9 ztZpDe#o>2Uuq}V+8yuLx9o%x3cj|&Sod*^Im_JQAW!JnzG-m_n!Z{5Z?{B5T5s)yK zI49JzQV}d>uCd!UY;Vv&cH88LK#XMmqFnD@8hSb;YHBmDvC;4A>xER!(iV)yk^rfg zu|Xp@aY=-)hvG7rr4*xe<%nB|{_sY=-6F8%Lw+o_8o3I7zF=*i@mP#jUo}B3 z!>(C3vaP;|AQIpXt06OZ79kZW-=cjVXsOIdrw=5#BkmwQd*BXXa~8;w=3Rfb3+g}c zH+zN=*3+h(xgs-4ssx~jHI~7^9?A@f-6$^h#*E^dVZ(X0ef_axeFAOtP+rn-*lk;S zhYivuJ>P{9%`V6=wR+f_z5r+LulMedt>=Ou7VV8>G*-9Y$W-4sUDuIS`$+-vkU@KG zthINz10sFNz}fZb!^Crj`=LQ!;BqAvJ=$9_FD;u`^>AMh?V6nv@x0NVhTqPF#TW)v zlF7^y#5mTZbSc#Z-5bronB?+FjpPkTs58wckSoGV^RL+r<%W` z!iTMj>t(KC;VO^^9_#mRj#IV@0$=^Di1GxiE{iB9*E;wH|C~+#EZSb;c)%u{l|vU< z8=gMS!XNH26wr|QOSC22L4LZ*UpJ*IKL ztj)Rzyo5#aWPb@#0?|E<*W~16=bOXq5#cla-uKxrdD&*1+aX8TG=Ya8#A9A6RdLC zc|LT~OANN+>ae-f(f&~pYstjX_~-~$>-twFh1^f0v_5FMec|R|j<&C}b;dzp_kxx} zN6&o%ou54Y?Pd+K3vlSew17^#UCbc|*qQKn2hZl}+HZVB&c-|99^Alx zpdE@HOTe4d?_avH0#5h}k_HVTG}HEuuuC-o*!9i^5}EtDYVZSNX%x85UV@#T&LCAN z`Y`;!8~(I(ZrH$k8gPbbO0U|7hTNJ<5bLEdHF}wkZI+JCFQIh~@`Au?G)+uP`dz~N z8}i!b3EA|^9LN2{66Du?R>8(n4{R4O3JA>LaY+`CFoC6K-%~?%-AOGV`!=f`Lc#9l z*YT&(t6?}2dkw5d>6N!R%rxp^air0fG+Y3 z7&gR;2!j>8T(z#)RfvF|e8I^WLd0R=l+@XJD37SZ8qgQ2f^Ng(8wyhPY5gT~l8OEX zMJAxp-#u?XZSYKe^$GUW89mEQ^q{<3I>j2XKe(hD0tK`6TW#v%eeD2CJJY!wFV4k-(8PBr$5uA@LS5&}MzIC)?^0;4ksmIJTRbih>=nGjX zKS7wfvw|bLbnkyM1Y*e%mazVQzPbpU9F`2_xIo8mu;#*IbQPbn05hsdXPQZp+I?$i z!ad_U3TE{Dlz15Z9icm1?V*Xgd}K{0)IsJi;SqNho6)%s6A14t(b_tr(4|rs$10bM z`<~2@S3620n}Q4AyRJ#>u3+*-t3J+$stJYyM$*XZIbUvI|9+O91vqI5=yZ4Od-&8_ zFbP$KVXS!PF&L z58eQ`pN2M9Z9zJokfY6|0@y>!qB2X+l=d>{4?XI3yn~&8=n^)$+7_KXJ@TLj1|6|I z^L5!$Y~}(>xk`|lKOVJ(Agu4W(7F&SD^Jsm{%g|04hDjT;_B-7A;kXR6<_1@%E~6k zK-ewPHq8?GnUAIpi7(YDgdDUz(ikG6P^K9Bh_Fi^un_!!NYmiYSZsfNt0rAGe%BxJ z%#uPH51mKkL%dOO+_FgS(-2%V_ZP(IVBzX*8E%ai8=)=2QVg@>%2Q&LW^DRgjwl)e z1H|U3AXAm5VrPO2ZD_?9yG?{j^#yc*79^gy+XnV+bfvW1`MJrte2BL`8z|IZTAJ0t zd>DoK0o`24^8Za>s^eH5s>3sbi+wNhcH)(-XHh0+Rki_ze+F56TGtF8@ci z$p%KVxfo2fz_ObKll2f3k>L1yC{ROaR5Q2#Y1EAkFy;jvET$9jGwDG zscrPX8s>+PFt7r3R?X5@Zg$UjAA!dHn5|SkmuDmi`0-=bk3Lp6Y2v1>!bV|TBX#JH z_fdJZtcqwV-C=QG`_Yzh&PO}s%sBi(+J4|0rl3mazgrc{DN_T-PSV|Ae4`UlLFNCf zXm<}K#0`LWrolx0HSIEd_{aAbU$1>uf_>1>$;y0RO`Hk;A<>^LbIjY`{7Gso2jbco zhzZEbK|HfDDgE)HA4O~Iv7)yLmx)c^n_jVR9#u++`SCjRcx_qff=l34Rx5mbywgdg z)^xVWCC(xq0`uTn9=T8NAH?)(#sr4RQgc6~i(Y0;f$(6Mg({|wag6w(c?|`+Czk`y zRU;AlahV_`6Ymgce7=p}i9D4_pcIfc(}fzsc5#4oiy%w8lBlYGw0;m1)f5_lYcIk? zkK`6&kotR8#PN@TxeuMOgnHi_#&X*HYbLkGp6B_T%><`usRlj4FNTxn<<~8hYI2!7 z3^y85g2gU#1PNQt*}J$0;T0XS%38_Smhox%oc1|e;zjtdB|;dZo(~&Wd9BNuU8WuW z%4Ws}ZV(UEhHiJ2t>S#9wcJ#Rh)@m>fO-I1kVZ`NFZmKUM<@<+Hj246a!NwaCNmJx z1st=Cboh5FKyNpFs3pm|xrb=aMFmtCjErt1qx$ivJAJ&l^tE|~BzZgI(8;mS00)CQ zJM{Rh*wNN#9MD?T+ry@+w)ojdfKeovLCGtk~A znI|8@(*bx=dD;O0MzSvZlfi>H=DJu!afX>S)km9-H(plL6k~oN?leC7dqg~6>_gqS zPJNbmm|f2E3rlw=Tk`=`*8fAx5}`;`EjlvGlft`NiD~AsAW3imKZpN8qiioXHlE57 z=sJ9TxUUna;ys#HV%M368zevaMY$fG+S8SnqGX7fz?{LqiJs zJ4f|L#RO!53ip!a`)&3>gxT*SOOl0NYxW-z%&3=G25RcUAW`mhefF=)juZPn%bvbK zki$}%_nZpy?jt!WuJ&M|C@sMqvyGQzuu8=(9)*qgsnbX#$m~r8?LrzPaFKL#*a5D4 z#3Kr{o``QN7M4y8DDBriGQ^tNEqi+7FI393wu4!Mzg*RSMD*zZx5VF2bsM0Lmfj-h z5)jBrP5jysbn0cXEHV&T?+oNk*Bn)WxS0>%oPYHv~Z*px8Lz zR9C)X_TUJ2CvrIs(Sq;qdxr~p5yYZoP%2UDxt=8X(=WK z|NW54k@=t{Fl22E+$-+*M{$LC{B+$ioZV{?^8MN#_bRUNC3+MwMm#GYFsuN+P9(yhSTcw3m74K#M10{l|{r=WM`H1eF${ zxx?oc5r5@N{eAqLXebtL+}U~^hsfNDXGiL6(zpYh<_K@(z1)*t`SbW*;WD+CbS(@E zGOKd|#%kXxp(Nqi<(*)OM$@f59xb)^grkJy<|t~M?uAyh2|2+kV?lV?q*31sRMYVz}mbW%Ku2qOI7(U;p==i zRV-55oVt`Tn9*T;YBv%*rXTJ9W)v8*aq<_Ef!mou%{#rO+O4Bk+Diq7W``9;_?%Xe zb8TCas`h7h0i%R#{MWkh?6F5-&*Ohh1=HxSxC5ksM9>ueF9ELOX97LmxTCQOz$BWx zD?kmCoCn@?Ul5IqHA0d^i+A(S={^!zqADoluasd!-u55D=NNPBIjSfU`5(~MEk!Up z{6_k76HqkJsu0V({61wT67dE7ePIUXQFA^@#Cw(Q%f~}z^`F?#R|n;NF#s!TTZl`Q z6?O0Xs(${O@f2hq1HqcYGkRT91hP&4YGpaHpZLQ0}1a>YTyLKik#=i=NTDUouU&?Hmq#>SmdY0FWLFa}5einFW4)em^uoiD24H#(+o`wn9 z;5X^<3QOeMC^)YM_#YLcq zyLI|4?DK>d!j`Owyo*IAy5d{pMxE7Pe!=lL!O!gc}ar`e+$9ouAm|_sqD6 zaZ)QB7INSY^mx7l^)KZqCnm1QvlvD>I9vXM*tg|x&x(bE^`@EG?K#}Ry+IIzxaSiZ z^gU z(kLbh3RQFy1RBy+aLW<$CHpkx_rnVDecs|D5?`yfP!Hxv{OCSUtUMlLG9eyYK96jK zjUc6g1;96$i>CPc*7G6pHLhbjIi5oO;U5RGo^Pm4>eO%1k6F(mEspG%O=!3o7?w6E zIT^cjaygL*xtXyd@gNuaK@_S_I6s{nTzo=0W6dTI?l&!;`Z_A^mSR&u&_T)F_)3c1 z2iLaH%tS)}{VyD*iDso9=&-iTrr`!&g^%RJ?dQ#NSU7A?iA7=7T}s+Pk0Z?WcE19= zsSOM!V7(mr*D&>zUoj{A+eO)&+JQ_KTc~y%%nt3oo-GoNCI*Z0Q0(V86`ac=0l=jE z>I&zqP-WDD&}mRXG}0QoavE&&EjkW9-b|LKd7yKHZ$uQOhahD}nK#0al6Vvk-G!{+580ex zEG04(3QHSdt`G!sX>a5lLtUX4$i(>XcFh&3@;hJ!{uvWkBPVX$VazQWbzy(;WzB?^K_LUFx?CC?nY$-Qbx1Yh~_Yltb zkdM?wj$p_UkMVit%LTO8)^W$-F)WY{0;=^LEr$_k@~9j9J+7q!o-lNF8E{x=zUm+A zn_j=P!1ktz&Y%F}jkP!@N9g~soR#366(usd?VFbks?MuW6iS)miR<<}*6?{wB_1hz z)%ZAA4xlFjD-#nOglC~sBRDui*dO%jx;vKhB`SV0@fFuVKF>a=tL%3oKNN6Hb(+x% zQ6@t(KS~)tVimbIE`Z2R<^ycBg`QN3BWxjg~GV)n}a) z9WQ9coa|)S*qCpb=GxY@CG}mG{)H@&(npR~eVWPlt+i>EPD#N=M^F;r^vY_!5X?va zfvR#;js1!~$K+f0}X>C|O7) zwI4OVw@@#{zg^(hVT2_ap1Z`INL2TVR-bb|hy7V0 zNfR6e=n-mIRKZtPw4&>9g^IqR$iYmOfeylE00ZCvh#$kI$G>eqzK3BC{}Z+Y&UxT; zVT*p;Z01wFw<0!Td#A-*X~%}yd!gT1kRA5;mhYO7yi!xlqh*U6&WImTUr77*UBb_9 z3=$Cu2i12b<3S!cO%iuMBxzheo`5PVK8lkF#;!t!5m^yshfOA--ty zkO|<+`cb14W6Xc8&@wVaRd%4cePp|@2{P>S8B}o=9qV`kztJ(32<%5ltmVkFi3s2j zRt4_ig&X^@6{PmRY$&>awR(%S@gG++SD1#g=RAg0JRVba&MnT7*LKbSg{xX+ERi)< z!_;r3M0q)*HrMbX}tzQz(RkYrDQIso*OE}zM0LJ@9vxJ~Af z)o%>uxzei}UJzXK4Td+NU9FTY8EeYi^BI>@j~Tb*oiOC?Nk#f*Hy2HJv#Ldd%2(Cf z>j;_AOg9LV^@%~kS<|AA#3dnuV*g9+ogenmpIn4vC4r=xB*!Um;#iAcCy;1+?u)}U zaEr-tYA2`7wZxxWWyx^YifxTRM7e%}n3!MKgSE~6+1I#0xg1fh-qCR|WCG&1eD`jV zt?}LPVQc4D5xwPr)D;!j(>r)VH?^v)fA8FLOt4bWn25kWYDtNd{uvCut2z@WYYdJ?}OO3S9V;Ud)fYejxb5TO6V_Iuz ziE-#>DN2&R{M2y%+q0ZYq;)5+ME9j?&bIqAsv`cuk>xEMQ6VzNa{vey8)lA9i)Itf z=b?-G6shnGcJXKaMVHeSJw7ttAC*cLA&RncN@@u{RB@RZ=o z6H!g0RHd;HCIL9AQ!E(t@-vZJwVB)pzY4$Qk|KMeNQCv_>5FF#LHLU1ZQc2%@B}lj zM2XoY81oo z>y~~dt!NzyQ%hQ}?j@fJwmhED(JLo#fbgdlBE$D>LaB|tpYGl8() z!L$bIox@z@+7&8c2Haeg3N`jnG+xgB&8OzimHveZz#roUBrbXe#0=^=$^97{t(Dle72` zM64t+(&w(D+jgp@{NKW)ItNWUBKuEv)f-!y_+RNXN%e>Q-eFpi>~-s5u~&>JAdKBD zoru!tE4=0){36n5w=7<|6!MuJeYskiqi4mv*JsKq-7DR`%#4{pSe6O7G>cv@4}FzW zubsY<##FUTcXr-ON#E;)*wmg<&3J|g>6FnKAaD1ze;kjZzvg#;s}NzWp+t(Zk!IFA`DIv~ zEt*$$z|qq_^l=5ijK71(UL0OyUa^pR(CX_Rg>8fHJjT3Vp@krdb^8^R2Dw7|&gFZM zS@1&$O1;k8yxW!*mo($@I~RrimlCZ=DCd$)P#m1)K;nrQpp_)=AF@MD)bmxQNL8R@ zwfd>F_6MJCk){A?4&J$sRN^fnl9gJkn~*IewfdN|EY%--E{U~3!{-D?@j^tt6|QuI z!fwXL6hX4zG~5+x-RSSK^=A-v3sLT^F*e-U_#rqJD-IAe|tTMu8=_q8JJ!`3}IZfDk{LdxTRJZa703 zl5@TW4?HW6$-x2qHqH07Uu#y;;4Q{&jeAd*OeCkdvM9Qga;lkjiZ@h~F}qy&Tv{+k z$EGiIQj)&3%$OgO%|F&h*v@TC&^Zx%Ku2Bje+uLswk+XrR2Tb1<4-Re+mp=kDm{sA z+04RgT}3n@$04DelEV_ua?Na3G@fl$vN6Fbk@DlX9qJ1?Wa<&zUgcE0SahVZg8HmS z8~!4G#Jt{eH3mbDex*!e&_((q{ax~kF+?9t?7&5aDkB;MJ*xux!irEyJ`)8|_1q#| zLRsjiF}Ns&Iy8!G)=0cBe>|4}1t`iu$qR@A$^bcWbwa;*&L*qhyQn+`%a}O5XWm=! zew?H$js~?-r#gbzpvk5n>8aZLbfs+?KixMmjCNWO&o1Y%5gpMG$uO;p?AS2ot;g^o zclXT9qK+>NR>`JTG`?@|@>P;(2&dAc1L)#+pj1>Yt(R~*1$iexdwXK_ak-dNIGqzY zJ2NSCrC%qWD(fxJ&juqJx|LjAm{*BqPzE!!5;VTMHXHUUgztjED^D--%4tp}ap(>+ zBI{vMWOy(Fi=KQY=KdM)RYy0O`k6|SNZVDSCkR?}ek!J5Pg{`f{s^4v<9do;r2eYJeqi>0?T@Gcpm@m73kosHNgc~B?WO36El3=PA zj857g?l*xEoYOdsl<-HShXB0K52VFDMAoPZb`T99v2;v{!$f6r8CKg22}Ln{Sd1d+ z;}gHVa*&EXGLGMoHuJ;euW^*_$FcKA*Z78Rxnf5K$Gst{O9Iwg<(Bmh={i1pN3sWE zyK{?v1BL^jp_p)4^GhV&{GoBIe&{KZwO5KJ29muMe-y|01SGp-NWsIH zBFEJL#X^`>GPipVqJ7FoYP>X|RTtbmH^#)w*P!hq08UwsL>Kfm&Mrdc?)dzpZC(~O zBG=bA^{t;6BD&b_@p#7D_yko3C-OB7uzQDlP^ddyz8flWU-H9(zF^GNZrrYGa?Rk& ze%<=#&-K${y}fgWHIjiS>9;dGmjty8O(s@Ds}VnUjPlwSH-nXzCN{l=JyTQDbjFXxqZpco{nV<3J=d>!P%uDMK2Y%?n6R4dSp*U=jU zamrVt_K=JUMWoXg3=B?77po`!v9ZT}(`c#oLc9^?faRgE$QV5mdxJR{o*n;^-|CLZcUt7p#DCOJhef*R1bzCo^CNsT$IT+GLKxk?zqX5AI)I0p>YbaRHRu zW!wQ)*-)UzsyR)r9bpYKii&i6Xf7CEkoHccAL#w|362~rceHg5JY^*D&3mSYB2UkQ+eXJ8iJOJ34n8LpD(M^A`96OxQ@ zmS9=5ePBiI03MU)(pK+!I@TH8n^*UusDa>eGmB zDP;8bV!Gz~pB&)26sq-EHYJa>3}8WRJij-=!O)3+^0&>*vOpJj$G074vRe+Wry zb)^U+cSk-W4#R6+=Q^PIfi!smA+M#{8t$IS=Yrh?<3Z?@5*X6msK+$9$qP3YD3BS4 zMYz*$5f8R+PkLTcbwXV=Xu=fQ`-CUemWZtkkym-^3t|s0u5O>PBo_1eS4c^K95#W` z?xYMt#$0N#D4+N z-f>HIaOcpf)?t1^wpy?y*D#tyO)P%bSV^v?(91Kfcm=VvR?kif?vb>TFTVh4ESL2O zN|?$<-ujAbY;Ney2P|S)1+p{o&aTQd_VI6?g`M&3FXVg2YO`oqWs2NJg1wy`T8ikT z3q(yoj;y1_nyJK~GMc`7H)3$o?y-HI#nU>V)W?|B5{HZe#!mV%=dkYjbz{QIlbQrycZ!Iy73hA0tF_qD(yd<`yACuSRod8xEZZL0XXcdB~_6A6VC9!!Y1LKz*9S8293}; z_irX-G9*Dk);%PstIn>2ICAcwmdv&4;HbgR9E%4oN;K^~QHkIy9v^LNm{(ToH<}dS z1A?pmgT&u)a6Tcw$5A_$l^s_sX>Kg-5|ftfcG01rI$Hrk6YXi8&Q} z>J|>%!E>WWf6wntLEJ;p%LqL#Bd+LtpXV{AmBPbQbqLDIltQ=d7h1eziR0k?M?w6= zOv=MqS^&k0bzrWMNC*=(xm$YkpY2J%af%hij{I#m6>s2&^_9AHapQS{dD}Pf%HndO zAWrmn%mrM1U9zeT!U6Hx(eBV*>VBE_%l0qi(!ige`0IBd0+TZ5z|LoOqxvs zx~Gf>iysCKhfkSS1Hpli529UyDr?^Zs*yDdV(U$f4)lT>`4G4};phf&~dYwqT^DnzYNnT)DD$cwHKD&>Du(_?rK zEP8bgxz>USeT%&;TMlWCO>^dmyUrGJPi5szo@IXc(n14>*puTLfvbyEr`aHF`NapZ z`shbVeTVijBXvXp!25F)_t7PQz9NUhZ_>&-x2|We!G`~K?GgU0{j-rcI@Da)=DdA@ z;M+kB)fRBtNDD}ou+;%Y@4SeXpMA^iI*RC?`#cGi@vw(K%V4c1 zAs2wCAC&(C_ew*}m_;5Q%%m)<)pq>2cy0Rqfab`{V?$)tdOu%{bF6@nCeV}pClhV2 ze|1(9J~vQjTyKLW`qRwVL>j0YaNar%v{ZmkKQeqqXAfr<`?wqF2{#JICn}C+&}>bN zUrLvnD)3uThFVRa(6E|@J!rZb>a1$`V6j*r}E{Z$K;e99aHeAi!5*1MmtZY*{zZhNoOxh%U_o4 zsDvH{4gt2}Zqc!r!?L2XYsliq1L7&CQM|z#cKnf~L&dxjIK;>DoO~kvxDNM2(cHU~b0$xR^cOixTu~0wuc%XxIm5a70tYV^i`n-% zyXYHl4Y3+&Hlp=Ybk3zrc&_JM@?s419e>-#aNuGn+yu{S@c;Ny2c=3mzUgE8Xh?rG z9W2!npS&5w_Bmu8Aba1C@~0JK2pP=dcx`R4vJ_)l>I3=e1xP>o5Ou(m^lbvNf}{4p zG-!K1ieqy(vtNIbEOGgm;cvZu0E-{PXWQxRhsregkg;(_r|^7dw%_!X)@1 zqtSV}@)KSk+6|2e5l(jdpiZs{Wfyylhg_CmWC5N;KL+zPbT&64_!5{J|koW4wtt9(sB<-r+DO#L(*I zL@;ULMSQTeaOlr(k*|2D({Zad)!(nCU&U{nnqp7iGYHO`wtNKgRNR1|(sy0dS3%HP zMqyw=;1jZ%Et0(pqta%GhR=kJGPRN~8p=y$P#R}lL`q*6r@3A@9QYK&j&gF{ru6$a zn*ND2Z2?7-kBR6h{Q~{MZWB<~U5&kD^O}kjV9mcV%yu-^ClWMJoc=Zbb0O4JBO7(R ziN737b3dYBWq>(Oy4pI=cjg3(-hR*@N+TD~d+{>2|EO7cqqY+m$zw8D zlv0VB&>u>sU7Wkio`wg(iBCjKLYr{no7hjpB5^>1Zi597MbZ^0?x_#{=$CT-Tt2bg zM!gsT^t*GO&zwykg-?sXXkl%yXox;pNAZ zxzJA%f2t`cSEJU2Z_E=-K{R?5dlk|-tT^_fU5fj1Lw{6CJld1C1TXvB_9l>Hq23H1 zu>*MK?(JTsNn3{X7!{}sgh|-Z4+zsY5mbZ_2rP=?0c7uoLJ-*=w8GDp0q}9P5sHlP zeW0t|&WAGg*zYK}tb(ogDXCM^ZX;AH0fzv;vh$QY^LToPmb`MPV+5$RM(C?XJ~rz}64f0sQ@YdM3s?HmX_VXe_C0~>+0A{VNeK;y8XP}2 z+g^=@ebWed$ry=@+(5Rdw5kH?CR8xRO7~NV9rjFeQH$hS-{$baUpMw5O42||q$;Ra zpKpJ`ceKwNlBW>^*4eV8rDED+OktIQs;*lLlCo~!^lZn_G{3m$=R(<0aBg%`5T-Ti zRH(#?O69b=z|z16S9l3$BV-)&2(Iut_&QEPv7`85AmufrO=UL>rV%%BEh5rGE&Tym znSmaTtE)BnQUFhe261+YXr@@)<{F=74@y`t{a?~?eXpfVZvulJ!y-Yy6K@vxIBjCS^ za3tpUEx-z`(No%FA7RWk7s}d9`6^mshD&`E;=lQM*rd#=Xk~EaZH}SY55Z;?d!8vt_;4aACpO@ETH%*^T}mU8rqM4;Z3FUh_H=dqXQM)jXWkB-&JD z)#ML$22w+k^>o95_a0#R3?dA9glJbnt`H71U*#mX{m~o!b(OApBVlI7@R{i8bZRnF zozEBdQUD0Y^b-skgw|I6j*%_Pt}%|`x6%`HLyRJZlLML7lWH*}YPi3WskH;@3>3~IB}P1P}`d5z&uHEws<2>IJ6hvlhA#7 zt;ZSmrZK1Yts!m#q1rk3mYyA9wB0MG9&HXRoCDC2QCi-d6%3A-q>l4xPWToBdp!k= zOHkg2ZUhPVqR4rwqH$P$;pJGSUXa(c|dP#MPKJc*Egm+cyO>6U=b6?N+2QN4vci~ZqH|D z8;{z|1Z67m%%DYh*qd>UFVMx8B0{LqrPHcT)Giz$X7s~P*6gDMbF}gTKdwPzeaf6& z08)`83Q#VmS2kjuo#~xQSx8d7O~Kr1U-OPbbN~u&UM<#C-R3ztAsKcY^rt2q!PcXU zd(b+)e~6h2#cdB-(o8A>Q)AG4xcxe?g=1G|@Kg?<<~d}HBP0kAc_F&<=11_lkja-c z0+R_hwPwsczj?cwX<`P+`9B~;?)+>ZQPe5=ti?2ijEtD z?@aElBzl{cEK%1qwK;H_iFw{b1{Fi7AHzUit8V>qpZ0C&LcGqC2N=M{0XgCz?R*V8 zO_h1^nn(yJ%=&P~rLwBZP=%W+P&RL$2v7522C?S_Hmv2ri{C1ehuYKrXKf-srsmGX zXq6)1dAyR_(*^$Qbi4vgdy=tAd%mx^;l8JvGfyFK(qoFX2or)kJHx>{ z-MvL7rE@{ji9I3a=}8LoFI;v28R38r(#dm+Qa{Lu=5gO4)G6tttovI zei11j=A2r9uzox!2DO(So7sM?g~qFL`%=JXQV;{Fx7AC>v0i4Fo8}eN_D>^^COw4l zp6so##d7XpIY6WuNf3+b6Z@=RDx8&NToGz+Ff<*(*UEjO5q>~uyjNY8Hf9E2J3 zvJ53Mcl0y_@v2cAe#J^jpmDQR_VzSpei2g}`BQADBMynya!t;5j|iAC=fIbnueatp zRTik8R#BV5xr=Uw&~B_uvKxrI0HPjkaY#XJ69E*5UvN6Q+$*^VX)G-xU~^ z6Qo_HOQK#$S_jr9yx?_%KtP-GgK#mcAt$PnWS)AhbKf^NaWL`goJamM*{W8XS9XCX zvXp@yCjktJ_F?(^y}MN986Q4JeK5Tcd?AvceX_7f4I{7n5}D~2D3AQwy*b=BE(LzE z@IFvL)>iwB!Batj*gL?|Ln9|Q(~w$B%GB*HzVHle*FLr8YYZGvQJNhdhK|{DtSQZ% zyK!ty-^nHY_)GqJy+^)ZK@)WN$ku7} zPkD=5?zO%CCAx4RdOYsJrcdk#aby5tk?7EHY1918Utl%SzsILj?Xvuu0|O?pVSUmJ zyp&`tx+XjAQHmJ#O9>pNbG~C{HNx^3RK%AtnC&2SJ`Quzk*))M<~`gtl^biYV}%(zE~QIEO1IL9@LoOKAe=tElzK8C~U_7D|bzIR3Ah5CMZXI zKqU(IOtd04-KWrpBdPhsP#;!Ps2$-gcUBFNo>#tVO#)342aA3r{7W7eXR>9_1xeXt z#jIa?1suM@txods6)8>vFq*lz6Jvos-kksL>UWS@&GDUH1x!hSq&?EBDt>=wF8E#? z$q!d+jT~*oGTFJrlE1Tq2puB`$qWTUWe<}DW1Q_Wc8lP2!X5mVOQI>5X5tZ09Cnfo zsA|nGSO(fMsslGtsM7FJIGW}8ByDR{5*PLfy6$_w>wn~Wa$w`f@Fx?Ifa9XI~DHuHi>2TD_L7=?Uv*f4$ z^y9eCHAPff6{&xR@6%RuR4Un?8Tfq>S+5n@&Gn2;QlzgNq3Y2(F3Vb)$U^mYHJDS* zgkOb~(HL#T-gBP?7Zrn~fLeUw^pE`6F9x0a{dIYfodK|X>uEn-iJb>9kv3zp!v-5y zr<~fklrZd~G@nCMvFdeTTr<&6Fv-{+oa(OYv3_DnSc>Rc%YAN03s3Nrv!h0_eFuCg z0NO`I7`v_z8NrD``_KhHA(f?)3G9sjD!*h^xGCr{QV+ zZUPGHfyTfcn&ra87Piq1^btkD zI+yC|-2^Om`d$ki=v^|Q9QOX!eT|_tl4=na<8W@1=_Y&dE|zU4|Cw(U?Iqy-4**+0 zq`x4z?3}R7%QOQ8l{Pxl!h7A`L{`Eyu5q=|l=uX=wHzoTRB9fB4Vpp(Hp*OOpbC%| zRM8$bwqMaW^fDMxn#||t)o5ZqV6p2wPvpzy&e(1cq44=KmkLWaPMDeR{aw@5tJmNJ zz5b=rPyr9+s6?G?UwDu0JT+GpWt1?-(n*foH{sc+F9NK`WWY^pzmY!d()7M463!RM z+C^YmctI=t$eE&?7KFJGc)`5D;|jrey+$JdK+R&I#on^JBo)vJHvhsBjk{dK2}{Vduh*IVu~h24=+@`;GN+B$pc} zULKWT{tV{6Yi9%Zl{S&V)M-D(FZ$lz)8M-fur_yYKIt~H^iZc;K3^p`!L!TRtibIb z5qlO|0!pQ#mRtC0U`Oj#MntI8_Rc6_t>pme{qE=Rd#2|W+(S(;V=|xtBWMe6f?gLy zM_z3~;gmplROlYt%_0$M5tB{+P@r<6yHO_$bG~h;YW9nw^fLCVwmb=}D7?VneN#Vm zMqNzRd&)EzM@E&doPYAMN>n9ekLOfkB=pz!@1H{|4hnyxQ|W0p)O!rOn&(ScVD)6+ z;r1V%vEE`TI8#tOHD@ZUe96m!yS)mnKv+dB=|lrC&?Y+Nt)J{tgMlGn?lpdU<;!2Rk8fU%HBwD5KHH zVW{C+)XcF(>F~QN!-6Pd`Mr(|iFn&_rcj+%$gkjc{L!jTqV? z%^^tC&cqIY&#ag@*YNY!r|+N)U)$yL?_245W}(MUU&!+Q>jh-1^L5SjR*xNc^P==s zqJfjCD$UpMs0RviLyJJGKgrHyI0C}Dc^FVkr0j*mdl_8{mJP1@U?7D68tCOL!^h1M ziInKhdl468(TGAbaLQlLv#g?Yo9`oY`wXrD*n?h1(UUm0uB5BraN*?N<*ZSs!{#j) zGrKDn>R!wJVK~w3!4Og=RnGnY2Cox|IP^A_`@bd}tru^BW8r#H^FPThW&c~(8#=V{ zsl$si?~A>KO8FHODMP~?hZUuuU*< z>vn@9{mPup$gQW?zyQ+;Z!|xetZcSG9b57us$|o3b-($lJI)@;d_Yp}Gfh&b zB1vHlP!j`%c2%~DbQIhh^O#GguyJB{q34WMoa^)+f3cq}1ru{mqSK(Ncn1t6`R9aW z)R>;WCg67*WV{y1P9Y;sdWwn&w+bEWojIIhve`!T^`z8c%a7R8thSBpN>U{>3_Bzd zIt^XGoMO!XoEEt#@lxWIG`J@loZXQ~ZAO!!AkbA(R7SR1ho>J;)71^Sl;!~mA=>k! z?JO41mm{cQ8}sH5ibN9H;VbdbArZrpl-0p#-onlE@o;hGs7=CtmK+%nosbP_76@B8 zq8l|{?9D}H{W&k0bN?37wQ=n9UjuZ!ML4F5llINvG(pNZ1iGdRl4^?PlbjS?RxA&q zJ$wU5W;ZL-h5=&us(C~s`0RuJY?p~~a#H;mm(Z@s0pkq4KC0*0pd+d!3nJ0i*%Pg|DN8-WMkUsT zb&o(sP?dsLYc-BXBB@;SVL{n9Twz^mv47e0ghyB7^jmR={=WekA@fBg1*X>6A4!-} znfvSl%zZSFh;b((jms+5TdgoUBs)eGN z9W0^$4cOdG$oF@}@e!cp3~%oH(Qb)gQ$Y2o+CJj*H83m#As&BqbVo>Qb}+T2zwg~F z>|^v>0s$wS@k$pBBxVs5M;|v?nR9y&7DTUgkhVl`w=E5d348X1h0qBR#%AE^rbJTR zDUgD0j^A%)gAOpri~>Sch^gi}2j8B`+~TI1Ko~EN*P`D7?F^zBn<=cp5^WUJ4`r^Hn;($Hm}IWIC<##lH{u_Z6{I(iW}m2`}@KcOEtZ#!G&6lmMP zgyF-9W0L1&Vmjs>Wy$G=G0fGL4D#6yM-LM#0l!LY7g;hnot#yE$vCsY@MgE0zl8y& zR5Z8qL$dxi8VfW&4nspCmCBC;xRv?b5vR%~kzq$UKEPqn?%QNHOKLgB=pqsd86qo2 zwGwF?LZ1Tva8drvuv1Ncvu8`Yd7eCtkm~jn%n(pTeOjObV#4C`CZTX-+_03U!x+_7 zoIJxVvnGk@JBvzxkEs}qB8b}UFsA_D{`_)Geh~HYWC=o9tosf6k>RB+7IpZPso*J;oMx6A^8NcK3xV^1q_9{k++z09mz~C3Jt_VdyOs z2aY1o1XYI2eqEgE|75N3P{ipEC#?Pbwml`>=dgDvEg_Its(kSAjHl+2*z~?K{@gzg z)r;VGAVLB0`{`iRIii={%O1>8hxpvY6T| z2eY*#;aIRZK+RazK{wbVswREc7`6)a%WQ5Pif^L}D-(2_ zK`PtNQMh=-cn*;zqPg#N-SLT-;ok)c<%S0KSs}Zf9)Dol!w1}v24T=W{9;IVDY#rU z+*4d#r8y~GHWei`$fZo&{mFCOrcCI8?*Hylv(6Dst<=Xw;MTwR{pLck2#tlKTZ564uO#;2)Gv~ zgPXmjm(0Syv5H`*ZxA2pUe1387!)!BL)WC4-FyhNaWZYfgRH2j4rC%XN=K(AmcCIdo3hwMQz}UDC6*jc0%7RK!_#c%>Wsw(4YKD*G5fR*I zG&r?&5M~0px4RvSjK@LdsLH!1EY_izxBH@1kue^%tZzTcj?VU$*q+07n}THQg7@!D z-a8dCH_hFl0hB6h+coXCxtv;_>1pW~CvZ;=dmBYo!D3x)%Vl8*4c-oc&NXk$w~t$< zycIpow5UBE#5}etp9n0=5y7uzPhsi=TGx#C>1#Z_$q3twQVW22u%0-ax7Fh9m{mzA zHH<}_F#~-!1?>3ZWYs1v`O_O+P9=X1YP1}Hg2R`jVQg*pLKf7^oE>$bklwJbm18FL z$jXeq#qb&Ut;-*)>q^5Wyu+{_;Nt2VDhMS(u>KZE0c^h*msdWuSW*ui+ihMAOp7JB@h?foZsxXNX{I#oy!J5)v0f`qU>_4g=T~qBj#S5Fa^@J-neAvrV?8r#`wm0) z?BO05c?}+@&FW4{DoMxPDc1$AlV+^NmR3+CX}SzS7tWOb6c&e}UT6H3$nB-;sT)F zY-&s;FUjf$`(9~JHWLaB<}SNx()1u$B0!T)w5|@J)K!H{&68OwkOjrCsa>ow3fAOj zm%<*08lOCseGFvg;6s^6U><>+#;segsT zeD=-5wh1Jv`>yDQJey*BrV5RKTSb2hmk>ov-XfQkG-^)FizjO^&svd08){}44C)h< z$pj|W=KK-iQ=TZk(@7TB6ry+TXyl0?{}_WGF@xr;zko@R=1l=I&D*~GgL#KfB`a;E zaHsThcIi=_Ez)<0j}bS6nA>%j%z`0D;ljcrb?dlFBKPj+F~S_eaNAT+MuJtr0oHha zcY~;XLHpmofIk0OD+2p2fh`bw!zc)cqy&;3#z|zRh^YA?J8uM8KL!BQw4NQ*)5UKw zBFu~mGe6J7?9!u}HG`QhA1vlkq+Y&0bk3|+lqAU>wMN{st_0yyLSJdi8v5ihXiOt< zZgeb-JxhwS9d?-ad&=Fg7=BoXZhR>NYd z`szfYxamE0hO(4pK>*J5@}y?P?G?0vW=b*8az`O1APZR4GTEX3iHTE8a0BkQl;_PU zzQb$|v|c|THfie`3%7HcM*>EGfUrPYooVy0h-PO|Q31r?`megaJu z+}96CqSxMU8*#b2xT1%hYU|9qt4p{c7Q?uq(71qtm-F8a3m7ZZ*;IOS_;2R{ESK4& zK%5IdJ*VD1_VW?f6D9uFKMYs&lY@Cc(y}o_iq_owXHz4)BsUABuQ*?jfElQnRnJSJ zJ`iCr9QV~l%vlsny9y-8#p}w8pY5fVBr|3aGVzJ>4&TMH`(VE2Cy`Cdqt(`UKn-)AUi4pup;c^v-vi8Nt~-1 z1&v2(!h_+$G}whboKeD_4f2B@HlYI-&xZgHNNK?y8uQA34;#z=s z)Q&2aQx!M>h;u&*yu<@D`IDGZ8#5N0tLPqU5Z3Il#0^ZqW1CP2%8++J#TjM+1}K!@ zKfZ2y(({8}{2yJ@!+q$0BTtuP1u{_%eXLpT1yhW_z^AvlJ?T9V9{l);UsNjN1CsLq zrj!l3_na{#25SBA)Uxuep7qR@Xcs`c1N;wk(OzPrPYQ~p2Jml2ifDh%KloD=HeWx~ zKfm&D8-9Wyz7*OHBFjS1J|Uw|dIb4Ndhl$NFPDg?F4f`Cg?Qu-ciA@4?SY3;5Tzyb zf5614>8HbpXp_4+Ygi>%GLEitt@8=}!oXI6P|O&xeU3xzw%q*`7Y|X zzzj&QRdDz^iha|k>`e->&a7)ww2YKr09dCi-~g_snkTz{9$qfkMdq3h^Bnv@+&qAe z9tYgfZL-q?(vPpIEQa4n_U>6Bw!XF9ksElD8RBo)5*nozB4V&=Q3I)ppAD1oO1MX% zk9JmQPAo5^{3SFKjvJhZBO}JwrsSW7(CU#5Pu-LTt`u0%)!zh#^LUP50ds3%_{TH} zD*RI>)ERK6tsk4)=HR_MdjC)MAm;EkUGdW7enyGjCOpubELT)M$xqbT;2h0Vep(QD zRaTjdWpM!qb&?^^O4bWcea8vO+d&uY`EfX+YStIbxk&f5vx$S5Y_rLQ=#cqE&iC&b z03rD}2-3n>S&DuhiI#j)!@8lcZ4PGVIwzt^<;QvC2Z!sYbb1yNLAAr?T#WVZM(FIpZlC?u<51@J8gw@yXcnd^ zy9Y@I0?lOjTP^WV;;X?WsMlBuvvaY)j@)m9RTdyOVObOyn@ajrftoND3NVD;;=4q) zNThFhJ$7mzPHHfG$W_yFk$`fc<$kZuQIPt61@1sr*xTu&Svh62b7>Y=pHp$+_qO+IJaZ@NfVBYk>hh@Pg1TdU^Gz za>~{OFHN+Y3fa_?#bq<{blzG^7|9%yxppJ6`9;{%w#u^`Bd*JL51vwvlL$$B#36-! zmv#$c{PJpH3d7uL;xE=Zukg$I4a1=BGm{0yq{mV&n1zLCIItL~JkvMtVXbGKC@{N7 z6sU^_J1R`!u#N;i3dydNh}Tg8&?9zLBfH&~bKZ3aMD*1cw(Qv;8G}pheOks%xv8k8wU` zzVmq7KcsMb(1V0?G=AOdER3h z;DzOejSTV#MjpnXQXs@j*EZ5U*$!Ryb+(MCl=U(nnOXPJ04o>^MGmJF>QS>@@LIXL zdkR6?53$55cE#3MP>A2?bZ7xVbJu!14$1?KkKs?Y+iq3ORBtRWB=4@>u4?Dw6L$XC zt9bLy`u5^0=?~^1n~TKIC|e)b4CP=B+JrQ3m#f*8f2~%@75PQtppb$YSvkVh`LzT; zgc9<>pws}V-Tjjx<~uysDgecM_|pS&iJDBsHk?jErx>oZIr6L&_PWAa*SN?UU9{HD zKJP)5;K(0e=Ep}4U6i{kw$TA{y*fY{j2?B59aWCQStLXbSb-u80NaN(?#^ zN|qkzw0ETMkuK+i`ZrOu z`Sq+*NUhRVa_{On%#75`d(hROk;M0uZ|JzK*-Kl|XMlC0Ugfb?-6u!s=;^dIvH&u; zO@fUO1Z5c0YCHD)k>XuocT#!N*QdfckW`cS3|>(k@|qtVdM5`T z9Dw73TagScAnh<&sUs&Uhmv@qN0^(z8q+4w;e-4PK^|DSHQRA5bU3_{#m&9)_@*n9&z<=%bU9>J0^yKk++5h%) z&pgrH{krCfN_$t+^Ojv0uC74*qoYUdj^(4){bzlG8hoI|!NU33nK)N*EtHaLd57WW z!l!}Vg?D7bwzT&}wZdz!rB087(tg%XmAcDd>LzG^nai~f3+YymV_Q1m;~GwXVQvpb zB+qVEkUST<102JiMo@mD(y9I_o(`!3J4Z2ASma{gk_`Fz>_Ya={}tZix@uh3nQps> zX<}Pc?-O1DOQxw~l_s*S#RBbBl}Gi2*k;YDkCoE<%;WzVS?0bV16310S548(g&EIK z)}3V<^bmd=1SY7C)6|E509A;VGKxu>x2?A}6L2<`+pj2gg!YDaC=Sa89Mf0o6dV(~ ziDu;G)o(bqvniAdcg83hmu9RYo6a;sZePiOu;uD>YHlXL&2s`%hJI2r-YGMb`IOL~dQDo!l2(K1)nq+&#XH z-8RY}4GU{}Dc)n*-=ml*f5K(MvbYx8K+#U=frmRZPxlTFbXCMEml)cEA?!Hv#R?Dh zc8{k6&IIS=bO*`dzho~&-|F-%h--0YI%xSV6R+io&w0? z4ARQVqasD@QU+Oi8DlUhH_+NA zj6ifcP%u%hpmM1*`I~pE<QfT zYFUg=Mn>Z;>`dK5Fp=5@Y-iiK@OCJM^diXYf|S6h(L+8$QFo)BE*5`%){Cdg1(Q*4 zIa7gnuf!iU+dl0msljk1#T2*k^J{*5kp#=D*4rfmXkBxj%t{WFe~$g)9ah3v;6)=I z*(}m*EUo|>b~{PdaVMjLfK#!U-vnWx-OL8bBexjm_x3!zz6qyNl&qX;C0qa6hyx zh>kNf<%eAgboh(*wt2n@Q^`lx->b6k8 zc5ip?YIFLAkhA_2Balp3%D(1U1U)KemF0fW)YmubI5Y%T=J`_yU_!>ekT)YiOsL5M zo|lQIjpqP0x*+&ud>?D;*Yd1nMhy=Z|Znaq;^!(6+Zxf-mM=dy{gq+);02@O* z)D2a8YS?@QsuAYiZ3EI%Wdjw}>1c0e2N}3OUX)uZfw~vXqURVI>-VUTWmLAi&op18 zpoe!=rb1d@raTB)HnFnkOmi5*v3(SPjN;+S)>Md<=@Da@SBTr%DkKjw-|~&9D04zk z{9i8~66Y{9YZx+EM~0cmd1)^ttpt;q9Iq$uVR~{Ndw;Rzb}IQhB|2*CA%qsZFFZ%SS4usbqE_Eq zWpQ3@GaLeqKjCeRD#TEJdA2DO7<<45XxA-UO{tX4$^A{`QW`JT3n;W zor5OdS=acN>@t6SpyjB1)tb{3u%f4eQeNB>_7Jrnv#^=)v<;MO`!{5Msj8?pfqo?F ziul;}>~#{J+WfjHy{?uP38MWUFr{cAAm^AS5^rwLF#7LHCj`PpQm51QDl{nee{*09 zpu6ER=r5t#Qp%HmqAu%-T85MY+4=ppf?&N*Sq>v+H#KYg#}L^J;`R^Ur1k(B^Ys?> zvM2>qhZ`YCmX?*ZeA#LgC7OT~rLCq1x9&Z3|4$aByWv{40xNqUhVjQ5`@^mb{}Xl3 zByVAwe6G~!c_IJaq|Cdp6)?(Ipsk59OkT@Hp_}t#2D@v);38;d>03+Mt_H>Mf`3J`ufdTxjs*6XJRVhKrmjt+Qk3usXFF7I$i zj1$->DmYR)Kn*!bX64f}UxT#4(Awnv65ET?R9(JwR)`wlSNS1mQ#(oSGB{Z}Iz>WV=W)#H<--1Rgc<*_d~vZiKg)v8W` zzmVwc9jTKqj*6h#U*xs>gT&$VG;3YH0e+g|cWzCT8qApjy?}V}#vyT6k0oGhktso0 zo2YY!87?9?Cm3#a$P*(H)NPY%tjmyxbtL}zLiyT%caqC&nOXCHA<;!QO>^R?zgXDE;g=rH=MEau6`y7JwNTN)u)+^%H8iJ8`#Gm}FEKFm!6y;3CidZUfvP3I^7=jl@jS9kZTXQ+#8M;(RMpw^h@)_x;!`>r8B8XA;uauf^0+96XHJ@-*UXD7P%Yo(iV9ORAIefTGom}fTB9w{<;9dWmC|kRUiOB{ zbY&@SBgXn&D`&ezaT|WHW2AIx5$^E1iWQCMAos1o)*zdo?v52fVFRWlMA`DcTfc(v zO!zgxK{%I`PkAXaSx%}zRD)_7dF*LJ7w*wTNphEBs`0+U_JyT?BRw0GBx`a&lB#}r zRNXE&?Suu##iTdSzIV{vj0UFLu^?E@be0K$0Z=!5Xz|GnJK(Sokm@DJ7-Vn#J=mtc z=#p>z8bHxOtCBQ)ZOBnr*VA~j__v$x7hZ-uZSVLrsG!@17KFGGhEd^}n%u_iC>Q7XNZBys zC=-T*MfG5d&APiAvi1|G^wO}xkIY2jMq3C2G?W{OYRR05(3?dx>@~0rxe~b6=u-G( z$Cu)3EuC1xWJx46Cyv*q8AyP99FfEl6|NCS{N3%*H(e6*2tq!-#(2sq)kuyvUAbPD zF3FT5ng14Rc6<%Hk~VHx^u4x8ZEEyap!{uSP(S8CvqLM$31z?%NR?FqAy-Z`X`5n zlQ(+*2{rRUC!-33{Cu-VPF(Uc8tSGcm7FyJ=vCuV>xa-SX0TDBdsDQhC;F4ZW5eO= zkcKu8iNDjDpo>ZACgm)2`kA*C_0Rnlgy{IC+I52!x3KM65JL|}YXVg9Her0FN^l@N zN~E7JqbO^c{I^E#y>R&*czh$7zOV$y`-pRJGj9*2QQpY>uU+U`FLEmH`KmoiR(E3j zp3q+@n4QVv*{-Ur2B(c5I%$=>g^_%+>Gr)-USJc?vrT4ZXFSunV$o)L9Mufq5Ltg6o%UwJX-GkZaNOu`O9ii{M>Gp z63YYEw2}Y+xS>ZT^0d+Ft^d37*jLX*cPlj#D;_X|rTqGBA`nZ&Aerq~;%@Tg%aNr~ zGrql0=FYCQ6C}!ySDX+s-{2)y_(ROX*a;iqO+kJUAJamEL-S7Oy@GAm6JM>k*9m2I z)1!VxhT7eNAdup;?W0V?fZISZzwJOw~r2i<~4Cf00SQL%xg$X`DQ*yTDrLD%Iu6@RF zg=l>4o-L0LB+WoK4wUionpFQdN4HW0un43Re~%wo?fF=7r@P9s|9=y4E zYz-h$#!A70tUT_PDG&ZDgl}sx-x>>04}aKIY+PV>@i!gc8BY51qmADgT;*?N;TdAu zu8YBeQcsD1d!}H|jRkgIZ!22uo>G=J@{(>~ow%ihC2JPZNb*NTfa@T*scWfW$U0kV z@5dtmbIB61`Fufa00@KjddGAmusiri2nFsDSSGsUK93r+FtEnty7pBIK*flr8QltN z1A3=N!?ma;6LpUp6H2SS?2X*El}*_BvyXv)vMp32Uq3w^!3=-M?|ty;(#IBLwSC(Y z_LJ`_%CJFw5OX5(PivGu!TPdBH>zPYRW=E?xJ|u{vO=u;HwMxmgELt3U*pPphG|Xl z$_^a6{CdZ^x^Vz<@cL@1&w4ix1Kc^#;o|x=R9<6_O*S8(CKRU*r#D21b^#7SW0gdRR@ME}N-B|+2Hou5dh zC&SRkl)L(@F}}N!!`rtpQqmr$I(ZTX9lSbaXtOWZ?de8v5$KRT;|*o zpUhEg)B4R`&qYtNTxc9yRk8ln{Hki=JD1iqMpR6)!TKy?D&mcI&c}#gBTRxBMvL^E zR#H?Ywz1g@$GL^lRVq)`2?H0TkLd$ul@=E(UpqwPl&14=6I@QkSYDF`2?rCus@v8# zlrt=Fh`Bf1`Kg|m9tDBh4*NW9WN=9^NQEDv!l=G&?8`BG7{S@is_cc3{(1`>sA+uy zy%#)x8Y1oD*VA;^3%hb9>q9H0#_E<`#yE5G0ibxG7H*6ggCHueKKtK)dHkR=L=0ZmxCR$6%$EE>-$}L#D$}Dc$N!GC?>9I|s;8opIWK66!Vh%&;o` z^__zc(VSBLIJcvocC2Ir6LqQ1{V|8zh$2*>Gy}h*H*BUHklc1Rj>#4k&q{gy%Nu~- zfwQ=>*o}Q|T{%+7l`AR`R$4(%+W}S^SLWT&JMT_~*FmVs!NhCmgz;X@A*?Nw zIV1Q)$7POV4W;E%CT5pmth0mUaI(||PEu1Z$`o}M(!1YNUvke1 z8Si`rowjkH#}16Q1U`|CB`&t57&YjHtI1zoZ10uhxMI)J5#+x%J|dwx6;j1D1idMM z^lVs9JjV$0zY0@bw^)8Iw#=4%XT4CXSg6D5QB$O>oUgTs6gYL|R<*S_(kXmKoNytZ zvC_4hzI(~nCNQazcy3=WW1eU69@klPwXd>5UP3P}OlmjcT^@$;cF;O2A%YrE^A!g| zi-za`GhpC=yAlLCaDKHiUk})h6;j7cEP`FxdT)V;&&?k1RMo6f=-=ZaG!@keC82oJ z9!-GnG98v7!V-3mF&dwpxspePj_Er8O#1R)mxDyDwr$D<>QHwjn zAP@B+k(KS`GmifkQU`yr#Z!tNmM|C9SeAI)bA}^Mh(rmt| zz~1V?wPvax#6*3v`KmwYc5r*sq+LILg<%xN5Ml!+nIkG$$(d)mX84py-wR#rD!Kau zK)cFX6am5(Zdm!z)7&;us8FAtbu*bR9IO9DcUn)iV0^fZcFVu9cX>9&va;PDQv}S? zwtC0Y(}bDPT?Isg><^o36IrxTX)B<;D~v+V^%fJ4 z?IRzw&wIe)qQPY&{wCyhB)<%3V)eYbI3Im@Xsh}wrI>XxaN6mkZ=x$?%Ugx6v@82u z$lO#9;aluXqVb?ZH?{)O+(EPxh8?EyuxWQeedsqjKH{N>;jwl`xjz?O(_KlT{p~i@ zuyrzfX@aN%SW5wKA8ea|?3ySWHO1^l2VN?a*VcX?liX9Y0L_jyu-phX9)jQ?A@RTf zixEs>xzxy!j1{Hw&1Ly}X%=8<_9_P%s_TkF;quZ7=aK>cLyZplaoDUg>$bW=9$|7xF<#AXZ>?;a3q7Bw&Pr>Y zJ>HZ?V^}-yF(H;#s1#4b`xCcaK;&wkBTw=_hR>hEUNmtyWckYWKUBM|h z8w9)m1Fy%R5pQ_qC(!@F=o50KG>Y78t2RQA8@>Z}Tr<*30@jEC1(gf6DeKXK?Bx7D z7L(P=aBasb&#CnFpx(bU9-|H|=4L=W0}h z-_6$|dO%>1qcP+yXe;4RhOk9?%39?|R3|0YzK zsodQ~6ME-|X%{IAEnozmL(JFC>^ zL|T(vtx=V8)H6X?lfMEM@i%F6wkQ{iLblViahi~g{01a_EG=*s{H@cexS%Sf8tJu>_z4EXdu_fUK`ZCsgX{2%=W@$ zZSc0-gwe$aV2qFPPhn+8bd1lX40oX+tdqxvik^$mWi;x;>rVg6PDR#>4Wm+9(u@*E zYmo(oOPrAt^Pp!Vo^gX+N1Hu+Y7sk#ToTk~zuGJhZ*zyGRqQGS^lLhUXbHmG`F>q|F6yB}E3^dvZWTwB#LGh{nE~r&Np;b% z@6lT+=!tHW{4#vs*15S|p<}f0 zPR>J;3VBT7CsZpb3dU=Z=pUnrK~8I^5Z*ch`9>@W+VI7)-kU-a>05tbx&QqEX*v+G zxX{&6mW^9`uvQ|lhLEZzQKh)oXGUqv*yG(->55J4=rDu@oUuQxKUG`PLDC`Q(n){q z)TK7OaB04?{clagcO(s;$+1dT%S69iTa3H(nk7HVjiJA?tH=|PRDOp^w?S}vHQkDd zm^$g}M<74)s6d8^3k)!}D7^0nYQga?RU_D+GjUnG zmS;9L|BOPTa4t;8I?GN?=^n4f;owqP60C8>MVHL1iZs9RE?<8G=zWqK`4u-{6iF`* z_>Zn4P+x9!%dvea_c`!_8Q{h>>#SSv(8I5v8h%6@Wv@L5F?jg`I#2O|8`kjV`%@ng;?a($KKLT9H084! z4L9Ri^UzAcWyBnJ-|VQXtz5n8gGg7i0!Hd9fO=)2D$UTteG`Er&H(^AI@gqK=p1H;Ha!c&ai8&+?yew7+;nmda$_xzCp7*{hvZDmV{0w( z>ZRlBkadjxn17&OsUjT1M?3Yz;QXpQzyi+_YfG%-iAHpQPF_~z!g%qscu_niudxKv-vUxsssnIsBYkQ?~LS-6!PSw}Y^(dofK z-{TbVEQf8{2llfsd8%tIbc%E{L(=1z@dX3{LOoR~$~dWFI)yvPqfKv^G$8JFq>0sy zst*%+sOIS2Lbtk&AXcIFfN(PL5J$_dLyaEknRXIi$&as>k^lRQcyxOyyF6~y{y@R; zC4^l*GQ-uB!8lY(rNLu3%u|G0o;i1+jYyUzJ0O1Ak{IeQ!eVWCB}u~mz0bVJg}ltI z9ZZ->4L+4ukxzfvuH}OfBG?C;{=Rm}hls_SBGUCDwL9bu_3&w(E)Lz(vF6Ypc0+?EaM|{|Xb(8ps}*%8oaHEb(iibA{s9nn&cJ zs$@&LEf7*4=dy(>A ztOKr8u=o~y`=RmRgPRn`lfickMux)n+A$duAu)cROz9VCmupl@hLXXJCw8Hj2c}+3 z{HPTXqW9a=Gi4Z-iP9``@vieNtdkGXPa+%?^)6^mM>TL;nQsv=!P@)`Ch5q_|s_EL|A1`RP|uI~<8t^`1tKsF%tTJ4w+2PxUp+O)Vh4$rGVj zLZX9V6N&OTSrTjE9XYuwU6+{(yx?Uxqbp#TqLI~vGz2-UxI)9iC_aty!f15w*1O{| z51BMnX*7se)?uqpA-+E}-5UL@iMS^8ib8oOHqNq+M*6+-E`b$Pc@Zc&L?z1y9{ z-fb+Gb@k{oyCk*Cj_&aGc?7$!)X+UPF54=O#M#ECBm<_-Yp^R9O0$pN!hEOPL^4Ej z?z9I+mx~;BNe`$lZ4Z(b(vmdpS_V?5zKX1aihfsVd&j)kgVuq`yCT&t9=;}kq(imD zXG43w+)Ceez#aMmRU5z6H`GeAb{Kx%bu<%H4b?ZMO*Pq!Ht zyE=96ZE?|QqXfu<#!g%qPTM^2ATXc&5-=%n4wQQQdXRT0jpkDWkDKM;0@mAy+T!ec zZ5-u8?_y%t-cI5tJg=HyHWkFZIsbYE^pEV*!v@cqO*L2)*+X1q^)4)~%&ou*DaQ>4 zI-2VRFT4_Sf)m_*4-E$#kLZ&#zP~7E67Bztmf3|iM&z21gW-tSAY4Oj8hf7DGo^$^ zr~9AmXzA-0YQvHfW~m$~JMlO!cCbH-jd``D4w9>{E-4Wr4s9C0nvn|Oq^yWRN$pM> zaN3C-U(P^SzGwSkeRcgYUXL8Q!MoukYwk4T#Hk?QMrcT-%RugwG?9^b|a289yvr`vETw+ZH`!uRSii$jVq!iW0nMNnE z=MX5j6;xVQB6=gU0_BShUTD%Yi2PK1%HHD&J=RR);6on7o4nX{7$Z0VW2=!0-q-7|zwW70a!=&PPE4E~>&qby?z4-EHtPdZtsg~n z`448-;_u(Ynpy@Q4b}^Dx%a&eZwe;42ylSE0IcOM9N?0Hih#Z2gCI&X2q*0TddvfzGNsw?1{11+M$qkqf<9W58?%QnrRLW#r&>KV(qtRlls)XBr@SV71Ct%fb2& zYB6-VaHr}Xv|CPY@9Tuin!)=VqZZ7fUmZeDQ%EDYLWr11SRD%OAYnI z^W$i~lK$yi+eVp)CJg-}cr3tUMP1~z^#lF%Pk3|cPEZ|Ple_m`Rvmf*_}>cLXWzOP z{|{H+w~X&#F?o%fZacQte>1YG+_4(FXztTo3d`TSoTcaJMfX%Xsr?1!S2p{t9Mx=mu8`gnsj{fU=Bd6Owy=2u>Drup2 zNFH?Dnm~;g~|W`e6Z7bL7tlO?{6f$e9uEkb>X|!yHU-kmg8HXssp!kvv6@4M*DaqZyEJXh74GogHQic+bI0^cQ>< z6b44iOANsCi09_KMr2M^#kAQs+z6ndkq+NSsAy!A?NrofeB+0Pu%GR`bMr2)!e4g83I04_NW#Ea_@lglDKW1Xn`h6&4K<>I^FEo z8|sw9N_g6^^KE0fjFt-NXHL1BZP5mhVi4jt_DW*U;{a#Hy$kDL$msT2WMqBhe-`Vt zhSvnGf}gqD{bn!}9(1B!U!vNV8ElC%#&DZ1iPj2EuU>VIJS8?O8(Bkmv0>9pjB|q~ zN)X-I`quyI+8JjPSbCLV*NIn2ehVhcKVz8g7NQR8`5!SyklB#^!BdG3RExObCub=M ze_6|psYQE#WqO4*XAqRri`DMLoqx(^h6iyo4r6RS7zFJsIO|!CAt|S!Tt-UJzp|*e z`EkUdO~5Ek-y(rAjJ%dr#?S+C+-a9|PGz#cy{F1ZI}(kAO2y|8iZu_yniZbv8PJGy z>Xs+BZfKG;2rn()v~nyvZzZ%(+z<)lps_Cg%wFA)#DJVi+Vw~?afxbZeWkp+qw*Y;vXhK;<3mQ>^VNXq7<@Iz0?72ELd8q+)i$aA<56fKw`G-1MK8|J?W=kMuZJAbJ`E#u}l|7*r&6OJf zW9vcesmP6j&0qsBYR=uabH^4TyJ4|DerXJEB{7+Cs5k~s6SSkxW(u}LXA_aa>M z(WDt^^mLyXvD94OLG`eZOQtrsEI5v6p7FNFRAK)BQB|LHwu9gmB0<-5xS`gCqdOZ@ zsgqFcYJrSGl=oKA-!5{)DrpOPrl|Q9UU>B=n9v@kH1;_^l;`1CCP7MoI#}j}#l&xE z{PQPYN=jeE)?|K4_Y>JT_f(qTGnD8D0`BR4uQQg}%kEe%P{*@?^oV^EE>b!?fg=&=NvRk%d}8z?L_ zY%Rr{>2|dyt=nc!O$KCm%^k65XvIkdN$89@Pik__i^o060Bdv^y+@1EW6i#PdAyR2 zs`Fx#kY;0s% ztDu0T$uHm^F07rdKKFm@4U~4h2{Uwlv?A&e=Q_sPl(XRvcyg^zO12h9;;ImTPG07r z#B__&6-P!1Al3RmxMY!A9#}yC#9I*m^}{#(p+vCBb~}*ir5m@|P4~f%Pu;!W1UoBN zBOqfDi?xoN_Tw~_Ox&HD^FV7_NqTlmJEm0o1Tro97ii{>#xlWuu?$CkCou=H4Bp_p z5HiAXi4hVk>_N~<6`ro+X^##gw!{~O*R>J+HCUXZ&2GDxe~F?ymZJHlht%R8a*Vt6qtIAW1(IbeM?*bRx@NrA@``vs{fCK= z!7JgS(m0fxQ7sT7%w@N$3w43$hNU8t!`0#4k5P)k4x8p&J#R|Ym@1iKcuN1SmjJc) zvuEwRxU+hs4sNIRnQKFrY<5NNubF0Rn{He9?tdcD^J=38rQd7#_8*apGq?Av!E;aa zjxFbsO|Fl|U%|v}ih5-mUY4hsf_Z4}&{Jiz_0w>D4Ain84?+V+iyZgF(J!>`elD<~ z?D8(p7)|KoMWnPbte8e^>8zC|1K-wOKDL*s3xX6Z5Tl8#>l0b~@IY~b)`)tGc)8_A z{~fNe6pKOeW#q*OXYvEMbkvFqKZ3tS7msRH!UTQ4+e1*vz>&B&5->I*g?1o4G06NU z>YTX!E1LyuV#~qdN5r}t+)Gq;_8WaLiJK>S>TkZfi4O8giQ$w|Cw6}KHS!~-2tc2a zZ#3QnK1h=J*DhaLa=etCDflha1g_&~w9Kod|9W8zN&NA|oe5Ld?BJUQts(0M)NJ$g zl$Oaq{Z^rUBY)@;rV@Ijz(8i&)%fx&$~IPze@?BD*C0|fd!YPt!o*;+xAdc6{x%P? z|9jiS!U6&BrPBJw65kJXj0~yF6R8<21ymP@`{gxcalOhRVb@TN0UG}M z7=1e)DG06MH=0b2HEt7K%l=$urTxqb!7I{8i2KBdzilpm;tb{5ly`wMA9aP#KX~ms z|D1x=+5j|GuPTLxEra^S?Wg24N&vS`*YUGET44T{4<2~OA3tDTz--JGu6zfi$#MAO zN`R^IOL1WToVfL>w9L=c%KmdabjGz_MugmSskj$8X{pSD5hl0Z3?BuAFgg^4i$eLR zVaq6{J52T_DfN(iJi;QJA{p)w4H#MiceiD<)&qNM(mVP16d615yrrql;3t1Bsx3!S zR&(Emda%oDlC9yEwlYR`=X4pz=ZSPNi9oLSEm%WD93uv4YwEikl--h*fM#e?J{sM+*6_K8~sv{VUA1ZxqkA6Gcf6ibZ~#J6Q`Sy*$V+0 zY^ki8R)f(nh9BHkApthc0yQHSj%3q07_Ml3C!1r*y6NrCilIC|Q>?h=@&5pd!uZ>I zlNu@6s+LH4t?6;*c4SokIZeJ%rC39&80StPJ%UG|_Q{^EJSX<{{dU|Lrf}idOd|Or zmQFZ`NKgY`DZI{Fy+YB}t}AbRi?ru+(splKSCqx;Wtb3py{_6nacDNGmd*Z@y^!1E zJ6Mw@LyseDpV2k*h~lM!9-GCGl-tLj-xIF`p`lxAQYzVTcdyi2Jmq7YMPZo+jx5N0)VaAjX=P5cImu&-^)`dam4AR1dILYl}jLc5Ca3Y_xJR zJ$RoeWu~Q2swU8hT#6mRNS|epf&3p@0m359wjI*|29d2L$eNdxB&~!sH}-2V3`1QT zuE>EFp;}nQrZwr+5*5_6!{aQI!*kQ421G{hmaPw1O6fN%#b;L$kq$ ze>dy4%oo54J{^e2u|%R zxj2w;blRaD?^((L3s7@DnO8QMK*NRs*~|yPX*Ni93HA(F@&O3*Lqw(+&FkXHpje+j z%3qFVPgTf=m`O;3k|TYg7R<2>@~lLa%Jn2%;+8@3(abJ|h&5%;sW^OcfcER=w&==| z$|eD4M;pUu=xc;?4-v$qN&}ji*4%bZ9XAEPWj%xBPAI<4MjkHKbC?Gn#_0OLC>NPy zMG2b8Y^eoVm9!Nl!jET;WujUs)+mtndeyCXcgd|?4o~u+o_K{=6;EpBFBZCGAJY7K z=*`4D!HbD-Cze(!KA4Hvkz|O5R9f|J>rtAbtfC7bjWUd>GR9Bw^u}k zOA8}>m@{|)@~zW7_JR>uH_H+w5W*er#k8GZjV?8A)A_EocF{C0LJjgDqX*UFx}6Y`dCuCQ!7rw>8v#`HA~(^D$rSsB$$ANW4OUEHO+qAz zTpJ4(uq7@)Xnf^;XgajBw>zKGl9#^2M+)kqJH<0LHv;6dn8qtI+?RUj8hFy;7|MX)| zr7U0q|Y-q-6ErLU+no)a&#iJ#Cnxi3dn~ zGm(NbkEpg&Do^S_C{;O!ENB%q0kRR~DCsJ3UN$8s6W*VM=l!qUAJRe5?KWnJOXGVz zI9q2nER(ZvlxBZ+lzilx@%b4&+=E0R=%BJ%rE_pte$CUpnB4i}p&Rf;W=FV(+eL!EZ;>8d<1MXksCTM8X9`#rSZRU_~E2 zoRqPZ=C>lZ7_P$T=jBU)?c=^}r_2#KF=-W?aKBdGJ0(tvXx9tK`tT~F@UA4e?9i9+ zZ+Bvap4y{~GcF7+946#m_<=G75@M!0w1w-zvzm?R1FZb;*teE)sM9UT)CBDT39n7n z$Esz@J{P`e0FCY_JqH~l&5c&l-2PVJZbQPkly>NU4@ig#)P~8%Qm?1MN8`wlu-9fG z_kB0H+s?;XiDnz^)4nJijDgBP#sPG=j8et6epy2>+fwc9zfj?cGVvF+#EC9!Q}>V19t ze|dO3alDo@D_GiEP>jKILx+TmrffG$U0-*24r~R`d5llhRIjI)s8WtBJTIS-t1xwY zGR&yd(I_+y!nXDrc6%;&Lx?mBkVK*YE1qIT?c9M31(rO4Wiwq5-yxj$2k*q0;B;_F z!!+6zBuAnj(_;TIGq(88x&*UsldrO5(P!tmx4*xMGI4wc2FI!5h?@EjQV;CVjlqM% zI0Ewgd5CsH_mTOJ|okD*BBgwtv7MXcoCLyX9f8-lypzsBLA}l@l`#NJ zO)_NzfSm{`P;|#JO|btz5cckpoq7CF$b>QHAV5nry~ zO9ssNxf`*3bNn68S>6&%-dh-svXmei&^9m}cCjtx;azp94SIXM@)Uh%ttRvme7H`y)LJCgv4*<1W%@+nW)8hRW33BWEH;ZAfQy-L` zJRJV_>d=y0c?rS=wQ(92ZOdgFmhH=Or%J~Ilx|_#F)!XM+_iaSC?6)bbi68Wlq;%< z0;4XNZYH|si0l1F(nASX>B<%a!BUeCP2*dAT6m;Ih5!a$Ef(wqWR>wTvv8$Jziml` zT>XHEAAux5?H*{q&Az8>z8md|67AV#bo~ea3H09WK4Ie@2)_~KFZ|@MjY~lYh@Mnt zk;)V5qjD!8Pmh#A!EwlS+ccl|YH6{k1A{zv=U^K=p5w>x>Dn7d)Ffh2=PN!dPHu99 z2@rsGs@&Da&*y$)1plP{y2Htm^wml?#5kbdZq-*`v@6C2vMH{TiVZ^8m#&cjNKg0; z-UFY)auLUC!hE>4vSur1`nLQN8rivr>lR#Ahcvh%s0qxdc4B$lAv25d!N!!KWK(oO zBM@<(CByoiC=)RHhe%J$0etv8$H`CoVRV?XcB&Crsv>4vyBzooDrAl(>%2{J?}$8A zuR$nKeb5G>@0BLwn-J;|&~&>fH}bxt**-#kQc4X(^}E*U#Zwk}vf+gJfy&h*)#K8^ z>%&n=@nO$s(Ze3y@pr8twYKBAnCzCb!jw~&dvZiT^bE~Fr<7pgIvE=msyaQ^=V>Za zZ;^77D=$X9%Jn`b6@J`9N;M%3?Iu?^9VKA;r>*-HD1))In6vi$(-)egaW0Q?LFCjd zkv72@#-Q3%z%JA@$rZ6yF_`hnr8z2+63&RChB+l0)(st^HM6E{#8q_mMHg%#q(=MY zQM%}Qg{Y0!6dew_eZ8TOwv>kQ&;gLInkT^xas}#J2^m^XPFTk88sgo>*?C;iQwenF z>E9)T;k+GRyJ#|La@>Sqa%AoVB|HV;U9i&AH~JNr-RE>H?mVes6aT7I!4R9WlD>u- zw{uAj_^Pn5>AEY^aQHOmW1)XyM59;z8M4T;!pnJRetfV!JE(a4918CBe5r>I9kQ!a z*QCY(wknc!>Y{Bppn-hrl<#{(4V_wZ0od{J71yBJ>L;$2(s69ftscv_!|!wUK3*lXz3Ly=S}LvmM@_GT%dsGlrcHZlqgiK0G;e z7;RWJZs+HOv~a`X1@`WH&0((^%8l4rRpzpjh(WQ(>N~kD|MXbmio=qaR`nWqJFJrJs%kJ?okf=i#=|aeZxnX-=xch1H%Uqt?l zpl_6pSkoDxbqn6>>C?S4h_JG8@0~l$66fZmtWT@Jr*#L(v2BmMB`b*qL6!S>*=#7? zyc4RXaQ@Eg*cGh>fH$kV^MG_=&nDIm5&+V#l?k7btM3+FXY~r6Q9=&2-F{c|YG=8q zJSx;WpCU}?7QyJu+}yHrfl2AA^^U>a>RhnlX9CrfautM0}8*>lSRc9_iMqb~zeY>w{wV0W|P{FRh)FW$%9BQl!L zcxl&d#0;-%WzVb;?M-rU!#>D~_@yq2d1w0=x=|0@3k^aNhFN~tE>!L=jeFJ%(}kiF zg3(4MmQ+&4$DqZqx%S}s0U-+pazStQ>TK?BJL5THYoF|-W8AZUi$CiIz|!w{r1*0o z>DMY$qNdZ^Dh0w3eGL+@GYq#yojbXTQ;xvfPrrQvKfuFFMf4nRWm-Ze<2=E8;uF*rO28_YgLw< zCJDZ3u5>g?5zj?q2JS##s!GIVvaFY-QgzE-4j2fH&9o@g<^L*~X7w&!Q`VbU z$s{)~>vD01kU+P^ybnXgq|>`x(&oLP;%H}17O^fuvT+RTskx*r5Tds)pI65PN8c-j zioSM>l9R`v18M|ch(D#c#nNZ5{>7B->+>&B7PWDJpGVjjYSNvD6)@NXHqBTwz^8^` z3sYfrFcQm6J@l#^2G%hr?@GwshiZoyFph0n9mf8{Yde`7)IVQhhZ4C5iT3m65Z&n0 z1hu)72RFClw+p*OwT-y=pQ!x)+SED>W6s?&#JKF#b2w|p0l2{OXh%^9cG0wOWF{6J?M7CWzU7XWcq9bd8Wx4+xh z92tothgWCoID!g}(d<(pKyu&899*(u%+YJg9K{ek2+12k9iS+wvl!6ODw~*@h^AC6 zo~fX)d$B2~5&g^1=#%l7;|k%+;c7&8Vi^_b>X!EsCWpXh=U~QaH~u0z#CoW=GWe|= zl;vjF6N*~#hl+{qI!I7;`)0q-iV^Jhg+`KL+G_{Q?$}HiD6_W?;-der3=_pO{BfD~ z?MP_dRx$*nKqmk1_%F~B+{3i1soPD?V#}D+W9E0N+3Cm&C)M$Eti&JIiJYiG zl9@R^=|$wrKj`dr7Lju#+V&!76anPJWp7e5_m#xw0x3k8e%U%W*Y-sb#fcl?4Z9ngy4kPq+S_vhyc8dido zvob_bOf_ukmyo6fRoWUqIu7d&E+uhLQg{PIOWhdfxo?tg7DAgC}dCk>xG2)xQmO%Z-dm( z%Q?c{I=)?H(SIOVyoPZBT+(g6;q&lF^s<%VW=z0Wmv0WUfQFGlNNWbWZn8KI z$?DcBsa0dzSVyliI5)*qu-;G0!*hc3z}DNm;=7b~l%qDfueB45-qQJb zlJeGW@li=$)wkWpE6^NgU|$h@bfx8?ypd{^2U7?Y6a0HqH3L6j|9DF*f8!Ek?gx|U z3<^SaT7TnlwKhMUyizCq-whh?NF~r~!qsc|Y1VOBPSSU2q5Gu!VCX^2Iw^UQ4i9Vv z^?bjl%P&8ntj{XTA~DI(*HwcF$LE7j_9rZ`KX9hw~PU@ zubzEA4NY1X=h5P|ZTV1sd^M#LqP+S%-vNx#fW+{I=74uZKNZ=#5&7~oK$zXTUg<$y zdb2}ZCrOVn4YzXxmHp%Gb%5RToR7!V+ElW)n%qOXpi#bxlk(Q{4nDyV!c4sv7kR}Brs3aNPTl{$(KT)D{0Qf3rVh%NL zsUfY3012)$*HQ))+n0S^g~~eJ6o0c*bLlm+92AKzdhqA@=P|(#p(O z!f>;<7lBfXbeh6kU(WV-VklvFTed(j^^t+|&~<7tNJw85RH5@~vUa!T%Q1czDexbB zt2pnGh2L0nHZLx9wk#uLZMGG2{C=O+(2&6*@biU730} zBNyQbkj)A74l&w1PsncsDjZzIJ?i(TRhqq&oo|6OmC?lO8cew(`gG7S#Y$fhXLVms zhYa_^FGp&P8(@~>rA%L^!gZLfHU0IhkudL+_HlyccE`h30AxRzDPzL1qIrVQhs}ru z1aiY61i@Q8CCaMIFi6Q zqgA3)t3&;!{%H%Pa!SA=6s9_dp|1F(CF|~&daB%FMl91!TD6^^NJ4qIN;Z5h5I=DY z(C@S=lD1zz4{9#xx$*V$&mF>jysBQay~x1K--?urfIf1YLuYP{Q6-St1$Af!@(8-? zZr?#t9ZU%?zct1My7GuJ>o`vz(~cn`_&J~AMb|fk%n6a>fliix8~^NrQf%*LNDrpK zQi!R#b3Y7Q8$$hvOx`PX*=%eI{U6u7Qk!LursWyxk5|0KgAZJWzY>5&1Kb+HxR_s4 z>AGi3%Igm}euvVr$_;_)l%x#*>V)GQY9700c+b5*3H ze&U&P+<~T^#7@hZ3L{?;pM?cz!>kb7-YyXpst+*Az{>hbb-T%{&o>eINs)*T!N%6J zBI|%(80&*C4nSxN=idTzD^Z)M258dVqEB>sPs=q^0$(#l=SqhLiD3{YmqGE++6QLE z(B}Fo&dcDZ+qFSqVh0*+@h--s=F;6kfy)GaGQD7R!gHI;;Vw5Uv2}R26~B~0Zv9IM zRC)|nvSu>-N;mlk`=Wz<^iC8{;7*)eA7kd7vuTl>1?I;9K|v{oQF`-N9Ack#u~4in z`qOkrKa--jOi(!Bi_d{vv1$e;$^`A7{gK+cFVCXR67KPW6*}~W?+I9^DpsNX5CK*O zH+I=Pu=^BVcCq@Pf^?D5H6XD-*SvB;e^}A#q|t+Uak|65V}+J$;5U|SFXxIqQBqlo6Ub8_E`L(^#!iUCDILe8DSt1qCzl*q|gAl%A$B zWym8zPHCl;id*9{@>V$Y>CTd&xkF$O1(^QhbCFEquYdM0B`0uo-AxWWCSwxt#}3`w z^DcPG!AN*WNvx8UV4Mbne9!NbR`xy!J?CYgH{iLgY<3nM;ZYL`Nod8!D|N-s6EVGL z<=k2;2qHocta5rJ?*BnY>Bl)k3F=3pR z8!Jg7+pQl@3jrL)3s~`+1%fHjtOF+u7?f9*Pl*YhYZTJQ$HfO5Y+a_{Z`SMeGjU%r zucE8BiU9{3igQVvg4d+jzs#i;3S^jXYD`%2Te_^Wh{UV~!7%4OJmz##G`c}(Rd>#l zm`*&48&2ntqp_ckQ$Jg`U5$E@3assM%lMyTCFa2}A%R3Wbt%t@(;lxt%FOoWa_7jP zJAU(2t@6#P;1Xvd5p#GxCHqCcuS8gbn5MH;-xaBq&)EHCsj+XNEljY*l-x&PYU|q8 z^YGL+eH6jf*KdU>1unk8l84FllZNm@S8?tV><0eDbm;tAfEr)7lsHAr)mVolTNUxQ zSbD$>g<3O)?t`WQiyG1eSmiP3G;L_tl%dmJB!}QJO$MuntB{u<0;eQ~b<6XQQWFzu~##4I>J zF5AV6Hm)MN>kS?H=XwA(Z2{sA{Xt6 z$tLESBFG%}ox9L92RS=sCf9wJufRxaimCyl`Ml5tb!edHH-ykbqm>#}jq?N(QWMXE z#LG%nTN^lI-cO|;R|Jr*QfOpjSCFmVxz5IUlFMqDj~SgSen=1kErFj%S&qd;>iF0s z0z|VBuWmGy^`z+9Ab$8@`$anVzx5Le=RLa^KLtOmS>2g)GAIc^V>MkR?3o0vUK}r4 zW6CX}>ZYLU)aj(Su@w;`u6lSsuec?IPRig2^6W8^^M&k6;P=Xt)p9l^Og!P;I^`%+ zI--InwTK>>?IG+^8QBP+ zy3cqAr_z)<9$50@8jkJ(i-BRdNb& zjb1M4l$E=aF!Z-J3l@}wT`=7ucXxHtH{5{R+!aJqsJwcNRJ-l0wcfjU9+#m7$EWtD z;U#TAduF)Ci^w1&Nm~(o+^BzbZ35@w)*}3L%j}?_7}2bcX{j(7{=<2yi11kTO@w3R zevvi`ba{kI?av>YZfMLhsWBv8`lscBSr}VTax`;im1V1Jy7(egylGeQbzND@(H*H1I!(pIlOIlyc8Y?Dg9IXlEwai-sT zvP#pY8cL<@)F}hMz}MZA)Xq3m=Z4Rv8G0<66;qF6^TU@sZK>ibMQC}(1F23DB~NO4 zN9K`g7WLHUjs^$1{V$zC$6MvLSx_Te{c!V`*QR8+LWW^a16CFK%lfR5Hx+#b#_)7V zzx%Fo+l$NKpAk(vgPL3osu27DB}r-8kw$s!u`I6Fc$lyVVl@i2pd15Q-0VL_^Bkl1 zoBqWbtPT4P6xImV9;}T=7-ji(K3*A|Rk6nwI&8sf9 zj!1hxHlmcaWSYsjJ{1Hytd21%gJKXIZXlQX#mZDlw}YviJp-wgWPbVBZZmlC=&Z;C z6*%-e%H-^>i%c6Ik{aN?+Y2aTTF)}P$X-o*e1<8>pE_WmAKMn0rl=ldnh)^R< z>&E7>NFJnv(`#_Dxj+zeeslQyIDN4a%9LJR6QZ3Jy)|1Tf+#i$AGH))RkGcqaZW$8 zr3Qc%U-4BwbaAEq*>j_U>8<;o>C**}SD%!7*A1kn(ne+S%&%n31N%|^yWCwkrtkNa zdg3zq&DNe=kr@=^SDQvNlNRMlS-grJMW1Yw!9a)@yMVa!UngB;M~UWyYp*k(dEz{V z_rFh>6|7R#!{}R3cm4C@lg8!;@u@~6SAdJ9HfGJO05mw>rMacIhLxwhSdHK-5#%x8 zJ$Ug<-O=@wcn?#WaSZE^XR!p+s!95}Mco=ots{*&eLL=?1I7p=u&4kE*?#IIv%?0( zwq<*|I?Kf9l*)sH4uY>Cw*^hZ-`4L0~fE%i-4{8rVnH~!guonpA^hHJ) zuu81|iQcZAboV$W>`&vdupOPuP_HXw_ov1Irmd(n_F9&H3!#PIO4n<)cG`2oN`DA_ z`gs$c0?^#zWjS?V#4}^y+c0rL=qE&%4vX%1m#fuRn6jx4B7=1B*sx`GP9ju}T$V|* z&3x1e@&qlH9cIUf|H1EVJsTvOIrYfdEZ?9moY5w_31Eql_qy~;B@*m7G9><-HJFi1 zal7o6EjCsiz#o_H8|f}|B2*?{KMzV(wNf+|x_xL;-?44tRgAx3k4I;Gu>i@(HbFSn znxl8hr!FjIPo7|Oot3)zS$lqOf*jf=8j{=7eB zfVkKucZU%OtBrJbuM6xPQzL247Bt^$Q?HL+G=hCo>rb`#oHIk*jb{dQOr)L5u8f9j z2xzgy|HGJVW8r(4{==WJP<}pMrXldZPR-R}3yGny{oZbp?;Tah?966}+0Z2t-9Qx= ztPO}r%&MS5#oHz}C>Z!EuD%ZWk;skoOJS$^5x;Zyq~P7T%*Fm|Q!s(u@Ie+MG>WP< z==l^C06pSBHi29enYB&KKbd}##7T&jjNZ=ge2`EsKsjD^>O%1AU@Tz>n` zC(TV3uQm)fV1$x|x0*uV;)qXGvTF5Cm zgTWN83UMSy=BwR({Dk8Lg1?b@EVf>O7aeR_1d+sG1K;s+R^s{NTr{!>uYR;ex_h?M z%93U{uftdyL)dSwSgkeUHN!@%hsVk-u&<-f1pr%T2i;(*4h z@G2q?!G(j7Kj5@nK{ql3OYkIdBD2b!3jmL+<5@D>vVoN>(+gkJg?Wpo-DF@c+t8$d z!9l`(L(Z^|zyw! z;81UXSi^tn;eU+YtuZ3ceFw3lunB9=8X?21ttcA%)6-@UfU?3_^tpM$g-*8$WEN@n=EI<~^Ay7v0nf7XYR@@t zb69d)E=xJIn#}CVZ>Xe-`7JL7BzI(7KcpvC{}cGrw#L+Q5N!z@ zD@xJqy1TwGiCZmnqn73vg^QS>QGGP|WJpw@G5A?_)f+x3lWqSnMH>%Q1# zDLF=Fp~E%uP#)d3x+jveCfg~eV5LaI`3A_T)4tKB2g^P#FvIBPS4WNBzpDCA;nR(r zm(^gd(L};OElvIs9gfa&VYoqM*_>o}sT}z*N9|aAt~~#qiDUK|*Bll7=Q~Er0mm~2 zhwS(I$8U9#D4dM9&J;l;{NQy{e66GBP8?B#;7O2e5~I)F6R4&zCQBPAE_ zgfxM>&SDtw^6cEVw=0+`SQB`0*tC=muwp-y@pE!&8>UIN1mO+g@Y*Je+ijSnse7d5 zOiJeq!qi)x0fTL<6yNXi+_864c+2tBzP^GMmFiw(L^aT0#i$pCAK?y)s1S@`<_U%2 zNJ{S=527!Jus8i?Eqx_6F03|!2e0LWZyZ7w8({^2QoxW=SkjRx1b6(y1JW1QFu80n zwgM@-+YmeC!UOwtTl-!)j1{zuR4VOy1DBmxE`@SRJLEE>2*Kg;WWl^wO~gaf;`a8B;%cL&fQgA`|~?4Z@W->+7JbrNr{{Ta#Rx(&tJX;C!><)p!Jv z%QE|cH(4WE4T<=M9Z~pmsUMCMNfLhw`ruQGlGJ?hGaGQEC~!4207cTOrbbEiDN7MG zY;w-V;rtN|-ciE=9)3{qiqYOh18+3Z-!a~uUEFV82#I%{QWz|D0knv-ivz(FMdTWl z0`l9*id%qq+NSpE4&iwqAtE){13(Ob_;B$|;Im(8^CfbmwIAqGnDpDq2L9>xUz+`# zaE3*qTcN&*1*alUL2Dp47Vjy!*nF5}qJA%|X<$h8`;v;07z!{qFjDJ)AjxnA4k!yl zUi5OK%k$S%IZxbQ6&I}c;Fzm%GvVs;by+j5*tPg=Bwrnb*5y8dQvxcf{|rcKkVtAiuiHWWysZ3Ow?1E#tiK*Xm0h+p!3LGovyctO$ zK^EaYU4BPRaRDtF8+9^I)(XyOQdzsDZu$~xWRt$jTn8pd3K)KMrG!Oxa5+C*pXY8L z&pfHHBP300VWR%bd};}tz76#|*5F_L zW;(+0Nx@-#N6l7G8L;&PpjAxApBhbA;>_a?dRhU9VJ#g7?kw=nDiUtjr4POsYb&J& zzyfQBoP%I37U@3{);x_CkCk8<7eecj#y4v!p}IO!hxWsea_#TZw0-YO6}0VE31I)3bPgBwP9m7=fBc0QGaqdr1~bK`3Oio7pETqP`H?Mq|ebf^L0BwLfO7x zoaO4Ohg`GLmM`hxX}~ED*ru}hR|=dde;2w_F0U8x)x5-}F#FF(*a=sp1}fL_7MBy+fCj%Ryx>ECJ!Y!E40?< zAZ0ZOQ&#JnR#a2FPV|Ci0BC&c8ocYN9a930xgy9AN4_d{t(;^gzz?l8m3G<5Nd8F>ztFT@JGMH z-X&6r|L2V$NZ8;JCO#}A7eVSZK{!CNfgKt>v)#c&iMsJ@$R&EU&5@qn3t%8=TNbZp zGh4&9YZoD3!PVcMv`K6@u%@baH7>yn7dW=AG2jC4Q>D&jx8cm&L zSUU?}LAGeGZgz{U{1q$*tE0W0n-RDmQ}fU$h;Y&eAZrf)FnjLMRU|WBi;L+o67j5- z<9rN{-xS<)rc^UEE|6SD|IcuAP^!Z@uhL=+$1xZ~*||Uqv^;-K`hiGd4A$F*j61o6 zRLTpUFruItGb-LUF8rhbh!lDbV0!Q26@@@E5bO{*VC`xrWNNLx6jdU60?e~b zXJX)O1vbH^5JV;)IwS}02IEo6Qc39P(v9^3sJW(yOGKj5z>(TWeqd^We`QdB(O=7H zNIlZeLld|gR4n6ixyCko*-|+7`l>)m^Gr=f35V-AJ1=#`JTB*55qN~|I#GN$Gz}O+ z+M|fe-L_3m{#+F84^)w`aCsg+YBI4uOgrzTo(ffOS{}Yj zV~Y+l?Ih`P@FDp<+AOLq&)z0hNz{Hr-u*{_z2|-E>zjH3%T*NUzBacq)g1mgU zYWKaXl6;$=Z!EN_;`10&-fJD#*5doWuGvVLVVKoBkseF>h6fll@%FPFBsK9o#sJV5 zzRYMjU-D~g6N^EOcpH>W9;=`nmi2^-zQekCCI4#b}A zYiZ?+fBgfbWi*tLcVf+LrI*>^hF@C0b+H%rny@|1L zyjLcfxf10S80SXp;vBec&ou?2^c*Y^pjw~;jP0MXW;R>f^6RrGE%2OCz6*PusCKk2 z7N1kCLPG;a$EHba&OqWU{*Y*nIjaiN>56ks)nq$JxgI=;AOvnx;=e7@?tAsB-P?OW za-!ZGjE0$8aEjI2HOk@#qCXCH;2Tp68>+7(2JfBscL7m}n*}>uDUp%*h4-0^f8wPX zNhVOt^umOkHM%xbM42g3Afb*_#ePL-X~9XF!MZvF)PsWCH@dBY_lRWnP`u6*i)q`5 zV;MnDI%!R>(9FDB=GDukDBcI=!}wX=r8#S^*&5RTVZ$_t@b{G$_33yG$;6&?wV*NT z9#U&O!2Z@2@)MC;F}pj02GqxMdiko8^z|aPI2`da>y|>BD`kF*5FfoXq$ywa{?VnUA8~iftISsL(#$Knj+WN;KfZIKH`bY$+Ik@Qh; z!+v}1DX;P#s%OkkJukQkMgj&q8{Jji(|h) zc{fF{s<$HhV1-f)^13kRbgIw$4y99W1iPx%&!zqy#A_3`S_~Y5xyXQ73SG%TJQ!Ne zy;}$c6AP9^hay-Qw`D!<1*2iCc`H_sc5D;-?-%G>yEdtBDI>;y>Tf7)aGNzZr9v8;hmX50X`u}{`+*+Ig$DwGro*8L&!e`97X zn-&sSb^u^3zAIepWZ&#C5uyVf9pdh=Zt(| zsgQ-G1jv*_p-EB@)2xMB_K;-UorYbcpp33SM(2QY)b)c9IAW0~3eau0)0of+9mYd* zUdBRe3@o7ljcv^(yv|=8Sw$Vs)E@+#YbVv%m(RvEP=hT1X+10Fes{$QBr!@fLH|NdNGdUz-iG{Tna_LdIi1u5-e87LJ+`T?_*D3XeV zZmX7-K7Z7+jlE13>Y(MsEB5iYf4JV+N*Czb>6&@pnMh^@Wda#} zL;T}dHe_ffA=i&*kCf7A*eIeC5+TsX2(d9_EB0Ywr?1m&S)yBsk!%7c3UG#pr38|J zfJL3kTnGNdy7Ho5(~mGLRH(N+9b+b|?q%iF zY~^;uR6f6U7uElK=**@wW6U<`qD}u5D6W>Ugt}z-V*+Fgs1+M16LT`l*)!+QbNGj@@Sa!tLr)@+@v*uXN+4mZ0_o;aUXW-V3 zC2Jr7<#CQ-O!T3O z#FL(n96=Wt$4-p?EJ^oLz}i_N!UecBo4ZfRer~N41%@Vv6n}sD%2xsbO7nN``e!yH zN`KU3V-ooiB!J^%(^M_`Fr%KUL@g9?+Us(decn2MULa&%uK(s3{&Bc@GK$0cZ+aU- z?1iY}K||;rjE~R=cO5w@XDem(G4-zGNdfG0bba95m~?o&_JO-)puJyqkWD-qhVMY` zhh%C!SjsOm+w?oU-q~imO^PMMJG=t6Dk3)&5s*yWKzs}CCZXdyLv-g_DPbhrhYFJ!$`2*5(pxQuh8Fv z#o_Hvzw8X5xkcboZ+RdtFXRm8>98UT1A9I{_QM9~*U6Dx@{7QVGqO&( zLu9@~J}lYHFJK9%{qieQX^|y_&EX+w$k@Au^$?%_9Cq|yBH49m=5!Ly2F}}ZTr6AD zkEbm!1+s~E^E?6Nhf3x06catZbSW58fh-tH=|SaEjMl7lP#=t-EjOy!=DuXp8UZ@N zDW!*YhM8swU!aBQ%hndbb48Bc^p_IDvVSfovpj&$I$GWwn|Mb$a9^_F&4bK>iPE=< zUz^+2H|RQ%Dr)3Um+Mk$=kse?3jBP*l!l4ky81` zxUsACI@PD2Ew{ZNQ?BVYT<}PzC^ZI(R`{^cg&nAaqZJaO5HS{yy>xB5AhvFTgr^!x zZ@iTH*xYfT9M$4FwdrFD5D*4l`WKAJ+DgkfGp8)+Np+mf`jMM}iEm@t5X`lxz*F2v zGB4inZ;wk*OHTYBm$O`=F^*0Qw>bh7I#^!h>^gfe%a@N?+j(j&`*%;N>Q!zN@3rtG zOPMo(W#MJUN(UHJcn?m0R^3@us>GZ;A2d^2lJO8Z>2bqTNgQnK*pK6Owhnzv=Kz$WTmXQjf=&I z;#8$200+lyar!#)FIdS9lTs1H!I}P} zG~ibA+`f#R9=F8S2U?8|k4VOI z#vGvUao%vUpU0ho(BJ0e{}b%$AP3h2$wG8qGSx_W z=TU&&HbgABu9ek8Ku$=D`z`FtFq@P8rzJt3R~R{N3X$XUWok1r6sSitX4SR%EacXX{TPPMa*U91Q1}4U||~XW@9< zT7%|rO1<395_j$%Qg%z z&89rh?s3XBFHn2p&D814aBYc5?@F8tUL#+FYq7v5$1C82A%EH*lAP~lMJ~=c#Xr%t zRu_>PNe}1{*u3{ymGl)C5p2%W_mAZ5C3VSXPQ$4C^#ZWx3pfJP*L;=~k$BUTRSgOd zJ0ee8wuQYmgNaru04F7*kv3~OupZ3{ zVG+FIiq3&TO7se6b;$s@OU`M+YN#lEBk^&G(S@1N-=ErP!pG(j9jP2fg-RxMx)e}5 zxJywyXbgIP#eNefGN}nQv)!&Yos-T)rP>SQLmbNX{e*A(W-;<<{P4N=>m@p9 zwc1G~a{=lR6jB)^)mLd&|D!r0=swG~eiTT@-cyiPK?jMIPMss?XJ@%qws^)%1J)wU zp56UCu(>{_Yo4IlpDJly#`-!x96hC<<(~^W=n5b;q!?%Ms}5c$eJ) z-W^&8;pso#3n7kJcu!)lE!Af5s^K8j(9(w5fGPaMJ3)1Dov)5h>V#asqymP8lM^3c zEvwYcp!>%i*~(v&oJ!HGl90n0bq4NqoWHKNx-XqOWCweuyx=B=#WitP-=p89+zft^ zcEXN2{ZOy)A3D%uA;`!v8s)0i&1e8Fq(`;PTKFJY?6N*`*HEQ|V*Rmb*=ORC{8GHv ztkcA&7gEY~`_4OGq^E*oIUFXzXbj|#)ySYfO}epzYSzm--{vRk-7m|Amd=F5R3LQg zXH780b*Fn*>}tf#yd$zfgTh8a1jg)c{W7WvX1~)E-7imjl_BzQYz}DU+@^10%Ph@Z ziF&+HE#Fh~`d)NTsu33$th0SGxeCx)3rv(`LS(Wn;{y@8jLg86)&L2qIO;@syio*F z-0IKy0!*mGt0rPGCg9GrxQ@dHtyWJC3R};Ub3?-o8v$Ar{23noYgkjZRyTKqUP3+> zaRVU`QHT5?G)n=N5(XZOz)uILILFT&N2mOuRk&fLg*Et(LKSVlI{>4-sl1KG5;Hx} zYhp(+@t}~;mwtAzqS##uF|)Ms4CV7LrtYdsW-`||$H}62T%%y0N%QWQYl7f|rH3yZ z4K2bF>?ovFHELcU2J2*;{>s;G0q3MS&?+_Y>8h`SH7rHkY@ccu{J2BV6A5zQix&R& zH{h5g>>kOMqxHNmuUS1|E1p;C4D`CsuKmSu=SkmazbRQL8xBZgyICdI(V}QeCcu~_ zuF#BMu^||Oq2om)48QPH3G=vR)k{&84y{&v<_~8R4K!>fjI1Y|?63qE0AaD+HIx-c z(yVAGWO5V&POpvEav=xhR2zGC%hNZ9hCn``yzIAKAij%2lqGz%(|W;rM%ac0@f0*b zVvVw})%ACWAs^32JTZrQdd1UV9ORRNffL-alz&48NlC+^vfw&wP9Fg9GV3v$wsD5i zpLwlI$xCs1D|Wz3$tSkge9l|%qpU9yj&T433fU`8@Fu5EqTA9!#6nxF!t3u`dGYV6 z0AJt_^b%QA$>y^feln2-K+zGqY!L6`7svSOJ-q_r0~1BF z-<0R<9H69Aab&C;ft_ldzw~}B+|PMc88RrmEjQ_^#awtrMsD5h1FRfS{a~lKPi}!g z80mE3Roni>`nT-X??l30AqtyveU0E{Z(+&L1k?=UE<;DI`(gt-d*KV_ZCC1NyW@r? ze{)DSXu2j~>CdpB#aJMDkzzJMp!AXOuY8Y$EY=`C)vvF-4)vxi*>h70h#k}CiGl7IcO|QW>u$=nL7Q~lv6b!TPlzyp!{E?~oN8${Bcy(y7#6UPGmWDtcErd;NNBu_N7<_GtpsVF4T-R`i1f)nB2?QNq&8ZYgjlLy9lv;iqA6PJXBwR6!WuW#GNm3=lpMEt*rW8%sv|i!;@X*-B+O zmDP44U+_Tl;nyt=G3wLqWa+`S8LKWFa-BK3Yc{8PETsfVfz^IENE0}8zkuZp8S=T8 zO%rkhyrfD_O|NLY|9AHG!QBbM%lKnC_pQfNg8WZGGSm&ur{7qc&kp|U%wmUQXH%5@ z-Q*z|aEQ#z*Du)hrp-{!4zD3BvtlGOSwiMdzYE*hOH~nX`Q7a%fzP^XF|_8_W;8_m zu`%HnPkM!nafWK@pM1u2o&`)`6Kve6X}!78(yo>7e>K zZTniMomnc5(Qwb?0u`k%ZSJ|~HolB}Z->|K;mbiWe4%{_f9V^PCpQKdIbb@wR$>ha zH^^V%$>)!?@-;5gOp;Of@A1|TDY!_#W%E(;q%&SZ&7o|iOD`D$CLSgV%a<`2?V-(c zCp=QD$$xk!vOmDil*_P9rea*`bnq5|-1E?iOR}NY?y%LnF^SOYPW!2mrTiHKXvcL zFqQ8ns%Z~i&_L6fN72bFq4SRk*lfPhs8tbFn<|Qak=))}wa5fwN}PO1Fl(dX%(=)v z@ji;fWH32~Y@fTUWeyRg^=v$c&lG9ZMLE#Vr$*72&U!S92nCuGfOvy_vTs7^7Bi2f z4~P7G1G#(jrzpe)U?Unzl6R3NU%3&6tvi@l@kDFxp%0=;!MrGDQKI{<^7a3E|T zVc4GulCwHhD3^TZ6DcO8tYu=|iPTd`Z|LL+hmnhlAu6>s`ZeGU8-%&QaN-lU!d^1^ z^tm_n!$KPoy-FsO3%)+@fch91g%TS4#_91%`G?&5THYYk z&3sx4EBBJJmFV3aRLDbLe$=E*=F=YPO)+BR+D;U{419~lDpCeFP!0LCQdkctx0@U~k+OZ|m~-ijrOJ;prQZ4dGGq$@ z0(2@+x_*^M%S_byg%35(`Ys+>;`8MDgwFd!-lmI6@kFP!^9#e{X`I6oi`tnBdM^ek z-|33_AS<({?UE%V-4!>vS2}_ZRp4#ON2(kOrln#oE)2D=h-OGvH|q6XBS=xiM=X%Y zeA{TI#XyEt8+%r9lRx6^PM>e4+ny?V#S^KkL6i8$o}LA*NHsSXhl&#-M~C=hG>vId zAOYv>)J?RX`v{2fru2x_ESYR&c?h5fGDRb~-5|YZFIP0tO~lW;$sCCPq3%H(Mh*8GUmFM=Ktle;yS|S`$ZY*x$10rKGm7 z7J*pjh_r&D3@!lY>>=2k)wIRT(&;RZu@d(@9uijN$WkSsDZN=FN$XFQqv;hSZvVz6 z9Ak6jX6$x|L%hapHNJ5Yh!X_C=Yfhrf+bVP+E=Y2RGgcf7c*L^yago0GE!rhTm)KW z@;q2=@X~NhT)2$OI(`$nT)Q9lO;}p)&t#Y5lgi=-c`f#9X(f%o| zY64e6N@<=g`*s+nA@mzUa#dDiA zprK$+txC=tVieZL#pe(2%uf|Sma-sK2Ke&7yMA-GxH@OkyTxo;)!0&TGZ20TWQO;W zi_6qx?9^@fnAwTlta%5Wb5TX9G)qGu{>s;k4jzn1E{N~M?07_U=OVoJLY{n)!Jj+uorR|LcnjxN$lP-`F z)+>mxTOw@b0no%Ck`0)?Mz6>cCRf-r*VoKai8N-qimjPGblR zo8{mkYg1*rSnG(?%2(H4XIvT!(_kA}B@O2Ju?fG)u{#q>yHufVLGQ-vmbt6tm`D2{ zl%`C6Ni&?gcp(-+x8MoLRNl)IBg7jeG1k@&t(~cgw=PxY?XuZf@-;Jl8#tw0mqRBr z?BRB6;dxBx;IdBpZn!9=3wTw4Qwb72?T0&ff?Dq7*q-{@ zV9Fd=>cqPw%)7d{4G(YF&lDn&S9SjWZ8C4}4ATB=40GisaU55trvfAg>&1GTvDw;b z`Mi@cD`5}7l0D|e$hogjv(380Vw2bgb*N^kkb?iTG^c&G8J8Mz1XYzc7qUL3qndPH$NY>T+wTcdf4C9=qmv9#)@3q2N zJ938KHMPb3dnhx*b-scb*$#9LHo(Ynp3CvIS z5dE8Jo8iAEZGLNO8%GBX21ds3HhBUDMy9{ET66-IMn;ALHm(}<-@jQnSZEp9SXh|| z*fMFr>- z=oIbstQ~Ci?2W7q-2MiIe{|&Gq5EZIXr}ky9#ZzN-5d#+z8(8^noi!x!N$qnz{ue* zF#7iHuMIr`6Z_u|iZFbeEdS^z!brf#@Yf*7(}^&Bo6LWk%-<%*-zLkq`H#Nee#qL} z7$_JyYS76FiO?w;xjNE`Tj`k?32J@+CvW5Ujdld|e|s+b-OR)DFL3Od5^>*AgVm^A_ooof*xbH~RoV?%?~5 zovxcgwvL&ngLQBfXXSaNC3nLdPaWTWKf=q}DuFjyQZNLG>~)IDmIN;V9S+?{?|17n ze~>=SR93LL3s51-z7Ki8)uB%E5l{3o;N}bhU#6L$p)JLuAJk7c&;gOZo{J=yxigS6 zT)$52Rbx?O_GKOHTKwEHBP&=%&Jymta2o^NW{HO%A6f&OE9SK6ZORY<98MwcOWY`q zQV+;>B+Yz5U;`Ti87kmA2N`$*e;i%KdF&8WKD{;j zUV^RAFD=EW$ELg7Xl$%w>G_>Bb!pMaijtdMXZik{4LSoV(Q+VoboP!WhbS$Y;U z-Tn@jr8wO>!LY{KmMrI~=V}4PVysELHyy*B94?EG`_1^IK54-^fT97DKtjGG!;~!^K9g(D=}$1G zK|uqDPt0swhZB^mAPKC$vv=kyu~3=bnH*-(ONv9{1_z+Obv2VzR?Cu^Cff&kbac+4 zErQVw?pXz|agW{-@o^}`qHd(unF4E1r;qY#0M_;mJ5^)VyL~gO1Vf_HX#s^F42KKH zx}9Q6+r`4Qg>!*ouf<8>5>%_;sa+P?KTC6VRS{tSpZW;tCV+(?xx=d)_Vm1Ne zH@eHtxQ?J?9|#n*7#E&GAO##6^)zb09H;_gXGhV3VXWl9-|xRz=<;Kti0TeEFK21o zoo}8%DwoHWyOe*$91sODgq=Y(5NIcF-j&u} zuWMJx|90M{j1;a>%&8MuTEk^cn=Tl!Ku10vxz^k2MJA69K?*Xd?{BEjQh8&6e{D!p zqRV$Bs8Y$=1GuGG*8xM~OP;nVTmw=s6fbm}XsDC4IF7ZT<%Yxm zbaB`t?z}-i$5ppkErGu_=bN(&o08#oG@r}k680U2dq~q{mVAzHfC-6uX0`!ZX<3Ve zHmm@nA&ynv7_J&rl;n|u3q2uS!8gJ5l)>C|N6kB;LBJ5xV|{jV>3rQ1W!dBbmUJLL zdi5ojnO`3~?q#*DI!JhFiZCiUrJKT7Ui#9ew=Kv5oKknWo#gm_*KV7oQX&|@xi0oWhyj0&X62wS341$S3^ULMcsCar( z2NvTJ-T;{%5ZxGY_Z{EfDjGw-*=d@fS3*!Cfj9*6X3ba11HOz+u7~-zaRAuLOw*C+ z^^(rMiycnx=8HescU^mAILoSsLIW{~)rxp$(x}WmBMo>}O08^;+2%c6QeHM_PiW;V zJ1FqZMN>l>kHf$gq39{;*$aKf@SxS6fD7oC9!&^{?&MrK@Q6F(z`_LR6_Fei?Rmf) zW81;oT(h;k8T&q9p4>bd+r6uUvbc91Ue;$;LdOs;)9hd?DsJ+C8{FJ5*eRmG2J=C# zZLSt^=!>EZ62Jkz1lCMD7XcW_H*zs`o>q9}R9Iut#=T91X|Z zeg7R-fV@EbrgXLh4~Q^ zl#}YHhYG2pS(}RTKw6AM`@VZbDO8?{JqC$2z!*}d!j6sOF0=nu>B3M(W$$hKev7AxsaCgo< z1uX4R1$?eG9*c=k1~(B79EWjJ`Xl)^3km*Nb69i>%$OZUt}ftM^F-wDY?e(+=u^a3 zC<3>2^rey7!X&uYpxl$Z3r&i9VA*2q{8UZp60*;^b}BdkE(ho2SYUn;mcIMU<_l&I&mXO~{IZtfZcBi<2O)wMv zh}#rDEiWcc$V>7UbsZvE*}bw3{55i^UYBR*A9*wCXk0{~{A02-j;FpKHN#eR^g;Wu z^jtWzSA8hp^OAQ?%T*k(Fg@dGv^|c zjrqqMAsz^dD2k`ACYT79@rjW=Y*K=VcmKMEHM=ZI(Uq{~GIyoWJopf8d2R3uCJ@_3 z(=(GF1)qyv)qHYV`g%GpU`8 zi|%O*@SiO&+OSL8m}?|=JcRlg=HW?*=H8Kk;YdbB`qB{R*;T?k5CnP??@BQ zObG-tHP@a~ZCP0p)_G;i9(6vNZX^^p{Ad$V8gt`wNSYw05clruWkP;VrEP@3ah8i%@bOAQE|8 z_&6&(QV8TEu;u(IkKM~I&46V5JO2-CzW|O9(=YAD}Y!5FyVv2Sb+1ACO z{n%6~7i%5;gaD2Qt0NVjgTx^Op6hJzQ7aCdKnY4wFmGli?{tOE+}^rTIvB!X>|)F` ziM}DL+m(jAStYwQgpb{BaT&(%8+9K!s61E(}WC zjN~Wt@T$wf7bpUBK)3x=Y%%wvuChY=Ka;lPW8>msS~{Fmzm@PxaNb6Glu_&)mS9@X z^ql~eSDv@n+5ObHFUv}0Jd1r>neAS{2|-#6fQ4r}S?U8qir$VK4A9jS4S41Zp0cp& z%ey1B^ZW4_uh?_5wb4aKtr_=T;lqC{ai;o`$cArI%a|HQWcLin@{G*(V0QGv9J>iD z$x0alIo#Y0-%4*Pej!pMc*Vnt*){`d;Zvx|ZSo))Ns*OAZNta+JBdl1BYKv|<{V~; zFg(26k$8sS*WXe6w(rGUmwu-!?DA7 zZNxSj*pdI0oFv{|fc5E3X0;EX?~so0T5CSE&d;!*gavh8_j08m&5c*X*DI;ox0ek> z%Kpnj;&DHmt=|U63e#d4s*^^jH=Q55e9a}Y27u^YU+g}-U4rU?p6;-_)v0f(SoTMj z&aGz$&2sJbC#y0ZTH3gh7Y!aG^}_F6#q(yGRGPL@AeArUhfpKIyvZs^|ohOY|%V;opL2TRhzmz z<>|@!*Ok_(XTWzVr#XI})qLQ#3MBg9+1C6lPH8wF0UjiBD$Ww;i4v+aRSqD5Qzpau zKHY8c^hSr;=N$y8+-3J;KYx4`$j4dBe#DRJ^95P-Ekh+}Ku(1hQqZ`7i|O~%6!DRa zl5FP3w;V|1{^rF>06I53g^(a60BG*48Md3!f*T9|AP7-PM`n-GJ{D%tu^ z&_vw9bDz^@hv=R=#gQIom&RB`FPxuZ-n5pYW+gXTBh1F>X3o$!s;?yw4_4 zsueNNCuzzY<*K250IIcs<4d(3y|RoWNhoAT<%p(dPUC>6{NWA((Ut{SNu*zX+8-;9 zsIYe`WW@#dv}nRP&tB%nJOgSqdktP*lf6Q88S)$l)!v!c(ef!IA&=h0g&Mi0ozV7q z53Lj=b)1HjcYgkZ=^R*n**2?%wfeZu{szbRtEi;%?koypvZM*`ie4a36Z~ZP=?VHF z`eF`Tw$)B!Z~Rx4Z$E*S1Puxeir`uGNL_X_Tum<>&&+c&TbFk2H^t4#4E~8C* zT9ohdGwU{S;J~=p2c5Lnwmb#t=0T;S7O8i?RKCHr6qA;Jt>)u-$WAbmS8DkoJCqXY zb@bq$n?Iu}f@0&Y2^`=$Y1~$4Cy}K(Dw(=%*|i+N%uu2MA!{E{Y^Nf)dWa|XT=DF9 z=zCv|zU??TiTQL6O}2YQ&0bTZ1Q1GD8@%@!*xOOLx?K|5)H)lYpLtzcfU-&;>W{H}7`Ng$pj4ye433@Bo}_ z^|w!xL6?4#F_(@4h}pm5S9DS|8dB}mP-#7;U$M-D=Hwbf3lrdmTM&9MK|%cVob#y! zk-D*k?(St_@z#QZCZoD6CB#zmKP9kWpO$Gi8R0$}?@-3BOVFKt=!x1Y@Ur`Gvb7hQ z?bhx9QLoLMMH6)XsLd;)_7uiiN1aKFsqZnl{Xy?%c z;A7`VNvq0oeL4t?;xi>m5uNq$4QE9u_y@ZLW z#N^`(xVY!)F-=oa24VA)3XJo9WluO~Pog7~(o` z62=?01#kO;w=N(dAwf;vsK~+eOD`Xa?f|byKhAi%z)Of3EJ#6eJU)_(2c8+3l}<*n zvXdyf+<$pE%8cGzEi$R1i2edRLBeS!BaKi1#UqQp!mXf$5=!<@$keUi-qxFgCePEs z)dw_JKJPPs;W;HSBn%mSmKxGAoklw1ieAWuvF`9{-4PKL1tfo?1W~=9PlX54BQiD$ zz+SCR($@ScG9*OhtPxDE7s6T-uq!llB&+YDQ^BTTAk!Jvr9Oepv2G{YDKGXT6w13f6Ksc%nnTGK(kj^6a}$cB9SigqWCV@ zSAAz()nucatY07>ENnQ4BbTo~C44oxxU2|X7LYEOD@VAffJgfHQe?dWx_+^)N7|CU zW%Q~uirvy>2OEA>EvS8)eatHJ3%bL~`pG9fWEt3=+96^e^)v=s*7JuHtNbz1fc%Lk z6576lVmYjQ%-10YrkHTsieka%#TAF3M|oL#AAfnjZmRug);$9?Z;ZX9duy! z9{ ze*Cmr!s?GxYo%Vv@q^`AClZ=vV4~a#l25F&C`2^Se?y-B#WntCTJLYgi-GxHg4Z{> z_^o&S2f0gzdU%f!qXn|NpLb{mEJWf2bffeMt%g^;PZJS4%wNr)oGluEuH}{e{QYJ* z)?E#AA7aK=+J!1P);D^+tO7@CmPPPh*KsO=L<5e-WUo8(f~=Yr13f4AKn8m*)A={7 zm;tjzgrB*I@7;kL&g`A=$h zGR$@5`n@?YMGwKuJ2P!UrY~f71tTMIF(23H3A?)F3GkBr9{f_jHb2a15Am= zGcEjrC8g2#(Lu@2p?@=Ge-W(z9JBvPIRArm{of**|0Zw$ZzY=l53|dE4aR@I4gV## zGW@UX@}ChP&UYN?ET*YO>r6b~Bg)l;k%3{K-$;W4M!oJ;DEe1Wgt?_TEYqBmTMygg z3c%VKhkeXOWpjVZbsJ^r7TP0Dv7NRg^7f9R2J4l6;z?*pt^C-P=JBnvB3#V-TsmBD z7h!fhjPw3c)(w@_v-AUBg(=9serqQzhW-it;fj*r-UYcd+K9SwMG(K`owbGcC9FI2 z#*Zgg?7%f9=}D|6VJ_#mYhG0KAY_uN`hjo{`k*uNn0|8CVdod*S*{7gFYrmV3`PJw zcssL&q=EBp?n)yGPoKl~T5|Q6%W;uz@69e>*eLt>b!iyubnXBef#uUP)m^6!VAN3p zlMaouKc8srT$k-dajUN*4vC}d%W5WY$51-7ygo|1X9n~};W|NJjjRxtP-e2Td7bf! zfYmJUId@i#DxJ<;)1elE#Fe=kHEZUe4u??!EliNI%)*#D?~B6-94b!5%zy z0;i2*>OR}NbUgSwFr^S^RsvQbtp4 zDE0F&Zl>%KjX8R4;9GnbnNi*R=>gcCroIP<^<8MLFwv6r^w0~-7Bl5S-eTkZLNH#* z4oW@bBxugsI8XM+Z%@3`m0R~AX9yWz!+v-mM>HbDqRZvp#ICo=Y?HxJd)dJIJ9&r< z-?Ebh7ao2L*^%%gy}G!-K`U>p2EvcsfNTAw(i1F38DBWg`rSES3mLvLYNMjayPp$y zIA?QH^*Ji34I<$CWOEd&1g}Zq5h;{VylMo#Bur&z^TQ87Vp`qjN-h!2N?FSNtbW6P z2t52@wRx%cBvi!|2#_47=*hZNG&nknF@9MR;AkQb;pPW_HBUQst#AoCx6O zC0!bQb}N&7bW6EJN8~F&1mHBlboqNJuRz6VHUbo+4y!~imA1D>IPk{mI*Ts?Pp-g= zALo;ZD^&Ad0;XG5p-U!Cw|YGpB?k+uJLT`Es>CJ>ng`iGKBq8U=dkdtb9|QFxY}js zKnLSd+|{2RTLTa)-aGmhA;s3*JIG^im}^2|IO?z0@zZuB^wg5MjZ0w5{_O5~Hk*Od zu{_nqg>{YpK%y<|AZubhI{x{rm@yXm8Mv#KaJ>-ZV7+kms44l1cRH@HO0=rF{*|`U z{sn!w-)mbjPnrbpEh|{`=TC%`Fm*ajP~%HOTX9zeianA8(77|irs-wMp1m`lG^{TO zM$&CkmM==Q!Oc&CSVcf`c4t?FjtW<+#e!>@(A;|!1k2iYs$@anPk9Am-A`5A;-AA$ zm4YTj6NjRH@zk_>BV_vGwsMdNDB%Y|z$rt4ed>18`a2nwKfWe@6|8e{i6CB~lpdFu z={PFiggeBVO4>$|w=oNivAIHbk>d3VcmA8%p7p<-n*K&e)_(yc0}It{D?AS-<~*s~OX z@PXzA=R88IB$n~^nNa|nsqvGM5KK)TyM=prE=iEEmbw9jrg##Wu*0%hjOrVVf-2~L zbLIa_Hq75R_bsUYjavU3dMf+(@X7z*rKkQ+xs*tA}_o#SwPf8Rq@2X_pgVN5f`gF z+H}cP)KMxI9@d}EA{M52eVYHpio74Vm^#(_GqNFo^~=EA2LMxMqHMfmO^lh&ae3pJ zdzcC;Xk&@L9mO#yyP3Gk@<$M=;HF`-v=pf@(LgEYv%IWEx|dOu{Nke}Ch{3(x9kR@ zl5x8T6j)dQ7xHaedmKtlrZnl^TDLlzd~-Lbwdo15dC@tf;94`$4Cd{hunHhO(do4d zUmP@G8Zsa>WhH3gKNg+RO-^fiYgiw|5rks1xX~H+61FPIY*=r9cwoX5M^giA7Twfh zR7jT!tPFr(P#GD-8oFK(enDSn>HK(9c+}ujBwlmd(=fUa59PIN&tYwwBR$fO;}5&WeqQClecB_n2GeN$ zm6sED&lWG7#ug>At5|~C3qY^RKz9HUSgF}nfZ$`gEFHjwHk}+L!h_unfrbRL$uE8T z{zSm|j)11jE>#k&ug-*FzV+uRlE#GQi~GM+MQ1 zkKwxyM{*R4On##)UPqSk^-p)U%JC~E%SHONR+he+pE-=xV^iz5f+$W~zeP)OZZJ6d3YIC~ZvtSVBcgolzDqm26z|m6%nUT8vxEW4GXq(m z&JdUne8)-u6#uzQ3WY4n$6U@)#hge*YL^U0(6U&&i24C)ZCf-o-i7)5@fIR~a+q`+ z-3v?`q}gnmXt|BmRdE--Po3C_P)tVhw@fQTf!<0sTZwyB#Jx&7#K9;96~|t{oiiTX zdm!D`LtxP8i2^&$aDR0T-j{D5%QP&tdwSfMQ9xA@4OAWL8d$Jt{MG!CXE0!Sj?SyF z>J54AfeMZvzC1U&GH`T^>nItQ&aNn?S0Q`gCa}=DAHh}sOc=K|PC>qDZ}3D^(unE; z7q=x}^`J93ltPzYo+C?m!vzr`{G&OEgYX#XJ}{R-hC z{3w%~xKzkk-W5VbnTf>+F#d|+C=t-`{Kjcsz*EmO?61ieycfHkf7v__^**b;W);Od3( z$L{{yCFN#~sy^wBY@>2atV$Ogww@mudqb73_-5qqYz41KH(;VvU)zh<%MT5|&b>8! zSCl%xT)Fq;1pf`_{*|)xpV8u4Z z#Q{}Y{{a|JP)Wed;y~2E@;0*BImi~+|3y0fvv#859iCw+kfi4dcuZ;TW|T9#k*-XY zv&-xdky3=1zng^kMKo52FBmNtUT}wAP@|Nxg+8@@YW((4u02=EsL5^~?aNQR zjTK9gEVGFE0JU$sx~e!`=1&QRBe4!auDq2(ryEFSa@`n4h9fav_3q7H!#-%<^3krQ z8#o*aLD3x~*)GJ=iw{)W<(DcdP$q;uW%DM4XX)LnGVh(8nRz#(|9$Fmd%Ng8u1ltW zy&f&yp%QCnQ1~d3^fGQ->CirGGU-DL{qD2J;~_xNOws=2yn5&{i4;=G{(=1T2m7O4 z?hQ6uxfs6F!vl$FQIh~&jg7X3UQO(h-J;JZ+W2J!mM)QK3L8^%Zry9g4%36r(apFW zA2Ity3AsxrFz`zRAQ=+?nio4v1uje-W*y%Jg>#VQ=D)ec82-wF`+pD^1Psi7XN~=D z1a|*SIs5-Vf$@JhocqUh|K}(4pIiki8~uNUbGreG*NKLx22VY&4(lOCqfy5L{Vx4; z@ru{6^K)BKeq#L1G8Wgu;+ZjX6U|wpuK~An3BJZk`-D5| zrZy^TaIv*@S8(2ZWMhm?p)iU9gXDpZPH;)jKOoR%6H%;!F-O8qpD2Q=%o_6T%w1S$ zX3trN+^hEAWrVtle$qKvDl_{EZtI(r&j%It2Z9hr2hP#fclSFV=<0Npp9WM~L%0cd zzbOb>2F-6N9Z%yIz^d-_X}CwgwsA-+%p^qo@jkH2b;J_Sn;dH*mX~a|;X`nCcd#}d zFoH%f*yBE{|MJ;Sj&DQR_&9{&|Wp`gG z%aGzHLXl&NaTxIB-+T%{+qd)CoM(^cU3yA7LvWqajm8)bCnI9E%B)&=X^l-sOB4f- zIxA)Y>D$X3Lyxe(l4)c8Iu2MOnJWTln|b1ykVjV?7p+ju;P0MyY1Cpin*l0mQ}$7; z2E>gekQnb*qlo4tn6g=GYMy5g;9h!b1u8)P z_nbz?s8N5C+=9xo#Cm*eBGh#)c_{{K`OrrUZG6qDsHK|t0DO~L)l&{hT47_}hl=!l zhlIZ4Xw}N;rL=RU?l3M1uu34xoVEAuID%!6&dK3##pmVbVU*!1XKi1MSq+b>sDun# z#DLtOl5L&CRb#8-yQ2Ip+B;vdJ1X`6RC;233VFs-UjZ-aS)(l3ksFlusLjKHDKgFQ zGb@`O%FasnX&?&`u{A~?UbBZ@F`;`zsu1nW`}`9^{P%9p{|rJf{;LTwG5(LKm-(N2 zkn%Fn##eYnc&W{gSk`Zfed=uTF7p|n1^||6;+LTQ!AODn_pP%RQK>oYR&g!L_#R=q z3YbCXkaiJGu1#>LmsS@wcKmuDU&WJ)^UH6`I*wz2o;sO*j#KwPJ`zLY^@!D8N_Xvy zG4{=HIXju+vM1Bmf+>fF>J*@Qr)!l1Uq!N9cPpP}Qmy(S=%YOQ-LQ8`n5D174HOi5 zFK|M&egS3O=TMwlr@Kwk-CNvwrhEgARK`~0S{ozLt-}qZ50k)`6){G(qj(~}`SD4m zZlTTDWs!lf*gOBJZvRH7|7&Ds`5$An(*GR`@_#yb|G$r{|Lj5jf0-KopVj!^;w=X& z%YWhRTJe_PA5D9l#4izZr4Am9av-uP#V~Y--$B?e2%;gl9lAZfC9qs~-1|L%@&^2& z4cw`_miYoFU+!pzq6Im}HgTCgp0Rd4N&_|hmS;zcUM22*cOUieFkx7pn-Hnzuw!%|>)M>(Z%Jo8AjHCF9=Keot(pXo+1{W2`YFt%S#vxxa%kmf)k9d;1x{N4T&k9_tKLH|y*{5SiQ97wjCHEoUEnO+ck^>f7c_SAJ_2CyZ5O*9hnH zV(r#i0uBuD4Fs0z4(&n;YseNvn-*&Z5LEACxl0*>F)CF}pguUn>l-HK#%!6a!jKsA zACV|K^Tx6&kbtR60@37-FH|!R#aolN$ZSQ8-V}=WLz~vpm$A&%ARIpf@*&J|DiLTx zL06kF_zPb%JWb#!Ou+`UQRsGo2i0oE>pt;XZFcAGVez6&05|RDHy1vuS&-6r#>DwE?()4Kmpc=zAyHvc)TF#W4fFtRcIujNBiu`{TUAW_Oitx^|YGZTUDn)PDGDKhVEI|9=I(_7EZt14voWxlTT)F!1+5@CfLeVV?68HRWMeX zzI1fPlW?z}_7~HQ zQvB5LD@d#mS;V&G|lcz4f{DK*2VuJqcQJ6m=EnB*Qx4&mC<{_=!!y9Sgm!N{HM zYplfMoJhnSJmdD)rw#)bFRM@j2UE+UpnDqWYp`CwbY4>pFQpqtmd&7Vff-4m#q83df4Z0E_Q1FXE`IjVmUt2_A9zNa~}v8&3z`_r#4IDZP$w>{E@tKi|vpS8VT zo)6Df*pQ?czS)<9xdzB@Nm+?F<+h9|6Dy)Oq$AeC_sX44dlu9w~;%vf+Z2K>*zaR z5v?tN1M@d)rNTchzhTt(Um~4|rdXsQ;BB*uj0-}Sm0LTJqoV7`kM)az+6p4emDUc> z>F>=HWI``B`X8trPj)7&@eY((5LRV^jtapGP@uwenG%)Neol=4BA_}!5dN}dydR^+ zxbGgua5+^fmsXXg=d)V>V;vBHpy{^2aJsYKfCbBIt(|WjQW}v_?${ zg5?2mao!&B)W0==0F9V#>|d*@CjmQDIDQ^bPsNa*-5V>+7LC)B>Au%{3{@`VJ>yM_ z3;BxHftCp{#Tw>kAk@}PP0N(Co!{Xj(tTnL;G}w+(lX8LD_9)|e`C@BO1%m9vcWE# zOt@M)XvQxrgCQr9HZW7)Q6~)R{L}4smKHlbdPOy#$G3EpuS^;PMnYnOzwm^@ z-==d2RRFX~~84f9=+_lk7wKFBUYktMYkEDTqYv|8yLCPKSD0DPl6u{N@EK{mY z*|~XN$SD|<3>P++f+#csCKz}+$+$#Yu-w|Tb0WMfM{q*}-kW0sD$~1Yjy2SNDajfA ze#?IhZd;mlhg5&g`MdEF&f(m%t6R~VRd+bH32Hgot1+IuT}9zl_w}NFUgu#Z?Lgfe zLlC`ss&Q4|5!u)5{P#kXywK%ANf<%O?B9fhvdzHdXTUF&zC1qV-9wiH^CcDPzsIC>0ieft;Du!SpuaEsj=+{(>IdzuY z2wsaCGnO8OTr#!M*~v_Fs2y$o1QH7!a^kxIKeJZ>q2I==l+~}BT>22xjc-zC=|-~L zHSp^t?Aqp0q?}eA;jxtFxBzQ~=So6Fqq%xLmkjN6Q6}bUXxg-WDZ8q#(;ZbzTloOq4pcYbKzcOxj~sgRrbw;*7{EZnX5~X zJhL+@byB&YK196AHhu)0QdF&@pQD4p#klwxF$@zgI^f{Ka6cf*81$HsXmi8Fb0=i< zj#jMf8B$ae_C=`YCB$~K=^oFyHYT3P_-?9rdJf5yXF-U5kVpHamJFgs70iN~q+-t9TkUw=MLtiy5vY2R;Fb$DS*u7P=IG-gEkLJ(QiYI?HqM z9-~@2f`{#zyunV2AW3GqPyf|7gb-Dz%5^NWnewY4t01jzWo~pgd4rQPmBenrC&hi$ z#{)a@vp=j+$-7KjlucK+ zMzgG`td}4I+ANO+Lr$HJ%4m66xb~pae|qh}gT1r&hkZr%4u!j7wQ7VH3eje#c)ctL z7I5G%F|S>|GMrKRT=HAyj8sZb$MFEn>RbV*j0dTAA=J1`shR925ct(M63^VvgLZGC z_3eIV;-!}Wje#78(P(ttZ`+$HB=5>>DN^YQ@u^EihL?DgQIgG&a8X?Mh|{e7;S@>B--TYO1sMl(3ChYn;8b7I_bDBW1M~{nNzof6)%`Ux(Cpj&Nmi*B}*V z%0QE-W%Yl0=YKC6{fm-jvZmTY34a%&WQ3_Kq0>doYz{m3F~%2MW9T&*3uK>L=J^mHM|L=w%c~;H4S2pW#bXR zzjslR{Z}VZ`XW(G#2$1sh-H`f!vO&TYPE?3JONPmdby=m$p(W>#HdMEAAReCGpl%8 zc2)t^VGHyhCX{uQ(lr$_SB~wzfvUE+dv>A)-O^TzIi+cASp1OB;N#^1eCTfV_>|kH zG~wxGE{1eFfe-{#s`Eka^h2Z8%BQ5@a=@on(8w#F2@p|-N$|#15Q>Br(n&$!d}J)v z0t%dSs4LGU8~s_NnWL(LGm(3xeow|ga#C7ME{Na^9g3*^wHjm<0L{6vLq}0~^3IN^ zM5abdV9kYAebhz@7H`^FIk=NpM@^SEXd;GreqD5Nj$_!YLq%NT_Yc1)zh*~d$PXN~ zqoOXf^opvr86XCD+K_2sdRrG(xGL60inaArd$z=zn$n9ZB%VaW*6zQsKXk)~_cO4~ zC`!aF!3ry5LTX`AZ#4(p z2-5v=Qz0QjQ7vS4zl_2`lb8XVP)p5-RS=v;2q%A!=kBlT??d{TxHn}0G2g-G6@pk!8lqxE( zt)y?SfBrI-eYtx3BD_3GMpQ-#x>E;YsgK$NiUdWy3UJ_VX{#BD+ggJu z+b*6hhE6gv>P#TL6sWMW4$X%YI@>C03_+!?VcA)p#m@7~luL)hLa@oW{5+~_)1WBo zH(Q(2!r4|hkxDBS-|%BqHbAz{&>^}AZ5$WJhy{2w5^?2`Megf91r9h_|IkYmlt8`Fm%@&g>ne}XWU45%A?|u@f5&?HT$3O(CKwY zyAG1vz(A_F0MlzlzJDnpjIy**vPy%)52gk=VZS+x>1569o(WgPD!R{i6KLd3`pJB0 zZ?%xM6#&9-&|YgyJA8(Fe3$fAL~C`*_XIGAbgCUC%%0Y)l^ItxEefeUkVJkB% z*wjcKo?+)Tqt8abu%2|V)?n`>6lF+fqHm#ozMVEvDh+3|p3=6*zT##C&^ndKgdFXV z34oZTQRVVvFcOf0C-hDw6A4zB-F;yKbElx!9%gsEWld;%6o4hvl;k&ii9!q<9G5P? z7*i>1_C}8{6;aR1i)sGa+6p>ch-A=0L>=UH2>`t1U;s`GJt^ryO7Rzxt;HygOO+2; zv_#Y|Xuc~A!;m&N?CohIhw#`Kd_0R_ICK&w^DV{d?E$7+Gc`FIxsQX+h3E;lff<3g zVcOUu=5%p}*c!ChpnI`IcwwfKVC0QZHqCVugDtvGBW`lor@bw3U<&gR>pabC)5#G% zccX-r+X#zSTrM$Pbts`p7koX}Go(%{kKwa3j|3gc$k;Fft=w+KYB|GyD}ve=6S@@a zvW|4z_CT>BH6tv=aq#M;+k-MRxD;*jF^(EcVPL@Ify6BXFHC0Ch z?V8Rd2+l1ALfJpr36HI}MPY}maYd4$6hk;6m4ZOYwqN(OD!FCN%GMQ&u$C&SUnps6 zhXj;1`xrO&k71Y+)?lmSl63|HH2t-}f?2@u>%2ysp=q3?S=}qTHVQVQK|zwR2O6fS zsQ88J@8$qs(cn<>*o2BhFioA(Zy0;XC^!<9DWT`^GzbqP{O;@kex`0d7mO8bZmEGQ zTm#!>yhDwvhbv?60Vyewl@P{L+#Y(7)qu`B#{eH0BrwXzt@_MCVYl}NqVZ9u%asX) z#J8Z3YZ!P_pI#>T<6d2tcM{MBtTV_c;%7Jl{tCLkH-`AbLw(canxj!7kX&f#oTI)2 znIlOY-YX5ook)-+27PwPsD~P59vk>tq~&-b%X zI&fsd_XB!_3*z_bjpKgN;ZZvMjR3@TEFC=n&mcEFE!gDhtll*zW>soP_Go~wr;lQ!^nL1hT-VNr#3HsHiiw(R z8zIY^$9ddRf?W`Tdci-EwHNGJ-~8+EC2~|(wB9az*C6$-zehoKAFf+i*q>Du z3-XQtHgXbNwr>#BEO1kUoc9kJs~xNRw~6)5_SIcIX<_L$j)xI~ePq>~sCP)dw)yUr zO>hN1okWSV2bhF{p6(0X&8z{IIjRMi@-iQOt%Va1?-P;}Ws#$=8fF7os;&})K{wbC z1#oZ+8sMhhV^`PPl+EZ`cS1{Bvdt;67_bGk;A#1zEGi_HKa^#HoWW{XrdJOqai>MB<`Q{b~2 z*xy{a6dD|3Eb5xlisaOKjZSGE%O|(pgt5~H9D^y^Z7k6~?J?G-$e=u0p|4giPRL8C zC4r&G)_|+GSs2OE)s1pH39Uf+>$qR2)ff@8&qYSYz*Daz=ZvZiMp0fK>#j`GqO;`)j5jr6!v?aGb8tLpQ-Qb;8Iyj-w(zl$5~hs2!3GqQaAG%3wtZ zbbf<(G;}^p^&X@s!03&q$i27Lf`(1E=J3O_0o$n#7chBm*L$@GonA^3sxrR9)nbXL zgu1ZFZo&gPbc3&CU)SJkH=B0g%@;NkW1={%IhX`iDs>VHi9bYzIr8daBYVPU{2jXl zfhcV|ut`OrHW?3mv`0yP>@u8ni{&;xC8jf*&UV>A-IHy1Yqp0V<%*+;2yaFhqG6B} z)&`|UR^I_f;xeFLyqumVtU^>Huk;Ne_+4+QtGj4p0S+dDeG;4U^b5lpB>+H=lpF*x zIb!8$qrJ$>JARFv$l^gGZGQoBEIkDIvxu3oc1K%$t*TluJ{y;sBEia;9hZ%^d zyBbl`OP!x9a1tB#(zwtFjIpO%ip4m5&83=4nbbEm!RMm?^0*nLrh}GT?e`sVp#wNK z;}H%kyNx(9Eq&$Gop1J~|AxikAbstpWuWhEohJilfDex`1%`!)g6;>rRp~#nQ62$k zxAU#0!geD52@BBDMWP(;#BsGVNz-B46CgzCw05{2FMURsMoD7Ne+`lz=^xiGfe~JW zRhwVt0(S1eu zJfe~A7g*2`coi~-4mWe4I+*^e|FTi~0~5^Q0)v@n%EPQS z`aVEGOTgaWRRu1b(VT~j*X6NZ0(=PMJz1O){dysu%b>u+f3f&N%5F#UJkmu zgPv{t#rjzae<^JW-b^&g<}A2eV4IyVAP~Xl5iilQK|ij($0{j#>2<7YMHwP==jwnM z5oPJMZ{Ob3(A6`Jo4&yIX*1;U-LuP^{NeNJG*|d%v}^5v*eD*aF4%$rO}F{U=k#4=a*2 z@V&Vn4)#?^f^TURqgJ~sUy7Qxs0gh0#T1$7!A(wP_jZxrxn1fY8->Sj5!UU|+znFN ze50Fa15zMad}Sx^;Z-(`KQx*d{q(ip?T z)^)wt0I7P5kJa%gq@k7acSi2*_JA;)8YVKcE26Ry=mv_KL7!yJgn zA(@K#`)RJhTc#_w9Q5&d$dc;_2PN=&hqAtBIoV(ZwJUC2UvDB|TYbiXrrUOCOx}$| zw*f;Rq~r67Wdu!`PCT7P%UQ%HA{VVE3Rpk7)ZM+;gXYg$cD!ibs%Uw@dT0CJW`{{h za;oN*^4?BX(c`J#dT3~)%ET0rMU8k(rK9JGx1`6PG!vh(l%?_x&Tli-9ueLk(LZ$? z*@H1&XOR(AZ?`dN`5BXXsSvf_nuLLRq8%zq7yxbf%v!+kzF_-YbOKo@fMT*;YlP@$ zYMy7vim?yj9j@-26pDT#RV*Jm;FC2NW~6U1(*Fz%%8fcCrSvxd%j0VgR13M zXX>0Yck>-9IxVuolYS5fg88r5A#>%*PzMiqAw*az=3}mv1XrhD!}dH{KK;<4JNBEw zJ<{XqI`Dh(p@fOUthZDTi5~Reb(h%`8Yi8hao;LQfGirM=j|={;R1t066E-@Ca`Jl z2by(gg@~eib;aIIjQZ3Z;wR_ ziXUY>^-*xU^(KKpR`r1W5#3)UwjxrXWBcP2Udlujx0Dl?dLanlj-&~ln@fA^=e9E2 zbOFr*eDjS5nT?hK?%VaMLRY(|G??F^GqcZy%=5jydv!y0%Sjay{kwpiZ;bCY9S(r7 z64gezf6**w5_@!THwS}wnz$xCUct~YE+nV`lehnvc*Le!!dMVz@EJ7i%+wuG`?My? z2$JoKH>UEjE5PYGef@rs4gwUISC3YJW|yV*pR3GtGIkQ zvyF>$vzF;Xn~+mmpBjtCX~vs380J@4!|wA9bnlTtZRAZP5%w*Q?HDSNrH`st(2Qe( zUNqZsh=GiVEa%f2bj4b~ZxMJ5Ybx#hE;iJQX|+TRQi;vZkxi3wLcbI!OzFz3wqtl3_6Qz#&RMEIJ4Io(Jj zd_)@-D8#zU4Gl-6)~~0$yGxWi;-P#;|Suk@b#d!y|RfQlIiV++D+4GNSZ`d_OWew{#4|3+ zD#xL33>JcT8E){MSgP2M1cIrOhkrzIz$9R(Y`+~A4HfLM z;L#q?PlvhRg{~5!2z_m~0Ui?R_utD`5#GsXSFoE&%>*T2|Isx<0 zxlC?xWEL*4;@Jhu_Tw{au)hZa?~16=8h$Y*=we5VdQKq;4B}KvLgZ-_$E0IYGu427 z1-T)sbMC-OYY$U@cE6Fkxu)KtUfC(pnvL3^;L1{Se~e{V3HxFU;R9atW5~m^6PLkx zJSjcc4@A3YaUUpxL%7F~8J)_cp*36~itx#uwf^m<$;kR&(vTzLia z3EPmhZapTV*!85j!$d5*LEGhKgR$p%PnVQ%%q9uU;P@{kQPX)391=0c6Vr?SiO&Ks z>KHMF1r%)}GG%!INw6{2bxrmG{&=h5luln_Sn;kpGS~xn`g8U-V@i23d^Jw;p3urt zUYhs48>b8RaylP&iIYE+6ym>Ef36}!h#gQE1%o**=+t5t`LYKG1Pg;mqfYnTXK3*U zmpR6FNkEwpx04o{>Uf>tY$^@R4)Z2xsnf>C5tWkbx*~Sa`j?ivQP2#ptEc^kb-e?B zNb(w@+DdIKxA7-us@jI#QXSMH^E3M8PBiRQf)VzS{vBokTS<2eili&>r+cYcgxidm zhP{R!0D}jH&TAr_itC$qS{}0<)|LH`2iR5aeX|MF?{-dRY{`0u=sq&f&MI+$R(zy~ z*FU>P8KS##Pqx=f337OqZP|G@@l<~Z*TnNm!+3;q?DK~N*>vnxHpP=kcD4atS2iJz ze!b^TV4$;_e3LTFYSY^4xjj2F`oq)#bJ_y?$fQP2mE7`!_k+7GjVCEl(Xw z(bJThcUsmK#ibi`UF|GFvs-%%LhIO1t>(WW7TjEg?6@m@nKtg5^lopU4$|z;(ws~2 z;HSSfNGhf&qdyGfi)fQ`F^V4WzSES5$M(UmBGtc)AZMJO|?GzBYsVJwRgBX*^R@& zLjViJx%wDb*33_tH9>mc)m#t}pWyxJ!1We(RFf!djx9Jj0}kf;%?ea?$lHo;Jsg z6yU%1Z|DkRejZOONPO*`%@d>Y8sJK>)1f1DMf)GBc}&&P#5BOxazLh&gKoo zx=a(~o5^=qSgG+DK9OkcOyY%qFdJvva5>XuZyYVsWI*WO0`eTf9(c=f!lrG`EeCjw zq(*JYcbNa)d~S%~RpiyJutZgvR`Cp~Jn<(x4!8s5I*nH)mdB+RIryOo14mQ_CyjNQ z!?6euOi!imOkm^BoJ;%%9J5piNM@?- zK04x8+6PMVipSG6Ysx`qw8#{g6m;tsofsZ2OFZB1N7Ka<9M&xzPN9P)9)li$c;>!M zzxPZUbljZA>|fEP5rg_IXgc!#qXiQs2gIu9%CxyI&h`BX znp|b2*7Qj309n|krGT@$t9qd&qxc~x=;jz|N2)ltw+gnZ)XCc2AC8?Zi;?V0=*QjR ziYg~I)U!NEhX)+(rY}MPf!yBDJc2sj)JwwQmTjLVdY0le6vrp3OS23H6i%cg8mY!yu{>g&EG+% z3J5z+#7s^2&=jkn8>zI8&VE%>jKjG2Cp#bjEE|8ga2ui0?e3bo3tZ!@xpz-U|Flm( z4PO=h?vBmA?24Ub_U1S*|4A2Vnc`zwRF35Jio|iL9r9F@)=1438}toXnAr{@@iG>m zoWl^AAP!(ZLjT(SGek0^+s*-{U19zE76lPc^?eP^(ij91v^E4d!1oXUU=ANd=xpXPAE5E|u<;a2iVLE`4&3}OIlCak<}jJrPpvD%(cZ4K61+_CoehUG>^WWCFmd;35gEYlF;dsL7=O=Lvx(Sig<& zAXn-ZN%=h|wOrnj5sY8Di(^4Wi3swyp&X=+ncGFnVWybiO4Y|ZQVu9COL3x8I)jXt zneMgah%Js`NqOY+HkGy(D9xa$ zNp|nmJCI5V!veekS08>bzpE#n1q8o?$nH5?dCJ!N*Xbeop@EC_#hgMY8Y{y5Usspf z4|%_x+#_%#(eKD>*)3RGTh0nr9jhIJbukSQs}myA1L?1}K(Z2t8jiCDyT+s(H6B!Dwg8n|u`t7ds%(ZwAepq6eZruuC|Ik7FV z(uWGI#3wG(RJ7JiVd%x=-K1bem#l?x5S($dBzT163HX_qiieHN@fhZBK9*Y^5GlIu zKhx%@GJWET7WM3irBx}dm)sj0e5I+Ko7>d^zoa{Ft)Cl6yoR1Ziy~zb%i$KS&e|u{=_Cc^MDMJUM7+PiYKt zanvlL85h7voe@&z+rW)%myB8W!$<9$M5jv+YV{gSzd2`AS;V>v@^ao#%kCMq`&-lhJV184GH29Bk{WUI5dF5s0IU+v<5^ z<)OHLKc*C7{`jv<>P zaQhmYG<8l7`(!xtlVULVj#-V`#8@AXORQ^WGuzA4EIzb#+cPAqVCiduqZW<&UVLCc zAoyp?uO^tdwxT)oqq?`zw!S&xKKcHUmhA)4vB78QE z!@hGu$^V8(^|X?K&G&A*5gJ$Y{tPee&j2TsSbC!Y3*5|-)UBWKa0AolmjdBkqh zd?G8C9&X_oVFgd!w!5v0bfs8_32(Mql7Z#hKO@q@`Vs1{<;A->zI+ zfTNckeGu`INliQ1`qjaO^AtFBaSVXSNVxi=m25?hLd#NZr%Boo`MOFu|D`#ekPTxq z?ROMXn_zKoitd#ITYT)N{C*tsJ=!E`M2fi6w2iJv^mO$IY@DPxY zxSbU>9uwlF)=0Z-dzmBr#at?EigO@uTy`>&_su$7Jt&}|r^#n>$8}yXXo zFz8o$)fM5=#8WhAo5hCA{k~^0enyhyoH@L=)Mb?GP>r9d2tUw|Ki{a<$IatHX^^eg zlF#PByafmd1c*b?b$6 zPM~Um#CN!%*e+}CX2bcD3>du}8{5wm{+7c2fk_p_xe&xVVjx&nSVz#N7}Bs=fX1mc zZ{IRTQ@!S5S6f7SR29C*!L>doMEn+od?>NhzLXcI2py+!8=F7f$%JPVZ6J4fE zOPSMyU}F_2mhc6uWHHCnCBi)`=7Sh3btsIW}s`o%z z`D1RCm@v=@$SPnqufB{SMs^x?RmtSJjtCAH?3{Y(JD}1I4)9h?%V7Al{7NXcSmHfG z2d;Hous^ltk~K`ljS4i9_r)nWNl$b7vZIwKni-nPl$THnX`VHw2!Os`?}`oE=5r4o@w5#WRSWa}V*e%nkP8Cy9vCTxxAv z6K#Nnv0Fx{%qID^`Bm#ro_Mbfw9$MVv@tb9kD5-k6-112;Lu*45hF2$_gAy?fs@2@ zRsaSnBb;rY29{kzPAVq9XN8H1R`$YP!~=qZY8N&%7SkYryo$=vJ7Kttc9hvG*K9vu z+?K6S+1|leuekeydl?OX`__#OLt+suygoUcfZVLOULoCWqkoG2?H2F_qrfImUIT)s zUDXd8pIt1L@#LP2eqVZfg^}#nnm#R$~R#%9T1WOl9T%i3pSv+MPQ45zl zSpo`JwHBBn$&lX$Bbo!(+`dy)O(VmA0Bm+g)c9T@ zpApy`Kitj=kMNTR#Z9WTp?z%~JMsYZPtXRulas!0v3rmkobAPLaqDms;l@pbgJHTe zHaj|PBDNLTiGzW1Ueo&+ z_*EGR5+1X~>Qs+`M|7Of&{0SQ8+?s5{M3dEi6Yb!p=jloEk}LOENdByOAQtw6|#S_ z*1*28Y%&CJq2~>6Gfs*0HoWe7w}+SZW}U36q*X=CK#=<%cq@em`x(?L>1ET~BwYWF z=X&jA&63eRzo@AXo&fct-ae}4nNwYXr$CVlq?znHez%FdAjB%@yb7^l`)$3+10<_t!LCHQBcF1IN;cKG#0sX>u^z3~F zLNWoz%pTjAAJ>&Up+FRGK@LOjNo$jMC}fV`B;VAC-<`Bl9}>o<9Ki6B%zB77F1hq; zEIji+?^sy0v(NbTy$8;6)2mEh?ThRp874((sY>v}uO0sU>)iy!9)jobic{v8mp&s6 zBXZoiqnosh#}t@!L$f-E22YC2i=MQusO_B(AId8@(NywDbcX2n#oaHBgBU=uj?!>@ zOm;_qX@5l3ubXbN?qr78xpR|*S9W46Mg0fjGT7AoX_A^CoSIr<7#g5`oCO|v*5FjC z%~rVA_nAt+bzWGP3B274DjKWtzatW^v&G)ATt`Ue8U0C!g?vH@L>Oq)?Cp-Lr%$Qf zSJFK_NNt9O8=6UJ&8hEo2;DJqU(n@Oj}~Kk22-F*MeNe4h-->6%d0zZ9=PZxPR8la zlUNhZ&?@FcR-i-?GLdcUH#SB_QWb@LN@mX3iePsO;YT4PNU_)*8fqSQFZY3X@%{H; zZ^hk7W?nBnH884>o%WQ5nDT^R2Uao)^AKkM%!{0l0u&++ zGnGm)%aU?C0n}Q6oPZ=ltnv~-tRmGeEN-Pbx zuJUuEX+S_ZMeyQMi2DKt-T7{JpSYCHWC8_UMU~|}hqyN>z1k7_(B*0#E&kY*U zfQ^BurG z9}2c*-wSF7gXfwmw5^gy%Jx0jm$h z)!Qh?O*{!XHIl1*^iHUJ=u&;4U)3C30m~f%Kfhy#-fK8A1J0dWe+84ryD%DN0RPpkjxP>-qcl+8$$bW@ zUA+^^=N5EwB@R>$L~VFrP+5yQN|=U+ke9-*UJX73MN-#t+Y^IC^&D9)7-fjG6720w zfr1_d=pO)1dZmU*h9~YFZ)xQ0j`(g*7U(CUfn1VWuik_3|NJQ~`y-?@YV`QgUh?Yy zt-VM<6AF8@Uy1d+%=S}y;7aB>da{lj#f*>+QI{HShq{-d(!Z7Qe^B?1QI@t#x^8Br zZD&^6wr$(CZQC|0ZQHK2ZQC|at<}4`*BSfk-Q8#RIAg3|bIzY{ymQ18PsAP9ZNB9m z|5=^`gu6pC)iC0Cn41KO>>K*C{XmbM;bt;Ep*^fr(Z|Yy=6(gHr-(hIwbtXo5bHUG z%03;gjX%#mQllT}SJ1P1W??|bi3++(^jKXXmaut-Z!hH@_Xq)$K9f)8YLTz|S7H6W z!!++(d2&n+uf^CJqnn{4PNkKRRSxlHqT2U1 zD0FCPx$xH*dk3zQn;!RwvlFh zGd>MA`$9?gC{oh|FJ}NXVq`{e>sDbXU-)eJI2q!Bt-zUscbF2>TiBWyN!LnbPxnW! zcXiO+Uv0X&J`v=xY|Xk*j?ebtdTpdYO9IwQiEu}cu-m%y4xS_U{v!L4c6u_P^X`DO z`-?3zD!)kwo_a+))!wN^gYKA{?G+YQtCW&L=1y`jxFG zPa&lRL6XSBI6YA^>TvnA&X~101$v1QlJsi_ih~A@inkKFvoPx<0W1Pc$xZ$mqpQMe z>)XUFzD&Ym{}m?zrCHD82>PYl=_P*KIz*7u%7eksNv|H6y>2Ez%}_KWrm$--1C4W(5EY=agm-was=zEHFQ?s@gi80z zJPw%Dy>^hPDQx=7qb?^>&t#R)<;NIzyZWdQ!8hg#r@(G|hrCMJw{Om3ojuL_6_SP3 zS(&y~&>E|pw@p*{X^rge?Ufu_4OQ^D^Ka)6eTYm%9Yri~VZ3__kpTz!>^j%K8io7= zoaH|ruP`vN{`-7|5lsM6r8uHV#eIXJ5ch$n|IX>K7{5@!CeIh7G2`(yz`ZlkyFxWP zfPORj`X@C`^i|7M8H-=B$e*RK@P!$pN}HhdC5|C26`bLVB7k#q?6&X8b_CwFhL9YE zeL>|ET&MTk5GUY-6}5O z7sYJM^s8`0Z^achIuhEdUJn%I?$qWKL7u8Vi(K}7^$Wz%;#G}J>)_bu*^Vi^DdErY zT3T$HNID_Ad$KJJInDV;#j%x+)TOsQcggpa)5@=sXc1jP-4Q z6}-Rk!Tw_k%fFBwSpSU(#KQD9Q2c*DrOO(@T$X>OBK7Ow%}#(QHBQ0&j0qBLPdtz!#JHseNd-?GI29{1+RL9R%IdvDozI2QmYto326&H}#=eVOx2{u~ zaH*kC9y6ftFYv8ykR#X#^5awNW9gE5q zel+?vLV`YP+#-?Pc%RhHup}V|oV#Yma{iT%!5fE$Yfrt!{54!*#if=1$jgosVS%Be zM)E1WgZ%V&VxT&1IsGTR!otpIDqq%;4jVS=K%UBT?19}`a_i+5Oir*|c(eIEUd=N( z5WjtxuLP;(FcUYLJ86RaM9rR5A$Dri^Y;)d<;jqJi-cllbhFGH(t%hpfJ$~ZgeBG9 zq7ItQ^7kFrQB^!nH~Hst=*)1=)gDGRGuhNn#?mw2&7x4bIl6ZFsu?m)|6I-JDFuS6 zI0QCU8N*%_QDKrv)HC1Nv3JNm{mDxhnEbN&_BGYm zOMb8s&FUqETvIDc2-GH6K1V-UK1#$NT~blAT;)o*OB4AupcyV5-lrZ9u^i&$4OOt` zcvp%2SxnXzv;^=mfZ7N*d9unk&Xb;KpWSf%d`OSI{oPx)tnSsBgtdLK!;$w_fAN2S znfxo)pZV{A3Ost|ztbu3=vn?Y?EYgc%kp=>)jywq8?XND_uq2Mf7598Z|IPJGBWc2 zKTfm%z*PB<^ECbci}+M0E}8#co;V>2lHLZ9kV02&=3)01U;GB$Xzi>>Ns((RBvxA| zOSs&n>Z)KfJZsd>wYIuQ(fY;2wda-2fJNs*)KIu1(0qvDdDj!+)@s5l7ZVJ>vsfjw zF%=sWuyaO-meBK}!lF0}N@)9_D>&wBL3n#J38Ut&_AZUQM4Dsq~frygZPGoDq=zF^i^3pVcn{J3jk;j1Ubgkh1%jw z7<&Swusl`eh*rxqlW?`~j?By5SE!w7wl-y|#ld@vJ@>F*&j-JkTqb~4h2Qjh3pe7a ztDM|B_SV0KUxu{z_Is3iXVI-Z1Ptm_J$YrhAZQSo`9^gxykpoVlrqAusNjTd<7M>6 zG#ON;<8`Xln%XQTMZtK6Il9H{ZTpj;6)C|by{&r{YLk6g0mM4Za5c3pPnx4FP#QDr zhuUs^Xp@!TP;nD`WE046+f@!J2;vA#0VpPri11e4Tlo#MtvOhxmnaaj5*56@v*>)$ zDJ5YFF@&7!FL3jVg#BNQbbjadbsfUVTfd$b;Z$j595?l1_yHdugkP9c0emt5(Tkbs zDsK=UtharAwA)oHeY84Ehgk5SdQn;!AjC+UB;%lX5rX_Pi_7iu=z>xqctH-KbZGD7 z3i}Manz-C)-jT%@U2kFxj-sBisPdk3r~X*DCA@7x(qo0CSt^ukdt&X`I2z>iN1*;4UAJqdhT@vr+kpOrE2=Z zl++qbDh#nb9EraBjF?KGK8HF-@vdf_Rff`=rjbN+K|hXrVi4 zlmIM5&rgid3xYbXRW0T!z%qsJ&7loi6<>2BI}@cGUNmMWxZP2|$7$P9j=Ry-BW1S4 zp}lAhjgD{LeLjW5rQonB^xHWO(PnrTJ$GfUD_NkQ#blg4=yX(Kc7md3P^~2*y$H=J zBhYKbcXmP{9BB*-d(VoXDLEyH)3u`f*gQ;4J1SORRvZR%Sm{%0MzsQ{pjgSz=~Rmt zv49zl1GHzyoW`4&L5EJrl0P6;<_Dz*ZLJ-FJ(G#`ynj}s)9{QobL!H9pd(G+?g0hy zEHbW7sL%)V_6-DX^n0#GBs(k@q*}UDnbPmzRp}-aBmvk>D3`ucAl#z`F8AwhsblX^ zDh0aNn=4In_T`_ZQXpS@pyMXVB&SQSR~(GZ$lZ3z z!$gz(VnRaPXt}Ui!oLtYYcXpnuU^iQG4SP@OCc|hKUWU`oAKkE5B9__!EgkVrh$fPdAK%wMF_rHLNU|| zDI8qnZ#!?U@zrb)Z=4kJo>VN%?ApbL!#z>L^wc z&tTt3%oRZ+&=}h_F)ymFIF~kvPc!gyyPILspR)o0X+zJaDJT4v>n(;JQglqyylYXX zZ%(X}y(eaSR|ifgAMl#~((n$M!sp;A4->AB#N3oGcSX(h! zT*7gF1tkFrpT*t`2s@}DEMw4Oy*G~2g@H{rvI9XpD!6UOHl~a7M^#KQAld@%X#hYN z=>wA~Pyyi|{((4oCAVle%KL2{4jX@~j6s@_nwfiEx%9GZv;+zibDlaG64S7nuy`)h z(6xF6ESyx?@WVF|ZY2@j0C#r6LTErgwpApE{G_3wobSM}LUDp${}ZE|0%7VSTsZiz zilP5AP3vFkeWrgEjo~q}{*3_2^4A2=@+OU^)V@%HK3yO83TmahW|`jv+C8NWmhh_r zedSDf%JjsURmX5lZp|0#vz-gpt%DS0rAyA|Yi|jO7~v1vKdstdSS0y;Q=`5Se^KE) zC~#cGWQ5sI9H0XZwk(n3@l2LgFA-`+L2VU*rI#zE>&hQhG9SRdOz63jsDi^6eT)ca zg!pA4^Nef!VYS-J__}`LB{OyBCg}Gt15iEoJ4LGKXZtQI@wFT z_h9k^P_tvb=K@{8ndlvZ`EyRL5HUcz%hTSK--yqMy!?EK@HFCALlieHki?-aDx5@i z6cmdZCrMLZ8P#DxwKHX1E+k`DLaL%;ww}HOyPE9gdI$K;{f8M2!WB1$%UBO1@8&N{ zx~+z)$F@^6P>!OxrBPdjhq>)c1dyD}(|@MO23bvc2h+#w4Dz&y1R3YBPWw&N`qLUb zYv)#WlVa=5e&EgHI}E;kW{Dd-RNb;XA?1Y@9+pT>VR_I1BlWM|>p$Qp{uNlq^514Z z{|l_`pUc(bA8ObCVM6KOqwyc#jsKU%lAfNO>EAmGpAF2m&Tl4@Ow0M6xM2-Uk}1}8 z&GKKDUtODe_&AP;(M7=RyD2%7@enyi9kw#=Y2uImS-KU#nMYpdyxxcb%3k@3h^qFE zf57b}uPbmNDzDAiN|u~@FQP)Aw!I&Bjz4~GuqYIp4!DH?-FtC-pX|N7)!Tb?vzF-q zI+WI{nXMpn$T94NkIY--iWx|2;W;f<<(OI%xOD$ELR|UMpUB{`5~9mbDFmsX?8!*= zdp%%H+bUK|-VD>Y23mcxSMY@!MdbjHBUwt=shyTN8^Iu>zeS10k>{EkOFf$4HHGEG zrPwViiYmmITkro`G?XDWwwN$Qz;|D>>qH-WgcTMreO#X07spKsAI@1QDFfG-^+~gC z0URBoDVv+kE2qBK+eE zpsJ^VH=B$>$7?6Zk+C2|-F8VZFLjMFa`1Y}57^FU8mk@1!7(Gj;3V$)HDudlJ|AYcR@|1DJytU4uB)66 z`<}ViW~-8&>^OnR8+}rQ;-D3+y9Pdio)?N>I&5N~1pbF)dGz@7gvIQ1JM#C6GlqZZ z1_H)?I>HU1w_W7-dS+Yp`Rlk&<%qWLQJaMrcf}5$Crw7NHd?;EU%w^Dnsa&ARR}g@ zG{E-0vpx1oc6685QVL|J36Nhh#)wv1GM2GWN47FM8Kn0^U(rgV!WW|k04|sgH<^aW z`nKXI28kkIMh8fEf3WmRynevemQMsSMlS|+Pv3LQTE%8A&@D$;m07cTXRidCVNMZl zap(^~Dmv~!LOtPP85ke|NLVOd(Axf|#=)ax_T=i96SmGFtKkp(u@xs4>zC_Y!SWVU z3-P0p8pQR)VXd=2d6?{^oCBGG*?~m?LvGxPp`;}^u|o|i8)@DbGpn7{umTes+V+RI zXTRY)BO}LC6kj=#Lm{Lz`Z_2BIxZVH=IeY=zE(y?(L7^wEeoa<0nR*Q|84&z1TZJ5 z04INKG)m}j5^e-s{$gl(z5X?QVgrA@O&b4X5=g8}mcCL{#0MhOD_XBL-&2;@?F3U0 z=Qb=#*^)6f(m`^x!MwC12tNV01uyvJt-+S12n~t=FN4indU-g*c(!Pz=nFEeWDGo& ziMG|aFGCMKr+d&RKf9qav$W|l3TPeIir4;2$<32OdgYjVE*V_Vjax++!n|sO&3o}JL>_?Qe{x?Lj3+8?ntW%3^Yqz2AP&~GKhNj6cr2Q3iA?*H%b@A z9u}uA>M^J52e}?2LQk-@)vngnwoe*v;047Xbf7-QsBtuoA&*M+Gw%46;K|@LWXpCH zR9@7PHBPe*g@X#aav_8@j-3xFEz`G^s5=IybIOf>afmSfpC$kQs~Jf5uh>^c#=l`- z|AS^=;?$3+oktEdq8Z7!If68PjkEVv$MV~wUuygADO5^5-(&jlXwGn*d0}nwG~pLQ zoQvnV6O|cjX^5N>3_z=xEyXAJ9r_sKZm1!hSM=)RB7QRJO@__y=-KErJ`X)eYTRBb zy*-NeCYxi-9GL~(frs0DxeuztVf9U!>-`aVNf98quma@tqt}6bFwXMfzo^ zuSYrPYXN^SyRb@33ejJGA+>7w$+|z^Lgy{$b))tMke$4iq-Zp$?2+(rmwI+F6br@* zW9lz0gU|5-=g)$CfQ4}SN7N!cK}rvBL3c;vnNJ?Pw$G6X>p)=+KMFeUQUqQ(&HZ%1 zruH3#u}Fh300a&CZAF>l3#lIj1rhr|-?qXj^vCW*?F?^t#$Uavf7mJbZxCr2|K8X7r#;~R&GO;@f+zd; z5d5d7Ivc}3*mkkTBP!Ek0RIrg?piav{(QBwp)HvYs7g8vcQX{_TrDA$Dj8Nkh3StA zR*U6?ctZXOR?ZZ-@^WiPt=8Bv9<||?Qgd;11COx`##Y}P&H5B?3ik=;>F=6PjGac3 z#4PTpRI1{T;{KcZ)AzP=h&vuV&nvJGPQl7gE|1x2`(A`A<;?kV|E}zA54Hug^rU}aj z<;cxM+)LS&kUz4lf3?a;_Ir8#z^&&7LP*H-G6&qSFAm4p2@gEtu6!r7Li}E)ar$MB z;fmLM$~MGa^P7&qmqZUBQc->L#B`ke3(E)>R?$WxY-@jWj0c?+Lb$#0Q|=3cyl&^D zW6{4TQ*a0H4;ek8p(3D!Z(HyUQ<|7iyN4g3+ILjQr<8Qqx+d&w7>309C7jP4|WLz^`a8aVK;Web8?Smao!@OD` zTet-sB!87tZb+b;FW1taG0cEZG+~Vq(StS1p%okpuFhZR%r3(r_)cRb@(k7t=3<;0 zVr@Dc)oY2cX@xsf#&wi$YhmsfEA2%=4`b*>l*NA;$jBjUOM0c_R=~WL9(6VbtTcy` z!S1iJ)<2Bu{ySOgUoJBLtQ_tCk*xK9p40uWy9fg_`#)@Wk?7j6(C+*$uGJcKszR9UAe59B6E#0oEoo!^avfCr;XJ{gkehL*@$5UA?sAvpG zb(m+3foemY{>*c7wc|aO0R>lWj?zk}g}ci#eQCQY&OuI%>45 zEQ3ZzX^$Am?5;f0II%BhBQfi!*%NqwknWJoo;`0_TMV2B7y>z@Q4QrAa2Q-62aEs@ zWJ-m~0At%koT-;+Te(}u|M;T6;nm0FDp^3u5K`bpYC^6^pP}I><^v zr9@N#p+;{FC1skZ&&C}QrMPG~ONU}`FI;mwG0XZ%3cMw}9{bZ{DSydiO`qVGKEm}$ zVH*WdoODi?;m)kM?72THs>iMgB_MAoE>DEJuH6~W{CKMg<;b!NRfn#hO$4N+iy7QW z_b@Ing{?Vl@(jdMf3IX&;~g(0AT;L>AZTF;V@)0Zyvno^y)40^DQMPbhjEc{8X30} z;ZP5JFJZr;{S8#uJpsk{y`4ndL@C#1`@A!66?xB^Eq{%(3sY~oaunRxYw>3Z1cu8} z#eqRrT!bBIV!87)3){*r}lh{nU|zQ`MkNR*sfizMs5i z*wP0uw>OB1-9Gn)j|#95N|A6*sqOQw2s=7&tj)s{K3f1ww(6XnQKDL3G+y;z6N?T4 zUsNounu9MCPb?61z{=m;*J3)=)T{SL@LXr1eX{S5)%?F|%#rH`?xlSwPGte>vvyUB zcB;$O5XIm;c>e5bIgyYv?H6Y>Q82)oz!*(qQ8g&dMyJYQj*AOW*4bq1*B=0|~d~th+(g z;mIBf7MAiSBe`db%vF@>naiQcj`m_V&B02DPo-)7EL|a-}5t z@jZ-;=VYP1b*LLfdm)AQt?r-u;sURf%C|gg5mX_FXUR?JUfl+k_|qx^&5uq%9#o4b z6%$a#gjMKofUoJJIp_FVxN=5~0#fBM_eGiqIkW8CqK8G$ZKwkBnk<16SaK?S@UFa@?Us< zKdOlNhG6632qq}(hYnp%A}!6DQA2#gZ$w{q5g{?Daf-lqcmX3jE_NQ{zo--(?KmQ8 z{uyj1rMg1w719@JUY)?g3?}&;3wfLM3dt52#`avObEo3-pcqx2H!=3eqL_K#pbfUh z47Kmo=j74{GkBE_S-$Y~hwbg9&Av{H$yngii|%5NE)>WGa8L1kM(D1Mcn3}Nz7&~g zVHU)|JSYTwz{mge+^MnrWfOmq224nL$uq=} zdxEohbdO@Pg+S&`AQlh|R9Qigm)prPuGYy4<_bp>gnt!4Wf~4ZrX=8T%%;adqcR1A79~#nnf<69|pP}#A_h{EPS)qo}=G-2z#$3*gZ6p zESGFP$8F#8JY?t=yV`Q`9V6V?ph6C{Wxp=+h`K^DY0VY(9z!kI6QDzpor!Hzc!g8j zPBzrSPx7&JLVHrMtoGOeU6{;i9yH@J8ZchYj*Rn0^5-A~;k>k&gs++21zo%kGUT`7 zjrKw4V_~yKDtt|?49AF6pdL9N_rs9?oowgVTn$ZqMZ7Jm4-!$KKeHk!Sx==&Oy z_gd~(kCb@OnxKpl_Hs6yHIuJ*h#4<4yN>F8)4<^O6dE~L3S1pmI6UDUnt0fV5Js)f ze(P>q=b5ti=dsEAQyU@FTfEo3_L_8OWz zajY#&u^H|gm+Ooy?HJCTz|CFUWEftmv+IpURrDC@FW*ptCB>MB?xWgV*{|23wi)ZF z2_W$dtuiH#(|jl>pbDy8s6ysJ%;UULkUu8s3T*F!MXJl5iy3JNBWAdxN+g#V7wR?n zEWBmPcF8_B*o-exSaeou6Gb8F;t3qmQPD_aPwYcW-hu5a| z2j&@2j+87wftD6 zuvmCUdans8|1cwF&W9jbot!t?s_3r;l`+pgeylfYI~u)Cg|(Gw_5;0MMZc@bn~j#O zuKfk1ZPf z{Nm56Z&?Tp_M5OeuM#2%!oV09@0K|;*A+Ugs+5__lXE=$&!vAB&Fnpwb^@!ygw`ECkyn{UhL=``XwR%SOcl(sb{_y0c7EZ1RiPl{SP;Imp znr+@-il2SJuErc(@FlUIUV2qmD)hY_A8agw3xfWtJpbR6GI;c?e^1_1A(?!B&BhHWF@d8=3-VB@%^G8S2mZC;!>BQx9oa;?VR@p1@~zyQ}yECLpX2 zYc2wn8&nEg*&%lrKGNvj2PgJ;5hFE@47IK`06N6*VsL7!i6d`2Z>TJOLG7bD# zjzb)(PG-1)dCK4Zgo-1E65hPeKm#lb;hd$=Wv=Zed` zsb!xm7+^$iu8(RRv2Hv&);vwz(h?UvnA>WSs;n6d`DA`*`D=(rPO=QgyVRY_`Tmsb zhnToLhA|+3C)L)+)R!;*-e7>}fs}J$sr|U(f*>MY!m#=NqAa*F`#Ns7>a&aUiS8#A zTF-QiDz-^!{OVp(hOZ))49WEh2@$dyZS{wxQHYIHgA`uya_H(rFfzxQ#sDgPU)8YT zV=(NaPo_>^>-gEXN2k`$3i(%c4$mCB+;$m*!g@&W^SZbFp>1A{^(b8pfGyK+&l`X) z@v7QD^xBY%lH%z}d1?2+bq!P)1)Z@3H}0ih9DM50jd3;xU)hgBh=3J}zqi&sTc96& zb2GMZ_4t$BY8h%4#Xdt^pIgXz1)E?b!fr%;1$g>5cv*U2S2-oS>ZgjQNarjSyi-sY#U1Q;Td=vA`-7c?=uSpuZktKIi(d;=yXl8s-Br$=SZfU2YP*aiufCw>8+zvGX3H9dF z7A0AzSGeB`8Qu7Xn53u~(d^^P^j|(={b^RVTL+Kjw439MlH^?km*#o77m%j`pBg)z zLUJZ68JnE3=S(PHp5)NU1Sh5-U+b-qEtqnIWUBBGXl-x{lAuMl?u{8Ts&~-?HR}c^ zHf^zVE_bu&+`LJcNLvqc%f0*E4V?#a#2vHD+QN@Bc$hFQJ@i9`S7WauBAp5i>hI zjj1VFPoB)|Y(duIPp1%G6kd~Z*ZW{9e=h(kyyn*)3taID|4w9qHK8r~0`=>{E zE=!;^G><Wc>{MxaML%*l?%^c57F5yEd;wbr#20^Q0n=vRg|lsPPpxml2MArM8wRsNqis z)SK1}CF@PQfqfBOH?^(%S2+=U_7^pvL`1?u`kVqWekU8Tla|u`SD2h^Pfz}=nC`qF36i#iIfHCydo6R* zHOLQhTh`(D;{{Yp)$d;@Kte};Emwl2%kP9GaYSD!8-Vj1Nv71 z)3NZ+km<~9rwzhSefFbVBj@upSyJDkh%VB6-%pbG56Rzbg~On5%ui`Z3R^YrK2~Z8W*YJ`OnH+M>7knqbiDX2vFuYz-K!R< zCBGvDKZjV_?qM{&bo1JzKBcPyaQ>^wC`NL!gFBO*&DaPM?YwDRSTGl8BqVQ-`D?tB zsc?nT_~&DRTI+Fh(z|!aF^lH`L7L6xOkzQ`8wF;b@iDmyVs30rLE~rh+A682*KhoQTKWUB$AxRaiM{#5_ z#qaGG9p}xmUHwO9>KmiqL!O<(SQPW+!R>JI5f>Cbn`3eI_uO1VtoRpFD431UhMmCT5E*T=UTi-eR0FW6P+ZM_)TvM)-)O&S(-@if?jLNYV%J{ zo?-1CB18Dk?npz;pW3nDl|KJ$S2f3HNA=Eu2H;Bf`jKgKR)W2+N@myPI9{lHcK z{iVFsv1nA2u``&tpjj-ytkIn&c}>!$Oh11TA{=lRXf~wGs?Mzq_dG^)Xvg8*jENlP@TaDhKv@ z!%hFvqL9$*>Z?=2NB1E|)wA}Fn8SY%YS)3KYG;~)R84kCMevH$-PH-!lbGvf$(Yrl zurXExS?(f|Vb%9@L+hbj%Nwzm#oy#Otg?f7dmNY;?m{G#5^1A3#XpfwBEf~il$%g z2l578Mkyu!oaC>=O6fPCqfY6r*W*a$Ew4-T5IaM|WteE1_6A*`-l1fgH7mBVZwIqg zs}6sh!iX`|?asaf37{Zy08vSdnM0WQN3~}6iZeZVkSNH(s>)0;{B8QTDCtP*yPcTV z*36SzJBq+H70B*$Esjp+$j~aUN$ITNU%c-9k0n~xiVRtyDj3$#_>o0oE%FW3 z^_H|3vV%VqZZ+NlJ5MAo(7N^(Wm4{GfJ5A<%UQ#kowUXmu-xU|Q4(E-rSaQW>S52^ zG*;(Ys(F4TI))%hKLO#G2p`8BauX@6na|@Nr=<05GRqr6x+v)xa%Q-cx~j@Zg7YS1 zkipQ*Kn!R7^rWX-1rc;T@`MxhPx|FORStE8GR|~UI2kHIlh^;6d4%E+cyB{*y0TAZ zMsG8I^kX$J4Y#*QWNg2PoJ-e82rCtbqEVk=OM6fsUTW)3mfaW4KZ|)o(d8Nzz%`*u zxKCmyH_J8oQ#A*6PB`|l3eGiQk%*NGXN+Q+EoiclMRum_&B#de*2^6IzT}4mS=Q^a zGpN&Om^F2Bel1V(p$b<+5pyF4HT>DfF&oWeXbs(+c;vX6GaQxxrRgBv6kDD@Qu$!v zEdJ8qhKJnzniW&h<#I(dfCZWo(!x0u0%_&pEcpcTqXax~EmGGT zABi!Y^!zwPc=Dx<9kn?Y9MMdD>|%`d8V8rcY0oTSn#R>A*zKs#?NY-VaJW=hgO>fV zLd5U!CpLr}c#@lj)=KBQSLbvS$gGIN6E!_0mUY1>LxEYuUb>B{TY3KGKo$K|Bu@_K znz5JQN=1IF^oztzY)+X|%6Pf*TdfLGqk#?MBblSVdRn(Q%kD8F)`ks7T1i=|A`!b9Rv$XHyEi zkI{!6gCXq}VcK*4_Oyq5!?0ndqkTu=>U-?PgyYM6y{IX0Z3K1dqvMe0i&1@Ai zratca0V2a3E02!U2BYy*(0;d2*?~)Mk80XId7D6xGy2U1x+s?^^`9H4c*DN+llY5( ziT-pA_w@LDx*>xWYoOGo%6iOQspX(^vu+$JEmK2^{2I~6+&Rk-gM~0I@s@{$DTEW4 z4(va|dL`i;WwHlF(@eeM2Fo3pFvRyqCBc(Fep~7_ zX8t*ZtLdVh2Ski5s>n;a_gtse8HsmT5~Jc>uG&uYE^!@5t$3nAOSMtUc%& zrD^s>cYC%~tJ~GN8f&J)>V+%%SO?;($L0QpcY*qeO75B+9TeVMmS`zwuui7_b{75z>}DLy!t1mml1qFhU(_Q3gzW7gCq{DeJf*qj4_6Dh(LJZE z!%|^|^Sti-TBxTYH2rL~+z4J3#m(Sz&+o8zXa-ja2S$T9jMr4*-fj}D8#2%f7Mvsn z0q!Y+B)C0GmY-z2>0fm`{Fdy6d_n{VA5IrqXx@uxv5>Gw0w&Cgy6}2U>ac##?lz=f z)*#H2z6r*a6jQlaH?yL*7>W%fJMo|!E!earx%*paBlvp&GBE+z%u;X&Ko^D z-5;3?<6moFsUQ0fnV*p;xkL6`sC_BgJ?hG_$zq#YW3^{Xtqs0yXw)OE6io0uWk~r$ z{3{p)%jAv5On%3mh5RywIRw57l36WFjn;L;X51!STfxIt3q!$3Gg(6k^1Dp`n7e?_ zu>yWb&ku?lklY4ByybdPO(G!n<%y?i;sS0+8lrMsY4e-*T8fHLRrLQb>Q^h;2no3q zx#?kH(Q}9z8hLy>i0B>|xTYf9Az-(>tk0I}Sxu(&l>Fp?3*OHgJQ(?_;QVhwQq4b> zV*l+eD8_#=Oa5ma+5S&Af&NQIZuCs_^#86To#7H13QKV5C{j?;(JRQuw|s7o1gd%i z$+4W6p8!qDZAlE9)D&C`)f1rPQk_9cv_6}|x73{B8J)OxnFvZO3>a&2K8EDgpD7VV zJ&wJ$0d<_wnF@=2Wn(HFvncR>1JTx<)tc0)!RVph{B0y!kg#;()q>2X8gipDXvDJI zD5kxYwzFIkWmVVKTPC|f5L6kvFHZ62N8TTt+sZP)C2qN9rOnWLi*yX_i4CJm@fFB~< zix|3df$=r(2WHM@c@#9s3J{Win=5#XgWziDkvCdG>74?>p^~Ci&v}TrxNqHk0hCJ z`a?o^{S0FMV|#aRyc)}}t7P_gxG(&3AFxDQ@$}wRT0W()@IYav6Qn3} zb6|=4GePmgGb-svF_9xRL0}pZq-O#0u)ny=WBc6@Pc&;+lPh0X>iQrGZ20 z(8sx0j}#_gle(T3FX6Gg?@pL7cZ#sKkdv9--IV~3LE`KqHi-Db9(*oS$4}fR8KvNS zr8=%$ejfAut604GW*g9;4VcM%iA2`KkASk;K}3mkN#N}!>IZ|=xd2Xfmi+EU9e*`z zoPkFwA9Fj4mH{n5bY4h3qSo6nYa-#rw+!F4Q?5yK-UN4CsP$`ypk8_AoV1ivEX^_( z8G<0DP*CIw2Buuni2C>onziG#r@l_({oyc9 zzg4B07AU^c#2Hw7aJL6G0)V4lV#m+r-sO{=kG{{?yI=4S2hKr?K=;B?NaF`vl%Wq5 zoTELGs^K74lZ(ABv(mq|E@_sL6Og;@N>qd4{;b;v)lP)+2|o$+e20sTL)rn_=a2bR z2R|iifUYCD4vG|~g$$zxi$bc-c zH(2Yd)OcOj6r7A+K`<+_q0UwBMbBDfCA`Uqq?YcKi8lHDt-#A62+9QZ@=JCv$-?dzr$H=rhgpR4mN0RG;1u;vhqp&%wgGdY3dSM6{ zi|+mhyjtZkKvtJqka(aYTd6-j6%CcBNA}n;y?z%=K)lk7BB`)R#ff$x4&{)3`s2z2 z2Y$5g=>0h*l!v?*aX_2&XEV(PcNiB|U=@o6LtIYQitKxlqQGAqk4*m+iR{0v&oI#a zt#qLO>(T*3K;DvL7A*If=3oVcxtx~z)!12s`);AXxZFt6iFd9^R*MJ)x%Q(I-0sX; zQr-QBM!tGctw=tTdVnF@*GQKjhv-WW?R3QrF#gp>iiYs|RNEUHL5Nj33xbMe68PJa zG*SzGm0onnm%_@=Di6LWN&c-}K4W;33@*w_S_h#B|kp4QSfeI2aYvRnrKdoZH{4nmUQkM4cD&#qB-YPLxHYo12Rda_K6X({ zmLQ3%I+H$i6fDBTaT#d$`H>3eZHIzD@jo_}g1z}9qRrztd_5l4vy^J68#l0-Sa1}0 z7!oslujW*y4)Cd7sBGvf;%w=}QP57>nacCnmt43youIBGu&1YEZJo$KHh|79}5thfrL;*{+0^#v!kxox3L zVwXS)gSJ+jzKJ8m@5OKv%NXr3QFJbpa-zh>{(^h<4x4b`!%x51gczA3aj6N*P(G^g zJfn=MG0+65LmO&(Q(GVs4hQp4G-|&G=L@K&1THk!J?wqdO-eFRvr-cEc#(QKeHQBd zV;79()XJlO(id{HJ&O4V83+a5##HHj`hxT$*TFDcjrnw3o1_+o5=a^~7QIttPd5_Z2$0WG;15>*SWpLm$~*00*+tVELTN$JC~P%J%ffd{a7 zProSx8*%fZ*xZSXc6`F+VlS)B z{!yUekI8!O9h%CitNFeV-l#%lhMm81hkXjw>mRQm9<0J}7urITNeU*^3_>9PF%jfu zSydQmkFYSWyPj*eyB1Q+?IFRP9hK9n1jA`+i>>+1gp3 zYV0Kl3buEhbH*%_^HsDjCNAqS6rl-`GKaSJ4fioAD6%~5<{jWSkq#XNvR$6DWF+Fq zcjWj~_U-w@u(5A9s*R*a=e{(x^(sU2cY_;O@)N6rVHxaELw?4*G&2y#+pKv}bH~+p zC~!#PUT8oH$la_xh-{DSdP)oi-<=G8NDuiz*f;Wmyt)dQsWIyrpK>Nv$z(4;9+!M( zT^*Uw2st&P@s;%);Wh#Qz6;a_*_*vcdsmz)uAvN|r3>>?oKk(YzP4CYa-aJhiBH@PG=JtS&%a09V2>#e86vkdM{Z>7VU)1 zutVsqali~`0v#A@G1Yk#?v{9CYl&Q5Bdf~w1I4o{D*4DP|9JpVTuwzjkYJ}3!`#pD z4n!`)@$UoddK+t+H_iR$Bs1kLtcv4ra=ypn`($?I<8LbWW{wzp1Yo zM)w%>wBMg$Mi!l3*PA)x`uH?hui43ccHh~F|ewEx!&GFKTxQDMi}4nTnXtp@^C3W{y*%! z^OGgqnkAgJZCfX8+nJTNZQC{~ZQHh4S!vrwRoa;9d;8A3G4b}y^!Lp#9Wm!GIA@<7 z&)Tt`g(KvpII2*`prEgtK${ zw?Iy&Ry*cMKJ)o-u}Uiw8+L|ANK{|+1R#b3Lgwf7V?Sx{>;t5&I9Ft`8S>Swx|?Ja zmIwwaiT-hVxqvQb0Qnf(6p8r++;-P2axv*EOa?|)FDe!a9w{c(M|wCE-idN=s54e+C&~c96A8`S zTeK;jvm8=5;i9^Jx&03k*%IXlW>zF^fRvY4AtQ`83!0D9ktVmEX?R)#0r6_1=H(mX$Q78LB(tp zm9K(BGb)zq7{0?4?^+Ufx2q@@Tc?HaI-l*&E~=U~3oVrDckTn&e@uu`uFp)rLTj7Z{^!ND6V3n zso9HXyVkesOeiz+bJ5ia61yvR1&eHO!!AJ^gH}=M35vbHct(fr;}cufnrzJyBre|_ z^XVD}khjDZ2PynjN1gQYTBMV)oQY=(`iD!`Xqfeye%J%~Y;QH1=ZZ6W83Id7K4tO8 zP_Q9gzlxNDq`HC@r%~|HlOO$XIB(p@>&~ipiTdj9@mbn+TLQSbG=1nob+mP7=GGaAK{@x=?%Hs7Yu4U*87mCw)<|Hr}$Q~faoso z*Ia9xgS~0Caaruh;!JR;3En6nj(?zFGPlv2d=NdN&#rg8U_PC6gIfq5;;=>aRu(fm zimO>B!*{94+f=he?>%fkhd_8%FQzIl^%I=aqN7YZk^zTi+Ge^kUJ?uD9u~+6TGVIB z{H1pHX}xoyLN`r0JaQej?zWY}V-c=?LxsF8@skj8J{Aj7DC_=WfBdv_bHU_6>d`ra zS70n};DBCTDOr)yw4Evnm7~LCDPFGRI_P1F&U2Zq24O^-9+| zw>j6W6xpbZdH{PE8@LEtXYZ8S574=$PaGAz{AE+NF?1!c3QO6=3QHWI4e)n)tXpvX!N9H(ySsxOeJ2Zs9ejW~o&v#(c{j@&_3yH(5qYNbA)`{nJv zw8-&Vujulfu{yRkxc$!ia4jf0tRFysz5vEcb9_Z&fekqe>Rw&+OhhnS4qF=7=fvEEhg3ll7GY_x{ zw=8ge>V}emKYlesWH1|Wd~#^AsrNk601{~se65M)UDv%Ub_}U8(tRfzV$)t&zv>8Z>+k+P8UC37YugE`DqAKa(Lky z!@i{(M|HV(uVl0dgACpEE)7ht4+*^N=$-rRYgimI8H0=6jK7ox zBlBfCr{{QwdxGe>2V6L6$xv+(BWA`UEfHfOel3NX zz5yFpeiruwtIXa!%my7WC3COvu6Xc18biug;3Dwc4rehvjU=idjCx~78Inec3X}n~ zlH{*&Q;cuDNX0FMMnrhSpl2O3UJY_w0~;?fSY=I3ov)N-0Q4MFK=%AWA!&4o zpR_nnW6rb=h;Lfds;RqQcY^_N@gmu&3o=035>qcxLRzDIV=~he{ZW3A=J2kYi3#2C z>A7>M^ZR%MbFx;O9t56bTQO5u$td}`5f=@tRw~5|)24{a2q;j(*}KOAnTh2q;Pg}! zDXl`2uQLQGlz)cEms771YR!;vJ>9?n1d^kAJceO)81tV9H|G_=BBL~I5-5fnbY1m#v_Xpp z%=Wh)Q;rNOtdH%RtYko;f{>9+a02KX!Xo3-hdrH=U7hph`r{P^|Ju)+S|$?FJdUF?inQl%t94l-#ztxOpexui#mRm&~VpTwR>K{PbpmR;dx)^mlii8jF?;IIq)t#ef=){yW~{|C>LJ z^}n`1?eBPt|375K|Cv>diIMYvkQLdkFTVsck9FS3W}w!dAM>|bo|uJUDs_J~bj2N# zJ$UsF?A!dh^X$b%WRv?yH^hJJ`suv2^b$X|aETMb4owz*l@>~^OtX&I8I6BH#nu>R z1a`zwxaQ0B^AnfJ0frLGBFR&;ZtB~QpwZ)EH+}z(b>U)nr1?i_{mB7I7m-DhW(&E# z?QlouoQUxt%(i$uw8z>%>A09{7cUMkvvUv}&#rfi>Nv{qr#LgiLO#$t;Y(n4{i#KClcM0SLgwSg)5}371 z#sWje7|kRJ%!8l$%{()K1rA7eR|^Fp^sZN4&!1d_a$RSGlg5v_ zAU0Kce%GN%FA}`(4_e??3-Hp!fGBu7?WYaas>OIU(zZSHD5Fg)QUtx}18L^A4A6P*!*dj-|^x zY1*66?Sq6Buw@&#$5LLR{<}#@F74?j+cTA!L@o^V;nv_T4Q#rAPKi<0+1_kuo|MA1 zcHGtg>(m(8JwY8dP9WK>N$y|BRc=2Ul|r!C=!_$qg;Ez7Ohvz+uEaHd>iU6rl^3;p z1tyy}ia%nk>b)4lt4jDhO(1cBP6fxqZ0hCGdv74 z$TMA%e(n+aJrbuY8-;h4h-_qcQN-vthik*Zls^I!dbVCD1}z-S#R- z0DjU`(w4_|ss=$ep0okhENRW-se`ivy0I${4tvyR>2z8E&!MCDGg$5-V%q~;vU?ezPeP;|mXnwF;{JKwTl?}7w* zAJ=y&GuaPPja{4(y>itrnR)B`E6ZVsFExG?8D?nFqAG*HwgpCbXyf5|qw=bX)h%T@ zdeZ)|*kkVGB5z7sf)URZT$ut)H@iV)C4^yC{zRatKFwGce;U-B9Rorf`T26(NGfxc*%MdG!c>KMfo2?HSl zU+_^NxNt(T{T_e!M)hnL>#yP(5GqKT!yZEll1J%#G6J?s??|{G&VT+x1k_QuP=SkQ zoVW2k;y_Sm+;iB7EB&n!@x#5fye-nl{%aklx@I$1^ZZv(=boBAqXvl2G%v+yrDO{yHe+w(j-aRN)*pFYH?+Krg z(pS|VVbG|>66KwpWwP6X6*yT87UM%>Gu_$}k*HFXwYcH6Bt~@xVL#ABShk4iD=_z+ zE6*l^aS#^$x^(USu$rj6n02C_q_fjajZ(Pp>R4$vtF(=&9F`5 zP!0DCqF)3iIxm+~D^GDbEdY}S-iEHkbZ(h-ciF03cp4+JMR-lH$7zVm&;@}V{ESP9?~AZB0W0@Mw=C2T5Gz~5#JDcyGA zQ~BDvu!Qlv?W`UV*Uu(|#%En=J@JqG`v|WRiurKDbrCiy331hgN|##6-4jtjEq&#b zJEiZ`x#(ji5Hjomj3Q5m9eoBj_^GSf-!-lbygb~ncW zj4vcPfu#b;(wU4R`F2~>umn*&oZ(-u?|E}AT;Sn5{*xvPKa&wC{Jg{u4O^tp5d_OH7PJ%q;)5Zc_q?|0N2Ig@~EypRZE!{~PfG|2Ucd?E>o0 z7x~MZt|AUyjkjx)sLeJvOlAUg#XD@vdeKK)O0F*6$Ythz;YL{Fk};H0@i?~%dAbe- zMdXZpIL`SNq)G&tPN}WF57@dvAVkyrwvr;W%RExpG%1C=xH`)oIcMc4v%`+qnql|| zM$n9zuzDpl>Op<0NvLj@Eqd|8h$Zh$0OjfwrdK)_lZ!@fk-!D_iW3ONH?%NyKvw)@ zwGk%mmWMV^MNtNP8QXYVQ|OiwF(leY^(^$E+`B3b3sy7w<-~f&u5_;^ zJGR%H{Q0)#Hvjfg!Cl-+xw0QdKbEJz^o6E(_hO`dUhM7O1^M@Vr?@tCKbCmCfvhTD zP9o`|WbLPStIbqA?&sdey0yqiim7#V30M6SB=$0pL6#{2{t(U}idZGsuwo}CF$ zvyB>t7`WT#J6kaYFp{-gaPkz&_X8lcD}0xA)cHjnBCtH%i9IIDiTQ+_O*Lsm@wiTUJ}Mtu||&$U%QN!^WuF_J-G;=TPTZw2{7$_(ao4Jjg(bY;SWsvPMC{k zvSW|~7qfOup7ba=sUh38NdKV8wO`+piKo3IEhGri8;F93F=_h1MTWS5@DS4PTCNjq z>za(?q!Rhl+Q>c4c3=+Jg6_s@6!1g6+6nJN0P6KZXBkr6aZY-;y)Rm0i#_=Qy(ohcIGw-$4UkY<83c!{r{4L9T zWJw#%MHHoe`CLrQEwQ5XssoF_1E}$$?>w+`UEy$GL#(}RSP-0R5qi*JiVJ^4I?grS zu;8q79my5?)^^0`@!ewO=KOQ_T=5D{ZcNZ87!{Vg<*_QVA>~=D*h3%U@@@p0Nm^MJ zM1%k(`q-%79_6zdmTnYK5gC-NHqzjBF6$udwb^N)pzzw3yAtv|ItL1<`f+kNfIFkbs1gix@VqGTie3 zZx&e@+Qk$1EK|nDfy3fvw{mp|v69J*1LwE7A7FZdi+uppu3Iv*%rW&1aT{I+fj24M zt-jcgU}HqT{#^UVPfUS&XSO2??F}J?kj-Lb>*!bM zL{-#>oBp%@`SuU@!%xu-jC|oYL#x(qyKL5nsb8IsJ%9EToC6EnFaCUh|W20*>{%uD9Cy=?>wWU z(bho@NKF=CGF(71cf>?Y-3pg#DvEkikgHe$+$^ZGsb5IjerZqKW8rF2_0$p3!zJtf z679We=nS%J59h_v3tZL){qGS^71Z%jbD9H1Q@JKy>V7wDT| zX^Qnt156y_WV10kS5x>o9O&Tv2GXLni85Epe`iE#q-bY-HFNjd-$xf(wu9d4`k89LNi=AlxKjg#)H!%~JzkAAr%6ealVWo!o%vOWkQ zga1Qh!B5U%9en)+)YRkJ5$$vIjbjyD4V+5AY9}6vy<;O!zQH4(rwHqIR-5bDxKnq zyPs`kl_+7%bVKX(!Ed5w!jwmt*cAuyvH(3pXMi*OFURa1etE!y$D2a$>xi6%Pc4|A zX+MgnWh(h<3T#Ll(rOM-cjB*~Nc*?vN{x4EcL)04CbCHzZ-%JQ+{omLWpHd11E9W+ zDJaL2g=`){ezQ_;b({@f!F@(r28dh)P|HX-Ls zFN-$x(ntC-wJZFgcqiNJE&P|uVdp^J`(%D?)%SL$DM=>ICF;P{7B zNcTVEw`cuFm&JeCOuzrz?Bieb>;H?E3C6#^R5|V|@s~Dp`_cph;HxFs6lN zUtH#ns~$I5aBf|B z2yQ&bLWUzPBVw7Gxs9<`%NAsfe2-KiivfVm~CRk{JIv~N;hZ@yUcL? zYLFo^@eS$&5%gTTA0!uu^~PfmELt|X$Gsh2MNEg)3<9>4jG_Z zHe7pF=t2ig~jUez|@&s^IK(&-}x~uF@ytxDR ztWh`L9(H<)ujMw`U`{i>xs2VqE@2QvH^3c?C8dk10>J4%fVoAYRg4me^%Xqwh1B`+ z*|iEUplF>FN|0={*cNnrh*E@SCvX&DgR_N?V4zoR2QW< zd%heJp6WSn6DcK?y*Y3_K(61fFbvZ=h$l$c)lU0JMTT9jnDp!7I9rw3PC=`iaso&i6I^o8HRO8viD3uK9j(ah%nq)k&jhfD^MO@^Tkdtc~)Ib4N0x zP(%V9O?|M0N>4TS^d~y-i%VkH=d}ARJDKlEsDWYOOvl|KE#r3Jh6DVSXl&i=dJi0$ zvnyx%UpKzN4!^Ze!XEC3I{Sut7CEb&_u}htKgt0;-u5f2Gm$Yt6*r)Gh}qG)ml}Q{6@KF&)^4ykvw0`2A&@m_|cG4tuH7+&~qfza}C?uZRZ2&+6|8Y zNGhwa${kzU`?h^{BW&0cqraa_0I#E($>R)x{@O!f@Eb8~^sN*TXIElt4UUTIN(Lcl zG`i;`G>$Kd*ihZC{hn2uB=xe+GS7FZ?as+;M(N@rowAs zrCOY%$#Q#3x9FC_X|4ni*1TBFK@(zwj-{&#(FMQ>WdGm%e73&`oc}v0{R3hCQ=r85 zPfFtd`G5YQhyKTD{BP+KCdR*pz_1Ww4cA2AT{vobmdU`0{5X1%UZE>r$1S(XP`5h* z%Hx%K7$0UzIp7!h)d)zt1IU^~eIb*Ua_Z;z(>Fdy#)N2;J+Tu37xSkSBrqsr_Cn#t zraA<6<_7^`TA@KlJmih;@N~~}+o?debZr{?i-mkYY3HQ=2>6O*mG1W)VNbl~)XYo` z>4(p4QNZKNGbL4q(&~yi?-2Gr>$@c_{d&^$KKR^2G=`NcCsAFAM!WjK6*9EoT=h~< zcLAL$IbMT|T=&aWgr$Dz0cGF~4!TLO=kTWrydbF{?r^S941Sl zwYSBR_CA#eqTO(^t^BfAt0evbZc-M0!%MJK-(M6_@gj6$G*) zwVTspj;8<2?_*-~D;NrVN*|=3nN&7G+jKeUgLR;Fo^`SP*(`}$ zc(MF>WAok$p`t~~nm&K)s*g*Cz^qe8eun+9^vc%UTY9mu7Ml1p_XEtd%vsUF^b~nE zzt^HaLRZa-;q7|M=gBdKwcPo-o>A|!#VDC%lKGG3p_@H0RLI?PnrH*zw?Jw4&ffKl zR_#a@QacyD*Il`uB1Td)RuA4>}6;K`VDRcjuSAv z%+sF!eP>I3W%}LAxQEjra{_8V8g!z(p%ots5teU9nALVGmsi1o$n=ux7E;UtE|skT;(hF)T;00V(7 zr5G+WfktEVw5&P3PKT`8*QNp_8;`GmYn#Sot#t|Vd`X#(EAp@+ z;~hXcu1EFSSXHH|R3JFoJVIBdRVusWRW5 zkj@_5%=W&eb8o%_rIH*nrn6NTs#teV5hhPpltVXFOE~+?ze>v`7jH4JR$bf}~45 z{$NrTf?bX?OUDVQ@4@*FcH99<9@ETk>yv|Am_OCUbJ?Tm;h?pKnT?#~j(hA*vgMdzvhxPNQWF*M6^6yDMazO}fa4?&~!Po++26DrK(f{|+8V@HT*rDmcuo?^aQk zYX;v6u-7q+&ucR@1)}B3c{a3iy!R0_ZLc3Zo;)MsJwTxxb@{uq_=`m2UqvSz|1_Ka zCzyV=|EJh6<>&vGUFRRC@gLu>e-)iDa{eU~eaDgWRQnaX5nf)4WyT=^x(ME}C#X5E zbB9<#QC{dh6rf|-$*NJfgYDGs;i-_;xh3gfbiQ@dZ~hvaKRuQ{zO99P=I?8^)}H#T z^75@pCu+t3*)F1mhqpH=C@IQ}>6DZtgG+PevsT1I^X@9Wk!ZOvj@R$^?@W98Z^Ah zjct3zp-j0!30B#)SP6>8b;@~MREJN#r02FNULmF;5zA9zXU`ua2qvLbae!lA(^WTy z;aMqMqag;PF8=C4Q;{ykclm1`C>RH92E);ErgbJ8;R27Q<<%U&8CMXW1I;t63`_HI77^^>3P>!*>5I(HXCMr#M`%AiE2teDNWJs%gC zOh;@9&&U;hrqi3kTeSJqY=rJI?FPG$z}{@b{^vuP+9C6Z@@FROF^$4RTpL}lj+{aX z9|~-rT7PK-vec-N@)+qGan#&H+E7Banuyy=&o@!z@<7%7wvJ++vy-X=b_m(L(66(^ ze%vhlmB8dHMj$gB+k5$RgdG1@wKzmR&$e*#f?;%dz59S^6lnZPDQ8?}cLr@$rgLzL zK#n|Fu-A3gDKEEiER4<8l_42>@~1fP&k?mrL$c6OFQ_bfl_ait*bA}iDF9|^2$k|D z)$2(+d#{+h!A7b@QYeMWok_9u!}5gnunvx<{8t!CdvnB0SW$~4^a=+bSl-#t_VY*V zUA!>sDgR5Y(d42YViRtQap>bzB~h8K;UAm?9iJ0b>6kbp7ZqY96;6!9Gr>&mq3A~4 zvPBfzwovZ+Fq4z%CIlBZl6q+BzRH>INe3iTw2)uco|l|p`DIm>35d}sh-cqqpS z0YRaQl}^Q|x4ZWmeoh%BR(R^)4fVh5YyXC{`6s}!vHYuegqf4&55jT$y{$5C&{gpc zxJpsrMxVEKoCp1FvQCi>zB%(?kg^)gD0cc*awY6bJxglO(ClOS^J-NFoA|gOp(J@| z&ZIT04+B9zbXIrOE3BGog+u~f%TG%`&Rjr0D`jXp|7M)U1#ow zbZ0W1pW`8H0`F)1t!S-l#Ew{^GE;_{1Q1-Kv$n>f*NhkR$XX3haCFo$&UL`lkYwN%s6k+E?kJhBj_ytFt&2fy_iBRROYHo-%s01` zA*8S0c?fO#yTTh^vY!xB9{@i=jm`SaY8nx#Z@C)Hjz0JTuZ7D#M%!W-9)&w!A-u-F z9#-qr>4ol-=zYV%xq>GB^IBC}ROy`ICY8ElP;bV<+{?&qeMcbv-|$R$f8%LE;PX*yK%K!aJY2b*W9b<=Et(PJ{-#Q#w{-f9Kraa0@aV!v zI=+6Q^B(bj`PjV;ewUrFz0^XMQ^$w-p9pq%A4QLL{1VGQ>Q)V#^famtcZI@t3(P$_ z7slvmvHV|%&I20z*ml5lSlvx}{>vUteR9wD2LM<-YZuI9J19 z8vToyR`Pr=R?`mO(oXkr!*=GphbEWl)pRoSWLs|`x1tnGLR3Yrm98ZFd@cyQvtVZo z$SrUH=WAK9EpI38U0^)ZZ1K$Q8I6iGjC)0;4vY#-uJ-DPRD8XoXS9#SJk*j4%b>?z zbfwXv^wZT#WNqM2YiFP-R2zivw*5;d@;VYwhn^4tQlU{J(<`6TknIz4KIlSbk+oM{ zVNh7B3uW2rC(wAsL(*Y&Q0dJo|zT%nB<-jsNHOfTz8+8Ek@fo9v zd4(YmiJD*0uE9t1EF@+ruf1-l^A3@A7!zC^*?ftvu~xrG?ZA)*`4uqd-(Bt}rF-h8 zWQhWSH>xtQ@NB;3<2+0C$xTFKgGp`##uoY=eS&)tkI$Kir2IyZ_2A6X=Dfu>!jc1# ztL14GcyS12QAUw55<)R>SR0#eWYC3RQsT^(w`OT&n@$P5a+N{ICJuPP4*6d-EqW@&7yBq0p=_t_>Yq9ST)Y;R%;kTkV4w{Rh1XJY*q zO0)lgX;y%;tC5SRgDF7D_RpOB=fwQ?xe8FXG;y&YVq#?F`X55@;$k=E;28zJsk*dF zTqU8(8@$j?)0j7}e2L4vAtq81w(R9|bVZ>k>t)OdrfUTuXsr=0H3DPKyO`En$FDr# zbp20}q>^h^)wf$?mM98BH~wB-iR;W24rmt~`(T1;8q|{r5&xbiMRAW9FWS8Y9F^v= zLj}<2{%_HSMT4x`fE#4VR`Wzm(1O&0@pJ>$sbpJv)^@2bhs@N#!nmlqPcPW@Y=;Nx zIl8@yOxuF6JS7m7G| z+xWxOq!_5RG>t~VB9}F_AMl=>!h=OET+h5d8Hr44aO}Z$(gL24P?ft_F;;bbT=}UL z{J_%ag%G~GvrB|M##=bTJmX@BdbAzdxMp2$NH|EK>(h=!i~>z5ig<6wzwp|q7+vxi zvcInN15aN9;B>*?c}0&4OLhn_O*{Tv_16Qu$UpTj3^zVxQeQ>V?yNpiMn9`j6}N&X z&a20wK_G@EUA&P7AdJM74YXKyx>-j?NOTx(R&om7InTyD>|?H8NK-8L#xEF$LzEwxUG1DJf8X7$LEU#%374)|c({XW4i}u?oe+ z29}ry1`UK`apm6UKLmvltz?Z4p76$H!EF#^XdfbeW41U(UgmDW<{YQq(u?W)c^W+C z$v2yS-miEO9g||SaBb(h^e9!7CY#MPPP|w{1jvZv>uh>%l98?6DR|r%<4~Hb)@mvb zd{-lW|HydEFN-AK#UP`iFdCowpa*7Uy64?cc?j{H=BQfLLZ_LSjbZwKRu72PWP2&!8|UUG$#5_20lf> zQ?9eMjjg34p~y`Cf=Vm+t&C9l>uPj!nf6y4copJ0MPVW&K~)M{szN7J6`v^l$6}4E zQW;bzzk#>;lJ@T(UrV5_gy>ojOphMEwN1@f&2;z^{Ag{7-k=}SCnwkV1uwQB{{9-w zW(A*&MIw#%GtB-}bK>Dj(X^kA*ObNE4Xe!N(w$=1|fenpH5ol)*$Xvad0e6(Y0H#}1JA`@Qw;Ur0iTjkSl zq1nBXCL6Y17v;gr1=W=IWPp~34}8xg>%-?;V=YyPvjNk=?1yUmC<_Fzgc`EU8A6NX zS+7Mdw|uwx>^{8yY7+?MI0P@#V*ncj!IA12MyO+AgZbeef-dZVZ}>}DJO_4NTDJ8U zm|bfILZF}|QOoyJIuu`lr}YoM3+YLhwwBZDre!?B5OL>H-)iUy)?ZvD&pE|g2N#wZ z7R(Bg{6E_`N(1yqB2$$K*UKvGUw$}s=Fcl8b)dl3Okq5sYTj2X*r@~|$L?AH2_AHX zJlWC&7=jguATAL`b`^Rll!w^HcNVfJj>5uWQ(VT?SBQ}~xIlg0lr4RLCs2DGGh@}3 z==wNGigam)rX0A=z#mjYUS3hHfR%%fTpK*KGk+A-|^q_sfovk3I4flC)mvCsW)lw-ww?g?k_80kl{3C(az9u3W*(s)I?OUOqQX6Eq zh^u_#X4EA`>1*+}7iR(at+7tbyK&l=UEWLoZBw_lpo?%2fr2%aa(Z60peg09OG>+% zD7-p*uqh8q+;24s>-H)ki8=5@R_kH#mTln<@_p%;``yRGv~#P#ad<7dGlSEu*$cx; ziT}HRjrWdIS#S~d0!4`aYay^lPoA!l zv>RPR66adi+@Xxt^uZAWoc54=8@#n>7v8_J`v>{@# z!iX=HZZyYBzqQn90i#~(7e!gDEK!c0DlniG7_(t#ZY7*LE5e4_zGm#(>GD~ZOO27q zo}#avml|z}pAR=!8(yAPukQ%rbMy@kUPd0avX7UW59A?&^u@6Ncg<@qPuu1Vm^O65 z+olzgiFAHPqm{c3eu9bFer9(-R3seXM;KPb^{|_0?W%u$PdCzG%j}c&IaYsdLrw8%eQmsd)nY?D`T#7KxLVIvV2Y+ZbgN408stKeMupat-#7(9Ic3p* zXrhEkjn6}>JQ5?HDDy)~m+^xm=EEPm<-#K9>GeN%?LhRXp~XX7#{nfAZ)w;N{!XA5 zd{VRSia5hLDn~)P+&;z4Gg@4WEdd_cNx6t^srp&!g2umUReec&uy=HH%3O>UMC4HC zgmP6LyfZ3t&LSE#5gu?nIBbj7uaTySEK2<0E!s(ZrY!P*z*8s1kY!^9@jt91aOj!d z_)q%7+><|J+s8!;BHk8RT0c(Z%lgibP=Pl;(s*c6_kvR5)dK93!e~UzMoL5kH}?54 zyk`axFnsF*`e2S2k~O)*4lInaMl_99Colqkz5dM1w(@kW%knt5xseQnGcq{GSh~f= zM@DuyxwH)ViM*@YYP46rhlNpoIYmeY_}Z^gY3md#X=D;?`l-iCjh@GANwCDwnzdCo zg9}LY+_fzE{&8Va5y8aBjw?B*lR4hcIfTnY>YA7WB+vXZ)gt6`;76QjBsC3$nmPh5 z^K7?tDK+9WH-u4UK&n%D2UXqyj0oxk%4Mp#U9x0(+@5o1s>WaZi#RVp|A9BSXP+tv zNe)nQug)6}A?^3!g^H>fTd)b|;8nvS<1#rv5fG1dfXArT_`D{=taCLJUphSV$C;!p zp>T7bJc0BaEVnDOjLTS9aGT?R)Ul{80=Gr=k%Ej{;q#6xujh_G-w_I2!T@KCXNhv9 z3e$2o^Mp7E3Em006nhH(+o@DG7A>&mlY`Pn&Xv+kuLEAPZ;6O z&vOd75%!e0hz(w9=Lknu0I<^z6~U-^sj4HdakWlF`fUy1I&!+1?i*PEtU*#w?OKdv z&gu8hBt5h-SY;)_LO%6MFw(X^{fW0oNlIJK21ngyXR*~Qv6@$$iOQ%t`fLDha6Wy2?Jpim{impf(ONGIw7?!NPo^^lJ^A&Gq0*V@)A z3C#i0eE3$bxJlgm%kR_&pS;7H7j?FXM)|oZWC~UNXBfqARq65Njk2Xvc4tSYab9)W^X6u*fS|Iet?0 zI&yB(5dZ2&T{%gW4x#wa?;V&#L~;yCx<6|QBYzlqtQrZKa0r{8h3f{Z?V*C8iA~Ej z)s%0_udB;t{u>_4uorDqS6ybzgJYC13hiV8;8M}jbIIXn(g!xUuFuI(cEmLyps$&- zeq-$(?$tWv3l{iCJglDgzCHcx2A(rn@NSstzOH?rrQ0$bemx4O=5_wyztUB)*J_es z8A9D|LIo?JthML^s8WAV_B!`RekV>2BOGhrmfHt5DN*Zj34vQZUg`S02w*aYqRZKo zyD7q-`_0c8XK~jIRbXQ2Y#*!$t_|?V%d%dpw4r9$Y&p=(BgYJqaW!R~#w~F%=(LO! z0gcG}VxBUU>cxTnbh)JEG6m)w)EC!hEoJ`~s`>jr?NpyPeEr(&b*Lg4tu}!DF87$v(Po?D%-7dZaRc0%p61uaK%*VYH zAjTj`RD8Q1p|zN4Gm(5_fJ%mjMwruf83aW}YtPB2r;r6(0}NiW=8Wk1Y<`0CY-=0D zR^(T$00!^h4DUTEp>mv=Ti`+(fJ@PO@&FPHtj%-}U=Gf2P|WOG=><21Jk9$lDHu)P z8NMWy^Xa{!tDw+loN0RGS~T9Dtf>2TPXI?q%QmVJijIc7U-#lEZ9a~>PgZ>t+KC#H z*e0m1L;f_lYqK*k`&*|pGryF@K#!Hih>q;V}wOm`FzAWc|zn`5?3VsZQ!v&t`>AAoei9QLzT4g$A3D zv`gjNxzLUj);@)K5Y}`K1zTlp?af@+RR-z6lwPm8D0ZM0MtOcC+d+2{$El?6LE%&{ zLSPakcbA+VL&Z(oXX@gd)|+dFGc75p=-D2aRt28ostjRMG^dqB_o7#KF7Rw4y~KQPc-~$*Uhs9lZwVE(8Ug|26#)-_8~faGrHSA-HmfX` z07jpg8v`aaR;)cif}LI zkyI6&lMMXL1zY0`1=Ik9g&QN?q(P9RGY0gv7rp+TwXjKNrzG>*VyZ-AeE1Ns$3j4U z{$PtZyYnZ16n+*I$t!OZlV;YFgjmG;O-8pqPA{SSp%GWSjD?b*EEOL%WQhT(nWiF< zpt4Am{X!hLdSCctTv{wz7WK*LK(Gk&xy1G?J5wa<2%~06EF@3H5>2H?vbzqs`3S)b z-<_Fz!6gR;w)9CR(s2T-^kvR>?G%h}(du5XPdXh?txwBZBdcquAY) zbSBz3*vW;|Cua3on2)qq97sRM$BF*Kr9ov+ zEt>7U1#$|)eP=!F@kNnJw&^~|V~QM!K?_8oxKS7k&@{k zd$BIY{$`?9m;xg6p$T;8BJ84GFPr5gG?7V2D{_ppZ(hP#k%&4tYqd0i&b;Mz>L*?z z9R_w|3a;~@z5nWBX+KzdR_Lx<6z}HeJ)iV=*#yqo)@GG_N-b7ma#RZ19KJ_n#7WLAvm&=p!<|VqW;^n|%;?~24?!cU?hl`Z z-hR5eT=*X4hxv$5w-j7%0xgH;b4N#-bjarVlu+v&LaKEntsMT~GIGUSZW6u|ac^q9 zLs8v@#)4K~=Yg|Ab9842@r2}-5N3C<3%5ten&b+DuxVcV&nTa1j2;t-$x7wpZT(5K z2S4O*Y@J4Tg9FKm^u6iBhsDin!H^3d`+8`1*b~ME%C)~;s(ZhJU$3K_a$V*{CN%_j zSD$La78Ar4{i*9Ii6_T{t9`tnPXwJl!6eS)yf=D5uQzL9h0>O;T>mQQZLg~+yTdp? z8ofbz)tP&>IV9171*oRZ{|#&X?DIvkYVCLt8M_p-Iy8WYEHF+0mvRNfw6v`dSLW2` zB1Z`F@ov(Q3`_sq`7#yOu}${2i}yi@Mz5w3ZJ08MAD{Wu!qvjbxuC5(m7F{9X#$EW zb1Hf_eo&3lh3jb)=n%Pcm(>Wb+B2fBWa)J_EPPT}rsx5%R=jrn-lws>)r8u-pElU6 zvvC{sJS{Lmd;GZs#r?`5ImM{*fLtX~%s=(R znl!9@N9-v(JW7bU=Q0HB1`ylONjuH8Flxih$wVH~!h8|8d&nL%h~-t4x{_S!7=VI` z5tfpu8nQ#f-{Pc|U~!b&Jz3CwD(eh(7ZrVb#BDm|r0z;7?2*7eh$X93+ZNWJe+6_5 ze<7kCoO^9`mGeHbLOr6r-*QQ`b0-zDA52*o@r}wDPJmh0eGZ4m3fKDQ0Ag_YkspPB zth{r`NAIrjhjzVB)QjV1>p+bz}FsOLhZh;iD$2w29+;f zRCYqRD4CIy8`w;F=L!qx*`~<+QnK#SOhi`UsbB(*G8Hvd0xtT^wkCvL{S_RQo6F9U#AouF;KN2J8f5FX6A2Al zYd$cGRML1(w;79VRl!z~CE5P>=*1(MnaM>t2I)iZ2WywCql3~~ z3`7xS3RNtL_&G1ID4#pIqUxjdFhH@Lb(v(i!p!nGVOgnQqF-esRM1}up zlq2W1ST2P)q$^EssM|E<;o~L=QAUD(6kS*xfCy}}j^>H2ko_FFk9&oQE6;za=QW2w zZN;fppjI{KQ@G++)^*GZwb3JaBj(H&|F;g2v_#{3SKv#R3?dhnM`_IZQ2CXoHv##(?F5Pyn-w2 zz<;TjV^ZIa_E88sa08J$>}V_t>fkGiIN43in3I`@*Hn?VgCfls@5bt0J>^)g4szw+_O#Fr+Q7HGr3oyYuk+XIe;}?2WDX{sAIf0DmZ%mt25nBKOFdsy z4}xnBpQ0Nc+Unt~6=$9P$8DW#k|z0kY~$<}`TYQz6CGM?2#*a!RV=o`WKMVGVu z#>0#b8-@GU}XT0-IzEE9#ylNPrqh(BNSzKfEV(l~b)FFpHtxTa(9_DNZ`Dc5e zi)x_DZ7?1L%vtvf42HX$Eub~m&}8^?FlgGxBtL&POjuX1 z${XpF??#-rR5P5YiGlpSpCTj(dtQ}RiIH$we;5zt(X0#sI+K*`N?Fuyh%`ylcdw_c zQS#{LRR?j>V3rS}KOQFNp-rHw9M?!C?LBpxh?B$&H0@5z*8;`_%fLHHDv&8KuY>E( zGzY>ySbohWgpnh#d3Z{7%5Y3}=5pFRus*p&AlTo@l_u?-YT1bbLB*7&@!wL_=n z1A0we9VK898X0Bc5|JEF1D2%VOISZ7vRkD8)1{xDpQdC>jCLU(Pzv|1tShPX1(@hR z$rPF%i)knBSX?Ckg!?0n+d#1q&jmKDj@tIOA;glD&qfTpc zgD{ze+zxjRd;*fMxM>sgO%%PK0X`eBAhpwqoMPn%I?yWQoC?KVpmbW5W_-+EfkA z=EU1SVw$40D_yxXe{6PqQByM#f6Qve%I-k*pKmC52{1 zsUM#^kmp@E%VdGl=qB*rZx6>slobblY2pv`QAr?8`>sIuiw>*9oc#q-AM)ed1~Hd!9`unEpz7K# z@N>;~!(qiKQ)pp-Ad6GpbLZ{q%`9A`rA8#l+e@AEv52=r?U!iftozltY^gvk2|tuY zfKuO?XtoffWPqpb9ePs(VJx{YM1U|o6{it3HT9a8#qkn{jCNqP1P76utwSIV7a}ZV zbq@4~GS$E`4ewz?B$2?_=u<(r-SsdWWb6PO>U$nkprgmY!ivEodzRC{TY2_pew*WB z@<=>GrXzq90AMjU0S{uf0jICwk%DN>sIlS26 z6VS-}TY*KTVUX5ybgYoy*4)0Y+s0ntr*5_#=%;4yHYuwzm^mpXF>&FMG96ghsYUbc zLALORfTvgi!7_2JcgIt>u-Goo@KxL;Ysc1!TGAQk(`{|NN!TZR4>sVur{;^iPj4Rm zuhad3LqStha?xo1Lc(LaHIzqMTb6~F5n<+&CsF&v zOCy+@Wyk!$@qy1DYS21MNLb=RwYZc<(ZSB8_T25Aa7*+)0-1Jppn`7oCYK$SSlD#H z_S(tcE=1;7pO;zib~FvhrD==?_7H}q+nW#+=|(=g$m=^}Q#<>of@kFT60Y9~npoz; zoW_FeH$U`QVnU`Qu!B%PQyq)7n00Lf6SKSwn}r1H|6u{*%V_Nq|EX%O`N4zER}^QX zY|)L{-=mlE4H2FBxS!a;Y%=NaNxNQIcHU9+j#q^p$Rfn7Z3|60FJRdSZ$;wcci9}| zm_lIak4jf7x8ko{77#sSO+8`y>$qzG%f1|QcDS=(_H0OVZkV84MLG~a@Q1O9a9%G% z5>35zGtG9&tiD`HA9V^G@>4qnah>?kbSe_4!Wr9x6z0bmV&2c{C&!dxue*9hRY_(G zVh4&Hz_ya53j5w2x!T;am^)Y(gv|=Z#e^ERVq|r?LXqs67AI>{+?J_g0X;|w+7OD zx%+pHy{NN*XMgIu^ynsNn}5xUlOc~qr(9$4US%?k<{CW}(peq>;n)FK$mwecWuDua zM>J1zR8yKKKxOWuO4_^k{|d3bOlY}8BUTPwu9DAUu4Y z%PNQj=oeo$fyE9DG2(+7da5-kL4z(nC7nq6RM>>{8>ei1OrNj7C)sMI*a6I)e5lgb zDipWAY||Z+fX>)ueyybFB2vXFrO%QOWe!azM$MYLC-PpBjMw`O3qUlewhtht#eC`m zG5_j~q8O4Ukk$e#n-e_t`p#?=<+!Fgrgxw9GIE}>RW=N7fP-}EnlTy|m&Njd$%<&> z6@`of(LO8b_sje_(9X_!yTP2L-Jv8=bx+y!`au1`&X`&$q3a253F5hp1nF^d*s<)2 zl`0-w`#|~Pcp<3nT4@d#UaD=+Vks z-TxLxQ#2i8Ai{=tzR|n@j=`eWN?37dWz|*_0|fw^=cK6Lfe+i)QRqW&lJi77h5yEW zhsgXhDo$YCGj%5K-x&^Mzz`Z;p2Mw#OJCMA$Q*;ly3~vn46rzZdyT}VrWShJEUuoK zr^CC@ky@BRhjM$Jo@ZT@aR;sQl>MZ5^Dbk8e1kC;jfn#NQJ~Vwsg!6jx7J{a<0OB# zm`%>Z|0zxr9pYl;`k)CNE;8$Z?3jKCh^DzzOnL$FSxn*B^_o~(%laaQr4%qWH${(> zRJ~1mqjz?Ni`|FLfg^hVa~!A@(djKWEH9ids>>!$uhTSVLuTa}VqmKcKv zBDyEflYoE*hwk4(Fa)h51xPU5VZ6a>MAaXTB21%_Z9I}7WMiST!8?xm%teF#B{0YC zrdJ!6M@Z+Ev-SH zuIQu^;2K4&yY!E}mLtI(cw7eq1ho69e>~s35l}M@q?_H&0LiSLOef#8?t57wZ-d`5 z%f`u{j58Df%!)F-(& zoi2Z1W7mHLv?O$XpvTElP7X;jt2;B8qq>GRe`i;ZQ~U3Atq`s}OfxiQ+pa zYiygREQ&z6lD-+Luy@Z1Lvd?RQ@w8WUbNgNK9xa>p-(vC8#Fn|eu)t(ll<=+-e`YF z$BTsLVO#2{2j6^oxw9&s(V%dL$kjTr&QI#x{-I;ZU6pSpr7s~!x|QW%YJ#zPD4B&} zvdo*IV;eHi@dr;Ko|GVUiVLXpO-T?BS4AuK1o0KA*q!Tyek-m{KUC+z`$eQHySkXL zl$+fVL~M>oV-MhO6Awl17oDjlhEpX_VpY3ZK#D~lwEkIV>oHP_uArb%x@ker?AEW} zm6jGTFyTO_HNWVH5#qhE)Xn(gYl>e73NKagAgbNp^ zpLkb26Csy;Y>+REd}8J01JPspb&l30UDkCzoBDK6GEGaN_L`;~MD70t??3RqF{pFb zY@-@5@PXwe$*S#3wL!nEG09KtL+UtTYAd(#msD{v5#zd!Ls7$hA<&XqV1|35GeZFz zSE<(EhJNhRV%jJc&E8UhQ3S9AI0z`Xa3gJ{GHm_`M^txkAKrJ3ISL6WpZ+vXu2{4X z1jGZ|!~qVR${a9t-QAjBaUD-ZI{n|?NSp3$wWx4BowQ@NF;S&*NIaBxx@L;Z+41oo zVxdV)HH^y{>2s-Nm$pj~gjS(Ia`+9E%f#rH7#XASQUNujLRY!hZl@jNLRN3raP^0h z@DboD1|aVCuwtImIW7Nr=&fWhPTge4f+XAkv+MOov>0L1u+lf_({eWy>wjmls;65_ zT)SPR6qpN&W;r`Tb3H?TIZic05J)?Si#jY!QD@o)2Y%C(TRZ49)5X1F{&+N1kq7k@ zE5WCS6WOHqv3?&-4{6w~Lp{jTiSmbFc{a>+!;od;+ygGUOydt$q%rzBiySGtYDibY z^pM2`R-~lo%czRnlBP6?Oy1BCK>#co$~q8RIYC^mGoceTQD@X0=owP%HJnejCIi;2 z#PoM>A0 z_MC?QxWMmkQLn33{nzYCdYfxTDw&P(*{h%CVh%HG%-?TEeV}q0vVQ;k_W2_1jgGhl zwTQ8Id_y)*Jw7ChHfNV@Y~jRt0^;dD;aLAhoT40nM6fwHt6luk77hAIU3aw`8Za-%0pu91W^R^<;R3}t6+FvE}v~m@QtfG&(5f0L^&QqlTdqPu#qpxYf13u zSHRH5k(gBPN|Ip_E25yd3bWGlA=*x=f87-Qe{GP>$bn~oAjx3j5rQCymA$THc!LF8;~ZyQ90(-L^f1i^pkUk-+>yUDQ;QtsBt z`Dt3f?H=&3M~m1vjC5`t~8KPjiM0P$T7BD$ZpqCp!}1N`KgBj=N@ z86WY}G`aCYwQ?4(jJ}D^EpIpoJXW|K@leiigWTE9j9vyjtOs;g@7Ibe1au3Y0-B#U z?qxOyE1Nm;T$&->>6S6P0%mvd-7|hiV(=lGXik&o>%+@ru-m%%x27iEc0u^u7_}5} zer^h~@8y~6W_qTKh6&5&=0B&3GCkql@3FtA0>mq_{Z!biF`VfM8O36W2*=TQ7xGNY z*w-Z2x@LM7ySicUeCIkjZ6DtX;(K^Q> zPNlTUP4{S66ja;@K&byGgQS%Hi=bd-KHktI=jPjv_yjq&Sc%VZ%_37H%5qhrwUU5GtH1 z^5DgPbPhki&*PBKULEy0m$BY@E43JSw4$uZiK4w!ttmByOf9)!)STXaHrI5)Ra*|X z32qY4JZ4QC$iHQf2gEC4L>?&x9wX#X%oQ0yDv2lW^l1Ag&B$O_Ni+%8s(7RkP z$q&1Dj!NI^H!;#7`5&86_blw)_-`XFnVCCz-T4;G zt?Kf1v2ELHcIcNuKbpqCK`dGo+f8T_zmd?Dj3quYWry|(j~>VHUr7$qmFXC2amD$` zmp;d%^!tRB7|7Aa96IE8C9_gqH=h*srouPn8R(<5j)dhFHq>IFc;PA;KL z{%u?PEpPKylOczC5R}x)BjAV-893_pxH&HWpo2WQ?-q_gbgdp_Zu!GSU7Azd4{{}l zuo-r>s&hQ_4Cl7zjMVJ;fAq;D-|9CzdhiWd!wfl}mOqQ8Cxv9&>&+*$rrupmb- zZ+Y+ShA@X)nN!}3r35?jV7{Cu5d;25dpvwaW}Y2%Cx1b;ymB?DL>XA&%LzK_u7&0P zD6+HYHX4=PXvT*FmU9L_9$&o579H~5gs{ifaP#|eYA23(@Fvu`sqV~3*7Nu_qUR2S zPN(0+dXd$lD5phA!$ux-nU!UzBBbzebiL`(3jf6uZ#`82-34y@jE_F_oQmbGO*cKb z)v%IgTgMn(H#4aN8oJ*j*+Eh1C*+bxE%3;d~F zbg%-NQOzx^f`wRBc;nDV$T|t-WA@edfXSb79p0oeUdVvU@oa#n^#}-+)oX!vvGAfY6dMr97#wj_@UvEl{p_0t@a!vo zgSR{F-qH+8H{dl4qA9+Rt^}$3*6gN4LF|hDu3I)X@YpY>=1t}`Ed7YbEtG~-Jnr#gnS1w&?p>3IH^ zgMY`CsN`SqE|(8ItW$Cdj}M@-!Wx6( zj1(~Czi7hA^kMQdTK@Czc?yijQyj+g?DJ$%Ci9XXr8H`8*5lf|NQ-*Rf&+lH5{P*r z%c2xZ&`jU>g}Gbnt1l5L9f~%SWn6$S5AQLLyOa+Aa>MO*h->DAIJXpG1`#|ovIN{3 zKi+9lU)Bg%&D0f0pFQTJgGlhtr6&H#>ycjQ8u{1I##6QN+k~F7hFT4F-<=CjP6Ss+ zlfqe$(>l$a(PlZHGv}8uTy^HUjSd!`S%ee@?l1(ue_+3PvcdY1UsZ>|xaFE@d>V%H zX4$5wdMR^rvYk51gc#3gN{q$t7)>~I{oGYK)EiA;yttUFr@0xx;Ll@XWK)YRq-TfdcVM1Y%E?o z8LgZ=t#TXozqET$cbTr^Cdafp;+Xfo@UcR8hP+1 z$X#@Riq%#7LP@V;*v0ruO44c2UVkR zH>-}W1q8j>ABuj0;cvHn^lNA#qs1kqXfGuyI-+L+aK3kvQ?aAtFH9Z7C?HDqvAV`> z-?Pq&6yD3{xBdYQoO9j02Hp>f9(t^AemJ23Rud#yWY{;3IbPTRf2M6j8RthQ6l(_^xXMSCfFY1aNpy|r$ zd|`@(Hjp4Z2i<(8fKvwbRJC(RD2LU`(4wUwpc10$t5Ql0k=NziDfs&_Ac#$X;*t6y zusX%W^8eme3HW3CxJIM+jo?1BKvJ|>SZh~lQ#Kdle<@{^EZBXRy|eAtD9)&E<`>xh zGl?35^QwXBiFVEMJvVMiL@rT>4oZQjV_KXlkOc)_%&lw{4MKA_#isFMELSkVEE1;t zj~z#T+wo$~gZ=X+Xb%C$OjWx}%f!dmTKA!-L9du;d7US_`UakI<*qPohvwAYl2&^( zN06X}2+GBzQnF;(%v}1_NvB*1aF7E&DY|K1{{7T}5xrY&X>(j^PD?Z<%t%0lh_c`^ zOOAEfpACUNoD@>Jd$YP9CNx4sKZ70mwFaYXp4ESuPV^cy!(HXdgRIP3FyszH>43Wa zyF(kWEBd8$0I}uF(+|>>aHW(acysJOWLJ2_qhuItM?vTwYXw;;kV|r9bNEw9a=^qa zn20sNw40zWST7HLq6~K01jXb7_Q|+8sUJgo*cXek1*QakW)Uk)zgQ#Ef!fu%a5h#?_A11g}=vRcpc*1?9VDvFXv0JMm@X0jo;&D&CPp)+)?7dlHCYeKrL5sbq_fZrZ1psc&$t@jK&nFM+>*-*lz zh9{RTn}hmI_<2r`ATln!;f3r&e^#FD0@{6TNX7{p_QY^d%f+b>IOLIs=}#8AH#l7j z9?EHqM=yfaqQGVsGrXX+&9&K?ArQ<&$n<4o+kF7uo4ip!6d^1By%2)Y!mXGGN!u9` z!0zD+DR8{ z4WI{$0{VMw_;$*?5w9j>WrBr_jx7MMq1I+j136P`QUtxdnz)o{?h-$4e~qR9!N;T3 zwodh}OZ2-&i5(BHnKYXBc#o#Nf^#?SBp@mr{YG~`bSrFeCGW~~-P4{Pz1(YG;c_7w zpN!nPKX$yqI1%Ut4GYzWw<-wWZ<47>zY{DFg2-I8Z-%EfgZ(KT@#AK_0*oPzc3T(f z5G9r$Y-{(3`C27$xv)=|eb{`RcsKY}8Qu_s;st&zKFv^lj>9{gBeKj0%^k8Xs#S@> zg;i8Yl@T>UFE&deX8 zNKj{UMAgx^rpUkID8`-7KcaBq302A>codpxh9nyNF$LC#t(!O;fg5LGKxx;iS`rX6 z4(HW$v8(d3-%JSKTx#*ivED0OSp_Y%3I*21~~|)3cjMXHqj-84X&aUmyAwq6B|p`OwV<3=?1NN zOPuAh^xb$0kWBVnFn54|fpre3oucrW1+zwDnl;=!HEW<2RiAc011}FDGjR;KwxhvB z&&XeC&6lC3nB$69uyarDKyE!jA`fBaBU+b0n3&@>Z!Jupt>tk?rJ3(9nIezZPvGF7zPg)P{$F49ka)`)r}z2PSMU@00-_GW#l& zI?>JIp>MfJSfE}`ibtd&3xuUGo4V6PB6(@dOE)39d{EFZ@yxM@OBYqz;Xy(a16y}l z)YK>fJ=!Oh;hJ-wX@)AU?S#nRLgUZ8R9Zd##p9#x2EJTLE zCjWRza2$D{?6mhfloJyaU;f!QJ@Gtskk6~7tpFk>B6MQBzu|}p+5HNp2m06_KFq4N zZ6cKrXme0ZJ?vUwtS6AwIP6o6#l5X?bGcPKLBKU{BxG#hS`F0MsYl?SsV9;IlRj*? zPCe1ia(5K$f9_cOdp$@cDCcOxbZQ4>p~(|2a_-RF(&ni1SDUlRWu6pZ=6>|~yj41{ zJxNKDLV`8qf8k|fk9RRrH}?+%$ggr&O4G{ zLpJ;Tmyz&AtF0~MC%CfY3zPiROMY$s@ISDg4Iu2r!Kb6C$sW)4{Drq1D5QKM;T4~j zyu&I(-|83{O$=!g{}?mKm<^Kd40*q;tN4qTk>y7&eon+&H~av8DiHfYYJZdI&@+-Yc##=Gd_ zAFk>#dMu5imG0FUa~~eh$T|;vU*H2 zZ)ZsHkBnIiHKyFUcF}06aaufa{74b<2&$2+RH?;kzB;`9Zz6T#nv>_{YE%;wDQ;qg1j4<6E)uD}TEFSr$8RF{=e4?yO$RtJUj|K+EYb6i~oJ zC&Me^K>U72T<|YjsHXpFFGrmKFq!T}V6mrff1DW&!8FRXMhff?%82GDs=8zeNSk;Q zc%x93#x^Duf z-bNA7R6PX7(wtkiyf-G@ht7Xp<2o8g3Y$j(3N-Nn3rTx9^(i+zo2&1t7HdnAi`0ks7 zsX3HS_^z?D=vs%GwU0uQ)=eRV$yh8*1C)|d9i4VpY-~=AK^YOtFz$dSdihplMt|( z==O<9wwOzgt8@W~PcEYbq{e1^A|tbxPSg#+JfNpVza)t(M_JF9E@-&IB{G(=R?bAu zT%T!3|1R>bT*V!jf%C%v%@!!DG^Dt!;|4nMGzqs|tPg|BG~Q^Xuth^$Al$o+TahjK zcQ!!#$KkfR=AV?|uGwr__f?J@<9-bb=j_?W&+><3HcP#ddp+J&6TcemCS?k-OUm^u z?wZbMQFep}zK^cIm^~RQ^Q9P0VqiiHZ5fF0NxW{%n+x)bUM4YRB4_*;(aUOqCOr4n zKYl8b2m(6NYQRCUpk~^m2W_IA9@gtbS{yLIK@Wf93|LJVlgTP;7krHr!2yA)7<wVjqgpdeU_KpJGC5U05JhKx>7ukfp^X1FsF=65k%V3PQ#9}@j5zAfJRr>idYJG- zQ#sWpm6QZMKiF)xzZ@Qfq%$gE7lY*MWnP4-jefb)%Q+o^9x_eLIYUi*O#~NgCC4ku z!ABHA%wx$!`r@uEZtJ20({gER%55R5Dk&6FM>;PAeksbEg~}XcBxFs96J*D^xk$X4 z2#YzcUGj`y2FB>g$Kd+-}wBSekZ#=&4i`#6W_NyRB3J|Lj&#d}G=9DG1=IAxO zHDm-AQu=wiU`WXD&acno>u3^6L&k+_gr<1uuNh}hQS}m5QgGq0p6+_QbaQ(fupZjU za0SDc!$Tc&Qvq?@~b2#VQxpOF2-`# z_+5_VUtX0qo{MCXi6CaK|E>xkd~+<)<;{Jx%4erlKK(bD7Ks5A)cJ1A{IrQ8*@U|* zhqyF&Tf{f8i7YG5u@?wyzfljV?9`UC%_CbvDYiyMB-)sqdQ z%Ume2&kX9=w)$Yk7hSbdh`+sP>*y6m3SocxPn@76-A}{r118fPpXzNcSHiONa8Dox zkak0gh*(O`l~Ki)n{4pIW2h?vPO|&y>l%zpa;5j%=|qm26~oCJ{@gFR0}0`*a!Anj z;uWwiAefz%kh>tyKX0dfCNoc-Q`|a+T0WX#d2o=YM445}`rT((lD7H;*)kOQw0`C% zG~lLk0#=BBM-ch>?xm-D0);UNKEgn%IPkzMVVEq_VM2f# z+s}KKsYD5evlLwx{YllQQ3Hs8ylj6^sn6w%Av4fdw@!2Dy=pP~Lu-dBawkhs%;^5h z;4={*B-Rr8G@cT;)cYk|nVZJ%Ad|gNds!*z zaZJZ=6&BmDA-5q6aA!1I)27b>rsRE%}4 z`ZVLue-F7#8o~miIp51;Zl7EN7qT)z;KD-Bi2lyf*FU9(W@SPKsrM6yy;(`Wfy4`h zaJN=Ee$BL3VP!#4PH}Ln3@J)qTK>`&_YzDfCNEB`GzTsn7caaRu0$j|av_}O<2H7+ zYwBZ`_NL|lV)Z%YJTiO9^)NfixJyhnGmc)dqPr8)13ouFp9`5t^~g4t!;(2~#{ZU& zInD@3l?u=Pql}Vz)(4(R6sRZ`B}+iZ-pw;eWu{{d%%gNC-MtEub$YbzIrvenk}2~V zufR1A%E~k&heVGmhcYhbj$q6xN7=giYG6*+>=fM?QW&&V{o<5W?v3dJG}i)~{_|0i zP{Q^?D7wgKS>8k3$Gz+wN!;IkDiXwnCcSPX${=7-x~{LBy%9u*uJq0GT#WnUL`cFr z|CmG4<(@#7Klrrh^5s)}?Tu^9lPUB&F(c&j7`a>aSQMERo_XD8)NxN4y9!HxPA)3H zDSo-4r%(}h^;OMQ<}B)OsyiTX4*h)cXbA$}m6_mkc-nM;HJU09rZ#-6{-db|1@KmP zXS8P*Aym4W9jB>VJp7lXG;H1zehG3_b+~fv2oev=qeF&2L$meW39cgkEP~C)lE%ce zs%6$vgob`$2Kr560*+$A^^w|vje@Y~NU}hH(JXeMa5{oygDrE|9g$3{J{LI*H^d=h zpHf%5U??JJ(OXCxuT{q8`6QFn5eQ-&=BvfA z%y}Pauee3#+Z1kpNC z?6KkTYUB0S0lO#5;XF9IWAB}&hdfIN1LA7_sms>R;_Qp)W=1zf38RRcR)7-FSdVS5 z2N?=OV^Qs*aObsUE%gqPf}AH-Z3R&8J~!wk1kB&gMNPP`mpNv>e^t*UrdPCsz7+I4 zn*Ik#UCy}ND^{zOU2yJLU=P``mXNDd>bllfoT(o`7VsWXjSt*%V`(%H?VIVmZIk6l zUU!_L?4j=LCx#Gvkz6dN>X1J8@=yLpFk=KT4$Ug`o2YlxlXTX#bqmIzJ=+_6Tr;c> zXf_@T=t}4VC6U_g2qh8i8rmkN}Nm1$G|MIx>9`quf#8 z#GJ(K#9B3Pkb8o=ZwDzV5doPMOkjwH$K=o)j!{)`3b^I)0lzW&IWX2WWB_|rXj$%m z3B*gX?V;UF^Z?(d{*;zqZeJU!W1~$_jvOb(@$7l`#thQuw?0+~?$D2xdq92t_Cp7@ zc#apNWZlq_nHZW9uy4%W^a$(gd?0I6!EgE7gNlU6HfyI;%Mk8%^k{Qx53;__t#Pt_ zf|O^{D-K3i{$P>iWCwQ@`eEz9KW)OiQLTumvG1#co! zE>qCw_69^xA`Tfx)j0&v`|`Z91>}#MQ+|8o4|@xqA0m$bB4&wIO+5k)oT7*sE1lF; z97MpSB%VcWXdVsi@Xsr2D@q%-oXKCqSU0P>;SilrteFz&!~ZGO@Yg4jJ!#~*YMWwn z;aa*=a{kXVVCq>`2(qzZfyI7Nwk@}xqic(tGMYlWjTb@Xlq z2J-q{4m|}HZyQ*UGUYu9j@a_ng}0-=#|`Dh9(umlo4mlsiabVi$v-Lj-Wh|xn5z+O z#!5*2Qr({>(`FQ{$iSShL^0ZzQ|j_GoI!+V3}cKueNi}^F+84-&6rI$(U3^e6a~b zlYy0z5;uWkHdcjlmwfc&v@C*TldPBbrED{Bq>do;?7(u%SVdme;Z7>`K79Ng?k&+p z&GgXo!(L#vnNk^r6DPohVIlL%lHg?ct<(X+Ein1WpedhlcuT+wGsW!Dl#^9^^q{m< zV6H?fD~{%%@cTY2OR{DzKFXu*hoYPUsPdbvLM^tt9f-9Dl7-!!qJ7#B@(o69 z8xeNbuA_G1R!yN!%@G}|OgTQ}U#Grz{>((SsM94>cT_HQa6=Gq`Fi%~L7fsRWrB({ z;QU#3?R1!{AN>DH-+bXr$YCd2?|7r@+wv|&h}2j9#kULux0exHn(w9eGNT=g2= zlv1ajLL}0fBghzIE%@o+>c=0^itY41$Re({Bj);23KnTl=Tu{tTDEral{6Hc$|S5~ zNh=PYd?RA4u93|FiqhUzXyz_iL&a{1gCgy!XG^XNCamw zoMUgUO<}!{m#5t(eIFWGP$m*j>;BRZ`MtyQr@fF(0bLLX~}mM)gDVt_m>!vrYEw-BagzOt++5 zc%W5mf=38rE-ZBzq-2N2KdPTUlE&NQN0))VV{@3j%P9)La8szuJ;QPG!zgz@cX1v7 zr;%?qUpKk(HcI9NPdr=WC?kVc<{jS&zx4Qbaj#^W@Witrpm)&+W?9!qgi<&&zav*ihJ})(Wdx?^9}Yq3d$!ZpVL8V%O9hD zV~jOYLBW}-CA94soCy)R{zw$RQfEk-g+&Dxt?ae=F&MY19?IN~&CQoSw?(AYdNTte z^~*4afJrMbR#AX|Ey~5dYMA>|SYaW(Y)imKNpVL2oVaaDm@UE5J2S@W>26O}Q32_6 zWdLgjM}T9)@NmMF8kHo;Fbd0e|2)C-<6b%^*iGZ`22YZ-uDb2Pog(q96E zk+S?G5u2f+)*j!_3UkW9!ZynHJiedR{lIdh77@>fHnuxsa-^x8K&bWCQLu%2LutxC zNX~pxiI@q~s$1fT3)u5he*%2XPhP(_o?Q41vDhw3#nao{?8ryj>4sE6b|L%HY-=;c zgh4Q1`ra%E9xNa#rOr{5QRwZ;OH(J9WZnGKQVqcdnx7YwpUfaYJTprC*6S|iyxqd+ z)2*{C?+fZaIyBwiKVC@Fs7-_-=$L|<$Am<KFF@ z)y3*%?@2$x*h6MV_)tMqlvp(wmYt{E>PBvVd@2Dk)-AgHT3oKniHk>CaHRsA2yS`{ zuGidXekO4;w*mW{mQujPV)^8XVaBrA?D)tl6h6O^mJj_f_ATZ8W`2}ZGj{*K{xH&E zZe2BhnivUwe(wM|K*qm2c9@__m=v-P-9v^7je$uG+M@3Ml%p>{^whYC?2OACpC@$+ zODZwKlcbwFb|xgnH#I zXvWmW_O-kpB(EF%w%rfdzTa~Z!m3REe}fiR_YDM__^phX1TQh*I8(7UBbKzP-mQd` zv(;HbWK~|iXrSZHo<28D0^KrP5jrxklv<<@&6%H)3*#qpG7|;uC7?g+QDxOp{@p!k zM}z$z`UZ(l6YFch{PVG%FS%{tNVWx^4$uE+#yBG*;AaDH!V#DrN_Z47fDbWB9^m)fjCoI9{yFi=e0?ZfXt+b_x24O zhdr}}!+v^Ku?sdMKb5q$8l-6SV|sI3)GPaLFT*}pl1^sUzO9jZazRZWR#NL>RD@H& z2lVFa9=~zBSsy|R-UHd2OqTB0yB0Pi^Ro#t(W-eFR12CoqnRn>N!hLBe1q6myzGto z#^g0(E|Dvr-vzr<)dkNHeevm)A}Gq&z-gp(zc`+Fd$12pnyz&7-}eNpT>WAGcZ#@0 zfyw{aSc#An?bDH-^yfvrM}o3yJuyJveDmBY{a`}*fxz(`^ue_KK1#&u_fp9;)+ro> ztMRK#QHayA!kaOXwxYs=Iel@g@U(7u_QLIjYm68bPsQ!v)OFo`LhF z`~`F^4-li7@5PHc(Cf0dS@d7we!lTS8Z5Z6jHdCHrm3nttSUY(Xa;}imUorYyR<~~ z=0sec`>QT5H=Ql;C}Gbb@^*X^ugW`ng}%A$L@VYlxr-sIhyO)SZMx=SWcFi%hkX!M zdm;P?-}w9~|Ab3ai1GsQXz!okPV0`Nn;6*Yh%pTgzXlB*InJ_lP(vRx4Y87k{k%3I z4zor5Je2<~$Z}06LQiV+`<;Gw@!609GbDUSSAu=@iXY`5nTcLe;X1Tk2j=X!rF(Q+ zd8Cq3*jW|y(C;Y^*NtN2Oy?3kl!m6?)`k=Z|r)gI;92HJ_6IBgug zzdu**8}S4Vk-B-W6-&^G2FIULhP4%F8kKH&f)I|5h+8{IBf8(bBkAYZIAVuz;MdM` zCfjz8So|zpcg^O;zfp>q@psRY4go4XG^>E#Hod zm>Y_>mie`2z17Q|oAS*;R*xNrVh?8{@&VcS`DYLInVg zP3AoEODP^RDilx>;UY000s5mR)_jKba`h(5dpe_$%KTIoW-I2fH6EjK-^YO%)Nu%% z0`I8ckDa#=ytM1Te65zaY1r|nr7C*H;+dr7xbH=j70BEiQqeqK=RIY3+l`5K)9%q| zvzTaCUgCun?{+d(q9jQBqi#86E6Xy!=5@H1I`=C(-|Pvlh;~WznPY3YqQLSFQ~eju@}xUVen)xJoqJnd}1u;Si!2e+{F zr2Nn11R6X@PjK8OTvZEb@lr85Nr@^MU4gzyiKf#inmRz!n@nw0*Cv&;;IerzMzkD$ zOc(EiU-lqsU%{PHl95IM+TVySdZ$cbSw{#pjLz?O4=sP^A;Fc!LKpq2)`<9r!WNs7 zN1wP9RY`OTvFH1f^*KN{Z)p-bD700?06pf!YGA--$~qxewDdf=m`d1sfyukE5)|*o zMCljQTCdtaN2GJQxtMvpL7Z`50ZNllrl4}+&X~6QTZYeWLzV!{0ha;rr`Szx@T@&U z@1J-UO;1st^JZskl;y|rQK%+zv}xfb4%{iB_RJ!jq}Od&i$Zbk`c?Djp4uV>;{A9P z9p&3vU|C49ugzG9zUJj+0h^gfR?EE|xVH85SQ97gz2%J3M}lLm!ypnwo#>FPV9`GX z`?i;W)H*ggU(OeIt}eWPa*F1&Uiocn>k5_5#AauKho)(V`?-SmxA`(t07UTFp%5b@ zWeD1*X~*<(?8-tGWGX+g=pFzve*hX^Hgi9sU2dJ-5{b5v(Pg7rW>+c*My+`X{)jtHY(qGE(WJ%&v`EazhQd z+nn3kxw%yxdEQO$E$`uI;B(tlkwMlIh`w`aPfp#@>X$oSZ;jymTLy~ui2+tYSu1QZpKgA*dx&H0qH**1+bnJn(G?mE-2KxugSRuGOrTsK$0E(xAysOtT{}Q7 zBs2uqa6J7KttqLRMklS;XGGM6d14k;1WxYrbW?)fLx>SgjEsz zum*Xz+u-;aRA!(gHtUm0WlP2o5sCeW*IFcT`#aN9K992oQX7l*jPA-~{r%|GvG(K? zx^I>)89khGZLc5n;`++1mpqHeJ{o?i_msx<&fe(7oGthj9>IG<(%Zl5>5DB|8M)>V zdr)V6M`#qt%EPX^Zm6|&M3Ov#pBhLgSLi)B>>ICUB))u{r?js7%bOPdBLHABljbgD zSIch}R<@^jnR5{84cOwBdi>YVyKq2@?LYt$At0l6s-K1IR_OWuD+~|xXx}yea5j$L z!(yCCEkYJc)MYkN_m)7A*3$T~X)fUDhSw{U7i2YmVIghFbWca{ij z86HWh^7)i={n6dErdtmaR_?89zDq>q+G{__>FgU6`({CWojLDoI%{NGQ=H!R1r)>7 zQEq_!6J;LpD7p4XBY{?}GoSVPHJrY@d?}xfgM=1=snd!_Y{yvUBa8g#sv&x0jIUsq9LG$h;Oy_>`s0SrIHBX&Bw6IKQAdID{;_-h_! zkGMDfcKblJ?UlkPu2gr)jEav54fmk$AWVWye7p|&XM~xH>Zd*wf8OV;ppnC&;t&nl zh)UJBUFj=*6YNmY&cNUW5!n*RClgmFbUH)sLb-%l_k+5oEBFFE#Fl_#bI6-kG3ZsT?&$DoI-5r#qPuD*txNnrErAIZO=g07nP9c&`eWoOcZZDL$G%zwK{CfcagZjfR9c9jX8RISjaqByb%t0j-7NH$ln)g7!pT8qtP1PnA{#`(NFpb+?KW5>v6tTxork4|7 zpvt(`7>9SHQUnhaIlH&Km^y>2+}&ytW!^Hc-x(Y!@%G4cHUOkh3@)9gS%DekMo@xTbI=@6C%%V282p948%1KB&hgMY=CQc^zHv|Z1+Mo z(8H=RATMYoYvIsrCaWI0_wj6-maQN0_u->3?B=G&;g^Hr5~}wCLa-Skb<+rujUKB} zwPNoZBeD2wo|S)0z<2o>V9^C3w>b!=DjWx}qUBOM&+mkL(=3`iO$-VvRrLp|A*cHb z{`oOd;i!2%P%Rdrc+AF5)s@A?kg~|XeVF=eP~!`aqGS^ZlaZHp5TXRz-jluy*EX=z z5=>v@dw*KMPP2DDQkiT0RIPmXOVXvbOb)ru0-5eRTn9FkHFd>C>l4i%Z^8e{?aEJ{ zr|{FcIe%b(TAc+tWS^o zCmwzseA^Lg?rhU8$;FR>P(h}@(pQCzVeMWWkE|W%hZ&Xgx5+~f^OcrH1pE!ZhS3z} zxNBb)?EI(sTi7ES1n&3`%~XIrMxk*gt;_q#PUDofaC`k@j&<29v8ddZCro z6{>gkGTCXXxd9Xn>um=P`wo714RM(9DVvvjh4w3pgNXH-XuX$dsc@C^t1g(2DcMJ5 z?clrhvKsI_35OFDl^G}pthU`GM5@Khh)tLVc?`t&1KO0^P{^f-u^{_Xq<=O1+MFXx znvhbRD(c>Cy?Ytf>tC=>yL3eL5~-!d(uDRUx~KmE&5DAdaXN?Sm^n_ZWg&KeHqsSg*`++!>EU~% zOs0XG$@RS1VjkaA*~mJdA59ah5CwrUc|XL-K~kL;`yz?MP)hXJt)5^im~@dD}j1)Ys7 zTJb$|rvX*pBPoaKVPAS+@^LYzF85@o&uJAWdT+=#*2^we+WN|m9z*^6_2}MU{op5}zyrcbFWu#19twxT) z9e98WIR)2&F)M`OK1pt|q5;IAxHP;8)4FX^-t7MibJbXor?%6&%Cb&{f)GI8qw}6p zAZ$|%dc{P3x5We@KYLWhSBQ$WlRs7dh-}*$$po{G%U|IIU_nJFkjK*@BIjO>$lV80 zcJ;#|MyisMzlqewoeLe5U%cYGy1+y(8%!7RDv{Lb`|`CQ${H5T`OT&2|DNu?wSL3y zE>Z~9bf^|6-U+$Pr@DS$9NCQkI#g6>qBrAc=?<@xb!YgxVhSeFAmU8~r!=yrn(WIp+IRxd2LpC>yrX7{RcgNjzV!?JFl zJRL*6jZs)d69fwDj@#6F5HVwiNN5JI>T@ezE~K7xOlf~ehEcn!eM=s4_cTcis4~sE zpSPAgpX=}ILobx@Z_GMiA#+*gcSLE+VQ}UXFrDd^WpG`7%8{OKns?kZ4RV(&69+#{ z`D=Wc^6vWe+Kd)qRMSi8XA@#A!R6kF7J!uV>3_5W1;l*XKuVj92zt}krDidLQzdS? z%&pk}5!S-{PH)u-Twgq-x)x4pZDJv1o1*0zCxCiy^4|g*(IGujSFiE0gXK62@_xZl%|Ru5 zQI-?ob@OcaeNe%R=AS{mNHn%x!O7(jxZkXX7XVDsi~&++gg7c~m6aNE(am%&QK`XC z@8V^VGYpX&SaeAte&?YFI0074I+CR`Wc-h6&YLp$^G*Y}zyg>2JIPP6YhY?g{a$ZS z9^OUv3V3VdoG78WGRfJlr4P>okFl=e!q}LnjD6v;Tni{h+Ir(;I>;I z=fB3jG%n6sxz;4m6nkw|fI5W8EHpEI!fxK6rO&8&Xy~L=cmq@ZH|w3FFdwfhh;ER~ zmXRA5ecnI!hx&Tx3I(;#jX%im-{yI*NFuQ|+bHm-3WHI%<-772=SZ}n1{Svx+{2SQ z%t+L=->T*^H-96PHuLwu;^6H{pB#(L@V39y(JvENggt1{&~uz&#>xt$l<;0+u>BVB z#Q0S>5=`oOPs`%{VY0e)=_ch=SGucpJYs${v{CYQaMmK~YLKLbXb;}v+7OCj*o>b| zs%ohfI8p(WFXT-_MnJOkZ8g3`s9N;;hdKv->e+%k&#FKU{d;Iy-dZ3KoR6jrB`Qv} z{1lY2oX~Gn|I^MG5Bce><@%n|Qtcf(>7oE1mQFHXI<-1P7qf{FfFYrmRlso!=j*;U z?~}Lr$RV4b|IYX#k%v9mo(B+o+eNFTwfBtgDN&1!ajep%=j=6wQ}#ebaPrUcUYUS-lJt;maa8% zFbVOcSbSH{ND=3#)aN1HiaKodlmt|F}Tz42W)bpkB9G3NA+MQELpuHM)+l_sH^ z;S7Kd7b(vEyyB;$$DmE?qOq2S*Ca9(cSEF%k*;r!x8aq(d~Y3azrhK?HkojZ!A=`j zkl%vJx=A~HiIC6`APU{eK=uD!Z0`J}j76oKCQg2BW@``o6X;c1^mxk~o{>0gpcnB` zB;?pBYr11W5`}k6-Cy$#SBsVF6VZ7m%v`UBmOk9|rX@pZTx-zMPYlB%$0bS0X`9hv z?(MduIQfDgkW7%%{)pt*mXz&h_ar49JFz#6Cy0MBE8}=(@6^19eS6ObkIF5caF#2D z79t;QXubf!H*%|O&yX7@N~uo2RxSarzK4>qezu7?yvO>i<$sp6RS5l=;7j>TQ^`9F zs6nywXY0wd(e0$`gb`A;C5Jw*un*CVFQko!`ylndi!`68rg2X|mc(@|F``br#>$6) z7$d>LjKMK(XQ9IJT$7@O;;b&nkc{rC@^*~9lRJHmnk_mkDu`HlY$Her8 zn}~nft`p49HNNKTxz;ut&TlyRP_=GerkkT7JR$Xn?htfuQ+EQ2xo}S;22;cO?H>!e zN;5hqYV%CE5S_9o__<=){A`aRI3*sfDgI4^ zlFJBrjLlG6tJVRTcpKhS%l*U->XG78&;0LnEbCjdzZL9323xUG99Q)T^S{G$_~$l< zt3-orF$phe7vV$lw>>M-M!ubvmE_VXmO&D@XdJ_fK z5N0b@eZO#fU$24{ZQ23JE7ZH~muv*P<&%`Q1Geq~NC)Vsn~#dV<+uc*t*e^e)uUE2 zr+<}T)-nl-=W>0f!Ze3?@T*4^cVyr-;8Y%30l$*4fa#No8d2d~Z8T5a-Zk;yd2;Rd zaoA_-^ujD#qHjU9+qwu)4?xvgKo0v!jTh}1s{8m!BCr8DFncnm&e7CGj*Cog$ny|1 zy!dn$nL1DwseiQDFdmzUPh2yY=#i)E`+p&O0k~eAy+OZ~H>JwiE+ixhg!x`KjTq0S zA>#k@dF4f5ppsI2Z28{dfkNFci&ChC6&hKm-X!h+I$j^w7>cS{`zoSmal#nISGsg? zerT^VIp83sW(qhbBloV*u=jAyn+A@TWsyZt@a=h_2CkERO&Bwv^}Ar(TPSW&4=!C2 z-VYr%BKjwHt-GRvp2V_h8*4f3iq}aiv+y&G)e`c?sOpTaWy*YnzBHWB*Ne6TD}k8l6w&8ZROcn1brm_?oy5~xGX{WXyGpt4p2Wyr8HAL4ZsLW7hunV zy>J0~&4i6dXX(>YiEm)_0(Okou)^Tn*im#0MB16o_DLC?pB{k(7Wx<#>NTNIy;Q@W z8GB7pMqv#m+M(m~rKffd$-TB&;7-RTSKnb*b$v=lP~K=^jH%5QwZO|TqPOLhKBA!$ zm*$yNB*Adfx1v~J&)dChZ1Zs)*IWVDTQ>G(qUNCo?&SvcQ<&Wn?8_zB@M7_hvks=+nH$2i z6zaMU_5_|qY%y{5vJ*E+!aNQ106U9gp}pAKEpS>lIX_n^kbQBALFigI@jty?o{`0= zJv(f@hia5x^cd(l4fik^#QNoLvJGtLL3&`J{u-WqzMbr7#WPtXp;u`8*C^s+NfEU1 z{*~y6V!@=d$`v+k059Qkik~ORprBH(6^KCnTVFSw4BkX7NxxJ1n`wHfZ5oKn8V1yi zzXi#V_|u@BX=pM?0PtzdGqkZd3P*C~XMrGIvQK1cBj$Z3b}X#c>C9Lw0l}nvfNz8u zJ$qJcEcH;K4IA+>P~H`3(RB!N-?zs$7EKtN(8Sx${fd`D#NF~uVZz5OyB-&KDXJqQ z_n6tCUW6fm;#XC1TLSkou*$q(ij7B69$GL5Xo;xN3Ie>RyWka34U8H`=%x)a+I6=2 zjte^nbH^McM=9=VR9Ji8erd!m2cf4;(2;dTP((o2mO~fct^0R&^Dqy%Y<1B5JPtMD zSs*4v*|zCk4B=;Gob3X+iL#du?ctC^*24ddsZVNJi1`6!xhIT}y%FC2z3pw@&CXZNt`{p(YkuU3?MkS7#k9 z`-w+c+BfklBnwP5VPfS)0M_gzFB#YIjv?QP=>IEWd36`9{asvRv&rrmK^*`Gn>LhV zbZti>WaT;(eU>1hBKealCxJjrFYuYbi1-=jTz4%-M&Y9k$mDhYFME2)eY@R!MiHrH z^6*VNCgO+%^VaguTXRa=%V-1AW@Ko04j}AfM=KyNS81=3iFKl^IWRU26%oUy zoLOWLM|gnsgg1$^*Qkx{N2j!pib=i7^)3cw5*cuepk2|3Vds2X7C4l|vv62Dq~7`2 zAGY$<3#&HttC$U&R&89;;xplgo2@n;8WTYkJL4Rzgd*?oC^!y=IYJ8L*Saw56gh)6 z=vFo=ns`%u)nhn~JDkwdJGESn*g(zgatK$SONX2Fa#5xBD^zScH)7pqz;eardZyQO zTZ0nDx+2&~9{NOU#VU=MYTCdHNT#cdEXb2R>U>+;zYHxUS^G;>H<@w!ysD%f+nAKF zijs$t`Fl3il_mKI;rGj@RPx|Q^5(d@Cr_nL>+vrU$9jj1)GFJBHs1>KW3vyrO&k3x z#x(cFZCCTx{LT;Z9{Q1N;7me~qUeqwY-72HfiX=4)4W}ps&ZrSMZd{XI*I=GnlcpgUqeaXkRx|i?HzG+C=Mp`SttOpxQ_Kd55!g zgL7+INI8kM<@Jquhyiisv~!8Es}7RLIVks@gCB$|dMrfkGx&Maxm$Z3S`C1WpHVI2 zY@LEU6ljT<;H%?0)=j2Fv+kHEObu zcTb#MR=myhqOXFB$s(u6H;J=&lSR{{>g0A>GJpgl)I6R)%Hn4v`@W1mhZr&8wBm@P zEzr#3T#?~RHM@)`kYfY|5lz?_?JjBwmkIyb66@H^3Ou4^TC5tLa8;Xwr1L3=<9FW8 z=q+t~ix0r4GP3u!wDaZH#Q(tAx#lKUb@q8C%axg6l6!wpB|r3#RJj7@9=;L9=303* zH=rV5r+?Lp-V-N);Yt*2h_?{X_d@Awj6=M*{Vgy~ap@b0d@!5KN@W0MA>eDH0$7WR|bWf*D|G~uf@a@SQ|PJ_$} z&u3}Ehq?yT!a3D+rf?I0ppcMtp!ai|Rj8l#&;%zfVjy8U8PclzVXW9Un~oWBELO>G z)aiz^3KhfODVaP5G>Af^A1iSjy4-;-KRvGd3vOpuGy)XSX^B^=GjuY2hO=v1`yMqS zSaFU<(LLGhnJoQ>Gix}2a>V%S(zwioefPQDvdL;V6#ID7rrY_;TAR*{Q#J8i{VoCO z`jRGL_I=p3wTfM6d$IS%aNFjQE?|q^n+D? zw*1d?c?1AM3P;j2yp1_51}nvjMUyX7dCU`y z>^9-J_H%uGr2sW>4%)b1l14GZGFKEHth%nA3p)3V%C1^Ay1}I(&03{1MRD{QhO!-s}zv zCa1*U*V z8*K5-j}?-XZ*TWIBA)MwP2C=ProUP=)?>kGf(pdG1|G@(eDN%%T#2v}h;y95^K?Um zWPz*ldfmRBI6WyGj$gxrJ-NkDbryMbqq%@|!8$9q<3%PJIRp6ViFe{BGU#3eO=uYV zWt3PM2<$C28k%Eb3tYt+UU6{U7k2-#?fkhDdKTY@TAmfcy2`g;!`MOTHK$XO?jb!_ zQ$4en!nLyLFUx20R!1DEf=i5~sLh|QqDVgn5``*6o>a;Sfo3mk1Lol3f48(> zwR=-O$a7i^dOT;OAgwHxbhd{}@)3@=ppgw&;;L`hy|2Lyi|(r=eldDLBdCOP!w{Q! z%n~mz2Sw&97kvkbyz8TAY|dLnf2t%ciVBsl!SLSNn#R+5`K0m|!;HWivgZq1y;uu)-$+E7htO{} zD;E1vOHSKwMXyzhv(cvM{RDeSd_rlq{|_u|t>sda!o*)m1j!-OQznHQ6jKE8336NMBT(ApFf@j9vH8d1@I828DSc2U$)ZE4f)rLKJ z6DJD?PihQoD;rg+61~R@7je?Za^8AbSWL@N7|5H_epbQ1;WUPyQFY)~3}@VtL+;Jv zXdRovb~qF1;{y-lGSifdL4p{IBx>q&9sC6Rnc4Dd_qPfDpe;jL_@7%*zYGI=KQLsG z8qC)R|k#izJXxjK}+%(H;x}=s-z-#uv|)xHs1tS~9pCJZW|a z)TEGvFe-plpf(}eOh{1UumfRZ#M0hPT2xo_lHW;VGWM~^U0NsDL$tT>v5H|S$UWu3 zS$gN&6K&)jOf6LZj_9q7IhZ1fWcMfglShWtg0#;soktXhkpe~aDYQ?wl{(3pLcq zjOgX_qu?5gYzJ+_$8%ER86t&k_Y)`eFe{KL5K*x437!j@sq7M@A(eY#@h4{)xXh-k zO)`Iyc!ocJ*0sLIa53-%*aPAsp=rC(JbY==NOu8#0cmmd|9Jp+AL@+l!Br|$5b(t5 z)Kk0`nQ7AQ>p3QXzWPqk48;tX7aiCEhc-&` z3P}5sETP`RYm$;y@C>%MFal5zaXETMcgdMaGblJ~@|qEN=ymf9xltNi7g(IZ81q!@ zLQbq(>h0`!C9)B-{gXVO&uSx52AQH6`-}K32KETu|q3 zt@jQ=SUGj3Q3&qL%t9T83I!RHdzBV2@=s_jW6)7N%f&_R7nt`t&U(=oDq!qemN9w; z;-i*+P^>?neZ%6Yz8OpVSkCc3v{NA}B=*#T-#!l$xTR)<+0QoWkjVMv#t>s^kmAmI zz3#h6K2ClYUv(saD0!ax46c@PzJ#$ok;OonRl6Ozdef8!O57{UvGJ1tBvQ&2FWlXgo%19fcJ#aiR!KZ>V)Bba_?|cwuuWnZ`*r-!5PnCS%=a)B7 zP#RQRwqeD$^(ctV-sq)ZWf}50V5@X7pP&Nz(KzUYxICNN=WiCbSsHJi!c@97C)LR3 z=(^#))$0B6#Ig1k3=3ld8_5k`&1#*-FNPMl;!&nNah1)u+}4d_=)XaE*r1&yksf|- z>F!~M5yb?o8)naXbL8Cdruwv{{FL4TsaSU01B?X{RRIAJ2c_+Z3GS=i?78)eqc_DNq!x8e(_qX$9Nj^bL#DLmRx44W zF~vGxmQET`Y!CEVv#ux7$7{(1)W!zaawaM24sJcSoFOdNZ|pYRBaFP=F8tLqA9k?y z)q|<$f9XKnI83y@RD>i%QbbW=I|Xl>TZSo)(`53hidyF77ce4iFH4y4pcB-13} z&mE95=%Qo6BL`%;(=~FKX|p6eJsv=c46BxpgvCYwn`A@btj1WmoyYt-pF-ltR<9{} zdBE+24fL3Yya#k@@_fqJATfbl%F}jF(~7RP&)if*G~yWd!`emR@)~?pt)#3ime?N! zX%0Sa%N!&lzLZ-lSpA{Wt4B-?q!C5q&S|iDKx=SSSd+I-u_&fycPSqEm&<1!FQF|V zLL3%x1ieOqLBGhs+{`3gD}t1n54bMoR@mrKtPJulF0)@XbSQ_si<7RW=I2B0=gk>2 zyY@DQ@x$##w*Zw|*jtDzt=@O9>V@Nl)C)H6<@Ns0OjKtP4)mhGV6_iU^Ja=Uf>4=7 zlE55#p@Mgb&v zU|_j5gvJ$-_dB+Be0MDUrMKc;>y=9LC#aOEv?_rzcu@+F1~1lf{V&(d>*`p<>Q@~x zq|KlfPT7r+U^BY4K_LQv+=vCLT=bnO{!<}=%0^B6^JPz0{DBjMDZquz;_8zR(4BUM zkss`kXOPtXMm^%UHBZz`?)1*9fUIih1yg0_$D>VtbClg@RifKqzp7B&W%?xRP-uSk z_?m#rZRIzMr%$8F9lDP`f+0#ry~?6C8A|ang7OM3G2IFe)bx*LI{cIph=Qc`G44as z=OJ8E%ZwQ3uZFD8(a|NaW$3t&^r8YGCX-g*-Jm8?(-v}tp6R2+hRhY`X+GRZJ8n{7 z^KQ9$z)`BJjO2;9X|>kWuFUN0uY|6a%pxji}M&Ghsn%AYuX^2gfie_0xo01-hvVqz1^Wj zN(JT|c-~#v_f~Xt)W1B_Z9pRGbtdL^JTo?;j44L&ZKnvBZrK!ioAUG=$uj zw+CL#hSMr=#2@orux(g_`m zZ$)ecK!$fB=qt|j!7<=sZ_{Yn=R84{12|WIj{n4uop=smN!*PzFY%62#$j_F(xGB-~oKMnNdHFUYEPzXDi0zst4bwgL! zWSQnr`8nk_CA$n#?6?5(^>Xjfwo^R_aBS+pnTRj-}@4AS_$NJ|=F$1wtppM;cV#Zn4b8)qth{1dF z%_pj}2>0~0Iur~ybM1i!Ukz?+UPXAiWPKjexUQ?DR9z zF*e9i=_ikzBz>y8z387RGebr)(Iwl?9GkmvqmAX*>ueS3xjN!&3O`ND=}0(`hnVzO zp4$!R{klzxxFUDgR*7)f=3GWRXGz^zN`V!^?{)c&(dv%TKU}y*>nEJEuJ2!A@r-K$ z^W2`TGR^Vb%m_S9J%gM;K;!T_ds-8Mv%BU+GE^g9ama*9&0=mE2dJ-VEgFmpm@C$7Oh zMe~QLfrq^mz@Snexdwb5OhNT{2&SuU1LnC7;fYdtM@#K}({1kE0UEHh ztp3Ppn2u(U^3{8&NQo*DqQzAAg3LTeRnh9+@w+yRwfa=#8Z+y~7PMt=h4m{A8fXy8 zZ5v**SMr#OK6!j@ns+LV9)E@Whm?WixhN0k?Q2t5=rfLOK?1$Uw=Ghp(UFS}i-x3r zai%qzik+H&2bmc`;@lGfb`8j8;Llwqy#EE4?nbKnS|yZ4Ui?D_C1%rEx2@L&sXeT7 zNDPQw&y+5uDR4ZZ<5rKQRJG31Q*mKl%a{EWnJwlx5k#rJnL?C^ZVjc66 zqVyy|MtE*u6yJgxv=q3jz~`h6rUmDrN!~FBeg-y#X8~612)Hk&BNr)fPF)%Bk%(OJ zIauYV681 z%?a4qrsdaHtI!wK&EK#PxSqN;hgc@IqP{m=YMUWf|LxjSqp{TxNOs-T}4YkOibhlpk4BDEog={NFoCsRh!*494a!`F%ezJ7*U+ z#1!g- zLSjCspnw>5z;9)ap*s384a#e%2Nv0Odq6NUjz72!Gwn}od^o5Z#WM1lUR?;`*0WQ< zgZgEa4E%s3u#o8h+aprK@tcX627IVe#ZcHAy2}bA2AIh^WM+?q%zzt!)UrYtr$X77 zLQMq>v8F?xbPg@~;0g;OQNGM1vYJqm6q>zn3Ys><|-AR+|?+?pyx# zhD>KswVcoZPgj`dXdr~^O~q6Sl-7I)I#mrL(=b0`+QTnEV~n*AcE*!HLhi8% zJ_ToKsF zc*~#7@a?Qe%2lv7+%8Aj^MADGr?iC-b__1fsSkm)}3dFNtkdPO<%cG3he$*H;0p4b0+QLm=nYMP15F z^V`YtPHI%^I>9U(#7@if*YMVw%vau%P&uL`aptxNujR9GB(HSo)^;%l;`5(2q*W2T z_)@0eygV)2`k%eQ_=uZeP!3&zbZd_0UhbVP>PATae5Kucw}&8H`E!N{%a#g+Sc>Bu zPE@86V8=1zo?UKn42XiRmq>-a-|9`Jp?ReFoN!;{m4_XcxCRWfcP1kQey1PVXTWC9 zQFA!$x%@ltW{I|@*0$PD?4k_&Mi2E&4T*7QeWwt1#S7K`f+Ezx=;QQ~IbME3xTYd# z)bD-KzpSNV{Y<2#vpAg{M$_~-qQogwE$sSq)}05tY?(>{Em52cl&$B1fP6)xIc0~Q z^bbi1Q#8WBqosFK%a38rW>>lV=X4`VcRX!!J;btAB7L&eA*@*>i{*#+PGm;vy@NRd zXAD5uXk==E^S0N&e2rA+eK3IZGb1F7TpRAppuJi7fVa!BLhPIfy@{>JJ8PdG+52Bf zooZ|``Wo;`>Mb<0(W|O5c6M_GbmwM(2-IojVX!#+Zya31ZJeUVd+z6xyM~Of57J=S#C=RWoFb1KdRja6`R3nx;p*&E|0h4UdT<7y*^5t} zSC}#ea!h%tvY`b#C{10P6n{xY9Y5W+=#z-VqcQ znxAI8eK$+rxGrF^P<{`@&AUiQpck_nOYriJs(~mwOfLgL2bdKU`Mab2uFvyWjT2m# zA(?@Kw}3@=PwFMAaa~`Wt{qCQh63mi05d?$zc@@cev4(XEaURI+gPnL#?uD;!DDGj zHF^isjPx6QY>Re|zd1e?s>O!e-J6cFh2VRlsL0b+xg>}ZCxbmxHaiJ6mH!-p=jM^O zW!kHPx?$6;T4b*sDZWezXC=H663=NE!c!b(;;sqHc~KWuS2Pe!I~EkOj@7U|Y;eK@ zUC^WHwJXtC3sc~Q!~IW=zKsNDH&lQVL|KMM7sL6T4r!JC@xeKVC?yx%4UI0N6;_d1 zW~l&_U;oLG9@AG|wYAi?gz*%BBXM>*!U{ooH{JBp0lDrO3w`!Bz{GeX?1@DMuM)j*no8%qoE4~%PS^Df! zE6gbrx5Uv^Bt#5>GTMnyWV0A>Z-fP?=6Cv37forYW8}`;tY^8!Z{nn1$Wh|yGOerU z+xY^7rRpCv*~nWHOA5kDQ$M@i-FzBw!wPqgjj%FcJnseNTiuvGj=0J(NQ68IxgDF6 z4xBTnrtWtZ7x}{(ySTp8eg|f<|76{U8PuQMz|Gl@?7jQW^^1S-^$~}T^?~E7piM=D zzURcUaS3j?5Ce8>bbtPYnge&bPrM4p@o2ng>Dqzfn~k8C8V}2r3rt2OR&rJ~WkV%@ zi?d9&#cRlw0v>d^Ex(eqv7;In1Oe*jCKzT;fT>*3*X-xxd3e@yXOl_tK!NB!)Lb|E zFw+S7C`TRaq1Xrqj%Yb=EPOkfzoVLZD3!S0>bDEn&@@BNyJDUyt8Gz1szs2!DsHn4 zI{I4v((JNh1=VN6VPFney2I0J4QA1yh=)AbQYlQIN#a!|9DUxI&+~Q4p}$aMR$S5r z4i>0wQJ$V1g$aYgsqd#(m-#Y+FE+7DTeQ~T?RCA8!2-tSq9fM6bO{$ZV=ChaeN4d< z?J4;$oGR0&@`X2eMytlMkFBY8;kgaisXwpkeJxZX(r}EY?Ykjgy?>Rzg3k7cIYc)& z-~YQgXZ1$Ork8mGQba|xM3qGzKuBtBr_jKS$?JtdnXJVkU<zU~E=>JsQ*+1?~x zy@xAb1$!ceQ|gz%B-mv=!LW9oLW7<&MmD6}toHok=O{5UpuPRvH}y!sghR{64B<=x=;N|ro=GjA$*k0J7dHw@Wl1gu>t82Mb51|9RU&0 zdPH!*nt~#bnE-+CIi+(LV5~xqXseIjV;tFe)gM6FB<@x5^0=UM?Tj&fzjE?~hH=u8 zdJ}3I%wqQuTN%Qy1J*+T_EM$9QEP8B0-uq6TKHT7r=eQrKx3(Ip_8Z8Cw23P;19e0 zR7aRGG9>uMs!QG&E?#CYl5TIzt-Pl~hrQ@#0Df6%&E1C=(2PUeA~!A6un(G5mH^h4 zLiyDw+^D~CRL)$g+!$@L$)ijQFjIxk>Jj}y|1S22@uMflX?u+3Z`x^;<~HP_vX_G3 zxdTKlZ=h5<)YjI9=Tsru$UWNoh(4ugQiyZ~Ih(?AC!~wYWNLEWn3=y73#BOAhm@E#cL-HrEYj-+t;k0xRNo@m&FY6Wny zVPHhbP6yV z9XN|ZcPwnf*m_w_=_v-y^>J4x5)%&onH&qv;XK?YbVHM3DOYIT($|}z&E@+#hy@_P z14nOd--!_U`Gp*i!?~985sPxsPFh&jJ5Lm@-VpCe$1p>B<&~B0UK!|<+ZPh(%OD`I zD!*6#X7oJfOF8Yy;8wNw@u=B;AGYLW4(Q_e*>_eCbU7msVm}%cj$U*0N!?$n{WNWs z2g#id3TO}DsgAbfv9JxUjj_ZgST#Mi(Fkf%tgYsuBH0d5)3DlvP{DB%8nVbMS+FhH(Ki|d*xRClp)Ilas z9Z)3#x-15j+Nk_|AB2f`;s~j`tJ;s?R@O6$6lA2Y1=tCn-I!oKW;cVE_&pS}pS-81 zvzyO3p+sVh4Vx@JDHk*Ss4rV2Dt@ht zL519#GYi1&lPLt^9Pr%i0WEo^WlSpjEJ2TYE8= z8lE}wQSg8PzjyCZyF%hA0{;_JvhYT6trxU}xt9vZoN0lDCXF1gdnU8ty@4AChS2QD z^Yq!H4uwu0H0X=&bNHNtHWnk&0dF=w_*m=W$lof@JPyTtVZ99WXn-Iu4OnamLhyH+ zMMZRI$TXoMNDuUXDK|fO4dJo-$bYON4j*&yL)lK7=S&JbG7nZSP~xAB8U?)i9^_Y> zJ^j0VoD7d`tnB#%FP6X<&r|O1roeXif;AQRK=HT7gK;7cyBwSk1?Jlp0PRfvK9Q>( z(Gwl$-P7oHo`%Sz7QCOm)gXdI<`+hBXkHfiJUiPG2yOa&0QI-6s8S-~&9fOTkw87A zFfTIrzY{25)Dfu&h@mKo1e1D2nEpUdGV>;t1JjeYp{d9`P z!d`~=-9Q*2Z@VgUgjhgO!Lf=595Aqwj-570YC=LuM4d{X?Yed+bKu;Ckw)9qYOmvO zwcY+iAnbUP(yRNMrH$y)-Bci$;cw?Zk~iB99vQv%OMGz=F;#L_@rZJDm z@Lqi|dgt}bYEJ|hdsKlGsTxUx9WJ~_?I5{>JIkGL&Fy^-74Ff^TV$_$(vpwQG z#nz1(&1Hn4kC)sn1ImXwz&SyFVUlHPY@iJ2vyUYaB-=wSEej9y47d_Bq7vmmm>E{6 zE;PN8_v9N8h7ft;yqB5%>ByV@xDd^KO9kryWD?f4n?ZMJHMEZdn7-;1>&wZ<(rEat z%S2j&`oUA={HXSM4PoU^Ux!1Kx2VSH)SkAHbYNaVN*Te-Zc+$-&nO|cM6L9*iRA>* z2vU7XRJ!&hpnDYpFja+D&9+-+v(;YI(SlL%P%!-Mzgw4I2`b5lYM0%tb{j7$MiSCU zDV)E%*HGD3_r>$^N?NzO^|szapO=Z>A}X=4N83>8-;bzDNhaC1){s8f`)w_P57U*0 zLlU0xB^)SkC9419Oi~<9D2)BxM@e`!WW51M9;%YUv|m75R$mE_h){cn%0#qQKnl}v zD!mWBMg%Mk!kS{dM2Us5k#^VpSTf%#H8X8u_$~6LKvO8P*+q zEKZdj_Q?*z7F*5$hucEb81GwLvXB{fpIMQ&s?e_gvvgzvf^2#-1LMo--B-iuY-tXf z;5Z^rVtyugW5?ec!YmN`t0Y-^AV_lwMG0=DIDb@KXw3{sEpZr87MbtK-XO5hGFT=> z0d%@O@ytq!3WGI@V7% z|00&%Fx(pV-)urGpF!S8(rVHp&GxmlaYuq$^&BMH`yJUTw|jr!5xNr+12uqOF&2hR zJiHr3$B-uY(2CG58u*v<0wWshD_)C_@rYs?aTS1v@%Hs<=i$K!g$d`K@Ewr|H5|#g zKm6IZH*a;}!3<=tk_S?d0&B6#(~b@H?S9`x9mieJ+dPw*A2~=hn`QuU_#;8#5v<2b zFr!4mhTFKb4{OLQ@>=>}p9m9ZD!C|O=yYGlu&>2(d3*u$=EFlj;0D{W1$3%J!tKs; zV`omf)J|i~j9hueRIUmx@ELyNd+Yi%q12@xPGb7wEZBd&1YV8ycbD@021au1YBcLZ z9YmIcXxynH>(L}zxCl8@>JPKCHPja{?CJa;^SW1-K$&$PIlpDhq6q*QZX|61RuJQ? z*47+hH-uB8*=%bq+%*b9!c;jomCV-mv608bLp+K$DiRl9dp9&H+%x=4{h86qmX=;> zz2Up5-eGZbT3reYZaxsD(yHK>k?jO08zwOkxiY!L4S;BS1{Y32{1uht(~Pu5vK8*f zDF*M(9(K1tZ=HPaxYpK>zrT7R065XY;d+Y>#iR2J;o(%drAn(Yui*)ZJhK;`(p2|` z{6vsHl#&~3;!R<{t2bHlNvKM@; z9GW9M3D??w3zg#1!+(BJz2Q(0d1L2!PF(mhmTdW9*Mk+&->@8U{>Nj}pIc3p3k`}c z{NKvtue@<;5r;A(-Xy)(vOTL--F)m|WTHX*qu3+@BF5w`>(jC1T+8&7&tBvB$WV04 z#X@No`G(xDkkg&D!rFBS9fM}cDUZ_IH1iy2h$c6iHt9Amk65F&Rw8QgG*Ln zYRFr=RjE2FIdQ~Es|zY}@({`GJ>N?CgG18dkgfanx}eokBM~WY@rSzw*sN$w5?RM3 z6Fp1l90Ro2*UZn2L3e?|I|%i|7QGm-22DQ4yCY!A82MH_QhpiIbSkTgbow+67Y+0T zNIBK0jGoT`CZn92zCNq$UW4*2Zs}c8J6_1#I4YZi_A8<_Sgn~fj%%@SLAb-qJco_y z@f-xFh-in@pMDFof%waYQd%{&0l7uo5V9}XmV{_-_Oxi{%_x9Y)s~ncdsl&AxP#tu zcTqHm3kss=By{`^as>b*TBTHNDtE8L>^Jt%2#TJqMuv{H%Ym=FPoq?dwc-DdAZto{e5I%}(V+p+T`7R1Hgw z5vzu70ppjvH8J%L$HOs9y41C^ojHut5LZrXnf*Bed*_PiWt?7L&Yv$KN&muo@uNm4 z<~{^s@~Y0t+Ykd9I>e1~)<|{5FD~d!bydz;W@_QLV&$$jO)=7lYA7%!*#R23SJ^=g z;0^^g1&hvbUUIUHC2$={B1aMELc2s%#yaZ#KMEc8j}i+-zn}1>tn;j zKWa+7?U(MZj@$>G$igQ)6ymlK{0Ly402yIuAn7C|bCf2MOKjCyJXLQ-$UP;nh6O*h z)f;W(6$ngF{NYkHu>ptwxkYqN;1!0a)4`n}({RxI10G~&rH{R3Gx8-y0!H zWht-KpvT)Nt|q9w`P*$pMRTsn>CKpe=UXj4q0YXT+&WT=5uO`yG7Pm(+;3$*L>Zff{LKtrcPeINQa6EdsE1e4a zw^0WIxb`lD$SEunrqzolduL_TlaD*{`*2D|?IVj0Ppz19#7r#@BY`>n2^bG$6dyig zf&N=+5O*bOw-q^VSjKys;1LS`Y91(CXY=a#qb2sZi88Y(iLjl9cQMp z=)q~S@|iB{Ztfq2q0aKIH#@HP`O_<_xSpsx5S5Npdj0<#h{Zf0M4$Hb{P%mTD77F! z`8n#C{b=&4D{3OPt{g@)d6$||`KX?icC9Ncc2=)Ag67lBridw+J(0Y!!WS3>ik|fY zFmtnd8j4<7&T}M3rbJ9RIo+J*EVw5)ntDt9tRtN=)!upTLXx98LTpK;iasfx+Y!hk zrPHIOdJMrHT>)pDablhSg0<9Lb}hB(eQD+-GRT_~!!gl!bArE(M*E&kK$U#wu-OAh`WAQX(cIQW-sw zG6)MX{_IaJB|u|XL3-hMRw6RnCWpHsTF%!?NO+IVTz%nVJ#MI>n{~=;F#9==fA2gk zy98&Hl4QxyQ%#OuE9FBdQl>NI1nS6)bf2s{Us(y|1SY6ZD(K8sQ9Mkdtrua$u5Al7 z?j$}lA*k$3yaG9nglB+4TCQ9OMKh}BYN-cR{wCT48`R+}9R%ywUGZCEWc?a0hH;OV zzEXjNs)%Me5+y!Nm@uGy%$jQ^c8Zo|mxQ+35HizpX2bHDvj;vD2u;C(DPagwFUanK zAp62l3NfDihvM+stlXEy64_I1*mVU6H-^I@8%UQNWR_p{L%y!^?Uji>QF(APK~kzb zHp1hhFsZ?DmE@GGhbHSM*;2))C{$e?RWhjxIYf8!Kc|havAuc$;J}^m+1b(`$*Jwx zpNmr)s$RN0)P`mwFE?5%TR1qy)5IF$P}l6J*WmN0bomVhD@S-1(7n@gg@F{ZgvlKM zVRJ!$-4GTf9zWRzBWowcsRD;X~(S~VXWx=sep5pW;GFZhnj87i8r^~A`Sy= zmjRV;Wf-;d1^kyNNMtPertV{Wd}R*Q%7YzNgM;xJx#G7;tmd!eVjanSbwG4y#1Kb0 zcNpK`wyy4~vI+mxsUfbnm9zLe)0xb}hThI`3A(-fTRHwzf+Jmg;l>HAd=3~*N-Lse z05}W%LEG$~0&J;^J=Tp5O`j<$S)&PLi4`2nIj0*sG56-tGEoNgg$+bnFIbz!-P%Fn4Or;oyw<@o9X$q_p^&cS zgtBK~p&MheqD~R2V({{!2XvHG29k)O^1L1twgZYdw2#vxuOzVzK#M~>4LurwUi&Eq z#Qu2@UEntVnBV4gRQ`(x&0&2CfgP13grCE;Gu|O^l`A?!#9OHV1bOVnh@yjof`~CZ z#WhdR@g4(;>uzGWq1Vs3jc4;8bJk==5D}e*IiLpd>t2pQp0e#`${%3{$K}feHIIUg zCRP#D=2c66ag~JXdRCc2bWEce;CISO1&Pp1Xa1m6qx|?@wIRm<>D=2TvL_)78SKAFy-n|>I ztW7Ykt1eN)BWt8{I+=@9QsxOWSe$q7n*=z@Gu!c4i-9|JWab-%^G`GA2YB$!DvBX{ zz*cVZds?qYts%HMhPHt?-r7;WBpDW!e8M7h{qoC{(fc+*A>;MAC7ncprvb59u($!3 z5X7?0+NCt>sl1oPT6<>u72l%zzxyd4^8EN6tNIDg_HnIj0~y0-R~(%A^tCwc>wvhb za+uu0x}=Gw5{+KtH-ggH;Xb2MW++1oVPGqIT5WBY(w!1{jZ1A>_6PE5BA3#~DbMov z!MpiGJvJ!EtFcXpPQ;GIf87Jgq|lOxL!K87V>GIpCTNOg0jXmamI38hWl(5@WNP`b zP`y1tO(PNPyK89KJ zAxYgajnRV2>*we;muml4^k@DrjsRP7=3Rx(9lvnS?v~P*Szsz@@e;PfjFVtH{qidO zP8DDZlnAqzvLLfMoz$d&CYR}Z0<5|zaBLX5u5?uQkj!x|&VJw5gBxqOYe$R|kF&{( z)6v4O9|Q(nM=;c)djjA^Y zx5!3LwgB^>kWjgQ7XFzJe_b;0l;rJL&5zMe)x$t$pjTS&mA4KmS(aR|OKt)|Abfg-LQY~>AQa+$iSH3Gm0@$gqF0H{u)HKYVWVY;9T?n=*+F?e>q zJHZ3@gcsFtx(Hrm4qXeC0lb}XvlR4xVYq?pvBjw{H^4-uvbmh-fHF>ij8saIT$ubQ znFN|XSienqth7}DQ1H*;!k|wS=}50~j2{pma{Nw%$!F8oB1c~Dl9ruG_d6T1L_HAh z0WAYL>9=|r{h(nfr>^};MEgB&zh=EnWiLS}4FLa@;4ufEdptXUpl>i(&VrksKO?m+ z;zj>QT4{L15J*se6^XhpMrl9xzw(AW)gMx=;C+@2!Fb#38yCC;7R626fPh7P8<`_R zHIR{IUxD}4M*~WhXf&kQRvp`x|GJJzGHOg@cjsX@h%g)@1{Jo47_$#=ZFj8PNlveH z>9v=f*#MJtA5R_~Rr?J_bI0>8V8#;PraSAJpMvB*O^SUsp6u1v@V&mM^XIjKaXA12 z5Er=wuk_%Ee^r9yt_4|*`>HA957o~w;uKpW<%fXG=5V7&MB z_2(Zr_q5XE=l!6k-hi6!&hJ9u3nIL&74zo+LcK!$9ht4_lbdkEbW7!c0T6f)uDQJb zIVX1Kp2(UZ^2AcZ>`NW!yd19_Dl3B#_yC{0DbIX$H~u?Y3nkGh=+<6$d1llCN=Ko% zMJAt<^klj1GZ5>G(7F-?(7r%0t*jr~Y?EQj`B$dW6l>w_idr?gu2wL-Hf6KrbOsjU zV{-9^w_cC_Y!HkSSU+$f^l*#zYzgI;%hdFR7N_D*eu^il<#E$ao-elga%v*uni)@X zhxVLUvCTkvsCkxcU=c}D;TOE6s*q2IXB4+*@zUG=nc^0yflVlEOY_{}U)(}NX4F0Ub@0UeYNjIH8@GZzJEK&Z~z?lkox<69xxpQS@>ihG6uK=i!I@9 zPkbeT<60tPO_}K3_pc`I3JQO)xTzSoiMFm3p1)SmesD9wpm>tCIR0;FfBm6-DRF3p zqR)Q!xHrpb(;CFBzNlB!K-cmp*tuM!hF(ATfODVxDOx2N}Z2pbqGS-@H? z+c+2suVDT@u%;dN)z&sQB0Yw^SG}sGIQmVL2wTqAa7`aPPQ8O3s0rimZ%aQJ&^2e}ZnIw)9q9fJsfidXtF zQSeC-cusbLZz5oz0VRk@V(C?#zvC3~GtEq=3FBbYzlAJ@dO!`V24u&mN;JXQ_~slE zW$4!3sp(w$SqcS|_Nr(Zyx{@9*Y>bBhO@dQNlv+b9#Jd6jP?F}#^k;t2Kxs76jG&48o0AK(~7zitzx@je+b^J2Fe@DYTj zdT!+k%luw5^|e$DB6GTF`;UY4fSZ@M3VRtzT>q?sm9CpP*dSZCmb5%%F$x`pg0&?) zqZf9kz>W?i-yH1vB{E+IwYEUAk|4^61+7&Wd>3C>Yx7Aa1%%m?8nwS=&Pi6!7DfYX zo4qiWl>lGi|DXevTk|13d9?CSb%$ryf`M{}!k#2Amtv1VF7ZdCL8(dBHYq&023^I9TIwrbiu%W(umkwWrM<8Zf^c42QJkY z(5vJ3pGupd5T|~Hrwz$!8S^FjhW<|?5I>=%2qQjwKNb^`TP4+`BaN@J^RB;qswq*P z%h54F+WRegz(c(Lc%h{-#5qqm%G;6+SM=yOmXD~3>vILgV=^%)&V`fCt@4_{x;Tz1d2?Kkj>cp(?O{5oYt+1zRFPIt9RyW zsmbcR`^4}6bFm8?&DWM5;X68I#g+pw6dv4uzb4pAJRW{4Og|KIAv}i zPi(WIuH>jvSd*^AW|T7&-0zI#<&x%0a3v;?Y-bG;{k~zc446$Ej-g~y^?As*U-M3e zJPz;lLcc^?M&lr*xQsG9du%eN7G}#aEAkd%`*guYhAOMriK@P#t>3C3uUdVSkEoP+v5}9a)rc2}-+!B1+!jq}3g8x9ic0*&sl^ zT2EFBhiJQyGr+hW#{F(XZ1r78mnZV;)n-XXB%AjNuu}hYu~Cu9e+N^701S?rj-Nig z7bXpKGJN7rz`e(piXx;xMZG%Dg(FUpPrxT_T>~|k*-hD{0b)+`0}1C#2u&gT zRzQT=Tc8$T|uU zE$|?n71I?=H>r5)8{{ig^|MBBe4_f4L5oQ(oCSnhvZHo@KENPIH4sHSXF@{rhLs*NbbP;Zn2ux1 zIVMmo4g8^t_7#2CQ}f~>b+18`GJFHlAhe-b!Vj|GpK6tf{ZX^z$vCX=VtiWhW4VTa zU%QPYl6S z0*u2&r_7wB9P>5!RZ<1`&uVa&*j>|_bCp@H`ylt}9;%b7n~!86W~<;zv8|6}fcsO& zUDQKPsvXJ#-d71?T$$+iOwcmDsI4h zFw4j@$6WM;>@_swV`2*dI3L6umC_wGSftHiR;Tl8 z7%!t?t=ifi1drs0bz?9JrJiGwjQTS{GYNaXIjOic?jaGssDAe6e z{VwIbs{kq?f*5#*&FLZHlUf25Uxcba0D+Pb8o7;eG{l~e!eRBgF?TM?TXFnrhW83< zU7(WHUE{^1OW-RC()LZF#OI6ureNM)Gw>OTC7V;`7)lN*KhqvG!Qe4)^B7b$LsKde z(%ed1;pYsGnMp&<(%mcERYChtN?GUt9IK;wV-8Ss!wUoJ`>XwAG%W_3Gn6yh6$ z?D;UOU(fsA&K9uamx)C8*#5;+CV#d&`pO$gD%D*8P!fzeN+G}dvEK-g#<$M7am9$L zFbD*tCvdwST+2K}1p%P&{ z;+zyqRX>307cQ_;gJJKkAd6&$a}H<|L&ukHFf7be zkag8b`ff$o`#5o#jNqK;;bb)$bOifSG?RN=x;l)tn@V;cYb9ePP6rV^ew zyf+#3fmz5#$GQrr@rdXoS;6F}@Z17C_k#m#*X@xBl0yxje;I_qb$M<#1@^sYKzV`8jFBXb5rL< zNw4pW1Atg12O~gO%Ismr@`vugi6JDt*+)XVR&@RlcG^-VB`IgS_$>0A$%&UV1e@RB zHC!4y1&vcT`45y@<=qq{lPAFckT)V#p^*FI2|9kTgS?&o=j1=Q2&-&p#eED16kJOFba-D5C^Ty~O~nOs zD;3c&feW7iM8c~kw_$UNXgS>0v4yzIhgSpsRTOSH$De0Ph$!ZbGoL|Ln=rr&JrqNW%Au4;cE2inFwqUkt!QL5m3vb2DJQ5D5mZ;4l8 zUuZ#y>kF$l5n#aUJ(af~86whbIEWxIIBN80uIK>~P=0h#KJ{I=KHF#;&A6=^nICYR zNP`hKn#fz$`Gp2fG|g8O36AqxHf@Zi;u#W}ldiU1!e}II-`ll$=tT%doBVs}5q6wH zK*P5_z2@+fN6v?fxxERTW|;=iCgh~(M*V1=zy-8zf1*jBcA()z&pV#k-G9Z<7-?J> zZ~+TZ+p2-x0*UP#EFfb1r)(NcyxO{|i4?2WZ3*an2O8dd8lJbrbC5zYhTfI(-TOSZ zbMtx(?JuOnDUe)9!;w&QTJ&rN8xsP=rAV~=446A{=MoV?M&`O*>fTxm=6cIR^=o8V zW^>l7uJ25VEaYIP8H_th5LZ#jn;j8YcqBDB130^*lK?M>syUwqJkChdjf&y>A)V%S zZu}ZrW(6w4rOt6f!aFdOGqB_7EZV zp1tDr8wZdwmjobVl_LwA%O0^htAe!d2AfnHPJj)FqJ>2F=N_sq!m|~;&7CrfOmG*d z>LeWuyj87XW^HWw{huedXocqa@&OLQ1#IS&Rm+;|D=8C8l`1aM+Q*FwMiDaj$^Q$H zmX<-6rZ1JYevs(3@RV$GkvC}HR}1}hF)9v;zu`ue9fRS#J`MDWu@p?^4u{PP)m;1sa14S#ER!vmaF&# zLjhY&eg+m9Nv*hfAyRTaZ*pN1EG?|o{9}YH3-%mdL!uiI zBo8a#T)u4syw42CM*$Ed$P`Pjom~F;HPdYbqP2~|#Tk;8ii^spKLhhiJH$G_O9H<6 zhCY9aYhff4U2mZ!ux3cV<1+%Kux|1~LI_VY=SZyHpDKBSViI;v)LUeHmojNe;CFVj zrOr0(PWTfzCwtQzuM3K!`z~*p^HrH}N%Y(ZS$N^vxSBWs%_FUdpUw>UCPj-6GLS47 zzrCABg40rw;IHH1D|BW^fK1Q7^zBDlf!z~Cg+{yQ251@>j%r!eV8oa#GkpF*GH2L| zHpKZunRA_EuoVni*kwTO(z*{>9&lYgnKVxV69l%M=009lNL9EJSxgqr8d{EGvJ*={ zl-XN>Q*;k$9X*gg> z)WKG2HHSM((UX{Rt&YolsxTndX(*!!c@Bv}*oMCy>J{d^pqXKSK)kSX$~M#tpSPQH zFwz3Nd@=3;E#SZlWAi^NhIF2K0)rLVLQQJ`wfxou3nlusq`i$w+4X`wstyApVPZr{ zD<8V{#ymF+(28Y@S@uBQAxFNIs@JI<4UPefpgh_j&YOdZ!%XJr^T6z*ch92f=&7NU zLA0#z1sNOy4DIk7adNZwJ1%kJI;5bkykpEjTsdv{Et|e4=vwyV3}fwmIg4<^wd2-K zj{2>#t(DKQ$#GI|ht6+zJhs?+KWvozHZ?uM4)KQ$G2`5%Th8r2V78}7saC-8@=)W# z{m>vZbqRZkEn^M34Q#QL9xv2 zLn<0my}rtRT3!2RX`gCfaCqULux#Gd#-)fO=C=F_DY3TTIDB2u{aV|Bcp|=%(WSe! z9PIvtd1Q9067UvaRTikqxtappdJ#F2O`pZcPCK`xi|$MzYUU+xlf z;L7wtp>L99qEe=FEOn(aLFliHKjMDyXu=HaJKA@z40_Lnqu4 zA7av}qA)lLQ4ebrz%6>3r2(YIthGB}??CI|d5jvcKUN^PU}7{@H1|XpIzv#c%sT^y zO-4I#%41jR6r^I{zgd4r>cRY&MWRiJouRxQ<%e1&?i*MW<8jQ;n9j84nLSYY)u|)6 zE(c+H+;6*LDWOLLpfQ}4$~<`Lj@Sy~$BqefD>#!@IJJnvsJh68Zcr z#!yUtmfrz)a=69(L?CI99O4=p`?GE7aY@!HFAq&}dVMSG`7_~*cyMZ{Pq?3pk$^;b*@fXG zRFs+78-R%!z!O5ig2Fb3or4U(4HM=Ij^lFbeOTyEaes4iNGfZGDJ&NE6;BX>P}k&< z*|Ev7WssUbcKyv*|L97S3^~2*B9zjC%^XB*AL3|rUYaMiyx`S_&&2|tbTq~2>z|$^ zloqww*geEN1^{QBUpL)ib-A##74GXkXtCS#BfFFE9{AoHvUwyv8fle#-Mt=tOGK?8~kmd*P1-zM9i$OaD7^axRhcCjgs{vNrh8 zdqPqab+}btfI(Kg6wgDd(RnCN@7-;? zx!`-o=;BfCn=F(LI@eiYrg;&TQ>DFZ%8g3oKS>JN?8Oz%!vex<0o0jQETAPTB~n53 z<@k%2G`0;#DZjNCk+ejZhX%`|ZJ0m%o_8uUV_Dh~KhYO<-!)&) zWnv#05j^0{CsSU8rB&k8aQLcbrh{n4QFj*#$X|y#)wM4;UT6K@|@I%~bfHyq{7twlYGms$l-(HnwWh>BR zC#lB`b1C6pjf zt93OmwFo3eb!IT@DGTJLAzRf5=dVbk$Bei%ZtbQ?CHb|Ic8ZyHNhn}W#9fI7DDTb+ z2*B_5ufZ&>T4MN1KH;O4*=~16x3-1qgQPpSfMG!D1oy*Z*2%^%+AipeOIudM@5O!~ zY6F9UNge+vb|ahc-8Tl(hBl}iuzp&mqTJaB({?Fu9hB~~DT=JVvWJyyQjQTAA91^I z)!)pJiLL?LaNI~I&j-f#=|Ab!3zxESB}Km2Iv98 z_-8TOjXq&w2)ltdFtdft01v>5v(#P*E@hZ}vFzNu6ILr;Ul_lo0|7G9Nk8W;K-5A; z_ip~}otNY9#rmo?qyit~!!U@ZcZ`;syL?`=fTVcHkVk`5>;}0C4n0RnK6Iff_ddeu zC3;N83eP!9dx5-K-!Z;L9es!5`7kz%?GY}KN5lckv^8SNQm0W;#a=#$^CRclf-S|a zi&*38c0aSTS(^@*$jgaj$;cvaJOad8Ct>pxhyjLD%NHS83v-is2?-wBcV>`HjF$|% zmt-H9%nJhk@rZZDb51B*6r}m@u~a77!VzuR7p^7J^mE9}jo4^@nuK^4_3$PaRU<-5 z|J)ZbcjwJ4!TDKWF3dT!WtsJi+~uZStD0XEu8-Sc6M4&vK~|gau4Ei8jyu(BOuOcR z*+i1s0b!}jFUW}f4*46zP%f6W#JGGLu{-5hLW2A(HYIVRktUtQi2q{ZS|zY}`*ZA!xi2ZEvb9 z{Eml`kxr$Al>-E8+~hGQk|2lvH2F)m*(eItqIq;}rFGBawfqj-*_9Gi@;sRG=+4QaYB>9F~Q<#ObJrs&L2GJ-GM#i#GMIcc2GIJ}JT z)#N?+awd@pdcS7f9i99RqCH$3+wFqK;(|M2_vu(f$;P_G{|bM0c9N--Mm5$EQ-^c2 zALODMLQ6rSEocaAi4T%DUk7Vg_Gp)Yk^RU^g$XzNWZ3#~Pn)66P&z_pRG~M55^Wk4 z&6$d3maL0oCA3EN(dKlU7I%O1eESb{c5`2pS<#k@e%%SEV4UyQ`E{+e?zVIu{Uh*Q zHzih0Ms*QCePL}(P)Us9N+Mk(aKnilsQu0rN$YX*{Aqt$$_vy#jASIoMO(Sl60l0e ztD(SY|7zOm{n>-VZQvQT_zrJ>cG0r8`2wCaW2pxnU6e^zp$Z73lu2vWqSi4?z)bJs zg7FQLUz)0ptr0Pc2bYR3V&VS^-$vM z(h_V>Sg>C^>|NmNK>vYe&~kdTiUa`5oJ~ZQHhO z+qP}{e8sM*o zpJWCWdY*M=5W9b}gu$K~siS5utV}n77N9TYj>{1F0a-LEl((7v&zB=+Emtj!8~e6< zS#l{>E>%L*Q*kqPW&pu%P9zN!&2`;d)lh!n2=tfSViK}k&$E=Iw0boCU> z25cVCF3jREMcW!zoE`;qGG(`!J%gf){Dy-zDU*d*lUbiXXn@txLI@fs$ENZhP{_O+JI0Xz|t8nuYkHd%2 zwcD1^Xhf6W53CFCnS{#KY7IxzSSG||Nol*sV<0tilBRLlUb(-}8D~!91j13XI`F7I z6SO6rk3%2gU^_}TWfa!}IaJKAEfpAgiVA8X-cNUAD#171tec1`DTE zz(dpd=t^2#3KJEwp=CMd*5fNs$(WSVyBbwg40&hu& zZQ8hq)wd24ejs33k8gm|b+jNxb`)Fyd7B{?#SUH;xKo{qYY)>@Nt)rbN+FiUruyob{uXMU3rT)D+gS4qu$0$R7#z4dT119tuWoe}+V zv1{9afkgmD!1^y;+brfK@XwP-T2siw9?K=T^ zX|nI_w0|__Nd8hqTeK9HwAy*d6=%9Yp%+7YPr;}@zUeYWT|OaU z12w{fEpb>eXA8v`_PNJ&aJ<{2dQ?9}Pxpa{J)~v~c$k>jK=rQ?m}pl5bmmOVCc|a9 zKn9W!3rRHa&clW*>2Fvavj12ef*co;usc$;Z4V!q{JmE*{q6lq1kpkzDm+cI{qW_d zs-?uy{1ZFEt|3c7s_gD;!s)_JUNc)VgL!xA27aI6x=vtl1BNHs=48&k+-gATR$a3A z0-v-tE$FXl)rcgB_LYLbKK<@H{!!%7__BVCF)&7JWuTpodVL%6U~3{rRWhxDOles? zUVrl^FfB?gRJ4QaSpc+Qd($2y|x!X2J8}_Ww!mL zC}u^i0(E7pg{RSKE8iPUE~RDDu1StDSGx=0zZVtM0DY3ej=&GD7-IUyg zzo*aQ@I*o0PPu^`Hlhz+jFAu*t=t2BbqUi@4jznFb@Z_A2nx7q(P8atO*?@XtM?jmGSbx+x=YqiIbFQ*)b+$Q_AkF)nP7PDSbCkkETn^n{1QY z0BobI=@DPf^s1TXH(fW7Ld5DO27(c6R(!9CDziY|$foYeUx=<^)?nOEnXAS(6AP?i z?NRn*%hnHzQm43Q7jN_V$yIEMtpBFH$s{wyj*36F?X75l?I{htVOn2xv!@sPH$nvN zBd_(3tefE5mrvuu-UrqDRtiO`pKhqf5JZ01#=z^A{jon(m43Y{QNimVaNZj(h_TGq z4W#uJT<|rxsj!Il5(sjSg=p_7Sxt|(C4e!fUxxie-_pmx^x>2sD#&0L{%^n4QkmL; zk?(f7a9=KZW3nS}$cSza!-z&QLbB+*{^Zvbrk`kr#hu94c*fA$oB{vWqOImEXDx)2 zP*tMyk=HF#vG1^Vo%eA(75JSLLEX<=NLJmoef|TGag+OddRx}n-<*pb^wu8@f7MjJPi^%F`KjNWLviE zKMkbfg6i^-o{8oW@EKB&aEPCQZb~=uuLuQy-2UaSdK56v205%xW1}Eom3hipYp29u zgo~~1eR*&7N<+k~tW%On+C|<&>9&?`VJsBM^iPhmQ|#3i8AwR)l4)$3W%jA0X@EWj ziB2(vomG32X4a48qMaXRFAUAWB$}nt-sT#qI?6U(3O@2xvHD;yikVzWWnu(rSn20V z9kDQcgO69GJ9qyc(qsN8zzlg%FW%~>ToeDHKds4+)r zdLBB}4r<-8c`%mkxQx!3eU&=^`CI_SQTmC)Ut$}9cq(jmgb%v8P0SwmEHMVJ)NPjp zWW^C}>}qhQaZ22bnv!HMEnl6O_Zu#t>$R!HLa?FkeLa4Jx;iNoHw;~EO*|fhXkCNv z3OtYxh3BGEfAc%r(I-n0^||PyTlVm5QRHBeTNX1W$;w zisNODa-xkOy^o64iYks$6`Ok!6moWf-sEVP5GySMnsB~NUEpsw1n23qw$_L6(9j}9 zun)vXif9KTTRwvDlr`%nXceeOu+d2R3FD$ZCT~H*{9kfgwF2v4<|Rxe^9EnUeaSj? z^!HrYwIy~GAJr`l!)zbWAcjdm@R|#rY$waT)qqv5n3Hh@CH&$ZR8PvlpT$%QY?*E< zzeHxx#tTh8ozKfJt(tmN>~2o3l5}?;)0|kJ5TicA%A-ewV>gaH^&ph*N%j0n6e!tn zd`tUmJGfMsIMF3H3^q7MSV(ll-j~#sgJ76LL7?Dvihf&9)wnCkiw-N&*Mwe;&~*Qp_6V5%}iIVy2G#4PyFM5C7hEsN;s~XXeQVB z0R*zCnNuwpUKHB|F@RTGQulitC7CCCFm6dKl(H(QSnaJ)T#dFK_|ny*w1LCCdZR1R zzwIIh*y=Y(JCpV$2?yrK)VdzbzdhxVk*QfG;~SGbyGLa+4wcJlk;>o~b~iKB`Qp$R zjRO`C3UNLYjR)MkU??1brYFH;!uD1dV$Uh-O9$N(=3VA>`Yzu(bUKC;#sbO?1VjXa zz5w9;{v^|M-Uda2v{z=_;}AK==Lt*pEmGQ83daZP;j_TTF*6PS>EyBi@m^jUp5cs| zI|1d>`Dic-)o{?K1Qx-iT3~Htq ziOsXkH`fQ3@AAUF#(0s;cOvk>AWy=v(DKuNbGRrGIU4K)Ik%s>qP3rtnmZ=fmSjTV z0F)0i%(A{2J%O&FrZ!ova0~$!fdv6G0o0#h!sNT4X8vIZ;WB1Kn}B}?7@Wc6U$>Sl z1AIRd0=`|BqaO2x@$n=Abfd$-I&j51=_fWRib>UZ>C*A4OO#|d+I!WAgOZN-_0esk zYm#r_WVH(L;f|>H;(vYv8#96`9JEZ{Clm#kPdmt6N~^8<2=1~FFtLO%BxIM!OFDf} z)Ma3Rd7B*OwwXPckmv}Ow^X4%Odyn0rp%>0XJ3%TsiHbV-MI4KV-OF?s}Psjd%37m z2&ZRErv#~b#z)UO*guS$DmcTOPf(0Z%8AnB$^hX$p#aouwbH6n1NX#R+E!|n6|05e z!KP~b2RYA&rVo z^!QM9@0M;Ph+&l6WHPeLn57UfLT_h-c3XFW8*hJ?RwQeqN5tOtkNe0u01IxnAO1gl z*CdOT*Gu2Appi>;JIJ26qLD09as$f}yFNmI_x9`#ss#d1%Pk_bO@-^VLUwsxOB0Ds zy6UoFTQq4E>K0J2QvB`8vHLRN$wZBV?Bbr!=q7%VJfgUoi(M>b=+N4w1atP~NR(-B^MW z)8^xXin4=3P+W8K4mv;|aiEBf_X+2(NByn#+o>ss#A~UTc6{dM7jPqwhZl!copZqN zA=L`i%bl3K1wo^Ck*DkoPxg2=;K(zB86|-E#akRwTw~URL87aRF~-y*$}4111|*+* z0KniGGd*252`s&dF|n7XMB)uQ4lQxT7q!TlDWIK47Qz?l*OC%kNS-8DVpw%O&MTH%QFbXI?Y`NY#RmiO6y!pMs)3d_JJlWXn3Dqvk-tVLZ@g zNLXQ71Z*_<-8D8Bk@Q1cbbd)uDSj120m3qPV3pl1cUIxfb?l6p z;6-?`NhA*RayE8CmeB+${rUso+jZkdn3#>B^980;CELQ(1p!8_7mZ<@JDf|`4n}*# zQypRPWTa1I;x)oB)9dP>3*X!cdn?oRCZcY7`cI47SZ?lS zR}!Q*ZHjOkW~vtoJE|mHSbZ?U7VF+u6Oe~v%*6b!!ov9l45)w=*V0(BD`spnO0GZ( zXoOj@6!XD8&^$M5FcWg;jX?#oyt;g9RrYR3xRA2O)%wdM{Qm8CfYr*oROB7{3(U)% z_YMpssmKS&s)R$kjwQen$ZHfcM@&<-*Kj|G>_l7Tmv6z^-ixubHaR2s6{l& z{U=?oQeT6!JYEsCB=GOHl!S)JHmjmTcovRY?h)cKDWL#rZTR>~LW56b14L5gSXaB! zBiFPxTfD<0{1p6d!y~ab8Om6G8Zki=y+fc07#TWkyAANA6AazIe4CH~>g~~ZOw+K; z0UDo`HPzLUn|$TK?05!|x4OFIk`i#st%Z!_9AWc%PGr9sL3*Ww&eoRM#2P<8kHiT1 zWg~^-+Adl!as;5+&3wJbR3pJq7pY{u>GOSt$)LX)VnVQf9fQ8lIO)ox_RvZ*Q|;eK zQi?V_<#W|SZ-VObYe5U8Mdc$e*?zDXJ!RxH5vuIg>*5@TUES-h+z#jcDu0_f!|2p$ zUA`S%QZT)_7-7*|&sLGPJ`kDfhI=nHaxc2f-NRc@a}sYn<~T!OQ3U=})-_lL8|9=N$CI894=B=Z zuTOXM_kC(66yf%D%v1_kqr;#|CuA!Expo7pt?^Cyr`c}&p<3KhWjp%wA*JDkycp~f z%q*?;m{D>Q9|c@LdSUQTZiFV!zD*ux?W&}hS&SKh(Y3rWi~$e9t~C88-Z+4Qt%b)8 zFX7csKU%ap?G&_>10p=o`fiqC_Dqd23{)M=)>Rs|4pKTfnik+gB!-PNg7(SqI&qij zmUYbZ{DsduN&3mr(d~nGO7JstOI;Fty|uT9n}TAs_@BoES`afWYY5QcWfxakwD&f| zk;*?!@V08Zp_s#(X$Gschay89!uFN^95`7qK19Z($x&@^DOB-+?QohsEF~rZa88mV z$n>j9nGKT%$w;L2NaX$3Glaj%)q|US)fyg;Ow|PtXmgm2lwh2V|3F*VI;kRJmYHE6 z?CwNEGT=9}fLYz(;gSZOJv1$NK60{O6+oo;6~w3+?Lo-g(}+i&8dt;;Mcq{0VabmE zvJhe!S4xFj>h}yK*1G+Xxo5Xi6F4iyL|DmI;wh~RLxH+-&p`3ilQCK_>go<>Pvwej zRI5|oRPkbQO&qxva%XMR5bmVQ+cG;pBqp}lBQ?{?@DpFCX`iHq9*!?8lP2Uqu?o;# z2J9nY*kc|Q8t}2NTyTE-{%fDXQ%c^;3op&y7jlz1tUe63p7zt3 zRlf&-X|bAy$2_KsVpzRQ9n`$OYOnWzw&Hv9CWTUyYshGb}K*WL+BJ{@!56Yqy`}(=yt_7gs1FMj( zcC4pt62TRit%>qzG|@cPhy9BI?3S187&|MDDpj4fIP8zHNyoqq ztG4SS+0}utKFRLxRS13EV*n|V$6t*KEn0!cTNPVl#Ajnk>_+GBR@K^pKYmD4YWggs zVa}(JqtdvbZ3y|{j*xK0Q>M3MV-!M3f}2^M@k+NRa+sST16Gi*FtMb;i5c+Z!j49) z3GW3fdGGgev@J8Ktpy+{$R|Ft(aWcG5h95sd>Z`%T|XuXbK}f{*flT*aGp~|K<)0 zl45C?PLsn68@lOP*xeU^BaTt4%Nw$` zT(B)oXEh#WS%#q(^yBH=pqM$%&vxDwH6fZ8Kt^)^eyi#r5n+=VTfAIq_O#a8jkqQP zB+~B-L$JYMJp3GI?VP@*XwKPg7vb}UF;kniC9!i3BgSx1^6x|a_quS3j>4&2$! zs$?}iInTWiCG@6Deh?*?vqONSq>s(=UA`xZ6G)8)IKIk0TJ(GMvhJq~B|mrPwC=BF z;N*!d&Vf?M=-IwH@7e!8$IImt-|SkL`C}$Ib^IN`v-T0H#ZNqKu-N7*-2V;ABN|%D z>jR<}VXLGLtaD|lsngcz`_hB1528UNIBPad_$NR&&64l^L~2~PP-IlYe|Ef?rQ5Ro z(Gk#%377LZzx2MzwVF^mogabRCsIic6;6A5K23?uKwBI(jQN8pbAy?AVnLgBEW6^9v<2Cp;4{;!!YeNs48 z!JY~|nXmVwmEF2GVHO#hg2{ZQ<2VEkW$wrb@B9t~p(f zw(Jnr90H1=x3hfq8IqB>@bV`Whq8MDpdjRw0u30e3}vKY{^)aeBWyK@K&$#pKG#8#$O#k5=2s~!X;QNBGv1|}SCPEh2f-`p>| z4@HmI;*|9aYSC;AkFK&|)|!IUzgDw?PWzi#(MKd3ZKpUASYhE@a7F(}2?>TF13s7&go z4tIf*0y_Q~^O_u92DjHsj0!i@>$1H+YMil?Z1)7)_S=?1ONZoitaygtfot)C3WQ zyQ>Zc$C&ak5j!9ZPh-Z95wGds_+;fxX*9>kCsq>BfsHPf=|Ynfe<5xRiOhRe{UPh3 zi*9CD)EU^>j`XRc&MaS;0s<=o>Ctpy#c7><(YkOywt<>zg6!e=iY(UTt`0TvlQAM- zSjJ&GUtKyCc%U)0=k?T)N?NW@QWaguHMUbm!Chd$rgaDNb z)mA$yRnm1R&>Q3K+>*-{DXsrma-f%--H#hnrO1C(9>>v5(T;tc*5o`zMqblJE_w_{ z0&F*4X8llDNai#R1Z?2n8SLZ2j4i4xBWhop>lHC`9oS9;WlZ!!pmCJBdO5AvNYw&> zrFp{@y6D@Ipd5fbx86kIxog;^Uk!S16WiLc_$o+Ucu~>FvS+U4)pa&;%5i8eM&akUpq{%56fl7YVSye`{dF2jIEpDwRu6gGQ)LM*0v4? zdGpcjq>(L6W8zSa5kS#chXu25I90UdXfs3*$Ws{k$rkRZ%|}(01tdwKbTpN=@aaHA zDTtbN&MRDm*U4T_;^6nD=$`EL69%MfxgFlQ`5b1h)hg~e9OMYjV5jBSmBYW(qT=3r zXL2o}%{x5d;-`x9aRM9MxS>{qo3B>gnLyeX#6RMTT8^@*^%yqxYidcOR;#41XNTkX z{5)t3C?CWUY=;)9JKAy}vX`A#zzGjJqv6tWEP@jZDOnnET(vWTfcS)^9!N5+6ITWQ zY||W>1*|O2>`K@Kp+v`*GBbVGl{JN%W*Hx`hhODuO58O*_pLmqON_et%nPyh`kDJPracPmT26RIBb0VlfWls1!+JU zIpkr7=8nfF?qw5Y;ozkHx9kr;UPkkapVzrG{ zK9qG9U*+sX{i)dB^R+=ChU7Ly%*ra`O)-EveoXH*O%MR1FYP4FSLEleT!M)Nn?*Bn z{n7`Z;?J`9yC5b;4@kQ~cu^j^ITJyo+XN%YJfT$ynwP6_H$_k!GOS>WWe4~>*x|JW z)5|3*cJ$Ct+Ow3ty^Np-11z>Bq0`~ z_^UXfjFE7&f^i(dsuze`o~!(sz^Na}bEbu#z$u-r(bD0m2(nFF3|anhs2cr~$Y+eH zB-xxjI97_%%%S|uOz8tiXbR;OES&374QJvy>&UWh*G4y&47$}j;b}k*6!mbbGH`OZ zZ*db@vnR8CiR|kLB3Ow4n74ieDus7(!`H^0MFEYI-r&}-hByar-t$mkcbI~VY&Gns zk4PSNwph?t-s4yHXIS}wP~7HMyJf|-khnMTn_Z05UIwYgBSvJ!GsA`lmEn^4kR^V7 zIJE>54wRw9^9xdAN-V&!GUkc^g=Zz-6OsxM4awiOuLCJPQx|{Uf&)>=OWjg<<;flO zUbcEyDOcS-7;ziVSyyV=ntpX#+Jq2p2s5S+dC)Hx5CRS8k;jKA6;1;=5 zUC787T-e1|HKJ}z_m!7N2SRN6toaO6p+_ZaVlE?&1H3k!T8RIXit!=wWi~MMdE^<7>CFgTRb$_eLB2g`Lt`uk@xJdAhbMzdncEd~oYwt8lDvfL>a(nNZ}!T7->kX2nRWfuerk??E=4 z7vYh`xue6b*!I3bd?djs;X**%$+%SLK(xyOv+lwhT>r``s|2bNnrXAuzU(>`N9o*hCs!$bPpX-FTw7iVE6JXx5VdW z*-9DUE!W2=HK!cJ&GUBnC~DFryKlSG?KmHBdoMU#4N_g?XCr%-$4(`pC8vYTD5Fb9 zn~cQ!r;Mfj!lBtv4m4y|v1PU#F6K<=P1}`MW0qiws$&l#kecpoBBgS^FE32P!R+jx zvK=jDcH!uXprb6w_5`e=qO2*i+?S#&2V}~4%jiGnVknc-qnV1YP#C9QN#2y3Ua^Xj zxAA@I;K576rg|m2Iki$h#?h^vmZW2jr27=aa+rG~S)596QWDkuuaWSuIIsxk#w$>h z)~9{_fes0CUl0w`rO3uC;y!3mV3&DdH9vfK#wo6;{t;?@l|DTGjplpDMUO)bg`Eh}Ig%AyiV3*$nU8T&7#s4pEuzF@Y`AydoDZPY*+o1Fdfnq#e? zC_F29S`rG;mC9wvQnfZq8@}wz4;bM<{Y@gvCAMF1+zs;tN0LLmD2^i5dg*&wn=*)# zS~Dpgb1=*S^Ur$Z48Tgb7b0;98WH0M>^p9&SoQ}HB_%_pAVf^RGT@k6X*N0Y68TQ>WU*bsk-iF*1a8y_C1>Lbf|4d}VS%kC`MClSkbX1D7@UhE*fSH-yWkc>&|6KbfiP$ss2m2P+*D8|xot0yYjNIwp2zRz@9q zAv;@V6I*8|fZ54evh> z1_EYwrvEl7%J^%t{+G!_z{JS-Unc9X`QN>41WZh9|MC8AF7Ie(q-5f(MK3QbO0R6< z?o2OXV_;??r1LwbXyf;oTK~=#HZig@ zHldd`u{CoxCtzk`X5{7l@9Bq9yoJN$&e8i;kIhs6X{tcSnppjKt`y*<@Rx2 zJH3eZu)`dd*9(cdsyGNcqx09ZYkKkt5y97ji$`)kD(NBrnm)g=fF1O^~4D4^ti{>t^@dl-0O()Muv%}}@%a5^i@ zXg&Ugr2QtzQ%WK7Rp-=Kc|?WQ^KLgJiWVf8)pH4Dii7Edj5q`W1sdY_+W59RkG}mg z=Ih!{Hrsl8F89?D>*byrdtr@~SBw<-?fnHWZ|n1fLbYXEqH3nAt&QEDv>bS~Nvpy} zgP&hEv_-|=w{99}1h#!9wu~or3a3mfa{ypPDSTno$t1;v3!Q>fjr@rtis$kLrsFQ# zf)DPvlLyp-onLZ{Klp!L4blx6#nZ0Nr_&KXN{hD;YCZ;|&0ko2|_A{LV3VMP=Ehx6=fgq7^KTTCiIE80zdZ zpD%5xl76w!=+Mw~DO0kL{u=>-w4h#tq!raa%EFsUbuqRAsZbDTq5yTMx@R0$#hT^5 z6}JBkk~HmJ?ky9B2i5Qs3R=ErKJw}XP^@btW(oO7AaT*8kl&}-tVjr47|WRPy!XRU zvNX62LmQVGsXzVs%VP*{ADK4!{IKeDM6eaia(bD}dHFW`Ddj_@X$jO3cO|T5uEaP9 zk)bX6lWJJ^HB}Y^9PZ`JOIPC_^dfEr!2|naFvc@Ue{!vj4BV2JcfM%rNq4`a2YFE1 zSq_APPvk!kc`Q533UTygb$DcKB)m}7WmgTK@=CFEVI{3r z2b7`4g$0ng-s(*Mr%Y7)!t!l9I7${MhV@$y6|a*vhhDkGZ_QaMLtONFQ)Dos$c9m7 zh$ThY9-g9gEZ&iK<+biB_s`1T}8NM;#=3CNuNGD*QMGMFnRCquIvo3ITm=es7rQZwW|q)Z^h!b{l%o5 zm?GER2O~S3qQCworXp0~xPP(wZW@OG&c)qEHVkReahWc4BfHOb>2Ai9ALza550cqd z^z$9|mQsZko_~Eqeg0hM{bHC~+SDLo6wmmA+@wd(`0YYlAQH&LZ6xVRj9IOThXcHJ zw6Tmu+s+Upnmxqr2t<~%=Orx>G}%Qz2+c>bvmP_r<5U?Hf-<)@42?l(=dU=?a$6N1 z`d`RE>o)BsKXWx~c8VxK!(7Q+J|UdR(Rz*}4O8+ zz0|;y-P~Kw?3-byXw=6iJfML#$1;cC->15r=4&)U=;4gcszxJ2W^1) zcrkeuY!Lr}hU|91DNp*+m9lq(f}YeEwV6b8 zS0FbQuZQ@8mzg*s3pPpPEkQIq0xP?M6jze-+PlG)2zwvMOpzr-ZnEx?uqRW{BE9d{2_R@@N~VC%6)n?o^jO4tPlF@)t~o&6J;KN zMQ9`buElrZf}Zs9y+Q|s6YJ-d=6vOP?HB*JjKM{?EzRv_wvsAwnJ&9O$THZ7l4MXX zRTuE0OwLnZva_yfKLazMcpFV6A|`FPH~U>77VgeF+Gxw=dDa_Z$*)*Kqc$gJ|Z{Sxsr7Q35@mR#X54UZ<1ELv* z>SO_g|6ycbj+z$ZnRWzXPq%3SCISy`_yHa~c(UDhJsMy&%m1aj!ZsFu^~pt0fgZq3 zzALr}z2RAB;y?~*Cjh2k0sCjwH!+IOKr1w=PXG3IIM=A9)9wbdYT*IW?q8U0knkb& z6uLJ($kGH%Ob#SA#w&*<*q2J&i^X-DzRIK1&J$4-c;-?1u=ZLAP$wJH1;JjRdV(H^ zaE^Ea#YR2Olp0+OV~*1x+To$3u*WI<`LC8*zMRrGyKNo}@BuhWx^WK_Zae2qn_7+q zhlW0^yLfNZ;^LfoLN^fhk^nBP(ufB}jS9lsJt4Dq=wh5)G??%O(gN1A>~n;T#Ul=I zLiteD3ESX8P5KJQsl+!ufz`wyX!_OPww5&Fte41CXA)oIEsZe%s8+5?Pdkux!{+(LBcNqo^W8V3 zqJuZDRBnHikiM%PSRk3FrFHO_(58C|{qfOr$pRKwIwZu;oQ5|}jV7l*Hl2o7Y{M{T z%!JEm^v8t09_A1G3rVkwtSsapiQyT(%)`huAD)KRHDGAc<5+m*6VX&f2(mW6>v zG6g^q4hFm}e4W9!2c-t`x*;S68d*NF@x*H6ZR@6Yk0!NWOl*Lk3b=!eQlAuq4tcI} z;?*3hoaZBBD9kq}Jrx1Uc%$(pBiqwc)Y$`n@n6eIs-3vd6dHQCY1n|hXnaEixa1tA_kA3RrT-fSIIZ&4Zg2Ja1B5 zPomj_Q-8hs(vdb*=BWNcRq6xqVyf`paQoWmauyLL@>2#lCeKka2nDLs9pVeMc>H$Y zm_X4S2n*=hZGQiI?YviLb&lyuDSBL{lJP46_^(W!IZ z@33AEjm0d_x8Iu>k_GVrX69>veozxYCpU$;jOTv>761GPJpCU)#s5NL|DS@2j0^<7 zVC}!K;{S`V@jsdQ-@--~Mn;zZ0UHf9g4j_y38!wAXF}==y5nN;G5bH z-Lj31(zA*AxKjzQ`L)h*hT6Q9K;Jwp)+TQg2@0{nw7Pp6ZX&t?GmnbLC7X$RanmVZ z?qqap+76MNj~sgezv>w=%uc@dF*col-Is-N*Tm{BQ7g)vFnB`rL$L=%Uf8sf(o{iz zlYI>1h9QSWOzQOslK`wA&vZW*Z+Y-1L$b!o%kC-Q(y@#cI|0u#@DnJq;2Y*Q@vxVnFAOC=BBWf~<96W?T@PcxDkFzUZ^~V6Or%*tC-IBp zvq-KRo^{>MedQo{_4mf9@7I4>V(}Z8X3dH$QIs6mT&^p?oOJL{M~t$SqURX;OZC5? zFxS*R^*QAEe92ya-z4q|74*BBk!Mn_XkJfoSbN9vFiX}R#BOT$xmxKASsYPEF|Y_% zUSzh;BMj&XW^fnmv%|jUM5Ql<(i#k%r}9oF1vD_33OO!`M$2Q8%Ohlt8N^}*|CN5~ zWKJZ@Vf%pWzIF@B$160u<$Q6Ci&;x@%sVv`D_d5F4itPd2}#`mIbGTmoZDx51)X)* z`@7kWjqx{{SH@#O#Aah5^qah-H+NH{-ACZnvmFFhTeM(vmnQ~5)oCJR+cSj^=oF1@ z<}&*bd}AzMUXU#186*q?d<*4U;4oUnh-cM&@xD{&dr z5QRCJIm99Z5hD#%Z*tz`bHq?kcUTNkksl%+51CigB^#H#V)SUAIsF4A=|~7?>IMFH zv#JKhIEpiKq;qFs^f(4m=Gzy4ZDCy*bbD1zVmw9BvvK&xM}hdc`PpXLl*>nwE%vp7 z{Sm|HELZ3^vI={VM{pQt$20G7#qcfMCu*D2zkp-g4EN1>{B@x-$}tobcuZA1EktS9 zy%!?{^;(LNyWwUgcNMvUdH4mwH5Ol{E@tY=dc>ekPu}|R&e~qAPN~I|pbI=Las(MB zkD@wK>Sj>+)xL{yVi0U3wTsq)#)zELp?g zi2Z_jwABzGD2B8B8;L_+ItL$L#99M&&bTNB$zg~1$!2NaND^mD@siQj-Pko?7p8f| zvHjYYlEeZ_CJ$h}kN>K&F({lV`&ok5+7_10MA~mb{z>+o-JN^}gi~ zmJ^*!k26fl(oDAc`rLc7MAr_C91mfo9ey+H8myl9eSA3y2#*UME*ST4o4M}#-{pE-f;tFAr{DHlj#w{L?*btw2jYQ4PBG5|BxmZM*-$V42P0V zVCSHs1aWr$%tmo4)tn<7yYFtdf-qt?y__~xeeutw5;_LgJO|nBSV{^Bq#9>EYu&DQ zFgHtrvX9Vd+!ld~RgAaIHP~ggr^NO==+5`>=E0}$yGQtGMz^Yw@-`CZPOD)FSx3+Z zMUuuY)g>#B!a<>CYlH1$nC2JAg26tu=b&(^Dv4Jth?}2^HGE1?JQR+5th5}$mmI$} zN42msjR}Euj_J zpP+s=HbjIoETw~oxH8*kEx3p(Tyx_7x?r%653}cu&tpY5%W7gu%}(N(#}P85QPq)1 z2$Le0V?1Y}+AT$w?Dwempjq-DwqTj~l0i%%Igf{Z zo8&#sfQl990Q9fi_i_+n#}(Rk^B>l}yYo|SGTDo_%G#LVJ(93NB+iJ*!keq zzuE3!YisQ#R+!Al1hyfi9@Nl1-Ihz@_ex-QR-N_r5aOZpA*DZ#=y4k3^w{3rrkRg6 zD?8B<=4TGzYWIv>{2jh+X_d6A%mrR3J+yc7cH1dtXnS!2Oe_T zA!onjXa-{*$hkdW8j7tGow}TQ{;iZfEXLOS-h5jZz;gC~zO9XX@qblkD)l_htFviv!`EU5fhN`r=8< z0k-?IHYLhclmYh||J(HO3-d)HY0?pc*qNZdhV^M+hkF+hrg}qS9Y~!|8aY|I|K<8TTdi3dG5C~g{wsf@h&dz8-cT~n;$L3H=GhSD9!O+T(XlQABpRU8 zRYtJ}Y5=Z`Ri*#fEpklqY1Hc`&jgnMdOmaDq6{1vZCov&HISffPd>me@Qd>clDBY* zlfyK6XU=3B?5=%Nkri>NNKZE9Si)w$#s@5B#b`YPQQ=Q1CM!$W)Nc>y6*`Ts;8x(` z1qr_do79Mizy#apx)>V`EEBU7f1&uKU$jA}+rcWw0j?5y;?%dWD%s3_pRdJYiQ!ft zYq{E5aKTWQZw66{Kz&KLNMkka)0Gz>ed%HZd{rDs z{m0vs&X#5k9d5Mqas3iTK{$dJt}MXQ;K@G|0ls{ni7d6gt*`Mj{C$ftMrZtX6!JJ< z3yDvJ`A;(Gj)#zHXur?mmebNt7$wk4d!Xx!QestS?2KlkAV(*~h)qMe2-A-@x^5lJ z7SoQ?pfs?W`(#=TLXJn~Iw`{%#O_{Qo}x-ilX$ope%aY0>lBP6B01Z>o%ly7^W)=% zoQ|vi)(lGCEHbv_*|BDmX+AnYQh`c!DOkWkSiE;D%XQ@f`3sLKSmguLU?WrA#cb~6 zE6u}PbvpKRr$&4+_-@=kAi$lq2a0&hD7jrCHUWu>{)ydFl_mzka77=(6p~-?oa1r7 zXEmg-wqGkM9Y`Rcx=6)Zk~8c!TJbI_d!ub3#*UDRSl zk2~mU^TDEl)JoolQuAA|mC-{3el~jnpzxEX!-iQqgo-e$gv;`vwNhFwWmi_A0ZJHW z0Yd_`1ioc1f>;StQl3CCe1BMh`|7y(8`B|}luE1=!CrLXENA;u91jJSTLvR)df(r} z5@#XR)m^i%3qPyl8|nFg8!)WL0w`zqXq?n)1%)+~2v8^Kb+_F0wf=}LM7qIC8#hb> zjtl6p!-(F8=E(c(5XsoX)KXV2LKEhV(;8(se5t0TR1tuq;_1(U#^V^eJq-r9AJI)-^4;7o6`!HYK2843`Fv1YX0z5gnhMB1@@yoVARi4oSOz>#e z45MxxTcNYe@hBUEU+G~D-4k-y%EYqWMOnD&!HC4`a64eMvaRj?`foUpEX54GL1Vt$Ta1&g#&$e@9-RCpg+||z695z^p$Rhv;+e|i4o|dLV<8P zJxhHp-7l2V!m6PNLgN1FdTN>VM(;oigmN@4+M4`J)9sw?w>vG6 zo=n*UM_%}-NC=)NvPQtn=_BqG%moVFUY_J-&L>4pQeTo4wSJs~?S2+$IK*i!rF5P@ z&2q*sB6eNKw5{zcMHp$-AA`EVsn8wU4h5Iz zAhgz7=p?nLFxx#qld3us)i90_W)9ocl|_r0S_N8Oh%l4%GeW`UO)PK#l&DeraUive zIUN|5ccuTX4mvt(m~;ALpa^??C@l>sGQ0bvhkr_1OPQVnKFJTkpA`-`u{N9WFc6j3nC82lq6!*9;vaTu4I%5%+;GoE(7I8152N=>kqI60@1{nz;sN6Pn6GEX{`W znp}kv7k!8ibq-rYD1UHtO~AuxU<*p$TqsjiH{B?+aX09r)x`V5^F$+=u9)qwiwNBP z$N}^2zXHVF-uG%)UFX-wT-1oMvyY@#7{^Bw4ycW%|5>HxKS$&L2bCI@|5ow%|0^}W ze1!kU0snt8^S`guursm!k4lY+JdpPs?x}T`eclfjuYI&5S7&46P**axO|FrUjsH#h zBg_fYRK>_WXLTXYIA(xk27kfj}%kv zl0*iCEBraEb)aHY1X&3|Y1)>zB`CgAZGcEjc85_PPS-xT20kwddY z4-$v*CLdpQP4>xa3B9|T{|v=V)$@J>d?7A`1t7Lo$;X^-Vzw1NCpbOV;}DRPIp51A zbjcZI4@8|*N~6M$m-G^{hgKwK*Ot0q-H7(tMR!;1A4*~PJ!m-gr4?*5qv-JAoImIhzUfIc_;qIJd7fC-~s8FO>R~Ak0fx*m@I9t#FAFSY#}H z;KLd6Zedl3M@1>|ApaSNf#yIz=Yz^!gO9BCiaNkwDYj&P`B#oFOiTEY<{}32*+f^hM^!Xo__R! zZ~EUMILLL}D^Nb1_usGkMk3eR6bl=|_&gwgo?8M|Dha+AL#1uCdUyA-=;UE4dAp(< zn9;1z{cF#2+qYf?+zDhQSRug6h{y*YJ82U=JZSadsiGQb=cV2Gth9_ViO;Z4{?wzn zg1jafgPva#dA?qn(+m6=Z2*KM@fZSb@Q9TUEpsGrrKsO?_9qb7v&UR7+ACOPdk7(U z9HG#oavhQmIiZ-$^l7xI1|MPxe4l(XomIG#zFF6jD4a~aaCw&E`*?4>f@D zH_%M=MrBz)MSCs=Xw$=z6(_a*C40TS4ymF3rBaT+HBBNNKKD@wrmikmBJHNmynGIB zuLV|{5;->#BNGCGsC$ia&$x?%(XL-S7OQyyL?F z!C91*AN2PPcM@1&D~ci2GmVX=*!(?tp>+?2w|kll7xP&VA60tBHjyJxKh+Q3Z#c2l z<6m+7>AyG2cTeQ8C%e1|d7O0tjPRp}bTjZ4W8EWPS9Q>^&TvXK8l1 zgd&INdpD9(U=>4^eYbBoEZWC_?kF86PfsyZ^o8#kPuIRms>`=#HG7fVgVXI^ZZ@U z4W9rpjfK&^JIYzgkih^(H;Y@FfH~GZW4DH-HRbPq3oT!e7NR`QVFZ~DAfqMl8+t|o9xa#3zA$bFK?wTH!;Bu z6z*+g9Ny%AqwQ5RkYu_6ddUvK?I@5&0dzE=uTqjn((Ub&Uu*?^KoD3iK(tFLTqmCi z4h8@Di+jFjahtGwKB4^dlPu4sY&NP;PIf0z&vSsmb1+l9sltY+9Erf`IV3f z0Jusp?Y&f{3q`gi%Ia5TIg8xbWvoe#8pcXuk8=CG(lkG;G9f_GOl!P=>2ok3FS5V* z+^G=rY*>m?-9A4~Ogtm%byGEFj#QiHc2vM$U!UVFSB=c@tc`2RCSRTdKSc-y8v#x6 z6(!7x-2MF;ke3#u%6d9e_h_9oUgFj;Lx&j+M!MlbLpLd&q(rVv;ZTNNM=C~$+n82$ zfut24d1PPCppr*tu{4f{{qEm(pQx7+0C+BVem&F{-+_m=cN?2ZU~c(-efo7yUH4AD ziy8-SpwV0^YK-nZs6X-eVO;XHo_fRSv(lKuanR)Vlbd-LjSlEb0AtC2b9>@!x%Rt$BGR5h4z5W}(u0Co@U}d300BhV=T46= zd1uIT-Vqh$PCLu?nG3sQdH0XJ$4@qI={|?}o8}T}%`nOwdjgNmWguAriYsZ}=?W$= z7;IzCgXn46=DTZDf4vJe{(mR$t`O_fe2qeg{_Xb2-u)_`xidgtD!%Er<%ty zI;nwaj3ggpIH+1+#6rEnoWR$r9;^#oLxkmdZBKD3&YfZ?hd_DK;aPVm7C=zc=S%Y^ zwsbEEDS(`=@exi<+0~KP1Gm126bgg;Y4L2o`joUCN+}T&K7>p^MwuhucoC*|#ZXf%FdKqx7&t^b2U zE&{4nGNfgij`>s}AI|lR{zX*u8CZ=h-%!Idx}{eyn{Ue!FKJ{moEQ*D|Mxzx%g#kc8gs4LU`Z?=U;_8IsOJMW!=f)ve;~l+xFWk z5s!YsV5pO>LVP#SRsFr+&k14ryauHm2;%o=!onIqTd!B|cBh}BEaTC&54}4%mA3RY zowj&f0_dHZkZjPuaN8fFA_&EiVChuNxAKO4P`((Nw+=kwJ{)Lq=O-^CwaY>|3-^FD zr;5efGt{5x3L2kxM~%ByQCFi~9jHNZ9lHZ~l^cKtR`bjODiP{`5%Gs>K-hNfhbD@H{zi{d0AmhzM6GRfp}VjfOt@0_RPGSK4}UA#?c< zFNXk5LnRf}janu&@BlBFhn95G|F3 z07jJnG3YV8eO{m-6{poEf!^#1yK~$4lst+%*H<+IHfne>CEu`Pc&fdA`1pqgXpCns z3Jb)%xC%MZo3+1A@rR~8b|_AqjwWNumld_}JLl7kK%=f$Gc?>hL)B~PAAm$Ea`pqd zMiRC~u`O=c=mv!rTO(jye692>rYD$$qS9V76M9R(%Sq!#&^)9TeT>3D@PMbW(qlw` za3}(I+E+-7m1{K3dX z;ZFuy!w2a(Ldi$7{$$Kpw~%UHqj@CIiU%38QHv5%g9M@_d485fUF;$@oQ=(sJBL#9quK(IyyQp<=D|S7g zK5vt~PvthfdQ6Rvjj8+>E;`hef0yEhKz`DT)CSS?U>loVxYzp*G?C$~LLZv7LKz-G zF|po-iChtDsKUV$4w{QuB<4;%I>NN!AUeHFMZtxFssa?bDYC$E>P5+>S26={1zh}=fF1hsj=+9F?-=A! z7pb_dreMI_Ih~#oxk+I|7AO~Hw{59KP>jPU)9t~Ff%7@0@$Z5o z;BDq+6X;R}G%=8V{u+z6BN&nWF5j25<4b2$C{S_)E;J7eU3!im@ za@8i)N!%_TI*$9!%af&hpbY_r+*yBa9d52Gq?~*|;d5oC+yM5;Duh)Mso-lqxqF3E z8bZH=3HrAnO!2!%Lpw4g6!j`omUa^Y#Mrm(3P1eT)AqxVQz^>Rd(-KuO6vSV=@I&U zRW3i8u9@qlg`thN4xc>+ZcJ7qMCVP9g+d~APj@I}A#+u=^{3&t6OuDSeN)-Wy;A3Q zWM3-$C@sESJ?@#(OV|)Taw+TRnjTq)F^h~`-#T9KdmQYx3BN**Ju@U*d({_WaHM?C zcP%SQ-i#W#*si528YtR$V^x!&Gw1+2#POM5o<}TNz2${WsE~vJKG`j96=lBYgjkk6 zv@X66CW2Tg_siE6L2oZq6LjaQq-+EJTvVO9lhHjQ$I)WLqQC6f6C4$l5ms*KLjg(+ zD80=#{ON-clv#5!7fup(Y-9FzOLt#sYLPSPd%luOhv$e-WFGUIAg9%h7X7u-5sFjb z=havO?K|P;tgC(va&8;BQ3|eRKV+Xlew28TnQwgQZXzcM)MP>n#MIRK@2)-8SR@$` z^4|Aw^^vJ~dfZOXa6X~0DwrD84DrTX;8~E|{?2aGVof^2lU1oS#1=|)`oG0!?|FHqSIN*O7Hk3+GSqC|%z@_|^I;87^jDtbA; z=Pluc)4GGdfjuCZkk>UT@m;m`@z9I%9Nu~24+$W6B$Ch@8EZ))k%~ZdyRQML*wO0y z%MbebcF9T4ahGku&xlrp0Q;_Rv1{j{#6=YyRE320=}esD%tu`2Oy8@IwF1?(kf301t{8YiQtWO>bE& ztnM*p)E@lLT_JADY)N+7Dl#h=T5Re>G`o6bx?{DsFyl_lF$m=PXIhh zrP4LJKEDWV(hJ?Zf;>~s2G$RRlv20;-OBMFahm@JD@V5fek;fS9}QvuIF0{u&B(~c z%J!dY#wbc)4QHnHDFW1k{UJTp+wgQG8MJ?>2k z>~DZW8UhJbq`6 zLd}AXl)(tOd#t@xPt6!noH{8qIpe!}dU>|uDk(4HNTk(s>Ji>t zJ+*{+@QtGN&RBCDZo-$7Rw^N4^YsAjf>RoLqH;dN#ijt?zT-P2yMLQISa>(?#^tNB z)=xtRR{;(9CsEQBd`FsT0l;pHPYW=}wT5hzdGh_~V15g+{3zzDS6pd-|D=w6ASCDR zJhs&-=#jax!V(^cK+Evr9HMpmF33ss7y(qA?B~6_U8t@_Nsn~JFRfp4rrvRYCE2W3 zM#Z0rgUmX=ab1xLSh+G=fHYWvJU1(36jf=`tv1)o z^+gYGfH}B3?)N_Q_u}1Cw5A=PezzmHmH}a6&^>8my~?mdK0N4JD2j#9u%yO?jTn2# zg;j!wJx&9+!pF3uCzgvkx#&y!>LG;1X80DXW;d=Eeb@LcEfKhOI~&Y;Dc@rp??%d| zYEn75tr#?s=fXpHE*`rOU}i8xn}#85N5Yzf9f)60&iu+<-8>ScDBU+LLoL)q3ujt2 zjyUFj&p*)OHd7D1EC5z%5dHg?GYQwl+D?-sgWrqQjqkvGDqqAt^(xMQjoh;bwAJTO zod}Y#4vu!X{+a>5Y9YvC?x4p2S|+#W<&~W9&$eAJwADtfjW7@^=#zG1<7kT&=enC# zpKgA4Er3ZgTY4HH=DKNG^F-Q81w14rUufv>j;&msh#>U$D(fSeG^!zQW9vWzg+aID zuBv-)jL%opT*9`rSk7>w!47tMvrzvmIbRn_;efJa6zW~!5s}P1|VaxMwlwe$q97ECLc`x z&@AZJQYnY9EL5()Z|y(-?LBa4dx2*9tITr?ndhSI(JFPuEx_!8&&ok5x2~-3xmV)M zt9F20kcg^BXRs}} z+RVmG-Yp%(wS;At3a4aa?2s0p*WJgK;#x}w`-GD0IWEC6C%#>`KRG(Sc+Rp4u1LI; zYbk?5;GjqB!rrXypiI@(ib~Rqv*&tWWRfmn+AWVxNW>Cg^{PqObiz`ma>0{OHr1CZ zM!bi{B#U*to3PFa3T=7_whk(hoiJ1Axb8of1IS*vh>^^%SY!-=9M13|6iY-bEU zCXkTK9mJNZzkjOq*!1*Dau?^*q>@3<4}86tUsAnR^3C%ATlqsI>x{eH35#MVH`ka# zy_r*W@nGcpnC-a^)1Q9u0ivd!3}D{u4xAZLVS}@$Ju# zuT)jhjk;tNR|iN?Z{kF2phRIEn9G`0juXQ0Tzg(+(ZFc=#TOdKt+huFJAH__Su?RI zPbjyNfimyH#r3DP|K2Tn#`)ndw;$@KNJ<%#Gb&_5XcqKH;<7?MP+=G$1I@cxzCS1r z9<=&XNByFyW8*L%$#IgIx76^0eFPg459xWU+8p!8;^NBse4?1f`bqfwB^I&EB?tg{ zB%R{MM$^Le+r(ckdj5=-rYi&nLlX72xZk=E%mTYx8d40&>9Wt@Ql?Aw@4#f%jixte z+{6R|dYs%A#zCQ#9sUooGo3=!Xviot-%{<9CuSJN%^A2>3xNRiv&{U=)2wTZegoBf>qXeb-EC5OeLf?~7l%1Z)#SSeuyS zNbD8gfIAZ^8g@OGF|5+RS`D_aRzJ4Z3r?IJP{T?I(F9V=?@PDCVBj=1%-wGQUJ;^Z zsU@<_bMWXT5p$7S&iey@g1AgW+J_R9W&O~OdAAUs@!KJMBa#=6@7W6 zfj(F(C8tzgIOp9{yhwJUJ|K-<;;0;vkRoan`PW_hD72Oozm!dZo()!^k0tREq1|cu6@7p1z$0 zen~P^lsNmz83maTd*u(yK*UZ|6za6vtYSu@8gdYik2=lkIK$X35H=ICQIwac}8#&iI?olQ4cz> z5D&^EmyGVZ2us-US$IE!5Ut7sd_h6$Vx!`C#T7dKO1WwNV#= zHyfQe5%_JU)x0hnQ#*9Cj@!62x;KddKN=x%_D8=2g_v-lJa=8u~^x(`YE zAo#55cBRTpDH#J#fIx=VUW)IFmRW4NKZhvYse6pcpiAM`-B9u*7&&#wT)6g2i83kr zh&sWep^$^VT+^>=iU z)JF*iNF9R@in$1i=G0Zrcb&LK;ucuFK(gs3{AxmD_c zsTdMEUE0VWxoIS%sZEMh6E)*lhNs6Ww6+_qG9Nauw0ZNO)sUQ9uhEL#pS=9UpQLmQ z3a&9@o~-``xo^_sbxq&I3I!t^h*Ps7BN`;p-i*1HJEQ4Y&96eB-aVb0eI7hEfeRwT zJhzj1+xNu#=g;i$mal`9Rf`ppp7MIrO192 zCZBLRCI>fb3`Lst^AJ{sf$qFNg6UG@IMr?+qOO$XL=C3C{VhklJs)j38|jh$8}}B{ zMyfPKfq+VmXI3h|3KLnm%!ES^iGX=6az+E=jiR<)Y9_bXWF`0v3l0H{d8!Ft|Ckh> zPdv|9*uxXYdbm<20^pK6BXwab_9pENFBZ{^ef^CR5 zCM1JVe@UQIU+>dL1X%l#%176~B837NRQb>(p*rSYUcKjE^ghdwsN7~N!k-B465K7% zqgl&d9qb8y<};G=I9QNzsce4sBIYg7yKAYhvKT(@RrcKE7H29mYQOXslI~~ON`_N< z6@PT9x>Wu(+B{sy+_U-nxJhLVECCuCb|I#iM4AY8d#$gx0$Rn2{`daEz-u!UPdE1I~mY2Y+^AJbJ1638RC7Q^5BIUQ3z2?zM2 zjaY2V$$4JWRj0NR(%6#n3hG_yz)%z^j8Pgrp)|h+#o~;V3E#Sn8L+s~9+dVV_e!zV1x?+ZuzAT?DSb4;!WfTBQ z3CtYbCqdVtNlzlxORjEh5fLpSww*fWVlW~7J5BsAe4T%Th7q%HbaMVtjQ@)f!}QbF zBuBvfPsohCp{263&3~?XXps<^RCCJ=X9~#w4kA_d4fW1&5w#W@5d6K6>!lmF5MuSC zc$g|bP|br}2WiUs7?7e7*rg06%pbMd-(4lpF$LfbEiH16sY|9Sn&h1Txhh2Gw%?nr zj@(H28{Fa|UuvXwk)uE%Qsmpfnt35k9uh)ZcjWVXZ2XL%yM9z8QcL8fC^n+2Bd@F1 z(zM57=;!-lu^H_{@@k}(0wFS9yEjQX#4UJI5ncr-EZuXKReH{Vu5CAl0i69b=LchA z^bZ1(BqIU)f5dM2eqR4abkTnt*MB)wFmf>ei?i``+oJjFdTKO)RNm;jQNl#iT%h9T zpR%-0IVIIWaw>HDcxddzk3XVDpw+^aC!}*$&m9dX*h@Fc^lq9^^Or)irdK>|XnTI( zRQuk`WW)oW2Hukw#wwnb;exSXqU)40eXC%3Dd)(!^aV$Bx4eY5k^sSC;d0|nqPm*N zzuQqd?@>3uL>UpipPa{##HpXrc^i{jfK1 z;)SIn4yDdC(a>|k>(#vW`=+e;c=-XnzOK`A2IY2p3v?gB%dSZ~jJnpU!%qw_9{p*f z#~JIA7bj#jvVj@Pc8q0e&Nc1((>dpS!}xberm$kqsjz}Dc1ZT2>KF@D>c<|qe`g6b zDPYKjr39&kNgk{h9_(9(0N{0A%1rna9yUURM@ZrbY7F()j-hpG!~$P+daTS(?K@{-gU>Qk<2nnz#q_oqx2a6Lw2o|hE#eLG zMUu2?J$V|qM}OcZu;aBo`?7Rlj?SOMa5&3T&+_9|^R7S~)Z^E&yPLgTje`ae)_=4P^UUTjUS>bv&@?K?<(@637tkfzAHq+VHi9fit2q zRp1CG5kxFfsPjoG5yDGMRQp7bSpZ)fL3VCBi5Yq5y^*SWClL!FE^@FZ_{NnY^_IPZ7y#dw!He@yOevO<|B7{Pf>6bIohI z{5S`Gy`_rmH0aDiTBi=hxC^}SL~_1*Je=om(lVB}TtmQjt^f$|hE9{cXOV0+lNtFb z+)BVUv#w0K1$=JW8B*8D^Lz%2i|~+M15B(8s2zr*3^vJ+Kj;LL6KzS#QW4+^ z;t_(YIpg?^i`|RfphW2wntCeMr^`c(QP2^Q%z4Pm7K@k>-K*;AZjLK-1kHzJGG?98 znRKWmbk9j*BjyMx(NalO8ogkPBSwfxe7E#lqw@Wum`p~HMaHPef`msTS5Cu^yo9Z> zLnrrcU1g-iW37_xlM!v<+voks^*Y#8Y6aUD+vSX@0phpCPhL=;fT9r}>GPxVAu<&; z%U1oA`%(%VkrPDp7>UuDAh?jxeK`P5&;6dDPH`+(lFdi`vek<8jKQ`ia8GmA;@8Ts zLlRmv@7G{^w}0jV6ztU1CG>+-s}Rw%GCli_4EJi6F%x4vtnd`A>ReBXT)b4uT? z$TPcPJ)~-e3X5NZZRrR;*|tos!(Kuq?nq)DZSCqPS&a{)2>p=c$CbP9+$}gnn@P8G zG;Ui{>gFyu5$17nA3@`s?@q~%L{Jy@!O4Q&Sk78%6y@7D{!4kHIi?%a#xYXj>C3IUFm9ZgJ zD2Tp7`1HX&AVKk>u=)L@3|DKAX}j0dtn=A!kVW%kdQgM~I?6r1h>hdcXEE#Cbq=e( zU{io5b-VcxqugvF@bbezmA#CZu(3&q;L=i$BWJt)Yk`D?Mn)jT=B=GGrE=&&La}~= zt|0cPNMA^p_bUubqL%?4B@ZhiX_H8}#@U<^OH#Nxj>%mQ!IinmH$wPzr2wf>8=mT8 z5R~!MDM(?xd{zrE)0Zb5_DN_ogcT&u)!9jGK;#nv@=~uYCw{wZf zB2f(U$H#-6G3=uZU9Q+*aMI%;0cC_Fk3qdcYpjQqO%H$R)yIhOkw0e=>DInb|A_4Io)^jc!0ehXq6#Ci^VrN#--~0k}(`bL& zK73hXxQ8)Ek?z%~-LI>CZ4p)t_q5@ARc6=hp2#b<0}S#v#tPf(z^&v?68TS0_?`cq z(D@hcgOG)@lY)t(u$_&)o$Wukh8#bTMQb}pWqSi7lYe0*{u3qm!#=e62k7uWKH~JF z6Mx>g*w{J|u&^`y&5dWPyK!NawCru{OWop z6#}7%mmvcgK)gzxfkyXsGe*j|mn4~m+`Qb;s%Kq33FZHs7^J0`jA)~y+tSK<*&q=I zb+<~lHh#db)^N65mqE>)PCJG5DL453F0SZ7);8=y;Q|q}n%g}_z?>TD*kxl^mO9=V z@~kaT!HTQgH8oP<@Y+D9Y0ipQN21Tu5rU(@{)y+Ru*2EsAt>w3NGYvIug-Y;JO93_ z`ZqT;nocMI^#@tKEaR0F{n7iX{KI$FM7^%H%+-1hJ$=u97|AgXzJtwBzZ+@mw%jl- z+d9^9nGS5kktHRKSB|X4>g*%h=Z&?!U+|xG2LnujfRc0o2|rfpCNq=x5wI~8u|E~x zc@4uO0A_|EfXWKn#%G#rFGY7*0Ir+SMOBBQ$Y*4?n?)je=w~3=*X0JHE-~6g6;Xeh zTd^fRKuE>JSA5(n)1PjA@BS{mM?UPU6CkN}qtHmj$1TJh07vF)|6pJj@5gbGU(sB_ z26C=M8}GZ_zy@3bXvU-piBQEaU&{~msYB!ranw0Rd(M7}M|Bsy;M{O9O{4N_9NUmX z4S6>%n@o|e5{74BYy=Q83{G!+Xca{n7zScOavU*TEG_`?DOVxPu;10S$F=!C9(uNJ zRgmk+>TC}&KIz_uTF=zlmbQxx;WNdk?3{u7hWytOP{lu|z|4 zOsU^KqN=&+RHDuJYb7t9RgR1cnVrUw&iz6)A=yo3@&|m(M%Hs+4V6zQ+x>@rvu{E&;S;a(D-uZi?}&?@eYAICyWPOdu}rp z5n4*J`|>M134i{kAbDW3JdN5FJHugQZ2a(f%Sx~h#EXae+AvX5 zCxG_Z$d&6FwqhnI$Si{X@^*SXzorhswCZIs@0k?5Q6>6pI@f|^cf6T)bX&mQ+typg zjX)b@z~wBs)Y@)nMN-*FlLFJA$*z=bQ>@dA*uv&a{8k1sZcOh#c5`I7mAkvWm?fOA zC@s`qKxChU}lgpxWjD(JsVn;sEUU>20{2W>Nxf2KRB zKd6R@GYn6;Uk&o?W$qPG1gTv^ANOxg{iPx{?t?QN5Qd9Q;;Tri+p4_RER9qOKu?(AZ=#IL?K z*q+;LIl}L2KWjU7dmIj(R=$UnNbsIjRr9~G9V<*YrnGbiVMz1Emw0IS!`$Y zHveS$+q+Z4;TYr`@ZGG*Gi=<9Gp#qxaM^@G=&OwiX~t{ST3STmr=+!k-d@~N2U#lk zXApJiHGbo3E28J|JmGH=V5l&~vEsHE)G{+iS%X<2*z_7uhsPs0f=o-CX(i#y8NCt)A z!WE%*+zapVDOmcaphB>Wm7`K7zuM81;~77>&$~nw+mdDPP2@&|$d3-#%rg3k$UEv+&62s7b&X}sa((wEoQlZW3BN3=~iCj#sY zZItSf@B&L)Di(2--`KTu(%8szK`9DJQ21)s z=>pYTWJtXzInFTg9Q9~&nlzOuvDiteKHrghX-kTrj;i(LFt%Pq-^>Oc4e_ohWhmsm zO&1nfHw`*V&|I_GsO4!_SO7v=&ectPL za=IEt;jBDv4xREaY*lE@9A(?xXH;Uh&%M`QAU?JL8YBmpES^Bvdgh(V z^^J+Cp12vS5L$!E;tz=OaAyQw>Z$?DeatAUGrdy6a?d~>JnPBV`kQ5Ro-OzWyIyiJ z9llio{gst6SC;f;(IXcJ$j2v9UqBPWAJVsME`9{($B7DfE8<1|LlY-b0Y_gEYeMo?d>8l(cJYf0~Go;~m5wOkyUb1nK1HZCGbNF&o z1Ab;ZI}!^l?9R;46a|_0FjZmYa2YfH5!lbYR^w5Wr^&obxhp%%MxyPfJa*69-%yD< z2wQzq=O=hmT-|v(Zr2mn;WnG+R^Ksk+MOy^IxuF8Ghegu>s)K|>rPE7IkD7S!toS2 z;&y9)b_3VZU-^!jCv6|a(NnMXsRAm2pb^Z|3#4-S!ykSwA4ovv8eH@G4k>D! zx5>wc#njG83&2EQ;{e#!A3gs#5)&lTO)@6_+V;*ft>-Z%#Pl>HUm?;bwB zF~BckWtT8a$N|nT*=m_08*Km!EX+V_1Ar=W42n@G(19BeB1TqM)9ECvuaor0gZBwu zeU6cdO8AOx@rd@tZ{@yP)1>iUqF3RvHEa1f?sf?6L=k#U*g;=&(FQ^Bm~7#NyQAcB zi!tR|W;ygM=ATGB0Uk$@&CH9;&}rd>kw{S4wOKX+$KDj84)n~IR8#-Zso%nYD0!9J zGZh+(oJ-k7*;BBdK z3fvY>$glVenx=^qCfAj4w!XtVs7NHO!ZdH_PWB{VmzQ*d z+4JtFel<}YuO{?b3a+f{yyVA%*x(T&?bI!YOT3UgS|?=|z4qTy{nWr^(cNZH6VAg1zgEYPLS!O+{mNi`*rqeeQ%~b6= zBh}C14X&g-G&4pTi1|_iCws%uiV0a8E%*J=BkGkJ(PpQ|-w`O#BQhAUCeczuKSlXq zV48s6AaJ`!#CpLVL#k#PEldbS;$HZ-%X+?St=nWJmh+Njd6^lgUgy&8dwRw9uli zF>WqkhY&$G4JqO1lZ+k>fJ7BgTSZs zhiFUvN*@g0Xzx|L-!fPj?8BLFjc|hN@xSQDW!`=FgVA&9&mEwdoBGym^pW2SZhNO{ zTq4wb2JZmzmTVO;B;m60+&U+Sb#79Olxqq)`ZT0s&b8TWa7tx|{u1dC63=(DF%3uG zBbYTTTaC#Avd=SzBX5U0nQvbZpR}y5%%MDxDeXl@2}sHO2r(0$D*kL446Zv&d~}#_ zxfbFoZ($l9{~p)mOonCvig(7K?Yn}0VE(-+cCX#le9;x`R6?vQ6A!V2OSyGor`w+Z zLo<9B2`Oz_BXveda2m4V!c#qTrS!XM9BFnb0R0b)E3ZFN&X)9|(AaWFQrd4AuVmGk zLx@HhGdsh~3`dK8C^+H0)06x&UjBnj8h-zYi~5*HVPX3{5#_>P(^#VitVaW3vvbBa z5#=S1HqY^yY(>LxR2RC81|o81eomO7OD4@J~8$O@MIx1H7fnar<8sPPDNn{DS3O2uRbNRTkqw9ARK$RjX&WW0Wq-bdd%wuwx8*3EV~f zF&*?`a9nM_h=Qm1TES!Mn3mY1;6>(mfT0X0Li z10HI(->a5K0v0G#q}yg6Uc<5dMj_O-B98%;4S{&z+HKdwf&Tsj8M%dYU~TegN( zwQn6xjL~F)$nS2>%OFWO@X)xUlcf*am_Fo$JK95R#_ji{Z$Kw_nD-(KmYx?e_a(IN zIz~)mJ%`}gZb-X00ob? zO<@i#VXPV}gKr@_BCy6rR_+uxxTplXN+n(LW>z$-Yrr+z@rbHFq4aJ2n!lsHBlMcL zqT577PZ+ugh?PRiEt|RFc>rfjnfh2_iTOv9^g3amOzhdREg^ z!-EMm3Q=F{Yx9aGI4ip)AAuBZN_jgHr{B1*##`C!_fG6tf=t+jf2t||2K%7#m$H(% zES~ir)qNi~_oSD_?a7Qa-}0GUQfF1p!^L12Afa?Xw~s(M9e10Ii&{{rYSZXLUm-n% z9PW%g^qrWJ)_s0Vu*u2tqp<8Yc0Y4Xx26hxaiIJ`SC{Cvx%EQjLMZZv>smDqOKX>4sT4u4B%Lg{!>d?K~Z>3HTT>nVaAB1eQ* zfIvuf4QvpyErLt6`4{vD8Ih|_o$4LGz=Mci>)-;pn!dc~qu^suDcnBm5+HtT(C%A{ z3Ez+tSVzkXZOM9T2#RUm+4&8DEdTMgVDYOjLD{fITPcOicnP9hZbsP12km9HfRCL_` zpzNN4L%Ctha%O8&yh7qBNJNKlw`f#UWJo?rZVudHv-RiYs1J>_M3Lxn0mGnCHhC zY#2!nn}aVoCk?q=PbyjI2;aOffw0np%t)jrZ(%QwPXw|+ZmNg~rQ!f)Ej})kT=uXC z*@W+~ZG!c+L3zo~`koOYKS5oSG|dcaogr;jAmqG?<63bmNOT`{urW|NPj*mSa6@39 zvAvrkdHY9jJ5Uu}@#tI$JQdfm`9P7*{n+wubl?zE;g0keSpzh(;>eZvE}z|M6_*ia zJ6dB+1I{^iKfds(1)jaetn9=Kw8$D5u(Cemw|NqD`chH8;e+=Qv=_}*8je{Iiy9fF zN7!cdo{(cd@{UdwbiG%3)N2P*c6i+%uiGQReF!JaEnocyE?jOow#ibGXa zBKtVi^gmp1WrlRmbVHc{sx2)FX8s*gJMojS(Q?2)dkUd1nM?~)A9;50Z82Fwh#x^a zBu&SctEVYrv^9Zhue{Q{d7&Zv0lIdBw4_AYWA(5?>m;Jf`DHL%_6}usIzvA-6U#af z2Z1FW!VeK7E%!@xzCR|83mjH~6J=XS-*>8F#qHFsmD)@{Y zl|?!=J}!+f3WxB+qU9k?dEer_*!v}R5k?!nz=i&-lI(ORIIgjsfnlEJ- zaFm!`RRQ5fO_{XdHli*>lZyt&HaTr5J3m7!lMZsyo6v^Y%adFwRXNbeib|9#?n-xT z+8{twE1D;v0&a~AM;0kqS2FFN>B(L|N{g5qQZi94NtQU7S!7YPg}D9(%^*+WhF$WBR`Ii+@Sm(zuLcrOlNJyZwLPo&HwNcrU0tm8IizTt7b(L3J} z{O}$v(C+XLztU2=HL)^YEo2Fc<0Lj#4GW{BeG@wMLV{Kp>gAO|PSDm{hkEgpmS!y2 z6j*&e!$(lR2PA2qccDzw*Z5vjVE4|AyN>B~0c}GTv6e?Q363uS7r|wlT#S+pt9eEd z8StC$^cuM^QPHo#+>i?eejp;|Z6`u}zCb?%9kDfeg2FlFUvK6q#?qOlr?M2~jOs{^ zeo@3hzcq7)gJ;Bb$jk;ZZwR;N8-$NQQbst(C-)w^0til7Nn~{Z$c*~z=`$TeRJB06 z^<)dXa4)gtt0DLK@3zPF>yOc{(hy{&L??TKVr;6_hQb@e2PRT#quc?vteTd*lzE<^ zq5u9CFf*txpsO`21k*ATZa?+hDC0Uc1O92YL@mQ101vj4A=Wr;T0-wH4ol}Rb%w(| z>96>MO)0tE7VYkP{O8s?AA`%+3pDXVa6h6mWzI>nL(K_3cvk$1d{|^q3ZCCl5S6s%{P(#($l|=&|OG(1gLFGln3SMjGM9Ck?O7yiGF`5ug{-loMDuh zBsc7j#i9sUt|#d_ZJF)gm9rv=x}rZceObJgk_5q$)SpE8m|TA8;IFHmpH=igh`-iJ zolfUKynl(YBGFW?MLkb^Mzs>JA?sL?)3o_NoSf0PTD#{5IU-}U3LYn-mAv2pT}k#TWK%R&PM|r(%u!=sj$M7bLJUEibWWWzihE4!Nak# zNOZ#y1SNIaQTN4^4vqp~$|GU3B}DV;5u!}->k(=_kWi#E--;I%9$}K!)Vqu^zetAL z;&4b$Z-<3TFJS&^{Upb^OM}`VDm5Vk+!qHdoen9oQh&CvsU9LLn&_fbg}O9i zzI9FP!~S*+JQh=;vIIE2-^LvE_^fVLb+R|hVt5&v?#O(-1n?nfvx7jsAu;@Bsj10U z4rYYLgYaZt>#&@MrWD(c=;MLVoPnjvCaPO+ZGdk%0i(RNsE6l{6en#>1?yT@i%KRK zw&J${Tm_#Sb8ry4{Hx}i^l_OxE*)rg`z7t;bwp^ue!U69W{#YO7A9%74Ni}T5!$F^ zCAVAXdyc4_#?GwWlGF8knA=yI0~tze{`ujaExYQ9>Sp&73}{W6O;K4n5y7`aRS0}4 zeYNSCkcK&5UET2BJ$SMM&$+|96uKbe{!6IiV2sAL4RRTiE%$w zI*Hm{(?hd-WEZQl;}Mbf$&llh9t!)kYm8#kk;&4Ic^xdBT3o0H=y!WvZx61p7FD06 zO+F~}8JU3HhppL*S0NT`?lnhHoe#4Apx8OE(`jkMQSrF)vf+0Uc*6bctO%-;eA~Ih z-Ny<{<5a#jz@(Udkr)=dJb$4gu48jOr;oFR>sI0zBThLtB-7l*H$gB3>wJBReY5#J z$CUFdA7TT^R%DMtttSmVh@$*QR!nH+`Yl>rlE3dZJ^$U^Zh(;CBV98NBfDC+hh1D> z)qQwZHt6*Zr{n94d7(9`cV+ViJZDRf>vhqs7~mI4g|mStyh$I^s$$kT1>3= z`ccV?1!>0Swm07LU^>FYaO~@DFH6PL0#13xV!JVfgzOa4W^Ms(bb0XYAL88rt1MmfDLjGBq-n>b-oAOs@eRQRrGIa7f?%W2E$mQ)} z751AZzXYRcr`CFrF8$Gba`QfctX|jN9)-*%bhsp2-^+HsM!+a}IZ29FMs{l7-783* z`)_7la}6f5JP=a-3mfZ*(IHB#CwioT|1K}8$nvAyaVN`U_OH{ru#O@|(89xcEI#fTMSF^z9iD}7ChaYzy$O;(?odya&S}`j zlrHbMJS0O7OQvn7sEmiYZ@c01x^+Ur?OvtsyBM0u_X_?OeSj!ywI^2A&NbcUZu;uF zJ*O-o5XuCX98Hd`9&1S1M^SkA7aN%CWzh#P=sXkLrcR4imOg+oGdM+*n3A_@@`z90 zX*0Vr^!Gncpu5LnqN?+3w@udCNaej_6t|doF(HxzTtx)aBk#nAJ0w9B9~$`c;woy^ z$Jz9&j!P0+n7G%dnTF8~#aYzZc&x_2c&xLiaFfnV+F^W9lnXxvKt!5jvZo+a6nO4- zT%yw7B1I<7j_2b1pQ4E)jEYP$L3C$G2nkV0j5;!7lo)R_O8e`%a45xPt&d?Zu9yj}0 zvWv{XCK5%T;m>{y;U~Q-hB5{F8MND;6~oX@hGiFI`>Fe$_vNHM>}hAZ?Od{Va4Ye; zwegRSVpCtiJPM0X`1&6L7lzCq2|Wavl6nH^t#iP>yz{*jbRz5Ds*;a#chtfZtrO9gH4;u>F660#(C0!uwwbQ=_G=Uh}63waK|M-r77lW?6i;O&@ zY^#qQEejS^>~3`S4LHzc}UV72?GiNH~w?uLRd;*`N?k_rEr8jg{QLQR;#KdP4Y3u@kK@Vrd|{fX zGe{@ktQcs?a6~hyZAaiZ@w>-N5xiOU0~Pq>q}qdTW4_N5LfT7|4Vs+;#`58nV3Jf> zQf+gHVc^!{#W-R^R^dWd(r$sY6rZcaMMQ2W2TV?imkKIGuTlt~(-)~DA|&34dgj7! zUrgneJWZ__d?h*c$HydPOPBg}&G^|~uYC}%ZH$tb4p3lFl9%Vm9_ltU$)*e7;R;5evgsE;B(%>_+xMM_^kSoG}ZfYbR%G)`7U|qz3t~ z3Mi4O-JISxhii0+w7!hA?Wl&1_+)=Wv*W_DSaa1^P98+x^*>aoFxhy!qJsutIs>e> zqat6N*0Py$OC(6G=WL~$c%2hqC*LxQA6AfX_+$%yFPmKb`7Gl6+eF~MV}CHB4=QTF zX1zW}%H`t#0%`<9dHQ54=4r*fIf24-q}(_Y&`4BDLFpU_M8Y;-pxCfzap@WDbNUKk z#40)>I*pViiBz7)r3@YcWfETQ9$;B`WD4C&WN(;(Z!W@Cbl2dh?=KW(ZTVEq&tn;Am#ufgGfuv#DJ{JD&Y@$+1V^;M% zrai+r0Lb~9pStnq5blmWN7k`1UA;FX(Z3wuIqcmVl-a!~`}>RSnCtbz1J!Z@;p6ol zzTHFFJ4M{jmAc{))o&)^(pTZJMkCV$`hEF(>D(g_z9B?aD7t;ut-h802sp+}vtfm5 z2h%N21Lvu#M?Zj0JJcr-lt20B!p=@;9QAjBaU{xxU}{lG8maMNvS!BF#c1uPcb?-r z-s4l6y5A6Rd6u`gbjO5Ql~f!qezDvGE!OKsB)R6dbwbN4^f|P`6mq(R&mt7!7HLgI zJC#CcQHFgBMyp9PNRNiwIf|1y2s5*iTeAZGC=iiGzwDHr2Jge@!v2pt6E`oc4#%|0 zLNyPG63RRJ>i0+TR0aw-1J5i}b;+}ty0#sA@;sNw%9j`iPui^W$5@b_famGMSX$@e zUv%r8kj0HVXBAYDyRJ)1P)t_>!2<8(Zfx0(AG|b`QwwPc3;`TNV0+zICM=2J8b}oC zK^>U-rrMFHz`yjL51^z?$a4@Wr9{#2fAUXDa#hoCsB*YBk|<94Yi25uL<|Ic%rnzk zo4cj$6bt1pNpC!<_b4YT$6Ri)hyk?=g!yuHSru@q{tc2*`DNWeN+5j!WzKIO^t5ZX#m_r5fIJ5DCLyH)nrH}rW zaLSu=<7_u}l?@z)B9-n|S=_eI*!7Y3LDe`2Fh-3RnkbkoL8W{$gkq#_G=~inEzOeh zetz0k1qV$kW*+)mdFr+w*Pm3=*iFMfw}sa^JiK;bf+O(64XT#FP*{oqoW{f^k^q|K zfdA{EX#e}&3_rlr*V>Cs_*f2M#*yyE!}Yv z)K3WXXFo7&M5qqk+ah^_YM-vAJ0cs!3a*0BP+oynAL=(y>NeEG+=3$Xvqh1-UNOt!ig}G$rzkmoGDMJMEgAVQBt_u%U5B zg(ojK#b5Ks;DH4Gon(6t^-?2IZn>c=4z2g* z$K@_Y&14>m>X-v=sap1`@~6qiL+@s5hLvUSzPEE#N!rq4CZ3ztqISG6{xDgET>r_i zI_2*^B&T(Ul7}q2nj8Yee|bxcIL2wv-CZhhEg#81fARx#}}MV?}UZC zXYqtnS($M^c4uoMqaDpC(bX$pM+e-xc^)&#ws%nzJ_u2|r8vZC=L>Uc{Jg1#-_hp- zT|bROGE6a!8{xsp99>Y7u^xrtc1e5@hWBA2W8?_zHbqzCJ8vUyU);C6wnI@W#(^W> z(sGMK%T-{@EACfgx^X}YZQfa#!t?mX;ow*;is;Pg4f-qX!_w?J{GNHEel_--6U9jb z1L=mThlk^}uCwKFELv~`ZFOpAfcBJONzI)zh{agpo2ZS#&De@fL-u6k*sC|3NK1<4 z@zk%9$0H;Lbo!-)AhfFsxo+v3EAmC#?}Z}Rc>wdrVR=4mG?(dWF>1r9*O_E3wO+&9 z(?6=}LY$)$UO=`UN}r{L2Cxc)2C1R|);F-s189Hn5p%r+jGG?xtnf0NNe`^R7=vX zyxys9xlvz64o8j0qA2%ek|7%9s7=%vNFaa@VCx!FFNn*jmJ$ihYj^#qu0(R2F9eg( zF44@D!v)a74FqcWnsK9mu*s-C)x0!j!bRyqE?OsTPxYuuuj+#4Hf}$$X+=y!w=%S0 zkzz4pSfzH@sIV(=&hs7Vs0x#>_Taj&bU5=T*_+?dmjWPZ`?Eccz;UF8fNO{K4-WBr zRWiU`fG!`-=TJT|(blWS@T*+0Wx7pSq}Pe8a>}_}4328mHjwWLZ+>I)$9=LOLzOkc z4j+B3i?R%bg3J<=Vq2AXDh_PF9m}7bVbcXyJ0Y-ThjL#XCpClXbg^Et|&fHUaM84>m+WxUn3d+{oP!?GO`>fve2uLD(;&;{KHRXY{vUC#G| z&$HUwPwM)CNt7tl!%y=qV8W~yBzyuJw@VK4X_PBTYJM+~+As6;lS+X^)M3eO(6XjM z4rQw4Okc?ELcirA0}S3AJ1EodXIXfHtbK%6Xm?d^CBA{#8eA*4WQivpy4g}(r`Cs3 zXyv0M)I5|uA4YUs$Yh}Ee130Uaq;q*6pedI)_Q%TSX~?u^9g9}FqV;zU=bZ^%-y-y zc@Xfe@q~IYfm3UZ7tix^t9%FEW~7LMLy(%&QdvzTDjCAh*c?R%#OW+;w+712BIVuK zxJ^M44x1U(ooO1B5oyO?gp1(iHSKROCqZ!AsuV$w*sLG=6+sZcp% z#3wcwOwL_o4NYbopwFkG>Wa@RCuTlQNG5-N)qV?{pBYs^0_7n6jYA=g#_hVo z$S|bQaKF%JxO|+SD^hi<2*987RfREYC^v?XX_x+W_zxDII<7Q>Y>p~RlDY3s?qcVO z-J>hRZ~H2=L+ZIsC3#u;j^P>zbU3Me0Dho|6HUmxnP9Xj_^#Mq^74>3vmU%y9?djv ztQJ23pvaZQI4A(K^ZcaKixKIUF>gw1{SS63KeC%4k~l_4nn-ff^~*F^BX@4-pKec%HYfW0 z>Q2j}!(ElyA3q37CM(kEKG0w838^)zUSjk3LC$Pv+fUaV!$d@XTSeI6A*Kt=ud%0^ zdQQ2n7Jb_v2O1$r&xdO@Id75^2eE=JiN5KV-d#V$r-s(ByzuE@hg5T{Nvk`)sf%N4 zs6B`4b?32Q^K|<)XxzPRlWV_K%@>LkI4I^A~ znD7gBU5qwykys5qmf=-9EP9CinE3tfXcAvH-Nwl};UMYd84;{KIe3d_3i80_#=k`t z&fYaT^S+)0+`KCkDU2AMv1fWMneO+p?+;816sW36K0xEint#re6hLyz#YE}s`+Xij6XBcvxmb`)G;53!_IrX(Gb7W8H zW!a^8sO}`(pK4F1?bpE&C5hQfPXTM}12&Fo$fce9()O}_xcc6XOleNflzaa)Hg4pk zTW_)GS^0V6;X46{yuw8f{;J;hy3)NofeaLq4SX$PIf#0oz^PwP%H(cApsG#QwSOh@ zp(JR#JJSWjk^0h)bcI`~Z@%=b5Z~S;LTFPl|1|Q{6vwT)PvYl@Hh_N6N^JRnC*q_*t0=%3U1cCGTYM6C!r((9)Snp z7S52>!@J=3Ea>K+Hw998Dw)}PHIp<>uU0rOEHv#+{>a>A!V}SA~NK7zYRY0OZM4Lk=v~iejP3H}g9s+N!~!g-gmzXHc}QhR&d4vnxKC z7hHcqeeXTt-*<9=#w)IJM9#Ro?dGuaH){dVXLHBq;YUDuuN}Q`Lv&hd{mu0Wp(a9| z{YtU}#tlRg6YhN%q*@28?pX@=EPd=I;oF#XIJEs^mc<0j^4fZ@@1p}S}`?lIX$0I0hxOi#z7S{d`F_`QtHyhL7LgiC&3=#~A;p*ot;x&b>?L zJzLw)+Z_x2;e-6M{+F$8C-!)$Wg99QG&Vm^gJm(WdT9uLMJz>1w;upL&qUqNr_fIv zop7v-_Gy~!Xn|c1k8Q(&Y4?><3M)4dyrVEyP`OGf0){|J;Q6~+i3QCy)qtkw+AU>r zpK?!$rdRM(ev>Grz2l8a%Jg!ANq{hb@fclMhVP;AuKoOkXX0$fl65}ITo=&UepIv` z9tpgEL;dXPRgSd~361vf zPYomGKGK50vkIG9Rv(e;MrW&(QCD=9{oE7>z-dECjtzawZmwbOhL{GE@w*7ay>J&# zs#3_D2a}SaaB}$H-EBPxzs$y-B@V$^Zw;wf>XBb(AERsq9qI4^5^;dPB`y7GqcTpC z-pK~QCku%s0<`{wV3_X`L#P0(M$=e1{NNiB^a=mIV_kE=`Gtfs01W%*mKW?&ug{9> z-56X&ko>X0u+j^%i-!*NQ+V+0IHgV+9kXTG@EA}O#hBve1t&_h-tOOIf^BT~mzQo# zjqj!ByCm$+R^MSVWc@~M3?Fa2#d-|oc*stxw{(Qn`P5@5gD$tGTh{q5Ld^abeF0&= z>!?8gEbhO#6|HoKf)VK4unN@vOkHswcy{oD&GZ{|D>F$JYp{+rS#7c=nBe5V&ztUJ zTN4S$y`221Z{aI(3R!p%+y#d8?6bTJJ#3MV*2^66WFC+WwwV()XpQz6e+D*G?^1~m zl17L293vx2BYomm6nXXsDCh@#2Lm&{eK&!6Fb1+(94C4kdHYv1IuH?5fTAK<_cyQ5 zhNO64GEf}-$+U?o+Gju5`Q$O7k2_(lN4mC^^A6NPTHkF-!FVDZF?J!yr>e>#Rf*&R z$z^YUaq3l0{%D8u0m)+<9f~ZLa|d0tR!D845w~f-=QrU1NE{$d1Sso*cOT z`dsYk4eGq%FtXgQ)urYjW5V106j<1z<24UPi*7=izN+Wgg3=mHDtPIN8zyrXb?Ang zXxOTE9w5Um2+}=NvqJsA_O=9K$=2u=h0S@niqPPPNe?zngx5wrkut1GytNGY@lQkl zxU)hOS0f~?IU%A*qRu1Ll;6z*zCw2Y6*qsTD#43queW)V)|A))wkq0g8@*tdt%e}= zY=}n(e93ilM8MqI-oH!K_-OVJ_aVyAHjP!1;lqC+2q!Owv=2vScM1~qK@o()-T^^| zi%F5$%Lfe=r@k!)@bFl^qMDU z9&J%rBgQ@1p@e`bM+tB3vd}YgkS;~5K|cs=P(Yn4%wd2t+-a9heFWn0)zK<067kh$ zj^sq;lRb9hRTjt;oM=RHhm*B1$OQ`(YF zN%(wDm}<9wvy>kcH#lr2#sr{L%}E+wT4+e##eG5@IG7te)fzSkE-E$?yNg;~jXesJ z8~qs87ggb-@Efn`;*+5=cNQsY+T>;COH_O07T>>V(&M!C0OzuCcvZeB5|9OufZwVE z+4J)sxkOC}m|ya`Z480Pnk;|(R4!0}&67dDfpUS9u4Y{W_~UJLE>RZ+dDuuB&|{uy z$yq4*1S_-{QoizG15d&R32XlNR6xT$e$N-(& zq8H4(0%bt!CB{9lkyaSs#u?JgX1rq?G$AJKuW5MeN5LGl^zhlHwt#k3m1;No#XK&&H_2xRrhp(X%pGlc>2?X#zU+87 z>^Fe}Hewlb7e8xW$dTM7UEJQ@SoJlWL0&UY_?C_V7s!fHTkY)0C=|>;RuaNk;)m~4 zKO(H=Pl=J+hHsl^)Y!gi#zUD9^Yr{3g>B4mo#>L{pW&zpIXhqEO<&qGwJ?S*Sw9C6 zXdpAfI))x`x1y#J+R!p<`@jhd%g%i8WRE2KaQe2DFegG2>~dw>?X=<-pXbw}R!_kN zlmpCJIGJ#^xI=GtTGSJQT?lha`1@L0eZny)9=<6yC-lgF27}qrSS%b&tmNjqt{h{4 z5jfA|wx|M?h56ASC9L0EZ8}ZkC``rb@~SzK$U5Vmc5RTU-7(?Tb(?WVt=~SEtvrFV zu%TlhBUZUM><9fhmd)NM}Ele9q)RiAS>x$;gM#{DnaYOq=(FB=FO&D1gb&q-{L0t z$^^U@zGagaS8;KaGkd<61r*}lR!*D5T8*olbngJqD#t6nr3mOBd?K;^7P1v!u#8s+wpQuWH3W$c{OBn*X>w#maoiv|$?So+zMX z8!C{(C<$D~xJ?+R><(3QYsh?H8+6uKVLtoKv|zC%)FF;lHv;zESelv$oo5$aE}w3} z4{yGm0a@Y$`fMjpo>w=glgq(-TvcG1yeGY4jD;I{OQMg#uj;FCJnZ(S-lqL7q8F z=+uvDd%0nF|Jh*=;*|gIuu45vRdgLvg|an}#Lhp4yba@*kRtu4E$OcRK=qj4t50hsc(% z6r6sPm{UC2BO}DCG*o~b*1us59VuWz-{Nub;F~GjTqb-BHurQ<-g_6JrsA}W=rA+4 zHGJ)8kNlrCe4olFR1EUq%Lomcbw=IP)?C5Z{(=mw_B_ZoTb!=0Z+-HYwZwFcl=D5C z*@mPYE%t_NK3s%w*K0*m`^5M=C1h){qYjOgkS4N|P{m4XAH8Y;=BXje1>ROjY^S2; zfXR_GJ3w?fJ}W=Kf6>c&MKQwK9P!VH3v7Sou7%B>IAke#BvH`?IRh_4>5?d(kCvX} zLHPifb4Fu&P8PwO;{QNSO+E368!2S1Y~P-4CbYW`<8Ozb(@ zNBp-gHtzj-o6WOnXU#I-QQGbcF4tpJowJu-?wG-ent^ikp$7=xGZtfEVPd z)7YlaQY50rlnOF3)h`;OhPmgBOZz zh`rm@#kf1^Z^?faZH9m2(bQ_>uXZ;$;a2}nnzP?4q>`gf2Up4u`^bvt0y#0>Hvo`d z)T?*yD{rt}>5icWO~(7a!ut}!dsJAcJN66v1tnskKV@UakUZ@36n(f`%X;|%ZmJd) z>c*#j7^dP8p%#}EWm&>@tY@%S%okpfOqhp8>*%JeBj&)TWIdC92_xDBP!BGnB;u-WDl?xoPpPlS4^| zwH(rHKX{@#(F96V1DdJ9K4t>MQg<}sb|J#g8X9fyadW3^9Bs;TdOqk+oGZ}m#o#`m zlF@W_1C|#!eppr-4B2e9^aE=QKfBoPf}s>S>*X{vuo5{~7g2fDR_O`-viwD29P)5 zWNZ(|UaB_UX^i$zI$Sb6xrDEyltV^4UU$OdEgeN+-ebH0q^L83Cu*O^S67_NqEERZ zXJog2Ax2G1P`@T_3jxN)o}ww-xx0y5cw>J}o)fdE22+!xQcUFJUzKI%gc`Ok)3emx z9s9ZA8IkBwT3}XMT$V%=Yh{`Q@?G@TbF0bNIJgYBCV)Td+#W!E37SYH6VwXV(05N_ zgD1YjkcX>7iZ2UNpuy#&8#=4GWbpxIdLB%s)xc2cB}s@yrWyOFWkfLP%mfKHpAu1H z%zMaxpo>D71X70>PBA-+NfNe+o$y^Gu?3j zP$0w7D%*SXqTp`;p-%#8em+Ems|6bHW|$9Rw8nUX7xCZ9QSgn%V^S}ZK``4&(Uzqa z-^pkq#hHmVqGm%jL4`{UUI-s{5)cn8y}*E_vbyzD+v%aWsLBc2Q}<}Dtjn%2Fb2Cd zTX_m?Q3QCDN`eml9eAKdk819=XRFZjStjksFYWhkR))TfcVf}eWdvEJU+FX^ z^kH$<@tg^EyMjLSaO7sV-}mfLqoW@oKjo1wdm|G`_D2NIRXo}3WBp+LMLeg*!>+4j zmEgd+2YB%$%nwjC@!%{fC&PevK;&#Tbvgij$A01ifw ztVfHCHw*PMMW-#{8>c7d(gMI>CUJ9{1InV%xaJXt6wT3q;$dwgy5mNd8d_30P|pgl zgbpcYDj|^h9N|SW%ZfW%r;QvNmP@HwLU}RKr^#RwPU{LPP3%Pn(A|W_G$oQ)a+Nh8edN(@D_0k~=!;B_S?4h8Oe;Puhe&-(7vxT-(zem9qM7W~o2bnC@bCMZI;C@n$mwsyzpO>R zu{NSRv>=97$7~+su(HL{!m6Z)t~`N{E-|4UOuFn}f5^7-@;DUX-#U7VtJ_V|HZY1E zWwFRFFHMytvSJ9}1W;#*YN8_CuIf$}Eq|Yzci`IQwR&3L(*w-FXj%Zl><*>{RwE0` zUZJ7_isx*;-WFcKY`+WPmQ2v-n?%-38da+mqlbButC=6#{q}gq*_c#2)3SWfz#7vK z3G5zZJ;ZZV?bZc^l{0q#vqcfT(RaPnn9in^3 znKOPVZEOB@$p%%KEEhOLjh`SUdWbBo1zIfy9d+pgP#u$DwLO0rsyn}%n^(REae*I8~-W498bi+zbt6WF{nnSY? zEUF7~JkViAs5E!gg(i8Qx$+4bvHWFkycqQwB$Op1z_21ZFOnVewK`E&;G?d&TpoF_ zIbFtlU>YZ}2&H!AUIQxT)vPn0M}m!%E-GPebF3wVDz?wioxlaAP+xdLwoL~+@yL_W zlA1u&Ton_!beYX%<6AZkh$kAHc zNbtx_HP1PA%|Ebt*CsyEwC3`KGjhRNtrdEegu;a|ShX^WDg0bZujw(s>(8H>rz z19QEH9e?ffI~7LzL|&E51dmg9i))y-URx`~zWU3oDH+nVX%jA)|AZ`?+h*P=xCh(c z5lmCJYB|A-h1Um&nG|#UhM2IaI`@3R>B&XkOt`ztclTRX8)ZqW8D~DMvqn8%&nOBt z&JcYj;k$9ai6ISDnwtg36&Qsbhjw828VFJ_bZ>#6;|uGpo}O z4&KaBHWXmO`d4A93_Rx6xSO~kySmr0bv4}|7ip41wd{V%9%32rVXGE{$};Pi`y2ty<~fGb#s*G*D@ zM=<_eEUZkZd*K9Bd`z_k#Jx}YEQIgYYwjRo4Bs1y2)9Y-vhJZPd!u9?ey1)Yd?!p! z6bO19-z9!1a^@u2>4xNe6J3Sr&Rc)FO&ZB=$<5x26P);)$)p!x-&=vl--I9^RH%J8 ze+hh?Zm4(kT6mO{&~bx?Mx|%)jLyWoSfJjp9)OmUQm-6+4sd#s@&}J4wxu2XK#S=G z%iI0UV&7>G&%JAF42Dcuj!YWY4%ya_Xm~zM5ExteD~0P#zsEv-mzq^DgJ zCr0n^=zt?CQm_c!WxydYXtjbg=&ZyhLq*z*dr;3~M^*mBj~|d+_kx)53#0w`BcWBC zPT@zFsuk?Nv{eZ?}Ed_IkN6u75qE?_E{A@wNXDgiw1rb%8}} z2xaabiZkODb^o3C7q%T$GP%$j&B6rXA^Ra+#gj~z0*e{c>>VXs(*2dmM=P zh|cIXruhLDAPhwe_jOkS_&mh%z^f0~_xnpLfQ6(zQ27j$f8!;3Ba{b#&if7%1>gUfo!i%a0z5Dj$H8bBM=dh*_ifBQHcb>(@6A~ z4o4S9%Ia@vVwqhNr?*t|qXj$9uw*G*!Y{zxLBTmRN%|3vA=Y0m5L|&Y@42sV95AT3 z7NVqf8iy{1JPqx>49SF1g`5^D3NaerMxjxMRTp$6=-*6{{Xa>S%>PYt{|}zz z|6MO<{D0QVzuHd+IX_r;c(6!XzF+Vqn44rVk0n|@#NFhMlxoFvE=aWX8>T9nX$Q&O zX;7ZbX80J=Qg|&)0VZT8H!nG z8Yey-M-%WTFz?Uu#@LD0j2+6bV5gu*Y2x12s>zA(xrEh-VftUw1zHZ!R`#)_vZpCU z4gaTkV)^fR`u}5<|0gt2>0d0jy@QawhxUK`b5>4PIwp2jHf92LP9{1g4rW$HU3zgR zdsm15u%F8RhX|@nui|8A=j>qUWNK&Z`M=f9|7!Tp{*?VEfg1k5zVe?W`X6nS`Cmu> z8G@3jv%Ra6vFU$sQ89bF{}|$83=K~z}x|3Z=fR|eGoH%0z`L`eP*i%rJV&io%m%FfL6-xTRd_o7DD7yz=m z{%x;ZY`p_kJGr{13F;rGHDDVU(Z=tok?tblO$NRt7~wu;Pd+`W35{CTTVAeB5@Vev z4$Rrk&VpOj%F|j>1jfwy9%CR*r46;NiL8_NL4UfM#$x|4_I1>d+Koc6t1`6d64#7V zjCnSAT=kJ3X1Ub)Wb z@mq8j`=uA$=t$lIm(~C)he!mA}H2F{u5-xjy31N+P@U)ziK|7wyt}nV#qu zWRN%54G>zHu_0h+BA#^?3y08N9FB(!D{SydxV2a*zs~?o>T&I9p^ycC10^z6ah&(V z_XdwYb(bhuV;P`P!^}Pprv$fiXvRnJ4z7>py0lLAZ+%~89o;}*F;dSJ4QcXS}jatD&F>~xI6YP4&`HAYt8Ay1c;WL>DjB%LV%a@M=R zx<>zC+NBimLULrXSV+%(OH}Z@p-&4jack1t6_YtAce*}xEe?}Km?as`L9lmTU`jL_ zyeCWPuQ;YbRlSjq^8tbvQnyu=U2kUY`G8yj%@54fC|MhtwuU31XO{KM9m1ZjtGEZcQ(uOaZs6) zkgX3s!Bv~JKoXR6z!TquNsuq9;+B02?GUitgT0J*v+2E3u*$+4e5re~Su(c}(1$0V zUNr^88$A@JwPuwaY36)!dEv66b43$)F*;4fFO&Q}N#4O(YEW!nPz&nxN8|rBOnX8c zH^-eou~8V=m>=w$Ek}JMe;>Me-0cbO>SMlOo~6u{0b^!gbuDri@9sXEI#aAHk>t1n8B$>3&wNASasPmF*PGG(3Ha7RO=TuIVg%E zi;gNG(NJxRha^6*1}xy#(R)84pt&Ulsj(dODTh7PKzC>aAwXrG3Tdvg=lo^=m+nym zrOQL?1PmTTcpwnvY4T*S=qHe}ujXz*inDQ(lV~Zw;Vz_W+Y#ZD(yH4h*RH<`QVL{> zq@Ete0q9?eEChIvy}{ZNdNJ+&X!v9y{P9P=av`+4R)!n*mEC{_$#Izw_NYNO3g;r@ z%Qk8lwq4%s?itn*W*7q0JUFMX$v^8ijNrQIE8MC81CR8>b-b9nC!8rftsu`*kTWl% zXqG?%A81*8%mK;&_c?f7lr2&K#wesew>$+smkm2FA}?26pn~qGmNAp$>bxVu% zfz6jzePK&I$R-&fWh~i{?&+2=NPJE!Y(LvFZKK+}HE0$jTkk{s`e+ifZ2!?do^{@t zl@~%xCI&)pzSU0?EX};p!Y``sLI6tq?);oMt`5U!L;8K10L8SSc$SZ=Q8pPl`ynCi zP3zpBy+HkE7Kt^|U7&0@e&Psl8zG+ZR{*Z74gW#FO5`yb>GU|=Gw|Enr#+6kxpx?? z`8_Vob?_6~t#Mf$De{u9KMGf~pJ^Gu)N^7C`VVi7c(BG8NoYVC3?MLVkq~;a0I+z) z*rJN}Tw|3mIF@yD&vm09ExYKr{wNy(eEq2H5Bc;(ddyz50N8Eb=Sm5Whsh28n<41x zTUu6whm@;2QDE<~LB`;N#%WPV;z4=eK-ZSz_=D<--|2!RG{>a+FBj(`3v`7l4kr(uCe=tCKen=HIXKf`*pJu*ZvRo*7#23PM>O}#sIE>rnV-LCjoE_`KFq@_2+-p&?C{+_6y@Ib_IgR+C^U$R zph-)pY*Wt)9Ez)Nj*+{-HI=Y|7^DP6({o4k{6JGYI~Tdx~a=JK{9Vl50Puq+nR$aY0}nwG6Gkjx3Yq=SA}UKT&qKu52T;4?YK>^@Ga zV=XAq=Lwq`5+-n1QSw>d280a>*CY2T?t4hcZae-i)xi?)Z={+PD9p1{l#C}Z?^u_M z{PF!LSPP|jInn4h^g`B56>#|cQgw*9SQYQI5`}YnN2iH+ctjyvb_zwB=LJsqa)D~Fb{QuG_^ zj$k{|;Q2{%U5AZC*2HV)jADgV%5?{mWTDB@n1D6z)HEFu&snr$VhU@6nRnbXxR>{! z^i?ZB1HO=1r?>u7a!9U&a$%wzzTBmxz00e?x)*~hv=sbjE?!LjcPFv)_Z!r?ECsS^l{?~HhurAOqG8?Jd+V`TMn3KD3tOw^Y zLPL%&X&7RkHD;^(0zh+%JYSsaR7`RC2poOw<<&ZE81j^hQ#a%9IwRUy9&O-C4mg4D zi=^|*#84tq9;c~b__FQx`p_Q!HYXz6kvS$D?+yrZ7^fQbYpDK-W$Ec$gXaI_!DU7p z(;*MIneK`h%hHKukn&`jKPytKJ9Fos!^%&Rc3AZwiQShuutaOCvZ`u*?RF z*&+RDtlerh4bPTX>Z&z(I9ALmxsp;`&L>Giyt*S*G2NUddi3ahN2B3-*EDSNm0j0R zhN0?6QM8eYTCWNGq=XYKZp?tsQN}IQHmX3{7lvj#C_8A=-H+OvMSMmiQc!r#TD1Ym z<64nA%JJ%r)4p{)HqcpnVapGj#Z^T;5_9xKAbB)%zsJzZtV54SUrhwP<%tTCP)z;} zqOBJE^nmVdOe*M+=PN&VdEn~c#9#KPX!d{Vb__F0ohFWBT#hB{x{*qry7$pBag_LP-J0A?aA?d+f-w(Y8a39L&lO)ZdRW3v`Whjcea zA$bHxl~|+ao&@B{+H^BgHvZ^cyd+kkk&LGlS){CQk7uh>+9)`@bi0SWc>#n7-Yjqq z-I%^=ZW#T^sNKMX@D=;ln@fP3W2DHyjmJh`F1iR^WBF92tl z)cXhLAVl|p6s3h^G-&d$mv8X#DK?+9fb(WT ztc6@5i;GCgZ679O1V>geem8r5n59pcLxvF9u+*Cg1W;Uz`58ac@(MYhd@~{H+V}9i z1gA@J$50#womQduI6bCYg-WorVnyHBb7yQ;!e%G>c#vqlwb?)eq-vQC8yTc6w6>eQ z>62QlrxW5&awmZyz`RAmO(;g7)*6rv1l=Zud&^>&cN=}PD&Kq2anvPLCckILU<#C# z3Vs4S7o`Hd=m*;siHEfG2%Fd#s$vbK!2GhB2qHSEbPr zQ+{VhVa{fO97Jbp4_uIPlU9p4y?@MHXRwiSGcK`v(%9L!$*qdw4t^{ajW?8Qw)mcj z$=L27Giv2GReF#5>{_q}Y4p^nK0&$731}~_cszwVvqeO`h(D>$pwP=-_J3H+0sy7N z5(Rp=CIxapvk}g@%9GUDJcW*kz*0zn*?>bnD8BVN6tNnIp)pLsTm0is2(*!_SX;?W9u8T> zk7TRBVNt06Vh^?mUB_CVG<8T*SPb?ol2x)G0xAM%&dy!JUc0&_gf$Dkf^(1G(Sg1T zdzpf%xY^^7Xh#iM5Dwa`6OFF=mfyS zcLeIi04~feXpc^nAcY$Mf#FbO!A1%PKc_4m360y}y;4+>Y0SaA zy(AMTex#%>Pbp<1KkmoBA`kzw&yG~&=-9+LG;V8-%EBMV`)d)?zO^MOEKnNm)-5*7 z=dbw27#nFj9RkdN{CE(Q+vkDTg||;2Jv1Qrv_7GXLscrn@k&W2hXR^Jer@RDBtP5Q zAFiHjK9yK6jk5$jaodHksiB zDq*h7YU{qNhcHgqb!-1+KWQYFk}ygnP&Z(5VvW(VyiA%{PY5PgL?}W06)rdd=+r7s zvYe6C(CEpL$Uc=$FFup(_OINmmGSh*m3cX?fW_;P;1A9)&e&p@JK-g)k3@q%w;<9d z9EuOAEbdqPdzEF^K4mQU=0D26Tm)4<{5q-l`MLKLLlV+=MoWt-ORGJ926``YLR z78uV*cCZHf4jhC1O-Hblp72(~<$V)}#JKl%_g30gGaWI#iTVjqwm`Z%c)1jAR~^l~ zj(hHakALsVdH;mz6wG}Nnkq&pG3ZFF5W~;yHU2%MIg3Foe$IkX3qx61-;r;-RF26L zBPaK~7o*NtB_QV3T+j;MQ;_YO?voJ*yqnkm^$c1A^(DlN-j_Ujx-$V2k25wFz9i4h zbok5Hr0?>HPyUR8Ga{}Cs=>*vgvxcIY%8fq+oYxg{LBHLbuV9Gh2V=x1#$+swL}sA zb4D2p;};6`@bjyFGcbp;+w{nz8|_79Z=~SH$T`)#QKOYL_8XEVc^u~~Be7m)S`#Pa zb?}6t?`|9V#1CXbn*<#`yw78U3nhR3NcvYTc+i2=-R9jjnTKWZM?56uc`ltL#j9|* z&z~ui!S&+icXpMpojLJyH%&uQ?x5q>9Z={_`r{CurO#x!8DMsbb{~~61QZTb?hoVu z&|b44EmG=?Y2GjW#hGkpgCk|#ktt2PyBMz|>`c+T`pykzyQyk=Cv=TkSD~m)rm~M& zUP=A3C8)+#!u4}RlBP5DDx5ViJDu68V=_D}Hg-^O&*(a`uvOpVf=xdBU zjn$hpZ-tuB%&O6S6tNVGpP6HQOPESyC6J4uSaZ_=WeR68gcJ?fS%^8_69}fj6i65N z#qRen8o+c`F8?^7HHN5-@+Pv)ghyNkq$w!Rw{2GU5hpz?;5NV0cJ~OUQjaQM+%e3GucAVSCA0~e8>HyK4pr6%N0!(& zEYGsva+PI@qroLr2Go=$i4(0i^{@AlJW-wOCq2v?1L84j*}tA2F)Rw9+8qgFN|J&U z(ljDs3)xWt>4UMC*>+Iu{f6YVm7xv6*P!?r^ z$!@lO65b^ln1cxs0qU*L#+^kF2Zp3tbsZ8sn+Jj=Yu|N&{5EdMD2wj=9Y1==ay&kqa&~vFh7la@mUL2)HC_FUc0%;R<-N-oR8~z2BS=gXH6b%%8 z6zskx%#O2=i7Dd_T@!85OOTlmJcA5~REgLBLy*h0e@QiHR8i*4!*^oXvF83=F>ZlL zcu0SWH$0U8YGJR}fqqu^H~+W{W3ihU#Z#*-dXSy+B2QyaEFX zf!4S1N4?pt^_HuYwcAx79_%!997>OHQj-=AehSIq_lp)4Zhh{sbp^{@!YwpK;?jFJ ztR=`Jj%Hn?n6M=*)BJpQkVj0|de-%5Z#pOj9Lh9eU-(_Ddm3s3`|v(dDd`b4IY8$_ z2vc5k9F5L)X&>6noRhJeNWzeiSalMzzfz{@i|kxMX-(z`dSu3UIpuw6W5R3vnH_+{ zwCLSoThdHs1sCm|@EmYIvzVp$@M=}9$Jiw@_33*$4VK!1-V z99Au5Y)~9|F8qO$zFL@_{bR4)8Vh_E5nSAPAA`QB#58w-dVnt~L(&0(0CFJGiC?J zSq!?NCb>u#_BhpN4wum+_{L`+>g#%GN4z;&2jB- zk!&^o+$Op=RuB&s0GVeVKCrA2o2atLPspHKp!QyI&((@ z!qMZJWg##*)WFq6n60*xwBG_Z=N|Ohq%3HeuLN@lfzLZvZ(;_h6al{_d=%Z$Z~5;+ z5Ya2j_0cG!gy$Gysg*rg@5qRFpA#V@_=(-1$qb>0OaH)8o+jRr#{`Mko4pEI8Irp| z5lxFLsls~lHzBgk^aCYthSm$Z6L*~hnL%i!R5R^ww_JwwP4-DP8~np|=~Vt))OkmR zaoA-pYYyQo5)tyCs@9}caNZL>FsPbg# z+S+TiJya~l7F?Nk7-s4{@sfMNv()lY^^7Tt>D zbl6D{NE81At+by!AOv{1SN{nit8o6Xk0+VSG+I;k_w1UJ%onssNhP1&? zXFWS4yuhIn&v1Fs+EDa94-gofj)?sXQ-UzVeh8w9Y}x2SgRgNjW}Yf_uq*HjoIq?x zEG~s({Nyc@gQnt7Iu)8HyI=_!dK;#+tMgW~ErZ#us9WiTx& zsG-k%d1O_a)35oZJ3N$Mwa8s0!macNOU9X6N*)_WzW<79~Q@rKe>Xv)b?}PF9 zLk`RhUta8h{1C|_jDA$^$;{zmecoK#j5?(G{3$o|E5Dj9Y?Z8fz4dnHE_^lld=BmD zceVU<3=}RngAs7N)H9Odbj8AdjOrE zabVD!#owKZ+lnm>uSjUmG+7Z+hPu}acE%!{O}Hm9=ucHMxFrew(uo75?#;3B;a~m5 z_h)9ykFT{bU2%SWDDZ0f0_QIGC1N(+oeW zWjw#SJ;~7$39+Ehgk3_Qd5pBUdJtPX4-(=01J9U3Y>anb@s4w+ z`;Un@@6+Z0&iU-xR?KgncEd?!+!ojfR0x}5R~(B$7_(SIy+u4~Ii{^)=)4Mpc-f;J zJLCoYtY-mKzwjz{LH2^(y7r7SKHc?z^f(BNHas#BQf1W!1puj^Bz!Xojv zopsmcQM?0irx5P=Z-Eev)BIT_McTE!d>?>)9AOUKtfW1avVm3=eZaKc1aKrLj){rh z!zZecmltQcjTes~H(9&oryl2n2l&qWO(ztMzaut+IU;lHy4sr^gU<+~ zzy35}{;+l(wE|kMku;=-Ai!5nZAg?Fi2JkfY1Xo=%SeD;O! zIE3T-oS?%7N-#=b99uObGF_--z#4}pKf8JTRJOtx?#Ph6=#AZ5@!gjoAXX%D+-Qn2 zb1rfi)x~J;?{qOeCE;_cR5TAwXCJ#WGYVk`mx+>=MX`X|TB}U|RhQQ58g#QYk51?I z-{th*m{bXPVeQ-3ZR4M3b4EuYD#ubwa6vECb6|Sx9B6c`rgfH}*pN&^b=~Z%hd**1 z_y=jKR>~_rU57>GreZcN zCw&rT{y8pEM6IYuK~t65cqAGbh{aRqM zCI1R{PQ}de>xjP(=ubJfV*Z({R0NZ{!%6+XB6-j$IoYpt*u>18+zQot8pN<-_dt?A8lyT9puIT`Mx^* z95up@u0p!SzU;Sxy}Z7kmJk@ zrd1w7O+ObW*eTvF-e*{IjGNLv(V&)+m4_m)^g$ltNcn^LUH&$^kq21%V3!%I&H#h1 zw{<$OH*fMK7F5d2`RwSz<1Z!^JNH*-xwdiOy$M z^*IW!q-JTdd0czP%ZGsR2=fns^Q*uHYs5~d#dT@WY}?PEZpj0*M9oK^8|A0{Zg+4L z^e+`PQIc@@>&CTl0OOO>G{C_9HA`b2Fw@Lx0Q2mY60;WU_{IAkC4ZtoCne3Zhj*5Z5jt8x+Ycd zy?#6JFnJd->2*B{5mO9QUdh6JgQ>Od6$2v@SX~?zWIa`Pr@9kAM*Tp9%@KrU9KAf@*C!yc zZ-r5y{Y!BPLtI4z;-O(NbFj~=#Iboogr~v!+0UDd70&jdx|+9_DSkh^^nG3DLeQ1lF!of0va%gt`k8VttJfrY`898n#N*sX zi~|zPBK99W=&&AsoQU6Y^fsCbV{*DtpmBrHoB280Fzi26(v7ucUJ7Eo>@RrDmkwf* z2iM4imE`$Yn2G17yyBD$Xc@;GOqP_IA1bj3-*MHJC^$PnwovmjDVSa(%m5{*7-Vl; z1Pa*_BI&KQLw8>E&oH--B{jluD#Oc$I{Hx{PM-FBAlt$T8Y;q!;t|7S3?_+-V^;a3 zQj5UIP1V!(v`W`GP-%QUe&PuYyh^?3Rva#Gel@uijztoP)Tq zP>#MNgEOWCF(WS4@Uuchg@)Bi2}+m3dTJrIE>5yZ>{}N%U}~Fw#fmKs;d6lLB4jtP zFUfamGL6*Ey`R;?L?zOlZ_KxsdY z_hS}deHhq9mMBtvea#vfeMzldzI2i016T$}vNE!}KntLM18|f!(e3CGhwe8Iy=@|B zTc0uea`S8t6xpU`{7s64!zzM(_o*F*<*~nOJ3xpJ>GXrh-=w%QU?n58xX*F}X`j1E z%iqVoKV4~-2ym_`2>Mbm*-|F^L1~cb1+9g6)?$6j%`tB!x22+ncgx7ACE*N?0 z!Qd~o84x#}y9Wow@FuJ$$J{6bk6s!co!CMh42aQjN)W~C#ao$Tm+SueI8N;B&-Cz| zTQc`uaee#QZxpT_4)SiQn$A~{xOxBM*96k z%sn#x3zeRo7A2g9xa-a0ddj4fi^X+T(j7V8d%b>R(?;kFZ^z?UE;!>7N@>ci6uyOI zJcn$$vSGc!%buxpo^+(3n6n$Y4j(rC;c$kYt`a%}Rx}5^NCT*nVUfkd*F}tnC|U+? zx&7cXOIX{JSRVWwd5)g=ZKW+4d_yhl;*uK=8MOG5lOe%>cEH-lg6DAh+;3$$OJimP zT8l_ecu43(qXB{?Dg+3}qT3BI92x(iEeW@k_n5o`=-pfS>-_IFUyM-Ej$U3Fmkm-$ zLC*!N?M6ztaHN#q28fy06=!eVp{$=0JB+iCJCzct#onjeVL5~+gIW84(~wfBpqdABzl)yvnVB6W1m*iQKeajiF{GGYQ%m!p(CxPp zIHPjE(b!(?7gPpnl@-m8vl{+J)mt z`IjMIM+mx3Eu5l9@Y3iRJ2-bETSumtQV~v-m08)Ted7WUn4;$Jtol-q9SWM*>9n2Z z)i@KpFa2I>Rmu}%OIZMmgTXjNfFO?^QYQIs5<1t>Ht{I(iy zxLCZ(DXIyAng^lFqjUAc0dqqnsB#EMC{;L-eEg(iHMfR`84)c>0K%+|o?1sYsEqdA zA$x(pi?RcLvwGDg*s0K1+J;DTC)}$Bz?7;sL~;&ly*quBrC@c&`N%CRZQw`#tn0Tw}zJq@3v8Qzt;>kX6(dgG=t0=wQI_8+&i(P)#ny z;_*sINi{{%et4}UWRQ<)DRM~KLI9k%W5H0ThY9u%WWrPlWxz^2-tg#)@{A$Yrm<@G z@Zq8NM}3Lz;x8yf%i~Ac{a+cEoB7>sRG?fBU-GM%k;NgJdS$9BEys}%=5!a!-gDa{ zxXer%yZx*#y1)U8J7I-7bKf46e05yg*ndJgt;BK&m567DNImH$7z)-%)&&@~YYz`z zSP3VfI!*s`VNE>-Fi()(h z=F$pjjKAo3|!tx{gFWeqa2C7Au!4QoT$;0S~tsjdrZw!sg3;DP)S4z(z3bK z?|bFD_5NJ|TjH4pl+QT59vjffqs!~_7x9JZoqfoOa8eE=LJIT`xkV1f${R&wA}{Te zR;}}QfqqJr1X8jhD1_S$vKd`4i#B z<;K1^gH(fC@op=&L$`J^U5bQI>?JQKG!9HhymFys9K1Sy(PwLT0fXQ0Cw)4yFB~Yt z&q-Z$rq!_(qq;We7`Z!q|E8!}p1ld1aN8^moD$i_%c$aB1#A9vqni6^>l2fJnVQ$a z@8Ig^GL(yEp}PB;+Vi`x*}b?Z7_2z;RnNIhgZ{bFo4N6nx61LYh8*kJ68SUh=?&+Q zpJCnd3B+PGwsC5{>6?;*NDP+ZVJ$K0a2UcE$nOH@!zc+sy?;kf1Yo1w4CTj}rI3{m zhst%!pkJQ~L#ak87K}~qu6d-3eWcJp`pC{g-(t@^{{*1wHMum;MbNOqn7m4aq) z2Ixyh+Khe`FQ-0YD7iE>igMK6-`61ru53u4-{($fs1t67jS8D4Fe&aR_)5%m(A~RWE_r-3$zF zVrSz5TAxWxw`_w=u2la_+@9XMbuqCs(OD{_HaTvbn@*&ay|1!H(SiAk#rxD`fq+-W zJ0l@Vw{^ULV~IH4+}zMm?4 zZ`ss2a#zY9cLx4~%uvzewaflzflRT_`um&8_1h0Xzqx!&@f1zsYK+d^1D6tY^9$`q zd7oc*;6PLD-u~Wd>8W#{G@LbvetKmvHM@Y{68$+K`X8$=KU%>qx3DiymY9kll@?0S zD{SGHk(hmiKybejW87!0k6(_+HQDvNsf@NE(yU#E zl&Y~6rEsL+QKbxnF6Pz*Y}$C?u2~|UJY+g7AgXVzp4?7K3N;o_XexZv@4DjSO}Nyw ze6(@R@_u3iV-u9E<)yRA<-i$LUomV)bNhMs79XuPB&RRcPdY zEu~_FW)UVmyl0P5h^QHDq3B+`5Ob56YO9g3=8rEJS!pDlOK`TUG(py5TMM^Vq@lY* z>*u25^$qk$k5;7zR~V|t{t45gRj6KB`Y=MVH+BR0+R%o^mM^q$ks~vbAhs6=bL zmrB|xR&tYx9odxpxcVjo2@oc9%t4I*YiFs>or>%O-sj-Z4tQkix3+M_q1$E`zan}} zMV`@!MY|TdLAD;`(?mI=y@}A-6b=qbyMDQv*_9tBg`clxkv}pXyQpYf+8Y=(lQdj^ zJfpAuhGoA_hYh;K7!nE{rnXJCv>_XX-2lnhwM5H(vu%IZEuij4D+bDa?7$D}042Fw zEu}cL&il_uQi~2{ojrMYSUiJw>hs79FTe;F6QjZuh35OflAc-ww(KtG`2&}Vk420Sd#5Y?plbXuCb5-A2KpV zI7}DZ)Hh2zsut^z-HgCQRAV^XPg<#r{Vvp;X450!wVFTV{wP?4$df60Ss6(n^@iUi zzUNXra|G9R!{2m(dQ?Rw<%NmOmKol%DZ9O{cn|gT+4xD%N zXVQiLVzOXQE!zTGtQHCLP%-EGi7NrRA_dA_a=-OnEL*+sj3{C0kr1Bq;mA3wvogR` zzs~pdgCYRj(kB7ZQ}k_nb|g7={vcy}?nN-Kxwe!3A^z62dif$l5ON+gi%?x6b)rBD zWcC7^334l6g8-I+i%^&{((PRJ#ZcF%SaGF+UYBJTvol}K0a0FbPRDFX8mG&II;?Ml zCJ2}u5FZNfnQ&Baj7MA~{0Ft-gJ%hmEls8Eo22lWvAV?F?`In@Njne&m?F*x+g$Bv6V@XVY1S{Mb(Jz1k*(;VRm8_Uaj22sHZeN z{F_e2g>XscFnJWFf_nCC)oHtg!-3BpUT{$TLFrDy;7is;7(#qH$|feJU{ZdQP%0uL zqWqEBl=BHsoBr@n8+1qfe2}WrMo-kpCsxzZ_>Bv2!GkD!6Khe=0@^ltF!szoQE_L;6M0YJk$>B$+KjJpPg-+^v%V&dAl3D;r&(UG)k;JJ-aJZ$>gWCv_H_6V zCbbD~c7>4WYVcw{dq;idDRdYQqsLCbwJ>cTa-@stf0f4J9uIxyiE)x6Bcg6oZ?3T+ zA(d3Nfi3SZU})t(4d{eoP~boFbT#X9%M!`#d56+7Ve8mZ`C#K1CP6S5=5=oI2SeMk zLXAyf5ac?H@X5B?pq!$hkt9`TiKi?K=sT6ut`7?>1A+OB(6^DiS{~nLEdk8 zo-pij!D9>2W%2&&SU$F>`1fm1bx}j!Pf(s0(vY*^3ChzS_wtT8eaO^6wmk}bA0s@j ztjH@>f6qp)a?C#n{PMIgxHOx36UfOeNpzV{4wudJ#uo#z;R93&?%s128a=%Sl^kh7|Z`Di5YmV@P@)AJ`6 ze2RqTMRuUz!mnzK4lBrVp7@1+kXt*V%#P|3!gZ1Q#-?XX{Z3xc>y|=fDV{X6m$jUZ ztZK1QmFkD4ZvsGH;GW?6;=`eWk%SodcVa+dUWp@`uSh8!%tpV_v_wY4gYr`$H@po7 z_40`s@wiix<6$cKpQCKHYzO07Y(T}ay2`_+c(dxAP)O`ux6OuvKW}M&FKNn&UI*cBjW8@bvGHM z^U2&QDEqwTJN2jpFpjkX{f9Dl@;evIQh4tzLb5DaJN@PJ@HmK{Xdui5!1QL{q2bJPJ8iG^0iRIVGpL)}K+hvQDba|B1 z_E1^M0c4Bu#vDgK9ypyt|8Trb#fuDx)4t!69rVeQaoRE_dGDjTNOiCbt?%81-6=g# zH>$N?95tOR)T7!qUq8(4@_$#m@|CSBOxi{ud3&hA6zq^5*zRS_*wqdu|CIb)(@qBS zhdG7l1`ZApi@&V|nkl)wZ7laB!)_HrLGLAm3>9b=dRnUp>l zk|;01mJ(*}O)2^XyfOVgN0G|yVP0X(OUa5cpH>-*&uMP>?5HS@@D|OW;@WZk439tp zBuw8>zr#?9{7ZrWblrU+z zx3~tb+{f&>wM-y`q7UqUN{DyKPh;_(;J7c2^P_<+J`{zi&G+WGMj$P!B)C)DIujtr z62zIkHd7rnH?&x41BOEf1T#)5tohtZ_Q20zx~7u{j%7$!%)&cnJFs(klACVDX_;sr zbdMRM#n=sY^JCwT!2L+zHMs$h|I2Wm4a=Jp-kZX*Pv)q9UPPSN^H~np@$`{qWy88#6#WvJi8)^hpmOd7W%EkhSx_2=0CDG7W5P{#*bj8oC zf%@vsF26}P4?b~(LXdz*s-)>wBOmz{hc16LDl&PSc}Nilp>yL&?d+Nyv5=0i%zO@}U)u{7Q(sL@p2IPKpVY}$hl znet0BCT2??0~ttll_-xYkjhW3sHsNzOELS6dv39d|An8YO<{e*S$i-0opKhf4{zQs z#?rB2O@S>_4FM8WCa6@;@3Hem5vB|zB44fM`8MqLFXq1pmKnkiKT6i{65!RozhSJ( zpdw?(qv;dGV!OB-gq2kY!nY6lGHzV##yq{l2X5$%7#6i4PGzu60H$?HxvC@4zw^=V z0|o3y8XXZu)!HuGNc>EHG@**m$jkHW9kv2o#e@pqh}9@yy2FPfd!cH4s%(NtNACpHpcOV|%+$c3pobzsGCKh*>SK6p5| zw4KWK;l#$))fDp|scq_j8^hA13rX~bNThh4IoO(;>$ekD!GGsLbm)bIwV~GCJqI)kS&T3=Z z40z}qUkUNY_s{C27;tVvoRaY*8w*;ZaZ>%6`OLSwTCNK0kEVG84TydASIdc@a~mQw zdVuV;y%2fB>89bjp%b{QnToI+^vV8LVrcgNf6N7r|NEE=Oax4fjQ{hs#hCvM{{x#) zqW^Ca1HBkK0Ta`ImP6_P3(D~CnUbBefwKt#!~a8zP%tnv;p2lfu{E|cw1j2<&%*p? z@E`Vrg|)MZBfXgQzu6)tMs~&~|E2q8W@h8~Z$)>8b(_`M;^@Wc0Er?5VkR*>+CK5$ zg$i5u4iq;c3-`+R(9djcJfZ;W3=WTpc8it)YYKN0T9$sF0pR^Af=KF^2EqNV#{Fx z8&on@njwsltiPu&e7*E`GD{#m_`wOREtgaVp}JNQyFm@$3aJ@yu@GSSHhtwDEBT$X+=Tyn_5SDtaJvIH?M+wANxejME4 zQa_UQzY(g=z&CDcUiwr>+pij0{g=s@9*N0hMdil&{xrP>g$dPt7F8wPS z^k!*I@_LiDKjS_uZ2$7Z6a>wNar^nik&VH=Edb|(-A6{H`Kphyw)mHykn4HnC+zQ~ zFHjoJg$gZqHOBxXy7Ho{4wrF zj-pNm18YFUV+CgmQwxLbitm3;9-^r8hnWe6jI(maMIBleNF|;YjN7b6l5M9LNik!K z)NquKNCR`!O+K?Gw-=acx{g)k9qLvC;E>u)0HlK)=@Z8-=7Pnzicy?c3~m3;kFQlk zR*x$2@7zu>S#{|7snEhxEtc=@JDsbfvNURbTf6QI5)SOP6kL`4muLHxJE-VCS8k8s z(24pcqIiF>=+d992lDiqdELv-jW1G!&~!PT)u1eWYV2yvi(Es}k$YKX(Jph{XGl&| z7Yrv685?!!xs#oqO4EI-$D8YmoI676(aVijP(Np==;60q;$D;GeAR1&dL*f&tZ!~} zhq-a`r*&>%#Bl3*XajVhPnLzJQF#qX-bH}``PR`nDY6#nZv))a3+m|O-(4a>UT>$# zdVOZ7CSOm| zneI*|lk{IW$vNkF_xtR%inPMEaQ|GSTa8Q+g4rQAN%uDFNN7~WaY)(^Hlk#_!WS}f zS2}M8E_TSe4m9V0bX=r>}z`D*mI%&gyVk|xg4H>oEx8zRdLY_E@H@<*WLSSj>h_~>318I*9fJP*91XXv^|36+ zwCqr>-*v=5eU?9@^ptqtReRG_Gm)-{{4qDu|B&iBHOBz#vn#@z-&^nEeQ*WT@D#cJ z%oC!O1;6cJ5Sj((%NoKA@tx$Oh-^V?otJ^~DtY7R%LLrVNnVtL+7jmG@e;!YIoSnF zqm7#$C_>r`qHOU)cMe0V{u6#Dvq9Uzw-gxLO&JbHw0vt1DwXK)kD+kL)iI;a!n$Jn6vY093?lT-fzh|mq9qU;i?1l;fBK!iOc zX{y#`HnmO^!o?Y}H%JB7x<*tbXO#!FAY;yJ5bjmT`*>U&7i?J^UUpEYN9$1AvoyRC zuSQCQ%`t=&%LUfYbxy(g+Ew(@G&P1~Lxc=O;iB9^4~#dpGvwzI)V;YGAau2y(Y_VV)wLRXHoZA$qOD$1#CSz1 ziXr#Bz*fHIebfTi?oJ^1;gF*c!jYU*k4`=jTI`64haT0~@22`<~ zI)79Yl!TUUZ7f__IEU%qFw3WWLU(h7S1?*e7=CgSba`1R9&DJph!sT&m^4qA<((Uv zB+8+PhmEpZQqy&(A*SB>*Ww(qkLZ-K_h0^^_@7>IKX$xcNT;U zllyffWrQN+S0*o1B+%U85i@tkTcN4<4@?8p{x#>!AjJ!kbJruBaAs=>nvUuHT~;k_ zJ+(9TC4X1g|8EQ00H#}be=wAfz$QgoOrlbJ_t&V**%Lztz!Qi3qZ-7@rG*` zL)r7e>aj;~I$AIQp|x%OP@NuNx)|T&q8&h$$x-Fbc8hEAa&Fuo9%t79fzcjmJhqrg zTP{yvDp4LNlP~zpemlL!*s1`7@qvSUCq{FDIeu1f{+v(wk~4JMdXNjB|6*X1-;UOm178x+HrK5)xA!c^MX;+m)qQ+5D;B~2a7Zwkxt7;sXw z{-J?CN0Fs-ZW$I2Z;~!R5|sp@pKU)Xm(R1|%kNhkxOETu;edGle@Nz;Vn-Zoa;H3}SJ_v5Rk?S_13UGVDL+ zpy(v-{6rDkGr+IuO-nWU@%!oXGO5|QjL6|0 zLf!>^?NeuUbeA8^HRqDoPc@H0d-BY?vb1<`P(jU0JH%2zv4i7I(?2_y>8e^+L6mUm z#cGcD#=VFSlLKLaCHc;dc>~fbo@UkH?Y%TDUvG)KT~ox)tBNxm?a;#n6HAeeYQ(7X zt*-w_cDd%bhQD8GiD?ZvD>^~Cap5oT;$x)jXasa%LB8`>D-#nStU)vZJ&gXQUPYmU zLP=I`-g{vcULeiZ!KIYVpj<|s{`3MU5uUvUCA~d*oc7NNwo=2a7w-}kDwx$S>$$Sq zah_`1MV?e9WxZAb|J?KlbvRQ3rg)<^+f$j`za@ljA6|yHy!r+F2|@78Um!nE%)D~v zxm@FOpz656mX5QnPe#DfSata!YGcU$brKdY6e|%t#fw<1!-ty9zfmL_d+}2kYO>hw zQuu&Qlq<^j92p$(C2LfKx=(dCr!qY2dbMZ>A#Hw$p-G|>2i+u%XxE2xvXyqY3<_f1 zYIEp938nhHo}<(`-bcIG-5)JhWnY8s>4Z(I8XzQ*xbtQ%9~)S;P3$&zq`6+Ai#x;s zgRaXqvVJOv!elkmV3EIJ<}MHg@(g1vhFWj>2N|;X!!>Vcuj;k7K--d>h8>fC2_B7k z?_Tiu;i3_y^|#a;1;Og_uohl7B9jFZ2&WbKmuPYD-1+7Jgo-`aj2u4tGAR#(JT=aY z)`@Dado7yz++r!932|}Oc6YX0$jWcB1^&+-VCBs9p9s$;XO-g^rs$k0wVP?8ODUv0 zA3>Qjo0P(G5%9{9S_AGfN4`4l# zi6DN|BUe~w%K8^}QR{{jj8KMWc8|I7ILUmwi> zbbMuGVrBTx@l|TvesW0G&Pkm0fxDd2@eoYn0c{+nR6u&j7p-HS?9XS*mNv=_ypstz zWGXK(EP0%@2Ra02bdH*fw4>4APOXszgm&csmh``HyA{opY8P%T2 z9rk4Fk@J0R&YRT*rLj!FOn~>WISx@aS(@&h+LyEfUXQcRT8w0h+TIleFC?Mb@D%B? zE19ozx_=T7r9l$7JR7GrO9TSh@qqP6#y`AA0^yM=euJ+r;83nQcBliR$>j^xt7~~A z;|dwg2Rj{W+O>8gV!lS`HvcA<6muB_7R{bg3Dr_qeKcYK`pDtjV4Hs3nK)s4upVEL z9F>gwHTOJYhS1*Jl~;it4^%S?hNsxbnv=WGrE!a)vMRa8Y}|EY#6SQL{T7}%DBln2 z7I`Z|^wxa<0~Knv-H}N_%9hei9MtW(ygBiCkVGU2%<>Amv+MM>eh=ii8N815}I%wAq?4RB@ZqDR6+;SXi)F3DZ(SO+i@IQ3e1 z%NZwrIq?z=5Ym>jR3oQ#c4l1UolvPY$4#zz@M-UptKv?zlaFXNgKsf-QZPL}dMJ}K zR#{+BT@cy$$5uDkLXtfa)u2h6y0rtFSGSDhkm$+sIxg!zfh!(cS4p#S5$i|-*a&m= z7N@kfB+WnhGwjkIwH};es2ZUvt*iPG5h77xO%@rb6XRXdK+mZ_catlxMJOv=6tYF? z5E|&z=h(8uP4{1M0 zeCPCx9Dqjp8FeK=`?!%O_d~<9tC&XR{bA#57mRI~p#@wl7XI5@!1-&9xZ?b29J^Xo zyaklOe8P<-nU~ZRu55jJ@NPtpyx}$GfyK2z!VJS&!zh(~O02mPA~LD#44ZkX;L)HV z9UOL+vc#TbU-txgrbx+a!R<_7<*%SMM=IKmQ1K7Vp7d|0!Z?E9gZjOqn)E8ted@S& zwMkJ2-(bS2ey>&&q_|=m$VIaJG)?-1p5$7E)4Un{i^rpow`@)ONONO2^8Ds-cMlCJ z{ay$yyoM9%zJP5h<#Nam-IE5YyoXpFG>7XQg4S$hGrhmDRyc9#HP$F4QS*}}u!m0oY>QbG|wMw86s-6F|L2r83UnsLJ z8W>0zUpu^8l7-SgXkt7hoZoZu->^l1%?5mcBd1shycB5QtyZVGsUZ=BBI_eAF~``$o(Z;cLD zn`^FQ+@T-jhGln~iS=q4mZ2CII!$3SEQcG^jU!-cR_uqS;Tm`$rpsU?D|sm*>#i)Z zfF5gyQ%^1HMBuXg@VBbwz@mBurA;(4c@f9p86J>^wCFl!HRbWwE(7F;2Hva1XI|by zr_R|RJW<4kbv+?bWRyVdaY2r%5dO{+WVa76pzbBYCQ1Mp_L7SAj;h+e*+lr^gZc^b zwiZE_3hS_?d(2o`>=VB0?;{@GPkaL(%v2tXj7uSlmP(R-=CfKRWCw4dc!IydxG_N4 zYvcNv$mhZ*Iti?A{)DH3$X{Qy#>&^lK!rZgs6dSR-!P4FmW7lkIBoSF9>%iM*Qev< zlN4Z^yaBZUVpv zfD0A>F8ZXOe0t%Udhw}_CASIvycm~ip4-aIP~xRmYk(B^R){$fPOcwcU++`_@;`u@ z5`#>F0fU1RhfoaT@Fo=5g#qE7%qq2W; z&Z%Ix1C%_UM+`EukQ8`Sdka|m{-@ro5cUHFosOj>NHlx3UXIB^BTA42yMn3Dh&(d&?+HMqT` z*HRAMkaSC>Xtn^7bFL1l_jk6N^WHJ;-H3%IlmgS|I2^(i_dMBY+$6hjl%({x89H6y zU?r|I1j!lThBAHQ>^+sAzByJzei3tRm!cLHFMs85wKWNkS>a{S<-m$c2-=^Sm7C2` zN%N)*671ETi>=^sKZ6y&B_-=0u2?vW1-jCUr_7kV6AsstMokzO{Z}iW9Aqs=U!r&4 z!%KmCGl(!ogUJ0ug2Ew_m3Nk+!Gtvhh3-@{;0SqbgX^%k33gI;&X^Y1biYgX>jqAP zHn*K1nGHJ&qo-@q;?5&-r55nz)!N zMh~_hEj*5nWcz3toYh4ZndA@sJMx^V@7Q~!7l;Fc{6EOE?Ehs!@gMo?e<#oWH^TJ) zQ3&k+F3+<3TgUtd82kT=9n62_ZU0Y0ECU-m(|?9oDwi+G8NDjY?wex6y;%zUxd2c`!j9^-oM@J!RZ=<}a7u4Fhc!6G*;Yvi08sqB4R+ zo1OQ@8k~U+i6Ev5MmSzo2iU2{e#7zG@=|_ zCI7D`$k&Wo9+HkT{I;^^s}HfK%#_2Fy7>??CN!3T*GmIQR=gx^p;raU(yT>_wCmz93Q4S{Bo zO+?*#3sYxZKM`<|?Ysik_2+Jh;8^iroY+^4Y3>Vv zao-a-R9=%=ovYwe!6kp*We%x>$hCvnOg^RzWBU7~N)M?pgSgx`BT{`jt}gu|Zpq+Y zTw}fg9yJo;x&TatKK=I2@PG6}tz9mkdCS5Ja+t2!!)$5dKQ=U+e|Eoa(&*5Zwf7t% zs*D{Oe&;`1f11cKKqvL5Jj}L);GVA(y`E%OrGrq6hz{^0;45e=M*jIS+UjT+_AZeL z(a-z0ufgj}@L!d3S4jj%sg$|6NPqbyRte4F?w~uZ6zKP! zX$e_od5Xmtk6~ASWzL)(XdVxxoWG|!EHt?k&P+beD#W;WAOZ9Mu#lNHj~7)Hff2qV2c#)e4dkg}zwkeTa*hh`DV z3W4Zq;LW>G3I=Q=m_HH^1)>Y0LPO$f3*^X{1O@gz9KrSl(DR^p2cMw>3lAn$n95%r&Uo42dGn+I zZM1sx-48q$%!F|LzH+0>Vu*j%$>G+4UZ}@QodwKA`1mK+E@v zCNWj8`%zEW020A1+ZI4C_@o*?OGyp&^9V9I{-}V*<0z-n z(hH<+`n)8mZI#pPM@I|?eOh-nb}+BmiJ|Un@=ZZ&-$1utNl6WYajomifeRAt;O7D? zlF}Zkz8=hgiqZZsQvQBgj9Sn}kW&;K+pG*5or)czuX9{NnfL((XAO=eV}lFLhFs{x zp2kr489~Dxxwk=+1W)j-R#p!HM@RBIt z0N#L)Cu$OV)bmnsfGfhf&SCv4{$n8JxswT|dk*HExd}x}`Crg91I;bDYBr<|eCv(u zps0Q=q2fErRctT**{QkKj!zJW@;a3)3H`w8d*Vd)$v2m2%OD^6es|C=4{(=`F)g(i zsviORjXRKKZafszE`%~iqpdXM!3&rAqGVba&MCbpom@4n(pS7dH8zjSQP?9HXH-tl zT$$RLu&Wwvswd(PXt7xCE`EJ$yKAodQna9g{`5#4) z|ISwOzY{_JTc6_p_z3d<*8TW@3OW9p%j174LV6 zEQ;fW`>8TAQCBl0|8XdA7dM4g%J|{;f|vQEpv>ZC5j_AjPN!H@nyq>IrJIa9vG2@n zpE^!pkD%6Nl5aoQI@CH+1BXE+aJZ_qa*enx&PrH1@|RSf$K@SLhcj7+LWAzTIx&Y~ zWK~awU2RU^Q+N2hk+5L&e0KPO#IF!0*Y>h52m`s@HU=&;+W@-*e-~P}OJi0DTl0zv zJ+_0X5|MRsc$EmApp-9faY-%H!m27hXWOilr!JRpF()f&CnF=3G#%lp1%o60_mbI| z;Ml-_qt5{iAI3bI^&s2|>h&%Cc!2LKVcyHo8jBFfp^1!*-q{jMe%twD_``$GQb+kF z*afuc(-7&Yu=R=$@W`J0+@w`&F={%-`bzw3w_qPw(Bo zDyWj{B(w+{aUQsjVtLPjz^=x%R7gEnSK)~{4wi!C?(n%aSswxC{+Wr_x63L!H)Et% ze3%Pv40Y12KXWZD+@vbc{#*SZn9W9yxk=Ee@_mVlhXy%Yo+g)u2Fz(Qu`xO;CqIob zZ+DDUzmRGLG>C(K;vd$rn^p14v61@;30HGqu>i8tGjx?nIOg_Peh}s2x&Q=$a#yzE z9*;sqC!2m1EBhx)c+-(iIgn7I48fJdA<*zPTawEmoe)RoMtr11O{GK^UDn%JayR6t zs1_-2Tq<26xeom7(-jhl@0Ce0_Qr>{{8I~X-86^-V2KGLaV5ax|=1DLv8Yxx$ zK)QQISu7IP^q0!fO&@UtZfC`gjo$fMqLKXb70KPOdVD;0L*IRv*~Y&`*<6nAX>~$W z?kMuSNsFyd3TjwS#ZFB*>$3MHta(oST(=@w-%YK?#_IFGLRbyHG){h7|4!9 zA49%^3GOZm;gc+;)Mpk+FCce|&wuIf4lDFFb#sU|$%Eo7QI&g+3ns=TG0)!$k)=c? z;37=2B3ciTIqO=?O^$ma=eynb!W9J=c6!40rz1KuJ*)aSw=c_>_?8zAB9X@uf8u&! zFjaocM$1h=8Xb6ufv|$<~N^4 z*f=?&>awIZHpQky@#u}$)#KmMskf}I=!fNu9&F!<vE=k|+LmW>Z4VYWCh8bFRN&*w1082t@ za%blP8SAKqpfvwV6okYmw0pH=&UL-<=M{w6{y-JW^ulyJc=5=M21fCcQJW)Ds(WhG zx>X{FQIw}+bHoeC%~Sp1?ZxO8BC4@&Xb%KrxX@l`eTN%E&2RK+Ksq)S(B0d#`Yib2 zsU)6$CWS8qFK| z++-M!(ZzVFFdB1Qt~55lfcm@F+N=s4`) z1jM3u&J~maoogLti=>MzMkg)*;QBMlWygjJNb*!oS%wDe5Qg&_y41&dvQ`a&v}5)t z0CfSH0d($PjpStXyOq%A-;WpIU%VTZ^NBqKPFf_qAN{h(TFOf^oGRdU%MVXwmRf#5 zC`(FldCPydYBw%=JMzftf0N*uqEFbuK`Emv;G8XXpNqy*ShlHv8Z){hnz(Fj0a=KKSs^ z%R#c?ZZ&x0&aI`0`kqTWu%{8yzr<=M~%zsyEV zXSQIzrTg1E;?Q&=n;Hby{Utvyb0@QQRk83Dve^J@o!$**)s;YX0Iio#`(XCtH$FF^ zP^KC@T2`z^{<`rNv2MCmxfmiXO$7Ti-O|-e>n&UL(Lg2BxSM@;Nh}B#nR)PSYsTBw zeGVcP$h|rK*>7I>ApNGyCC!^p*}0(sM_%0e#j}FjSlpS8iTo+jpNy?R23$MP&(*=9 zyzSqKV`&uXGSxe+y6A3a0iRyMa7?FcRAgm}cZ*^=#&mCw#G-c$tee0uj5K8mZk%ng ztbXCeG8%h=)<(d2|MEQfi6e72*=8fA>KH4|T9wN3t?Mxj>+OzU#ke7GD4q4lxxpAJ zwUaAOlR=yHyB&u2?OM4+^|GvM6+Bn1p>Cz?<#a?jnU5kw5_zYyWgVEkV7Cc0$rn`u za1uxd}VFAvoihfOyYskc^x z6*+ptWp>9EpEOxptPXBK4)T*SyO?7puNsFDDAJCjqkxKZuuoEc|I7iH2>+djQJe?I ztHf9(T|e|NJtXTSgN;CYd@Jg=aYx%%O{Z{WI3u6YOIwt(pRwHNGMhf{DuqV`m<7!> zRW)Q-TIKYUy9gdkHKjXl_I~f6I;^V6aFa}GMOdV_rfL9j?z0+8lxGT6r7X@rt}LwI z?6ZHA{O8(|`(US$KPAiK$0rF7A`-)L5h(()Pfa2y;V2bIFtDHaem2?4(%(OVbc&UlVRKkY9 zTgt6xZMV!E)ao~_FGpY_lhqb^q*OCSA+voOI!-I@ZEyJ@bO;)^@Aj*!;n_V(0+tEc zWa97Ha|7;%x<59wA<=g+TT|~J^6_R1SH%8O^$=)A%W8w8^pB5_7NKJ%fb1h7KJ^$Y zD@GPPG_IS_R`>`o-~CLK&g5AOn&`0HCRh?5I@IB}oc`>U3%d_Emh^~lM1rX$H_g0& zAI|x6O-xc?O-x$En!T&+=PB1aSlEgdB2PlHa|F(bl+jq^7uKOw7OrBm5$_i&N!-y` zK{e2~zMNKkcKPtZVH@h3W{<&o#h0yA$GAY@YO^@UZ3ffvt-c8Gq{(z~7g1wC>Vb5o z)f@qDUtgbSY_9hq85VJVTs|Y?P0CUsSyY#JI4YFkODl;I^|nCv!#eaVN+ic)RK zPOe8`8w4K@=O@Eo2OiCmmRCb-nFj#p+&bUYPX6cEs08aBJkKpDvzb?T934N|Yr}W4 zqaYVs%};w&&?C72B&@;$=NB(W#*6AsjPR_0jfXuDk^$sFaaQ^^PG{yFz^%&N0G^Jt z7cLwST;wU3VgZ&GEnev+wk4vi6A*GJwXJ7-vXs3}VY66sX6e$YZ}oPOM_iHN0FN1lWCHs9$u~hx3U)NU4u~^LZ!J>FR&auBDz+{xXzxjz80dD@!Zr z`L$%3*@gQ^k&@E)#`@n|u_M%#i~th}V(~*O_8C3*Co4r?>~ERApU_QX^9r@e!UJr` zmJX^145*i+dJ%@KeJ|qzGQfIvYPz{9*6}_)>PCb=n{X0tVml8x^WT1gqQH;2V4{vR zU!?}-K9UEwk1I1|MjYohxmzKT=7=HRCK;}sUWK{W9_N6Yhaj!^!=Z^s#G_I|t@(TJ z^pg@n(7+~@i43f#+l|dPq!;%ZZF-^Yi;!oS-v<11W~2!%roriKq9lYpEzbM5i)sy= zxe0DWvLIxI3ZTly@|-t;!Yf3uiTC9?6s5gI&d!2H7 zTEQ8ML-WW5gF0^+MnpKU|EwA~U>hMDm!5--JWc}$Labcgy>y`P8`DFDIp3oIswFIK z-JB^FCmHG}Jjcu)Q9RA!Je3}F=9@v_xAHN%`7|dLJ99w8Aukg4FA@$4l$Ex@>1fFK z1UVArb>&J_2fNlxd@j(9K-nT7li(>{OQAH&U({;qni~i7`^G#)bpgpmcl*6)7{hqy z^{}-wUqKxF>w8vr$*`yuVd2>6@kz?S8dmRQqX=}`{x^!kbc3$_> z=t-I))C}ZMV_MmW|7NK9{SW`Vnj%$`@!P^oOc1Q&)Fw9WP+4V$_G@^mkVJgzhm+4X zX^iy@kZ*)Als$=jsh9cWqspYl)-#INM6og&{Vp{>KE?QqM9I2>4xmyy*yjw>fS6N9 zAS(%j7oyM>9H&&rBoHcDF9sEClBvYi7;Y-@;i|YAAk$Ats`x9%Z5dWYZQ;Z&G1idl=AJ}dCzo0r3t^GA1$Ju58Sd%*|mc2t%YqtMHJQj9N4DU~8%3)rx4A zs!GbnAP3<~z#E>%fD3U?jc%PdUCu*%laa-7l3nDi& z5sIz*v@u3)v3~8R`N89%(urE9WhP2tYa$`S{`QWR+g}$0D@V+QyPiF*F-ms~l?(?m z+933I6(F$R?J+i|xz@4zAf6H-Uh)kq(_&OjCEod#NcjPsaQ#$z z8xYpt+_DMXzpw#d62xvGgyK-oEWj~R(CK}a{UUNE0=trw_PTMFxS+3)0{9nUw7a9X zlGbR{PWQe`NYM(Rz{WQu4yb^M>C(L>x^(Rk#XH;&9X6f_HH#Y*=1*bnXoHK{s_S5k zCmD212!!Xw_spwMgP!8#-5=s2Ls@+@<3!$1-xa3M`zc#I@G>0z5f1M-jHnO>&@?>yOj$>p zZQQX!*Ke?xAnI)_T~jLr()w$_+pyO6V?(;U(s(u9kP-uaUnDR$exPQun<^x!Gvkef z%Ysamc`bYnpfY=6Sq;W@ZWSyAi>ng`q;)rNw~sLf6i}9u+X9-p8iPzPw@QVwp=QeY zzj7ad_ma0OKmy2w!tZI1_Jk(5-Ojb&@1Oi4(g-pa=MUWdo9{zIGfh_kI?g5b)Wp)m zyuiu(9p~XoIfWz_l97(#ii37_Aa0dMxTJ5X8C`BdFi1vGrUPP?PiqV2emI_GMWh($ zS(zfj21K>LkQ}7mNH5*Yd)Vk`=S&vM2(bCp*d6C<96=_^3SeqdtV9ukWohKfI~%&t zrg1!|@K8B1iwyd>D98=n(N8r2kfVujkayG3e@y@ae956sSqWPz7S(bASaJQvXh=9= znr>Dj_szl88CdzjLp5Bko%i^WpPbDt_5(vp(F4?I*_VHUQjpKW8w1Ll2JZFX#HbY{ z+w#mgKjsG2RE1)Qz)Ms*^E+YC9>iJk)OKsckt;U*mOJbHM}mui+i)EI{+2p<4BFzwm_!rR})V;h;0r zzvgmVg9sv9$P>Va5vfy)<;6LA$_Fz=S~DpMd%Rj*Ho`{;_D>u|FdZ^Tis0{_t{<4! zgwZr!L2Sjxhw=QjAQu`B9+PExfiR2qq`jUdWFFarGzKfZROx(m5r98^Sg)=-wAjp& z$S9vA_B^%(tWrKw9W*EMUL+8E3%-$^)0NU0b8Cr1U{$* zhYuC+$h-=>jb8x60EaGjH|PTrkUiuOUclf0uZ9&V+=P=d3j?3yTIt%!otV|f`f+le z`!hi>YsOTMHUkdy?SZQpC1NJKTmT>4TZ3yR&7%^TMg;qP5HUWUvAQhbIv8+|E!^=# zc;wX_pMjbGq$f?J@@m66@Z#5jnP+I*2zbPQl+R}RPHN&Hj+c)iGxx+RkA~t4 zJ~PEtASumr^Vr7tK@UmtxVeR`~45Mg2{FmyZFl#^)54vKRFrJj-87+;{Cu8o`B=#Ch7&PC{=|EC?DH=B!=G}9ktPD}B#M))-!d(+7{ z5sKLM(Z~dyVU{~3)%ye!VVvVH2wq;Lp7CX4HqMf{D~znD?7#*#*Bi<+DXFdveFL`r zidK8y=)eONCU1^hMz&^qQ~K#S7eECpor|UEziO_OXzvF@0WC}j*Tir9q<|Rhp|QJG zbo=E`Gq;q=m)wR*Q$KglHC#&^PNx~1Y~2(;=LqvMs7H2vS5Hq#-3;fyOO*xr@Ju+x zyH9W5o+$7>G$N1}!Ad2m^qJ)Bw{u8=t7I!NO~Nn;^%zz;K2aQsroM2p`d`12X0&O* zFtffmvW`nJrErR;$0y1u;t`TFn_j?%iGT|aEfCyQ#~R3peo?bmdoOs=8TP_w6nv|H zidf0+5+Mj+pVQ$;3+!K~O%Cd7Zwa#MBdg!IB|J44_PKsL9=lnQ_P==Eb>b=rG|*d; zm&mWNB| z7rA0BmgsfUq6Qeyk}hAsX=kOL%hl++eaCFL>K&j20~#8H4P0@uZpI!JCnsGIvKDHS zM$iFoTpo?p`6M0e-rIYWeX>J*S2A(XKSa-R(y6;JaPz6BvGm3wr3Ti!18qooHRd-I zHPGWz-Q#KmKuSUH_0T$kL`6%E1Uy=R5aADz@Qo1xFf_RKUKN4^)X4jbdXJW>YQ|K8 zb0uX#&=P{bhMwP#jD8w{?ltrTD;)Z1)d}RE?KaV)juq~)NOwhNt#?c&TLuwE0!t{D z?*B!}z^t;pGI0O$zf1y6K>(LqSX|xs3}3Ra(4maGW9VRfK0`8`Lx`@4#O4Etbq~?* zUk6r5r)6P^GY=(T7e}i(O7&&Gl~RmEp;(onsn!pN>~8dP<9KVqQ?KSKYhi7l~P2UpE7&Vr?5(pDunEcEc(f_(qW?{ z2)0CGOzUT5;TsF7haC**kwLB2^HZOKH^C(#f#-uL3{K0E{Ip=daM9t*gQsI>&sL?J z-y2k5jHu0ujtnmTOrRZ)!@VmSY6H11U6|#cB!EaEjr%tX-Y$W(;NwQg`qrP#lR4*r^5nNA_yY5Fcp-?Q^$MNkYJZoiIVx1aA#*&*Vf4JB(MgNHNKk> zagj!Ub2|IcAryqr9AUWyEnC_lZY}E$WdBq}!V&~EwH#xu18+~0rv?b5GbvixthvUZ zppfsX#5^tXYFb!Y)YS$3y#gLowx0=;-Tu2ew687-U=#skOI6EsW{;INX0e9gu(G~= zV$Uoo4q-1Uiw>qu&Y(m~(}0)0bn_!o2yDGU6)Ji!Irf8O+%QV7Hvo@Hf6I8tR*!!! zEAox!20eN{oo(f-Q{Vf9`H_4T3*NKju56SK+os7BuDgWNJX?EiVBql*t%U->LSMAg z#{$C7Wns(EX9D$iK7Dm8F>*J2jS3hqYhL&&(6n=Lbs^gJBAZ}?S4ymAV~slDf&24@ zR|izksFR7OvcO6!2HRiCS+@CmcAFrsI`f!p!AdwoqS~26bX=A9cgKxP^QV)~Sx|=% z(x0ygz_*MXcbFpV;kFWtJCg|{p4|_S1v2k@gyHm(rQ^cToz>EpA}NZ7`e1T0l}u;C zq=nFUe-zfjhfpgHrj`nupjnPYcgs%j)`;m5AdM+b--Vg3w}Q?_3e{(b*WZxNQm)ZI zk#MeO;dc$O=G~c=$AI3*!y?S0~QpuWidXiIyt+Fu5_jC zE)M8CJgKA_YRPc&f~i{mA>~ls#mlD$te5x?HY|bnq(e0y&|A>Z@=D>a-hGv5gp2hG z8XhDL6PuU5esHOhqVx>4w%^ZKE51_ zaHAE4;p!+)xXeJUa~+ri1UY%d3Th@={2d<=BaK^E5o;%RPKMn%px}!bbmrD_n)??+ zNRZ;9`_$`fEzhpzy*o_lo_wn<718`5*I$n%bf^gHHb08U<1#AR$}BjRb&q;%{2^eF(wy54LFx8uxE;GW+F zA|Zg1%krwBG|p?n(Aq9%EG$O3sta^MI_a#=V+NOY>7Q%SHP#vFl%N8OS@mA~_mQSJ z#yI4CQwPMHLT(H&TZ~8cz(rDA%iS{jKvHZw8ZM_DN_zZZ-hN((5uPo3j4dR zgYX$o!%fg&8LwFj8JD2)6aB!ao;!c5<~77=CPl!3^WAO>143o3a(VrPY1~#;3=+iCn9-MZ z)6**I6x#|Yd!1%d#Hp;jpfeviBs~Osr+JYo#*9~Gp@)%WaQYLquuSr2R{`8|gtRz5 z02Q4{6fQX6#ZE3@MFRHD=x>{@Mvs+*1X3g#1;;s_J+qp8jk(}idJstsd?V-5b+l#) zuVdH3+K}Hr8*K0I6h3gR>V?7SgW2I|y`~ll0Bnt9C>G(s+cMQ#g3?;=jbc+GsJR6t z(6lj*8F(Tg?^xq=Yz*ne z)SFuwLL?b+wl?zO&nOW;%ZP8Sr>g|O0YhYP&d1a8K43A$^XJp&CZ@#xKW5Z+DD3HUa(c!Lzr=n~)3t!yc9r6`Qq{+$T#`|PBCPy)7>%`Y+2{oN7VwrtO*5c6-&sh?-71=rw( zS?q>3MJ{!yT}o%ZthD$Z?$ItV2Yojl;_zo&IV%(5KuP7F(|5~Le zcFi*|e{gK^Cm3?88&FdTRYcQdbk!?>1(CUOL^hG~^_HAzBSc(-Y(ig5>zpd8DIdtN zMf9UT7XMDdpu}@XZ)wR>PJh%6|6fVeUBv}}{lYdO0qTdE-bj5Z|z#N{Rgby^uqtyPIQ$Y0sfr(g|QESa^g|K^?<#CgE(Tk#rWy?hC z@eULbh0D;WDv#TaOM)E1H)O~~S@yJPS}5M*4UQa1r9_Ni78TAim8ZyD;ThVz}B7wKyRKb7Lrm+LR4JdE?V1p^4W-I6ZF9170 z#J?;j$Znv7ZB=((3i>I@T(L$&wb3B28+MK<0b{DI=Y6ZgU=xeXyfs6(nca*N(|pB| zkzn@9LK8*ow{&qK%+NI?%ePOy*9QM3 zGQh-*a1@QnIbBychr-x*ZA^O=*29dy=kQxb1ROu6L`pf6anp2j4fMSFUe#V^$W|aZ zeR0U4GOCrH2*qK&x(4hZvf3N(bmToqY8)N6<3E~b`ockwP#}%mk2FOUX1?LXMy9B= zE+{X&>(ap0@#mZp90Nc9-e%QmKy4yLo`o0&3%xSqZw9PVZ$LIzO->ENunM@lsOH5l zSNI=g1czmgiMt?u0?ttZu`Wn2oDA^KmqH_+U0+sDm1F#&M02U{QXRIg7Q?{9E|4koDE3c+VRMrRADRTQIaq9e z3f{Ml{w#SZ+FpF2&Zmqn+}h@+Cv-!``$A)pm$4Hy+W~bhaA^RaxeD3JJP?%O{>&P+=Yk zzdZW{hcNu5p{K<5M@<(Azr6E3XgDBmvk*|nOw|j~Obk6niTlLi?mt+#I$Q3M#$j@Q zOx%(O!JG>Ch6KS9E0}dPV+ljG5OEniT}Iku-z4M9fjex*A7yg(;I4XD@*2Pv|(SG9&of$_BrtTXT?|_wqodt+_-A*_U$Ztf7F1ZFwi}`U<&I zAiB2+F2&t1O02J#1$ENenA2Evv#f_`W-@D<^9Q!%gs_@E_~>>;PWi8!JO^|zfj(zC zEu?sHOw)@iye({Y#!Y}s2m9y7xqz=)gOys%r;3Vaxl{8?ajs3H2>a0e84t+>)w2+r z01)A{9irr#c-bMO4JH66o32F}O$@iNi?j8-1$O0BZ0DyM`M9aXB5EbkHY830+hz&Q z+v_pSqp$574*YE{H~b0aSb^^Y%L49@?*y(m%s2P&apY0PIH0X5wnd$;yXq>`T1vlT z+g|`n5?;MF_-RosNwc+K%j8$!GiLresmr%QCa8s~7x$KH{F9&}s@hO1&=Ogc_|RMq ztf8g0*Ydnyl>ayZA9>1vsSG53iMsyB5aqjt9knXRslSaa^M%jPH2xZlXB0-4MiI4) zfxzF%{~wog9Tp>UYKKzf-5H9dk^>hL?&ATlW`y54mDBrC`P&J62UX@Oa6B|pN^>1! z%ve+nz^2*s8MavifDFXjp+LD)7XD_S)Q<)CPd-~&Z-|A*W96%V#1sb~hON7GC~|0Q zEr35bB_y|MIG~4yIStl)L=NhgGDuo3NGIlj8lsRk5PgcPR)*D`3(s3WnH&p1!iq9_D3!+hW1pU9*6n55h{UgXKK4IK;@S!7Tec? zEp69P^7ZiG6#!0n4n4^6?RE}Ql=>$oK>XH?SnZ;dryI$9^qZ7R>6^HB2O8M&%xCMNSo6n|{YK+k zs2yc5SFf+n^}BZVb^;(I*JtnS74?+mogl-63l{knxQGhwW1dkIsoF7jA%gx9#k90S0n{2RR%Eh;12?PWGRwWFtzd{_`!F!ICpPUp(84%F%Z;a!zND?)m0sOiQ$3lC#MGA z^0m3eK8Fq`XgTg=N&4b4rX3;DJcA!6^=$iSJmq#{=tu3=8!{wytbLkx5hoR(l0Z{G z%J{?tZS4)-G2!56iCE>#){wc1UA#%<_jjlOR(|V3MU5i_6ho)-@ z3;8!6b?=}Aho$YyMd8_A^;CfS*FBq<3Zv&Q>9*oRu<7~ctahL@T)F+~sDo{dIRtPG zF4CX78xy|iS87!l+^pnNOaUydy!v3%QLGVI97lvHC%<9rCMvkNT@8If1~R3 z`Ttomp-c1MO8{fJT?9iDM;E=FeUebIQ*0E`I)vQ6QD_MOPaq+XoMF#L0-%lhv?KW zxUePG%z~D=(zrR1`e4%hajzxw<=BamNYdBQ$IF%sE)D|=-{Qf-`nP6M$HAdMgtXT_ zvV=1o{CABMe-&`)v<{;n@~`Gl4&J~xk)24ezE2mD)rL+V#Vr>1%+ zF;RM=@eG%HXf-v^QHfU;bM>11bi2jxJfDK_@Ou#3c}GpbGjja==Kp%1b|(sTUWj0k zYjlLI1TQU#eyqT1elg(DghwTN*{h(+Zaza@s9GRgz(@eUeEpNhIq&x^EEcK4^bMu_ zqDk=|s{hEeW4_lQ#S*axleXqxlfC9595YC_&!h0yojA|w!Xx?8)c7fglaC6L>^gL? zzb=5^uM9#GIO;!zmKLu)5kc_lY{BL}0Z2&K#C^tB(Idi8fv}7dc^riarp-)-4ig8@ zidMsRzTxLa-U-CS7nrF4^{4hGG6A66k_88VGm%lZK~22Df+^NI0Ef=ZTek!hM@aBv zFR|Q=2Z7;q%f+4lqQGL?&GD&#dls1R&;<(=sXkj73E`L@*4DsC8_q65FIb%CD6`q(FTl0qu85**3PB z3sk>-E(Q-$dmpoT%|Y}_HxxqH5HW?1x?ErW-TqvfJaOcbq*e1u0{p69|gayr?|6O|QIV z>tt>W*|W|*4Q#Q75kXI>ZD}xLwA2bVlQAzRnSwpGj;5j#uj_ITse&-9rW!?Dow}Qd zprILH1tida_3T&|5CC`r6g_$j?TGdF=QWQ9R#yu3hBM|b7v!2u#~cY7e78#pAuA<~D1z-LZ-oBi_N?LfJW&a- ztlg`&3;632fTd7?3ua&CWVqn-C7;IU0vfeT z<_Lt$${s+wJ24#SI00}5lbXZuQ0Sx`(|PaNPatwCZ%W0q;=yxpeF17%C@Ghue6C5 z%+8lfoliGSc}#YsAc=ke-@W8N7D6rdOFq*y-*8;o&|bBDfXdY$qM;U+iJwOXhoBnX zpG9CXo73T)ez>8PQA}GP=%+OQC)YspsN>5WR(a@eNxxFc7?a09K}n*exevLi1ACo$kBuZRt&K1+cBt}hg|s$%{!6=YgX=ICq& zxe8TvGNpeSBf|%oYkZF%58;yJ&S&G)EPQFe8*A{dZzb8$wrOe%TVrI#h zQGCsP{8*G74qW>0_`Lc+QQJ=<&55!=?TDtQOuhP>NlMj=awj&TCBAry16^I zMkVA6=R`qcm*{6BV<94&$gj9g4?$M(rBBsi5l--}z)9JM2q25qnnQ7(>1$;FGYIt~ z$_bs$780nyLQ<%e$umC6n+n5;O@W4Rz_tk~+(zs*CV{pIJ-8J0Auog@z$`-O#R zZZ4rl_gZ;!y2QWjC7{|JY1+*nonjJuld*5@LB{|x6+p5?mGWs$+xKY)geH0pLuPMl z7Hm|G5dQ5HM~}d*Eg|mk8kNZ%x*pw$zW}l%P+VN4gKy^BjK@?fIRTZ@GPh77yOoP8 zkX4_F?_H^O_zyLLq+;;gyy+RW1_NuP@DHg0=6s96y-22Gb<68*rWvZVOhq^EvsoIC z11PPjl$@5uglaAQ(^tJKqS%o2_ZGOCl63kU@bE$SWNZMLs2`NX=Y6Yz?QSc z80|UlSIR%?U;a9zvS#ULz&6{vfe-hSf@-HjWwKg#ty0`n$BkT*>X&=AMLI*CDB0Qa zJ(lg}EQKt4v0!&FJgv-}@0Oqkvx=1C94 zerfXjO#pVh1WJ%{x;H_Vi~rO0BMA4#@C$QF4?UBFm}DB>Hq&`(QC(`p-K6o(W~P+W0S0pB+}7g=Gd4JP)9Ju^Bz;K-Ap|iNGL{&A5!s;3K)1 z$4YB8JkxlPy*{vJK%@U1g2g$E8cs!khl4~fv+X=YI+y&hrU687DhrXDgSwgj%j`Ca zaNY7Mx(;b0z!R5rM(K(pT*EXQ0qE4v`NU#rX{0cvF49ey5(zuOKWhQDu zUj_y_*>G_kQpgQivxN8jvx+B9530_Us2W?$UsrZ;blQ z+T*Vd;%Q_p#5Z|Qu&v3_hhm^^2;dncMKAPeiD7vvWuyv;JNEzJ->lpCJFBEW zx7uRzFb{9{69_1n3%Mbx{l7{E%&jkEv!QAkI5dlE{({;xWg)HzZr~Kb>p|=75{_kg zZteF7-!XepMq;YRcI<0N*ep~%zq;JCRmd1n-veV8n@hR`=n@Ii_DMeRd8X|o@q|o! z3x*Un&b3)-?gQBvh6-L@HS_~Hk;I$%0B-e`u%q2&t3Zl zLnZnUIzmdsb)h<{p3c%;%fS)R&(ZSu{p8Tzro59XX*8X!p}NW3E0$5X8U%L8{4 z`2Ora)0OP>sDd$*8`xw@_yd8m)WIZV+J>x^@79bqQV&eGaZH=qU+Y2B1xVeOEdfQ+ zz@_W3s|IlJt7n!#Y^mJ3Mm0biA)*M~Er{-GZ3nUr9~E7!<=u2vYrH65$FQfRnaJ_Ip9%T_7wUaV%#EmRY)ZvK$YG0LyTNUkisSU>-3#;CbctuNvQpDu2EqQ;-(KvXwW?ES}64gB&xdSi> zKSv!ZdLY|17sDJ72UmnuM zzCyljKQA=YM}ev*GE5jqdDnkK(lB9*Hu{;2DOfq0N3z$X3&7Ec20~^M=2T51{8RRs z9g}+8Cbh5kq}Vt;$^kDW%aIn-TW<$; z09w+=(~SM0AYuR9qaTBs88Js>BQ~z%u`r3`mAhT^6Fd@n=5)s{lP_Rr#&q3`Gh6I_ z5^ZSbG0!iJgHlGS5ttPf09V4X=ieYZo_p>mm(%q6(&)}@pcaxTSN$t?X%1A13y!c{ z6nM?jQ}5fv$=~IJ!CUM%k4TuU5`b~m+CGOUYsL6I00+^=?&C__m*a6&$N-lZ;*tlHq=hyE%4O=K*XRyo187B?+TN)|fLsltin*1JvJcCsMFVxdzC43w3H@2Cfq++> zqP10;a7Wr2#OGyYLJw+tfXf}TP`uKFYhkrbMB@)C?A+dVD+r*C$X)`*HUK?gF+I7T zn@uA>r$(ES9-S)~9T=9#EtY}c>Xb8jidG{%w89-PKSYFfl^0Hn%KYWly-^W(=`!L} zEPu0U(7i<&=vgBqEykez+0ofyXfXT%uOKzZS(r8PH#W?fH|7zY4XHHGxPB5;QMK>y zLQpkqsxq8?W1|Sa2!j&=IGZ5WIbV8xH;MosFIi+9g~70)8+PmrFom9gW9 zx@iEafn%w<0Bk#Cms=^WG4FHoJiuw4CCo$NUd);<5Wxf_?B9|DVYHcJCYEqp0+#_; z`>wx?Ne4!{G|#QBMrxSQ(Oi9|xpw&6Zm3C&Mk>1>XU;#nTsab}jm=O&?c zWvWN5TpH{m(SPq<ZESfPR4#)=3Qn^Fz;VaPr5I_^g8bnm}w~^zofH- zW57$~7Mc2&a!UZ-)Kmy&0bzi~T02z;aFn37bIH7$@o^Il01iqGiNb^qGGW(`;UNKo zOK*DTDVysRYGxp*Haug5C}s2k*fP?%lmzjmIw^gfl4V742ohit&Npp9JU=Fm=Gp(H z(~m@BYP@nQWd5ZZ+K?J~xuM{m(yK7^H-KV7<@=xpk!A{nU;b}*fUEq6%L{{_^kHREc9(XhTxY zO1}g{-rzx4Nw|eY^deoMy}(BcuS?;J(vMBDjo{+!U7n7MU*z!GZdwB+auI=OnQi%O zYj-Vc_COJ3u#g!r+4riw)o_X%RF0yt106GL9I(p%>Ri2|iLtLPZ zY&wHza~ur%?os9hZ(&!BxpP5nn{lwBV;(lch0uQR64~ZZ=)s!KUhU)$BNkUAaP-_$ ztU>o;IZ7EfvC6d^onE#l)U!yKx$KEr3udfck8ZZ9+RsLf{#vj-%c28ZuR;`yMlcrD z!n^g-Chmt;hT7jUH2lE}B9Du}GFvC1Ih4~t5xHsDWL*1T@c#8EiKPqq{a%2}u2)1T zC)6|Ha?)Ratw`)PPZ>=jhM@VAKSHKp(6x?4W9 zw`xjtN}J=;a*~niyjQa39!ed%%@6M^y=(;$wqZO5EEJu6iw9Dy4v;o|(I0TwUD?m? z2~X+k>ProhBKfh@=`@BE;NqzKv;adSIWI0JKuL#Zv@KnjtTRDuF^zf z8Wn9nxGK9Z|B)$w=61m9LPxQECh!2g*x|}=5`6CH4E<8BUaq7Ay@Nt|7o^;nj3Td( z*TxHVl7p(+bGW!Uy&OO`(bx!dYqP=gQ6j*)d~f$4ufB;FaBAKIkv6Gj{8tLJqH5_KU9*cbrJ<82b`uCgK*UFSKBUG3Ar5^+e! zhO|dgCLQ$r&}@GN5zmEltB;^%0nv+lDz>~G?)t4wR{0P42C;XjoUaTW&EOPVsWMDi z3!7rvsF6RMC(}ulmfnXj)7k(=atHNRC{;!HwWIWuHQ-b)4@U2X4QzB+_QL?4&pPBx zV3y##Xx-E-AtTz$vQ)?;c zv>l?`yRHriD+9bp^qpvKCZv~=Eih}UPPmE9V446BUv_3#Ou0WNVgHlSwFj1N!1jxBdya88)+P7_q4uWJ}2l< zP(&|F$j{`MFr?37nst)ffuSG9qV zS6`iQDp=Lb1!w`Da3CLm+ouo51j;r=rZMR5!uqYDqh#)&H(~ z9o(;$gJ-@0Tw0X|L_-rUN(o$6cHXF)MfW@APNX~G0lrrZn^Ld!VG37piANNV)oB!S z6~J43g5aR5z{Q22l#kF=-9!`KMJA1<#7=6eE4vs&u;{oj(D}rpz<^980)z~EAls`R zcQh-@e;iYW1`%`%#$F1q+c|X7w!5_~TlW68UaS-MZg38hlxgbwUE?@bipC_xVM7h? zm2Gi&(FS=O>-+kfXHXHr=;krLcW%X-6}Vv0a@3a<1?F?sv;G3lugTWdbLo7F*FE(k zd1T2rQu!_E$h;V096<=S)D zCS%5Ege)L@IV&ST?eT86tgg7d7I-n8fu=MPB-~FX?afRhJWU79x8X1EKW238%b5|| z3aeN+I+YJd)FEr|#j~iqiU4aI{#I9Q2XIB^84L~4bV%tIO~J50lDsXe(c8^NFt-vEYrjC0d%3$H2=&N?Vnt1!nGRl9_+ zzSFD#k*RoZVOfd~fGg~0r#Fi^0#koq-7X*d&g2IGhXS&sA6+=jw=Fs;v5zH zI~9RpD_?L#fXQDYq1&};Vax+n3EjbW$dKtl z^e`w3@x_TFwE5?P`zarP)WLDqLqk*SXKi6Jl(UGK!16GkxX!)w+QOD*GPj8I`@mwL z;`pf(BO;{HDkNB{5Aq&=@D=if7~U2hhIUk$(DN29(^-weVpgz9DBcE8`>J`=2*XVx zI4<0Z2gsmZdqa%a3(ZdvvpEq`xN}rSpy609Ht<^_*dQ1ghAqk{ouVk?=LYUG%NA%3%zTbwhX;3WGFI@Y|&gf2LQ_g}& zBW-#xdJWzKAbIZ$^pk+hK3-b;-zipJzctNkz9HYAx~Q3a=tEOvCZW$=x!0h;)0=ur ztazwkXNdw@tV=#UmblufFlErp@=Hn48suD}>xjd%QDr;-qi) zcjzU23l#XRF(PWDodCcLQ**k6_o<1O4Ghp*@u+s$BM{G75e2 z8J#OTd@cAg!!E;{6ln1aHMB>$GMn?g0#_7SoDKcZOYxwYt`eu6lR%jvB-#qJ>iJ{A zsM^`KE{i$jZvri+7BUfglBue~!NN=n(rAEKfnRak@>INikJ~}f>|65zVOD`Ix{wLr zR=jb>gLU&YUP<~09_f4>`?wbmPHJdGg7inK6%_7_&n+&N1%<+2!=>JU;U1yvdrj63 zXG5GN!wuT@TW)fym5y3PLeKn3TO{%6xp~M>2f}S(s_T3eKs4W)ZfwQg+jb@UnIo@I zp@~EcgC*9v(|Cxb^oqX^t4AKiaxI^j8lA|jndD-55H(M7!;$f20aMi)R=DN7Qg$@0 zH8CI4xxQTO(CZ&Fv^YvUaPZG2m>I~==B0#6j%;_SafJ}RAR&zuimhEnHjXX^7-g}q zef95?R0Yu!|FH~*ns1su9@+g^sW?u4#UMRC>!cH~u-2W@q2Quk0&S%R^X22A-D*)27*oGgxy(D&P`qjXJ=HcZ4wi*F2v)E`> zWs-7X2#TbH5Xx-`i4qYqB|Km^t;jFG0b36f9bo8SL??|2frp-|CNx80jHiUjIokoK9^sUyZ*AyUMhK9c8Eov|w zJE3M205(826P=lUm^&2WG3`f916WKw#>Z@W@7=Wp^CcOJ(i7&SLfOX$g0$KhfKYJxnOb;i3`=A@Pbgr=yq%Akwqp+o$wC}V}64N6w z7YS10dIk$Sk512%W1cC9>!NIVn8yj)@kRb9SqlfG*~64*ImQe^I3!123`o4pdPXar zXcDLQ-tU&Ov}w3g7ANBM%fwYlWX-OwgAQ`$=V57_kflAGQSh~>B6p0F$ipBNJge~EcvUz#p4 z({x%`>N_3f2`;VliHBbjL#n4_@7(;kmRMxK(3dOdQ=cnW(_j7Z1%J1gSB2&};j)je3QiXY;V{|3wXyBos-ujphD!Z) zI8hb-;$Op4_ z8Gk*e5-k0%buM4|hT$W!_BxSODmh~;io+*H&a+iO>5bWUKaF?KWdM9mr}JeeQaheL zKitaLu|Rk)zyM`F1A4g%iu0ZrtnF!(nF@LqNWudwBKp}qr$KXR0I_W*%X zqRKc}G3XGbiSLqIpm4~1$uy4clcCHUC@?fw3?q0)X}^})9H6Dz(?}=O5EPd4Q_}*7 zjPyNEE=lCuG1#x&Ad>DbX5DSNX3nl{!mizp>FqkCoU|YLBlUsm-q51BbbT(C!nn0L zA26p6-yF`n(R&hAH}FI!WhBj0`Gx#4bHS*N_W=Ajh;vVRe3N#uE3(9x+1fHd9SEcMAvK=LCkVFMEJrq3GQsCp z@=MjXZ(h`_+!v*C-fjmfJa#a6lo^*DZ8-)z&CHw!yFM+k* zB4oko&U89d#=-IkmtDd|79`#*5rC}5vYmOXzcK3w;5jDkHZf@32}#bn=0BX%X`eyM z8aCTya*pg5&PqApZUVJWUzQScqjo_Br3sYL>Kew}Q(znpC|SeHdU($YF}X+pAZLQ2 z`q>-)mr}Jl>a_XrmEqPeu!NQ_cl-MdD6{EQbp28h2O%8@8>DiVjl z((asIUi|Ti`bv+&qB{GP`)A?v*S`puFru~y+$e`Z{;uB^kZRf_t+vUpgyWN3*N(lC zz$W3%ZUW>yvzK9I+%47O(UUPe$D!wKX$`E{CGB@PS&-p(=o(qE<}ronUVIXp+h$I81KsEzr2ISI38SQ!_UqjxmtHiN_mReig^qwioP&Q^&+B z19Xl8@Y&jCc%7G=j59Nzu%^$r#%QOdV+Sg+D_$hR8%MQp8Luzp%KI0xW@Z$^R&v#3 z>82Q*pa^YpUJ2Q7z;n}5xDMAsaei53RC_f#`pTsIbGI16wee>v z$5yzwYchlfsl=pv5U5EC{XJI|k4JzjjRU5*n;&X(n_yDn77-aAU*H{iiqV&_w(uw@E^ZaZ-^ zWAYDuu2ad{3{O@Um7~dvZTWaZg^Q$2ZgNPzIEj&|y4-(rs==Q8#54nJ{aW$~;0pAT z2(zL^LVA1&f6dabhC$goNyqf?T}WsvLsU~3XQ)|lXd-2=Lt$tfrO;AUG5?Bt89>;^ zJhi7-IERmMj159Wuj6-m(SPuEL$Lea`+=)ufG9H7E}aZ%WvkE`Ajusl$j0WOHm%*8 z_@Dmn#7MEw?;w&*)qeT4b=dGEmRinAA{G1Dpu0d?6tLcq!e*+o4Z%(j7X*uCG(ZQ5 zMY5jLzf$Y`81~;C27_;UeRmX&zALDjm6b>FbX2~bm%4EKjOi<2|LasGVl2Rcg66Fg zn_JJ=>>>w;n=qx`ps&Sch-(Cmn%cF!=lcJ=qB(kN{jv#Sk}s2DwKN$iW29_(g$55; z_~qZX4lh?g^Cy=>bQEOxP{C5M@?M-yagtrdLRlCDGfo2xE#BtJFIR5T0FyXxc^|0*&?TG0e26l;9y- zUTvuAC~Z{$kpAA`Oe;Nq@FNspspDW4hGD-dE=~bCwS+bbf>>_dafy12^RWx^%4#l- zV9-f8r*W-y)O)F31-{VnK_y9ofqj~gc0IF?lC?CYCCWgjDPPQ@Fkzsa2a$Q( z*~xQ05&~L}_L1iGCjqvH+&i4Mir7Uh%VvjMBChJs4F&%nj?p@6%8nmc%873; z`IpZfGtOEE3+o=ezhbOmMoZ#}o-UAPFS$#X#E0Qll6x-VBs@pL-Q6C)-`EFI`a+er#fCzT52AsLbnuJYRX?aBME_ti z5ky1Fz} z7d8Cb!zAsN$cY`(k|*tN4LK%M9sw?1EaTFhmGCU9hzCYsXc5S7dI82Db3^4#9B)}u zEuRC$oS1(r44&QE9KcvPT-&gJFyV$O8GMbvl8q>qTS#ITmGIu$_3XM1#}f~BTMeVJ znk3TH(=TJ`oP(){3wt42sp*VeTF*&z9ct-;A*AgCm4bys)5$Q~K}LH}AN zg;)f*RF?M@8Bfbfdq)hMziLWFQ@p~lO~XcE9A%h7M|r@r4A99+u>QZJOm|g3h0@j3 zV#m(W7JEXeLG4TePWyBdOo2@`Gb7$@?n?Y?=@geCii;i4AK-H z(Lr{4l>dV69DdH1My~La|1VY|Qv^=)vk9{Qg7fg_K|ZD-nt6MbV$ygd=CvN(+mdM1 zy@z{~IHK%%VZCRv)({2ZBrBegzH9b+enldly1I@KSrqgqnD|@K7n=GQHvc$I5wT zKU!IS(O1xcVb^^z=RtVg5#}*^q+^Zwg`K2E3F6UzIZD10K0XYmuuEI8iwu0dBISz$;RQP(Us8)D%y+aC z8rkyvsVY7vWG))VDU9LUB@4?LaaLwQAw78rsgE+&rg5ha`8zH@pJ<~8?)K@+XIuPU zDwZp%%-;ZotvCNmzjM4LT2)JlZPAD5HgtNwM5DxuGS{_5j9%Rc=Ns19ozgv*+8Xt~ zu`WQaUgT>|x45ELBU+4!qiw~t78g4-6?Lh;$cQVwC7LyI}%W8z8oY1y^tU%!0eufHG^(!j zER`@66^-{loZXdAa~F-8s**>V+16Ka^~Lm>PW6k-L*#d^qJqe~4}A~%q$7cb-4hJh zA78E!c1Po|GK7xpcecVFZ#yQro+ME?BRbxgXL&pNu6Ivca8-q(?zId>_TYyw#1T`7 zi+Ly$u^n4y%}Zt=ueo%KrTYtedN5rx<&D}a?eanz)F?YffI9nlb!MPpz>G*)d?57j z>9*bCMA|9RGDYcs(bpdfQx_~YfM9`_f)Iu{XMSwVM~8UNnikV;MHjjRfRzazp>j*s zED}v;%<_E6$CDmuLM~P-NB$bF(0odj>-}c8m3uH@FnmlCGMV-imyl1Eh}5Apk#x@W zyY^_Fb74$$bxVugQS54ONPs<@o0ceUxN=szfYl8&o&Y(#lULhPpx#L?9QjHCp}f0) zC{a@0iH|#pYiij?sz5X4=Xt>#F9faAmWu$6t75FkH?z^>+BM8V-g6SKZ8&!}6dd!M zqmYWxGj*%%FMa>tyu^FfPfk~jSyi9S(;2#ZIe`v=ayX$6^{&VQ9?{6ErplaSqid&pfuF&JBDcrINoY}=2{y|kQa zFH1*F6++a;iuA@*FpI9`g52#%C_!7qyC@euNUnd(kcC`(sT`y!3v-|{?dQd25`!4) zxiT2$$jUkAd0|(tY+#1C8cBi&^>8>7lTKakeG#ikiNo=)6lxC{SvftPFJ*DzpEE2mHN^EL!q7IgcgR#2^|@_%0rNbJaQ2;f!AIW3@w_ky?*EV1?L7aRtd zMLbAi1i)CC@4+8@DRjE=Pt60`!ags4!_jw(_2*Hd0rdioPvP@zPZTA@sEJHzE%N@< z(p`5uizjysix%f64*WNP+hu?8p&Ml!s{sKa^u!(?tr$50 zXCz{h@rEeE@eJEe?aDonOm-3}ZVaE%^BlfoCxv*TqP$$8zYN!T+~|Vow)atlj?vQ^ zROM_A_VRt}Zg~e*8MRxKy;(i+NLzI6$0PdwsrnN$uv96vzFlLPq*&FOH^Q8yWpAcP zUR)TzRqhj)84KI#Xrh)EpgWvW9EAUQVJE`>(kfU(iN17#YKnlM(ZX*05dDw>9I7>L zccp%bl44k9haZzNJIbVD%Yb-x%c!q)LW2{A=Hr7K`fj>f{6IAyCuUJ?Ght4->Os7- zxCx*x*&T+=PvfxvzII#~S{f!qvTH0|jecJF4~0G01(H*vt#2}=HM*7_51j}%n7LYW zN{;_jsE_+JWaZ*vf>RBa;e1UbY3R130_S4}N#6N8SBKSCg2i24_b56Q`o;Sg{vegx zRd3-tRJyRf^R6G8mKZocD*9z@b)&&fW`-}ZjMp*u59rnSI)v9=@9EC%Mj8%4KEYev zlITSTKD>OWF(+@FBxdWRWkt+*C@`m|LNJMRVH2!mcTu9LWes}TAzDWlQV-VjnfDcb zrL9w7B^+x(^C0?2zcmum5dYG(zw}yilLOuDRKtAgiA3n}d{LvRBaaeFF+M}Q^8F3( zy{=vFp}ASlUGTkw6ls-gp18ACNp{)kGz}Z0p3PCCiM_9OH}VjPe0%I6h{!N|;L_~~ z=+lhl{?(|?@W(&z)Vgj$gr$ey(h5!O!KFcG_~_9Q&JUDVDxW>Jo-*$XyMfDUZl zag+w{f$us5>u`<{M2W-Yn6!pgS&n%d;PymT%wwy7PUwDPXK?>w1N)@Jn7D`y9Av^Z*3Qt9yC1coSxzplA#@rSzE zZ|^LU_Lco|ukV4oR+;GhstgMo7lOZ9OxNP_AbVY~m%%W!)b)Vgi} zTa-8jQ#U{yA*nZ*rnIUchzSSa^&#kiGyE-S_@Q3JK((O&IMbxx4A9HD{~jpIb#!*X zRLDPp>kE7MSq%p}_)z?+enqNST5xq>p0BuU4vqUHhV_CQkuuC&@#9g>Z(3t`!L2zJ z{~rjSrbl&;aDWJ)!yC6IFOM;^2G!hH-jD6(23FGK7$ySm4Nj=BuZwc3s9%O52jIQv zzS*krQ;#dfmvNp(Q2;$a!oQlBj2?f3LvZ4_Di6Opre@*S+y;5qxCRnEH0n#pK6ESO zc9X1UcS!9B|C-q5hp|AlY|R`Xl`!#Z=}g%HAzpy-*4wiF`q{;=z_#)zIvo{l274U? zbv9#++!#Wo`3#tT{|mKPh*@PKzLpZ631Y*8p%SRKBt$tL972`{?DArIdejZM3!#p} zkplOot{t*kQYjsL^7U4oEq?{k%P9$vz=JBlUQ0_r0DGKkn{)<^pRbHdHBy5iwExcY zefu_v42{~U;=nK9ANUk9Z8BsSY}$Mnjy|Eg@-RS<{y?pEww&h(3Jbjrg+CXhSB_!_ zLEt-=@SvC@K?;z-$o!KEmOl@<&6yU}XXon3s%X~4%Wy<_x=N=b;cXb1^ zfAS|4?0}iExSfG-ra7TZw6CS5<)(3k2;7Ht-oJ47(o|;jwsTe>sJyoG%0{5J08K@D zq4nALOSi=F{_|Nhp8e(dx=%6H(3K6St^>2by!!sG^G0wAS30cke?Uy-jC;wSJ!JWn zy{P^mb*ofKP-}0PbRe9nsQjjD9AOaoVmA9^dP^cAd8p`X6`)eP&V`d^Om-_f4Zc&I z8cvBbG!g9)E$q$sfrFO#oV;QROGM4ek_EAlce!KHjaTzQ5UZVzWxs^6Fab)N*1j-4WMObR%X-`D1_C^Fh3^Zsvqks&8MJ zl_jY`vVfZRiEmz=9sw1CxfhIeVklVqdhLA!0k;~B&g z@$e^ffo4u)c&0j9J|h_}F~O{?Zwp{3;c@c#gb#QLNy)Ix**J{|8R<&D9X zl%X!3m9nj>oh|BELP|9Eol%4GXc7!)D9}>nMAYdohi&G=HICQNs|VZVvZOwA5!=+Q z6w$yY$0$Z2=p>9QNjtfVwPM1MvbEw7I-U=v-%az?4wIcqEvfdKioN5{uhh+92c)a+=XX0ymyG7L=Xcxj3uGtrp1>K_QYto!#dz@hTkWMiU@Gs;qLEHT3^ zSxU)>T-ZAAH;=zObFoZv+pE~_bzdYQh}kGv4n(;sLhFJwltK^1#u|!6y%~uDvG@$< z*j)0*FnwcxzSiwLtfFBWmyMhy9W%ALwl`SA?7h7ccxH$Ak7lX?(pf65Fcu9kXV}iVSvjaK* zVBdr3F5e!_v2oV!!uz0h=yDr!SsqvVA6uUxo_+IRMMpmD)=Y{2in}y*G07>j;YdCE zgAN-NYkU4;mr;O67KWu>)I6BQcsYO2{pS;Ylw5=jqi&RSU(c&*-r%RNchMZHWF^r5 z>fzlu?$lsMs+bJ<4p8StV$sM4?mQmSdF4Q_aH$(UF}lQDH&SYLhnhdEKfi-eXza=roj&)2q4*gUk02eD2L!l0gDNSZax6KifMY7YEVtR zZkr>##GhDRL-1Wj=0swT%|fDQw+)IG@KDg4I$)CHsky>5RXlQexmr^?mrfG!DQhPh z8rrGI;;-W=dj6WpjC2*#EVoI+mLveS>rhFkXop-6TbnzAD>dZpu;xqq72UMgOmjuS z*cni*&ZG9oj3HoOG@c_+haYx11@4n&i;j6&vIVV1XohAD@I?Hu?>3p4J_x=IkVY5yrUO!~RAW_S(QNk#>^ z50k(O%mV1H2Nt2@$k-zM$YLw1mm3d+zA7YQDWIHAXUgGCdADY&e8~1J?`bhIE_H_b;2q6O6R; zuER5y!5$ZjN50j3%RN%%ru`d%f~Y;p;bTF#vLrXxSuC5j!k!| zzpqF)Uh(B8@(RL~g+~L7_9*RPx-Uv`FrXw2XU2o(M_Zc*<<(~)O^PM@H{6|L}Z54bq-lHh2YD9syrik9GH4``>y zLqwPL9(X+jEn{&IF7Jq8Iw1Pz0z53swyKcU>0VT8x(T5|$#zGDq-Ju&jIE)`#KkwsE_$FZ}&1XiWT*O4W+4#Y8N(LS05V!XEt4Ag}~32qr^c zB##~A3CkJygb;=Ne-0*)2#A6_L#rzvejSl-(P&y`B<*upCkl^GeCUc%-O?tFpY(mw8!0H? zHnm2=M+0@TVO!1UUsAgRGA9?=ASgVEDkX)#c!`vc1q5@TXvb%} zV*!La`XjKyUewW(;j$6vJA8X!a76IiZ+Z6`$jY3pH&E)+3Ocm+i0KAkne9wegRz+O zT&tdTzIFG;f7=*`U8y$o1Mpi)B1+_i0`P3|Ex=L*B?KLfu`neg>Ij6Coeich=nE*3 zL)*^QWG@LKDHM+`sX0>Dv%BZktk#u0>tCRR^qsIB6`J^GK5o~mwU55Sjre1^J2%7= zFp0&(cOaYOtP}^J>>cP>lTy9TB3lRF6Q3~@)q9H&l#IY7j;O_h@RQPDMYL~*{k@Gc zXXeKnVizMqW|o01S0??@<($DaAAS=(;gF+gi#i%<=Ro1>0`V8*F_(T_=V&Z~$^1X? zIa%miUAqQnUEYkkZc*3^-Sdl;%b$*qpp4dq2~@kaA2J5)N_>*?X1s?1DB~zQ+r0@_lVrEZEE|;+xQHGZLp=)# zkqKl``RHBwQ0hPTfrNxxYRqtr_@jGY^JrVycUE3X+5gtqY`%_SxxJE<=gtZ zu<+%)f#kIp%F#OpuM+l%3%dwGJT%Nxm+zqSB~R>1m<7=Wu*e*TIR=Bte{NpuVwP(r znj!Yp7$zf*YohETP0Me`h1F$566mFJ5BZ=Yybqn1;|+8*O=Wc;7nVSbLK7N1_^|;F zQEI~#p>NF%T%Gk5K|yCwnA^E05nQKnl`GwC#D#LSjPRkEx)Nq6EgYe{qdo0|Zqi=R zBecTWUM82cybYJE-AO}$m6%g z+Y>1aE>)$6htxm{Vy8SnXK-Gcesvw6Jw5bJTIXjK$SlJWM^(nwWDhv{7nMs@OU@%} zu>$wVqOowfkz*E6DSS}z^^>qDjS5uLLAdO+&V@(<7jtM%i#DHyCW4@3#YdUHT*6WZe9iv_p@pi|rw2t?5;q9s z)Rc(UcfDVRksf?ZR<`>S1P+XGd^w+|@@_f{BUDw!7fRq9l_a+R;j5uoM5+v}(xxq< za?pHv4_yZ^NB zV1;W!Uy6!(o6>yMq4zT;{;ITv%X?V{-q@&=qqzI_hSqeHnxuA|=n*%)ts1fTR@91sH59T($ zh;dkd6v)|sXBDZpj#_`Zj+=!iscv1)WYx#{u9JgGudNW4f*I=bbG1qX-5Sk|)Xd8X z!`$A1;fgjuy54kE2NGlH-I{0$1-~_5yk!;wM<|uJVO5uOVyaO|23(}M*c(y~>0~SE zQ4uB5L}Lz?{`MtYBU%9Ph?hicS!!?mp96K%6}|Q2Z-p)05|=Qsz=u$UCmb%9SxG%# znSx-v4_r7H^6C<6*m2<4rObYvFPLJj&pvkLNVRxYyn!PTbn*W!!R4(zzsQdadzO?VE*Eah`-Qeb#h{k^k#_)NuH}0K_TGK4Se~4_?~P0C7Ea6{Erw_wr2Gw z>~Z(c%=QDc5#wpP>a=*0zO<*THs`~7qp(nUVVz~zK;}_z%}V#1rQ}n9#k&KZ58*xU zpAKfImo>qpZDYf+xbx7^NsvvV;T+(|U^d>iPVh%AQ zIE!V5Y*XptFus^g`=;wh7&Y(;8g-Jt(AiQsYzx$glm<_Z)j~?QXV;cjaillH5iSXV(Y^g3uXz3%xFII<3K;$~CMwV$(nu5XoqCfk6X7sLqz? zAnsX)6ou;R?hYqw8Z4i>`aB#^5ai6Fy`##0Ho10EYME@yhx}k@EuM0`XcWz;XBw*4 znTEOmVFy|#_a{mGy~7zA4ZMiz*hBg`6Enyr$<0t~W3YR;ETbo&OulkGS!jfP2cvhg zxJ&~`iel8^zm+&HdjI{`4I}Fv6A6(X7U*}6OSv4>w3SX*`SM-mMjoH2@1kVeQsOA- zc zFo}}1b>gU}Izh>Xf4q*MDaGoaTQcwPPr39l)wJo<%*A}#ld8oB+9Fb1U}j;O<<2dg ziV@N<5|BHjMsnb;t%EnHf*8PHY^%M1l?{XSKIqb|jj{`5Q~NFKgK6l9cf0lgVMKY# z8CayvrSs0S-HSH(wmVUWWJJ_Va_$Z;PNT>ePs>I&VjfV8HI`Pv1lZYw z0q4SnFYSO}5(K{%qa4pbjB|K%y^bSHWg2!wGo+lB?rnL zWCtw0UKRE4Su6OjV<5k4=ICsJd-7*2B@Qu8!?W-f7sRxaqatI^cp&N`2kdIsqCYAa!7qwRR=ea7E z6gO0}k_$Cnh{wg^)YOe!`RD?cKGbMXA*|m9hPI;e(rLbE)gK~yIj>VclcGm(`4gI@ zaCD(hgW)Y`wJ{-*$a0Ne<-m(u9EH70KP9~a!CcWdzpS<9fl(aa6mkI@+G)JmEaub6 zlxBRJ>n8eO0`{KGV;V zGo0uV*(Mh01$-7V3=<>fHqF^|UfOfjD+IUO=sc)NVClIVGRNIf4z*5w#fHhStxMJ& zZr4ssuJ*EZo9YRc2`7`4hCobftRH}ZEP+Am>quaomKbU9g<;{p(5Yv!mtNC3c`m>oQg-;J4A$r*l?IUAO7t6o9-7 zui!9zIDGS;>aI@Lc}J|vqfwPi2=^YwH{`raAgXLm(aJy@6($hQdl2w-q^*Okg76r? zI++mGxw^4xels?z^Vev1vx~`Om;c$0`D4~RpeYGyizgE*>3#p@gv=o$=-}B)GL@5i z1S1@n31mj+=DA40^ycZGUU=Z3kX@*~egAjzg}?X@qh}5}14s?UgRKGXbL^!mg?bHy z2WJIl9?4H+010P}$hIERhjMm?4qcWh8j|UxPaz>{BrWJuFG&L%MzOC8Y^u&EHDHj7 z<&4Oya&`<~K1DO&oh$hAK@btI9#YsFIGicJc*LiOb-Y*zTo|c>1;7@6R7;x9*@&^UMcDtlGxUIfO)2`6MM%TFNPqM02JK;O&{#->{ zhl}5IUBk<%AE8bUClz>wXRU`3?vjF80>FfeUiYY@5b2+45cNktFC?z^MrFGCp!1Uz zuzsbtCNE<)kJgNW%BHj@QojYIk+M6YQ7B{rv)RbA<47Z|aK-ZOJ|Tcr!GzZQn@Dby z5|`c3)-wJ(BuX8ryY@=5>|5zM#RU$Wp1FR^xa?m7{ZWwO1vQFp{)j>7Z#VI|}FMiW|t z4t&Odxo|kFN~kcs6HysMH?bvG?MEDBMpRVaBCS=K-_BlT7bq)=D#^>`ZsgO?b%+pl zYsZ#1P7XwvCFt2{Uh-di=ZD^~U5f@P2~YIoT+)=Lyu{M!P0R_UTjA4mc@9tgtRMY| zR|QRzpZHmS!uQZwi)1)uF+ z1Ii73SV+*s5T;(fD#mJF~K^c5^l6~6yjoLbG*B>cXSM|*4BoV@2^TeGa%|`TDK&F zjo&jr0rXF0gXo~wdeOev7`LijpZ+SD>V{vG&7LHG4ambUsndROgH7WTn&>v;;cHcO zlpkkJCrE-Uz1YY5k?h+l1N4^s!a7Rjj>xe8&TT{S`(3;A* z+AYoH3G+vKN<0minnrlT+5Q+W+|rsM9LX)+#&JIr)EK-S z94%+*)IMG;{?6jJqJ98BF{Dt1SH1CC@g!3A%UE&PCEfP`p}g_z{k&y1w_*wU)9SmW z*Oj?FWUamqaIoBLH^}X{(whx+Z-lJLmeq1X%~bEWoI_L_UqWHUEwp2XjBfG>-{N#g zL5QxVyzE`3x#5`GLjDvNu25x>tY6h)RjQ-)wpm}@iDgmxP#1Vv*^vR2W9FYTN&r->`7B^ zuo>2GB!;K(jF=d)m;D2=>M0S5y?8&CouD*ss?O;*-Gx_j0+8PXpmSy`qPV$r)`N#9 zXb_n+j`KhD7*DEsC@sx8nnUWbT(1U=?SYf~#e8s=mpgSquK2v9V?OAh2kMY%ysP8M zBZ!L4x=3B`lu_kwM5%GktF9M~L=#$S@bx2n&r#pQSk~61B@={vE!$`${8M&SzINH} zV5z7}pRp?ti+&DVpZw|mcJJCs8KV%5s7R66x^IuD7PbLlvgog280VqVUq-C^gX7s{ zSz{%;UgYpjn??~o-c!`{F;rTXw>z#`2S~g1ox$#r%xY1IdT&53mnQKcM4y*n#_8lW zJohmF6U{D@nK>&2KkM~BTQ{0g=tQB3+X*qKVYFfJ;(3ybL7)6=YlWqbLx|{_(O9c9+5CCtKy;064^FSB27sz?FtTV3`rBq|*pnV=2EBmlee2aK&S>tHH#j{Z6ndP=l!>7x7&T`W*@&~5eT`GCKF z=|?gs$d|Y52Wwgg#|rN_6x(E9pv_WFH;Vto-v8muZc5@${s#{orp28l41JLu`Jv?O z>6@fnm-z)f%^UrJJ~d*IDQ15zDW)RDdrpDJu|(Gx%lkb;v;otd91tbi7SG!5^;vL1 zOH5`gJ)7P?&Y=MOO%DN-vj$nVbd>PQrL(xO9=P9jN~a?N3Sz;7`Cp(|$xsz=FA(IV z==3am6(XNWzG_|9WZgz*`-tS}5_bU(6#Dl*3ZCBtl0)|@K)n4r0q`WGkjof%7JZ#m zzQ>%5mQCThF=(=!vR-Is2|~*z(alwZwCOS<{)IXE-1pkr^|O6 z{iT~Ub|gL0QP-Z+gD7sKKFw*u-e5~Kkb*!O4JVIjGyuU`Y!x)jof(m$1)}5ZPTo5^ zTq?!H0We-I!U=>FmuZ%G8BNB6QExc5N9=Gt_$ts0b8NL8 zAScN7)k?t9Tby>l5aC0GU^&?FiIl;zr(~JM`JU$F>QugFe;N~HQ}Q|$QevKc#H{8k z`l`?|I$bpo(w;P|wRoP+?nLu3Z+jZwCEKV0$0T$`9BO9x1)chR-von;+hV94%uKEG<&yCHBy@UjeG+C*Sg5nFby7(qM|x5V%BmHNm*l6(m?GVy!bF? zkhx7`+@xWt9pviTi2aLN~9MHWR#G2+~={pc|>X@;d&) zp@JOQi8Qe07%+`6g@F^4vi6Q%xYH|~ABk|(3I6A7V6_@asud81CsvIxRn}7=Mt#}V zat8v~*7xX$Aa99Ox4#6e5zEuoCz4cL#lQO0z>F;xJ~%P!48p74?9wo8k?*}oVgmoX zl??@=MS6fKtK9rA(8WRMcFvXugHuJIg~qZnUjJkOn_WBKIGsZ)holqG_+zSiZlTiv zvFC#-uo)0Se+kP$=Z1M@m%Y^|`h85Rzplc{QYVfW+l3fL^{feafNSDj#UX8S8eJ$A z7Nw(c{zD-#-bqvY9kje)9hoLt-{|0G2FEcoN*0WEJl@b2k0<)7*JHFE*{zoLnVLoM z11Jkz-YLhDA{+(i1FpYPC{4o}Fm=c%kN{}u`cb!-U7GEEq5Fc#Ix0=q%vv!7BfMEM zh<7Adyx|0a^@_M9hd^ly%(bDYO5Vm7A?$XAqmCg0QoluGnV*u}Tu=g{2{RclT80%` z#v~>iiUQa_sUw}jciI1W`uj-Y%r{2iJ&sz594SEKXb$asQgFZfs_B|KX$Nui58%Hv zMRTiUN&V&>>63?q^cD|;tIOXyK0ED6#xU8!H6|0`WeFMO;a)9@py+ZMaipxJA2R{r zo03#;8PrYCA{6w1!xmhYmDX@W6$a5u7U@EA4(ChENbL*}+?%Ob1S0VpN-gWcYHpC| z=EIPIyMHrjIN1kC-1>yZ5adRYABQvGN~9{4ca|zpS~I{2$jS(j?)4qQHq&Lrw0dTc zZ9Vqv-~ey-$pnjZM|BnjoTKBVfT46*3}f0;cP9o2)w7$|s{>L!+WOf)Wc({6iQS$q zAnK5hT5t}4LFHWvVF>Cl8L%|(X&|PFEP!RcU`jxK){=Y(>KAWWXNX3qwpp;G2Q$_0 z%LcAk*0-bFzvm{KP?S3Jgr_odacOOwab55d5H!D!F{ik*n|I&~zF6 zWw-BwhI%odYB-H4(2#4}$@4Y_9r*cSr6L|;4Rby*lJ!ishr-D&m0A#Y#69Xr-u27k zWo{>1z(prmM!#8FM49w4p0>1&!^sSEu!^8O%f){c9aN6D*F>N59yPF*NdrTQg2Vaq zJ5`}{E+S@01JO_$1`bpQ-)WJ0+Ga0^Z)DLb$f2~1CPd&66VJ_NJsBR%7VDv6h(>lH zklmfNv~*Hdf~#S4C9pz%*n|&$oH9IATG)TtX8R{!v+tRwh0@a0FV6BGrBQ&U|Z zI#`G%`1j}M9S`I2RcLG(ZXQoaWWNCLOm}oYjgrm7VPQpwo5~V}l{-n#m@Mj}xyIY8 z*wCn?JC=!r9K+~@P>6io;Zk@ql(6nv5Q!{QsQ()ZNnbc$denWmsdceXy&YBIZ0~{g zXTQL`kZ2wutFKpUj{-a|OU%^#KW%Z;34ZERTgSw9y00U3qkEbyXd#& z0enGCsug`o!_U)`+?kxSS%V8BEbqoVP1*BN$VC#N+0`~1VianiecAYs)mL-jK~qgJ zz_J9p>olj54c3(2__toaIVF^qEI+nq`|mP|rd}@}wn6clj~FcK2jD83MioX--bRr{ z_FLNZw~g0L!8HvwmB&120uKm;B#S&u(VlY`L`9Pi)_@ZB2J46Q(EBQJL3(2qm)~aw z-k3k3?RV+EmoY@$cX^`iQjuc~B$<-*3@svWbYSz36IEYY(lh-Z`cd12&88vG{cvS{-A z*4{(Ruz&8^#+khEQlw$+U;IexTC)byiYoN;I zHkh}oSDUz%j$YN11i6%Vo4r{q}q{l>%=3nucuDs2ZvzQh@wNVLtfm zPKF5Z#NsIFnEFmE>%0dIYaU>B$0V>`g0t3tYpR!TbQ2s-x)y)p4c+(5JFOTt}j5 z4vPKeGNHFe^vj9+IifM=Q}fWx57ev=$e;ojVRL(S^rx=@<-SWahcvh}Eho8xGMPT4 zVoMq|6W})Ld#3SfBSvA6h0i`|=|L4}k%d_u+BLO$QMxwZ)esisp=+GyvB2@b=3#|U z=JuB2H|UM{vDTag0h?+u79C5rQu~J`-*J}q(9D0v=GqwaK~GhFU4@K!7!JJ%CDdz$ zzJ$2Z{E)nsQ$G46cG;bFQiOQe{?COf_e6NOC6hpXi4(km*7Le7l{N#X>(efS>=cgk z*QgzV^S}$vjcQOyKxy=k_OY%`@0^}y@LO(~Q~s%~v0PPbIaVD6CtEsnc@VO!k#-c3 zKP~fHJO*%SBhT&Y`OMl0zJ7xww%zj+D1v#?wT_$xu`Hi|I9`v7HWnfTIDwW~qxtr%M5nE_79X8(*_FN#YMVY?k z*I%&|63bGT*tPzBoa)qy_ayk^=_=L$d3%*HALX$~zm*$27-{gaWdxO3FgWnE=q!Jx zveB*Z?bZ>mJZdE_@0;ZcgK|<<6gh)t@M-7y^S29^*WySOaim4w+zs%#h!_KDMO|18 z8ZX%IvV?3Hfm|@7+J14eE-cN=dFKZ9%c9i^nTTeS4(7i_ua?6Q2j8a%B24-7txAhN zH4BpRn1CnGh5x{FCNkOhX1#5g*EuvPFdn%j| z?WGcB1UU=+CtI?$Bk=hbprlAuUd1=6lq093YA+b`O4BGfA`94Re?Z(R3{$n~46ONFL@#3*lET=2m(0?BX;7fUJ6gs?9H$sASAa(?eY4g7fuVKoKF2Aj9Y|~Dmq~VTBZNMZxnJ~m-^nI*7 z1^Q+FHG@tyj}Xf79B9KvR_z#3_FQIu%{+qw8g6-jsAB2K|7@FYXKU$Bm-gbrs6)w7 zb|vN@n}^vr(lr@O&OgRQRK973GyUQVwhL$L&o0|>!iYYt-FHy7M8j3_P%3Djlu^_T zG25>DAs7^GVCjO+sK37HNgxhvip2af2i80ML5#4Sxev%K#hB$e$W&lc)+3spO9Esu zHU%r0zq2ihh*-^)=Bg$8`1VT54t}MP)~E|o z8n@spJ||a{JC1a=kBrJzhN4ZrI|Vt&hl>y(RXMAzI;6$+XMN?a0%$@-p&_AGSCH?s( z3`EA7E^(=fZ6RoKvgtMRD~!(yfTe&6-_OF49yb3OIZ-6{95aZP4KbPOie*RLAv?_> z5x;_8LaJxU%FQ>AMP0K!exb^kQUQ+Wf5Uw-8}QmL|DZ&^3LOL|OW-QGHJwxc!BX4) zgkw+b=$#JkE1%hi4b-TI;ZK!9`JODEjvgh})Dav)2C()o*uMLksqKQCI*^|PU(Iyc ze$-|~n7n`O6!aw#1OX?rv@TjRm3^ZF9us%3KwKrOKHvN?BKX$0x(8RH$jrJ zSy4pWXbr|3d-rqm@kKzB4;{rt8P#PmsmBlEf+6vHQ4p;*VaPFtbJ|uk80aY9+0p?K zB>e{`E{4rU?%upBU8gpj!8eY{QIu=G66I=0lF7A^x=~CkSI7}xoDWaddp05>-B_RX zm&dSWFZl&@px{i-OzOzh&FL8IL2HhSACXUYs^|WfA>e+e1q+W|AEY}SyUBC`jvD6;if2a(@h10e5li3fph0RBg6s@{k+xm9KG9vE zpTX}HiM{~1$;8c6M558*xF|z|6wO7oCY)WAre3Q}0o8+m2hd zn?RQ5<{jb_hCu%I*kGcdsqjbDvj^H`&(f>l4KgWY+P5fJ{Es>OyIxcC8c)L~3iOr_ zU6r;kI3h2tYU@MLrJ*Pvnu%WAzLZoAgy6H}7wgW|hs{%$Dm)fFpX*Yt7NfOWXbH`h zcqo(q>qAnDpYYUTJq$IGY1QfPp|^(05qk+C&L(fN1&H-)mb;>!mVS!`E;m&r-Y0}? ze;v9y6}f$Stvav)J6d?GD(2M+n*{$uDT7i;cpmxhf<6M0dPhp^N`8a)W~VXvC0t|J z8rnnPSkfY9dIPMQ|N9-;uiSwb=`5-nt?8w6k;@(ysp3LD2^WU{%ukkIk!E=n;6D(G*JVX&8ZYZ?4H*$-bNk(!ZI&&_Is@#WDUdm3}1ExQizS0gF#|kr4b#v!D7cOixyRYI^*#uGLU(NB+R0C z0~18C+P4Sp)X%IUj(*Vn{pKc0;EF4Zw!_kwM!0vyh^UOZUHe6a%j^IS4Yu{?Unk%Y zLujyV6E*v6+a5I!Sk%bYlelQg?@O>e$3^!d8_@z87kpUWN!+mHq|xV4HFMC3sINy+ zwVs;-`+r3+vNd@>oOc&fEG_NXl?tRV_Xb6hjgCeDWYg&|nTp|4I*?dBQg686lOFDm zttCf*EJUe*2o(*iUgwx9qd=Bofe)R?k$x2;>3Sv8ct9l<0f~-pw+hlS-=P+H%L5Vy z+qFA1m}xojf;l;VT)|!&tK#67Y}acR8rrDr(f@JEXoVl#C`#@N<0*Pn&A5X~+Kr+-+Q+PwQi9XGNHE`}TWgMUAV=f3~J7Fvc1j1o$A3&(B zFWZ+AzAe}a1o}X`A@4jljMnAs)e~aYl&5}s?yMDMGJr3{;<5Chh6n`FuFjijgh^8> zS#@aaEE=7s9Rzq9AMA*jtNb`*#{W~s!F!7oQShZ#Q1>BD2tPl-U@=HU`NBdcZs)}o zl1SJ(72i#Y;@|sL(`f@20+N4;fJh~%pFf9sl6E}E&8hHe#_2c8GSTC8fLCWYPD3SO z(=UX51Mr)Oa!Ok~o7{RY-%UmU9}BtNG*9u1hjsES=zP{@8o^Q0hnmVb%H)B6XGQz6 z-bP(*s9wPdm5G{eHs@6MR+L>%Kq)vjAPer`%75fEuu*4;mUo`;3+MBoX4J%{cR>N};V%*n5;ZYo-{jASDSM<2H3Gt?Z%BaOWCk$!L!#~Dg z(SCubQJQ&anNts#bfTrb2p!i3bB{pc#}md4f3A&|j2<;8Es?HIZeJfXx{0fVhpDoy z1W=|@bx#{EDaSmZj&hK^6-yF#INhCg@YaB#%q+I>DFTmANd)nT)-PH1k``t|=Ij0f zNDafUgi<6G1CKAImq(jc99h^bU~``lAS)5IMYf!u1lrmY%f#c1g=TIDQeg77D+bT( zoP&^WH^WL^fb*{dKGG;ZWvv&xqqprWJnNj5{fkyE&6wHd8KJ0Tf#kNBmaxE^7R8NV zw}s$9CWk8{kzymY$btJa@@6-~+1LzV1N6aJ=ppx`KQ8hx+NW8txEo}Jr%FQ=a{hAK zZK#H;2#knBf%Z1vt!_JATJ(#~7nMqQ;Myf8kvr_~vmZ=_{FRZ=qx(pZ$)&%cyJ%=b zA+5HdE27=9F#qGRw4c%`22C`+Z&$k1!_qcV(x;9DGLM|lme`(cfDHWeS8Q!!J%0E) zgfHvPTZ;@V7{+cmy^|zcfoZvIt4@eJ22ffR*ZHnQSO*|hHu+9)amO9xyX%1RnkiCb z`gWZ?z$S)fIYDa1FrO-`u1s1vq+y&mBo$CZ- z$*tl3;Mubf!S7g&87U`tr?EexQ<_bhmy=kNyt?T1$DrcIL9YGWJbP zJu-DaP%sF{7P6a+XGApjdMcvj5eRiI)f*~)DfHhLbbpsQ zP%#G9nD7a`yp&*taw`yulw5UM?y+bf{7NG8(&3$=`<@vpTR@4I3YKylW=IOV2;z#? z7|m3_{wUR4HE@i~4gBE3O52Y-nT~oSvewNMx_zcxiBGFrn;VpXfv$7+^XVw8=O~_7x8;3tbygdYc6Wbz>*C2sc<#oq zII9KlTcg!iQO{IL9)%bVU-CMiA-G`a>kR|KB5BC0mpl9IlBGA8fCH$oEc)5w4IZ8b z9MJBo89I5dk~6RWzAwV&8%w|bLw(2dP;a1+MFcjYlJ#N+{AR-&O=3?(OwBnS>{G+N zS$c^%REmqRk()2b7hpFr-&tO1C~mJr&U?4#>X1JKx(EB3?Jg^&B78pX@FA%mU1hXV z^UX%qre1{Ka}!M%9R!qz*29n z%#(Z(v8#c^1>3T3DRugWcCNfgM$nRofPlZ3ByMsUr64lK4ppa>#4R2d?J}Fff7#?T zq6`%*^ZWu{-y3O?Q2FGmD%4Tl z1ep;cq4pU=H$vGB0yheR?a3u7PHoOBJJr*4K#SYiA z%9Zj&&hkN~vJcHN3rJ$2TQZZanv>2BnBK#NS2snGG`-JwTXEN+Rx8zN0Z>e;*=LXzW)6Lo4H8 z>ECL`dxKLyfQ8E4`!j&59+Lmo8ILUw<6q?siQ3ThY~pgsYy7==ORXc1x1a?oq(W&Y zPdmK;R@9DaZ_?mAH~6BNj+uSvkqddts_=mln7eaPRt%+S{)yu<8uqL=w`L5P8(Y^h z@5nDLt!JDK#b5G2+S=S=^1SiC`H-y?Z7H$7lBmk#Imxd zu>#pp5Sq||(QYUh`<(7$9lf1g&gLvH%R4ARJ&>nWP#_}2*Oa)Ly60%MHIX$nzhim` z@0}&=$;-`{p0Elq4dp}7%-&-4|2tt+6{F02=MY;mQR?}^ntBP50BUvgRMjWn^Q#P} z>Soza) zI|@xe+xkyI(+u{`T~G6fRb?1Zuab7F$f!?GQiS;yut| z>;q3Wqt00kW-x)^?gt|cc0`D#Zux_X>oXZA?Nx{xp?>SEUx)4%aGLcvl)N|u!-;IP z7%`cs?FwYsW(4|Yx{Y#qI86)Tk&(czsT4JTayt2d`EIpM3=>YG>CK6Bh(NPX>phG5 zu0o5WhzxM6`L%QrjZ8MN7Va zIG6c9Z4U7xBp|R<*U_N`hKWYKJh&3!yFUvI3x>An;a%-tM!Uy!;X)Am55|S^Vqa6W zGgRb%q!zj4ZY!t6J<}iT0qQcOEF8EZ#k0nNfK(~5T^UMSKNVAa8I7npJSDl*{&W0rVVPUFHdn}kmHUQn? z{fe0fC#$BxQavQRo^IU3FqBFKr$VsJ`f%uZ!9+Hv$|Gt_-6BF^glOGqvLhV*iuf4k z>1H6C?LL9Qf0b=!>hk%gW5{g>98I~KU!Uw9n4$inU7%vGz6szeXtOC)>l;iED=$Pl zv3w#^T}0P7OVhW7b-u5rfZKWuZe>*mrMz4)1@k?;|4>&&sB*3|Ck@h=l#H+!4`zWO zYtHrfc|nB+`g29nS>u<<~+HmZ9Wj+W3$7G!HZ641kkZ6xWK@6pHrO`v>OCY zgOQ03E(x+yEaKjPQjd$QjRnA50Pnh^Re*HZb>7vhWD0p4OHplID$w)M^^xm-;0r6` zi7-V~PGW`@*y@`j(*h-wv}2W9xCP5(^on8C3OLo%@+D%cudoKPxS2X=r-|T*mBy}N zV>StdoC#8WD55(2)zpttBX&QpZ2cNlbyN_&0KwimLqr#G9qTZwW_mWfllot+& zq_shVAGY520DQ~r=>VEa&J&inC~if`x2NFlJJc~)MSmV+dn50Ly_3Jrw9(=2w`eGQ7;kXl!495 zI!nq`ZiUJu&)I?KEb=?brC!J(s>+K^VIftMhY<4RE(F-ElU#B>QE8>sB|6wCN6I>T z*UmTd2NN19nxbw z4YSx9hnCoi=~=PP$0>mjEtOxi z*X>UcO$(Owk8VZtWOY>p)!@j_B7tRss+a5vBvwNx`4k;}&QkW9Bu%naNt*hDtT{5O@)F8m&Y+LO{1OLX4_em*wZ-!mP-IFcW|%)g!92evDI^4iH^0mw9FTq4k zC|iO8`aqDwKbt6-{g;o~p>mtR^ieajXNsTCscJ{KV)nWmjj-_&Muj)oFM(7PbJ&y# zEOengorVk~^A|fDBw6`9PqB! zqbsbuFlbB#mxI65KY1EgV*I5Ou;>}6t~Li*w5+7Hp3vl3hehYxM7diERcGXi9Mk;R z=03om!>PkZnAAQc%I=};!yU2r$SG?TGeSAl9pMf^E3 z$Tj#v$wTcGU3~Qr>uIfIe6X=IxDsV7tPjYUdC#@v@!6`Sf?6%}(G zeth^2Lny`)wvb+;m9TT~zIF6CO#=n1yPsjuW>cE z2*$QD+epQIamC++#0*eP8KAO^-R81^VhW+2)drNb?mQG)IcP_OZWd1{0tlB3<$-us zFBc9k-w+Fs09ECoqd!7=nWEF8&rMK1*T{wZ2gXnN1x}OPU^ZF0_-Tu*{%9 zlZq~YvaB0gf*ayLXEFWj$#_moPZMyUo%+IJ81Ps2qTRIf7;%6y2$sw4j*`Yx(`$lj zZAjkAQq$5gZ51FPVWxsy--7|)*z;Fl$=a7FhGg~t?^X@CpRb7jO41eL{8daT=>vpAxm*jc+}SG`8{$E@EK)_ibqx-@gwtZ+-Yy+EYWz4ckpbL9mOPCM zXVSwIU!+#-H=SkJavmP9+KZA(_jcV@+lD))vRlKQD(=_}iojT+m&Hri|CrUgc38ML zKMQ|eTVA)3+m=*d0lpIzSb-XD{v!4A`ow2Tlv?xwMOPq{M9kbJCCBlk*+ZtKi4~i2 z$RRhszcZZ$G9=|;)S4lPE9I?NFlOG084f46CwTIk>}EW^>86U-AyT`@I}JeQy{Kq; z%Ez6^ffNIB=_EW^yC_90lJK0798ejRl$A$5N{vP*eES(5Hy+h^ELz#!c(#Jcnw#N> zMzrbt#I0(ot#SVi80t}I#|{o+TWixYFn8j9f$6Zhuk=R`j!d?80T4{D&fP4gG8tC= z6?1#n)v`J)gU3`6YJUT9a0narU?F$B#Na?ngGvCRf!z&2827|aF_n!`2{lmPG&;f) zFnqsPu^Yf71&f`~;w;3hj}RM!#t$Ymr~53|lf8AH1Ko8-&=K*+^eAJ;C0H4|UpfhY zn8ro-^9%$QcgPQB$ZX#o@s0C)Afb-%^PZWj?7IMXFtg1q;F6XfSp)o816h8v^LyB; z?Xp5xgf|Uje%5al`pqXRAc;IYLwEoO$&L`UIvCY4=#2o@t|GgMhy9@(E5Tlhf{8;* zR4gwKXMHlhtqT@tY;c=BHY>%c6fxXbU~&D1C~X2UFpq|dy4p-2<25~YA!^`IoDhW` zxxBQqQ&JBPO~)#8tV>X$1OmTo<(1=xd7gdeNbFS!{;Qt6RS_wkir1du)vW_&(w&ioyW;O5r zHu@DK>$cfkZg;h7imd|GE#6>(oeKMffIWF~pyaLkuWHrSYKLP*B>lXYq@MEeBW^8D zRrm{&m%#hZEx~v>n!T^LoKEN8l;q%5d9GTiX#t3tv|Mw_Nr)pPr| z436Q*sYfPe2%kppUWzG7ka;}3?aS<$UfW?v0Xl)zR3x>U_WDodtxd6LZH5;37v)+dbMdG674(Pt`5CxC#SL*{cQ5}vrwZ{c8Et8t!g?P zoZv(~nZjl5ni&c4VLKt`9?p?+^bUHWl7)PHD0Y2dLAfqa*f5SZ9D85W1uUHW=K4O9 zP~Cm*iz#yb-8VDFd?qSJ3Xk&6-6{Xf@$C??ZSuDT;3@=&0te7Sk z&v9Hewe+azKR(OwI^#259v7L;T|S!X!in5C!!XcTS&9>LBd30pW)j2kbgo&BlP%Nj z;Cz9Z6XBxN7}w?)D*)b(5!)Mmn6OTqp37X$8yyPLyp-n7j7FC%QkeW49xwJRT?lTM zcwk6(9WB=>YDfGEp&%J{(+uH)FW_JX&lv~UcPU})!kLP~@ z%*tBfojQng*|-%3Zl}_<(Aej?zJp>TJ-A%Rn+f=frCb#$@zTt=wy)hUd*0YW0n+RmYoHwwO=>ZcbSkibxMeQj^8@rD ze{D79LAD!pA6$?}ASeS`IbJea(PPpB`_R}7&2+rSB9#QQ2uOwq={-0-I=#-Zo0ccd z=qeZ$O-?y-a$QZrqKzp{Xg`Fyc*H$8ukvmU+Lt{%=&GNbocrg7mhD^wZ%PXi-ND}_ z^4e2>I%t`B%v0>l=e$Elv7(j@a8a~W!FK|!JaNlhy8>hEpARk{WpwrqS4C@Z{xBdH;ejo>j4t5HAoNXV(U8xYv!)6rtI+E^Q4e^E0g;f zRt2ztQPntO66qOKzxPC(dxt$SOzOA@L9gkvB;cBpp{w~qF<3Y0FV7wD=%1+VFBYqN z?!nX~WEZBeh=p^3g3-r=X^at9&ILg1dDC~}*=0cuk}@iV-h07;h90|ml96TBUX25J zCO{BBFxFD`YzaA@21OP)#LT3>L5o?~&!zX`SU+``X-@jylIup6>Kgc$+usPieNbc@ z~V(sWMK0XO(9E?;^-s?u8u?=jG^C^0pvnpXmV zOaW`7=&ScK7O+dnRs6eIG*h~7-5%2x4#jEN+t2w}Uj^cwAe?V!&t4U~_EdG|^lan6 z%0724=x)z4f7MR+mMwa!(hc~y!5Wh^uG+?Lpbf6*D6k2t_M3=u6M zYDkT_7w3K3mi4Fyu*MC=(pjmk-Jqz?MITMto#Wn^+*{U3%O4UPiRS!dH&*5&G|Ybr zkteX#)D$hYYkw-YBi6Ld8~BvFuSf&4@Hfg&N1Q7FS^{+j#-aI;+~1g?kl}E|*ZK`4 zi$P(o?WREE6bR*5N~F_GLk6f3kzJaGKOndvQNaD5slMrN4gxY&NAsuK25niO)A@tU zC0+dwQ^6Qm=?)IazeB})CD6u_8myq_p`7Xsv(a$Xt0`qf^DF!27bRPe9wY#F7`k;( zd5SW4``%{ibLldj_lO04em8UQ0ICIjPp{wu(8AF@4vQ9WTGpgA<+w=+;>^op&o5{z z7F1E}F)T9!l?AB0j>ipEu6ogk(VcsqoVVVr1&W}x_R!=~)h%fix zfIo!iJ2hQVKmH8)-8_YdHmrEQ6c&GiG;*$c;fx7?6`GZ`Zwi8=@q^Vp>zrs!P~5OU zL(eMDh6OeHM{rorIZ?bAlGt(lE?E!QJMqs^srdo_cncs1SEK|k zT8IX7c96pfK&I`wahDJ79&8XJCG7~?<;`EuQHLAa>I?$GmD>Dk=&%uAe6wPONLirT zDtlr(04k*Km;g}IND_D^Dx&NRt}>cuJe~{r0Z0pS_2wfI+Vz1gwz@;|2FH_V zp|+i_cOZ`L?_!<;>ZO6>IsvD-JxY=srNu0O>+uVu+9z+N2%XiVHaoqn2vQ3kmqD~J zXFK7Ufjalh3f4V8vgTbh%SZVa%+)csa|Iv4mXKy7vZd|E6sb-ovRp!X==Lem9 zcULYT2V@HT$=MYfIc3y%QtZL`;?`|{Wsh5ru2!G-AmdR}H$X4%Sf zpCgV=k~E52s`uHFG(Ae_K{}WJ#6Lm<1<h<`ehPA>5c zL$GSH#O>L02DzW6?_%}PpJf!0mptgR^IfG|ZhjSv13nij{{D8=iO!t_?S(IXUgtZN zmOR5Oh}?c#YcV4_^Fh|}C11M!3HiA+?@XVQrdUY##*+!$K{Xb-=##jGL1)$2O`J5^ z>wR!Iq2*x3A8ZQR*4c}*8ST=?^u6-=elSgoSc2Qac#5(*62`vtCUfZ;7g0*-Pvivb zhr~>3&#WdJCf*Sx3M=TBNX;#)Q@D^H_fTgD{ic1<7*&U>PA#8p3EnG<28kQ^4Zx`` ziF_(h8f&7#X+2>?M`eV>YHmlif#GD)ZC(c)2R=-xoL#1Cd5?a-!i`j-=*p*u|@ z+3z&xnNH{13eIlE3nip-_SD` zJ+*IPmcLOBClMYd#_zhH54!8DsSN8&rea?}i3(p;P*UGDC%CTKSFg_)eWEQ>l z?7Z_|1*GK{lj<82By)aJt-ZRtG_o3y42z${6%NC{nYYX66LgG2q-E+|A=ytSSB{ZM zxobk73I$-b=ao#rXLTGs@bO7zaaT9P!ROR(#_XZ7o?70HUjH>|BJRIx3z~i49q2Tp z6uG}BD-fRz?2GmU3Sj{Xk(<0*y0E338!Bw3VKbQOWO_iAPZPf0DIYX0(x7TadJwvc z8&iKw+Eo5jcV;3gReNI7Kf6pFMK!jTFK-#HNUECDbID%qHEj%$5yyMc%WAb;--A0;+x57 z1WmS zZrjD)qx9k-+Js(=E~H-QNg_8rwf zh`>$w5VR;m2)KcUzbg%YlLlBHoRjS^l;pBXFd^d*V&EktlU}CSzffmW{8SQgyyC5J zRCN{Wy>6YTi`Cz2#b_FYTTi;t5gkI}(5>I$Lg~Rz_B;0+_$)+FtcXRMgvho$uILwy z{bdizWDGkbJx^m0HypBBj7Ewf`-1Ou{MDnqt2I%7CRa%mO_-X8KCN_%;K7T(KO7V! z;3yBCHGdSGSpCVYchezy6m~NrqHpIb7$@o z*Pi0hSgk_ngIociy!~TTiufnJqjD=au^w}9s?m}Hehb_aO^~iQkd>7<^5=Kpp7&r&)tcS8?)GJ+_9KJ z$*`9mF&0F#f|tpo#Em#jf`dCZ$Lfm`C^f(N9t({~`wW>V;t#$QTCW2tX%Wz}R%5Ly z1}Md^exdajTik<%B1S5NF47C%Ffqaq*756AXYasxe7sY}3Pe@&xVael##aWvL&K5u z*{!U+{^51ro5Bc6lRs~`pc)CdpS`gk!bx%7lZ^2n2F2UT%!tWTiR{q;&Sv7E1|lY7CWnbFT-ZZ!AS}$Vs)@_i-fR#k zej@%A_`o|{O~3BccL$THNRdyyNSKHx!`Y@Dcb}!2uVR^HGSosoSX9E#6-0i zmbdoyP2Ov3o}{del)gM`>Ic027I}`dI1|1|abINRPppmUFax06%hUZ5$S4X5kiRX9 zQ}ERfW0F9hJVYW;d8B9y=Au2l5kC9}2?UtgO0tkfc(|h{y~)T~2fWZ>AjhTk-pF>) z1fAa&>fWIqKv46QFqn(z8y656Y&sQ=NMIK5pzqP{gQt5R52j|{oJPC_gk5+`MxdUb zAYh5HLlzD9$FCX%8ykoGc`|;LE9_bCKIaR=Lj%TX2-KuXc~S#n2S0JB1F??P4Rv%1 z_tc6<^mi>|eAsb%3(Qn-7^jm>U1|}8o5wjw8egOTsCk@jqcld0Xmo;rN{5UeiCJYFW{LW`r1*0Al`z@IS2g_ zA>pXdB`<>P0ihmAn}E8AB+VS}p2Y)8(ML*8Wf)jhZ7$dJ8xxRm6ugF>{=!uZs|GX_SexDMF9dO|^)#;-yYqQcE)D-)yaj~eSX07ngCIPZ*MTip!ts!GcvqZD7R z_k-h5%QfBjdRMq-VPI=Ru5f_M)UWgWUYM8Z0y`lV8!{fwH^e;#8DSoPe0h<@|7;c4 zB6(mhgKS8=Y$qNiH1-K@xg^5e#mab%we*{3;{iy-&%ay^&4JMG5KA@Q}G-EoHwgo`K|O(pzr>@>Q>+zfF(hs&*}aT zRrXv3z>vucsfmtHQ-a4y#=Kf=jhqV$hO0=2CZ#4z9??BSF}PxmSXp1}vxd_n_d7X6 zup~r!*eYa0SPBGVynCz8lQ=rOZ|c{M!8`9Dou%!mhes< zGgK72qti!bFNccrt~9rsTEnxe^Z2M;R8dX;rwaY%+Sjs@yaLKxyv{Cpv6sc?$(vQM zJB0AgOvVV2zZ#|Tozv$IoQn#K3q_eRYETgT1)M#4%|rXb@6xnySmT$`L=IZ$F@SJF zMu)*SWE&TIx{ID5vJQ2PG$w3jA-ja_Uu~iaxrMzW+@BOEWOhY?buSv}&cMA7=6K9R z2f2fHsIbR>ex@DqmYlb_dI0L zq{eKZ&&w`S*VQba#IWhhOcudLg=r|$1aYp{MAy}djjRNV@McRi1FGoU!+%7E@gwp= z%VU%v0nc_?lRL&-KA7>SM!*>(PUfK-K&vZIY06B78>2XipqF1+==wGONa0eT(LLL)Op1X zlN*>+jd=$2tELe?!1LOn$5z!D{$!s?aV;cNTi!`YBFF|Q)mv{1^9KggJA3_-wJe~^ zciyf8!@k{xh~2px5Vf{pB+XrGrpAXBUc5qmuHKjy=+0TXC`#qw=5XJy{ft7U^Hnt_ z^3m(ax)U0@4v|xT2;Iz915iRN9b9{IAFoB1YfjfVcQJa}gg4uTq+&#TuM>N4Ry<2$0ta)Z?h{`;5EYX6 zZJyHwID?hL17X@KR(c%rmUi!S=0$Qq3j2fm#2yZrC#PdQZ|O#Q;XNmzLJ+n5y`AkG zCq%}lU^zpx1tkz|Y$fFrQG;Cj;hL;#tbhQ8xL$}V#Q?!NMTNbI<1mdfKP_4-x#5I8 zgiT5Iinun%9{C=h;B>TO6=Iu#DjEEmN*>;KJjy={rm>dC-(X4i`PH zc%CaMsz9W`Rm4@f)0K`DFE!{$pD@1wL)HEyNDm#c z*Qp9Bdz}QSx)UAKn%%OgBP6e%gz8sBwf|&?(gNBbsv`8aP-xMKe$(r=-XFA)IbkDx zw(Kjin0SCm!uDya^&tg5u@$(Ka3SM9m&LwM@*sk7K8B+)kob-%Y^0mOZf&OceZH=&EO+y`k(_n!ffZFYtGQ@y{)u0>}DRt zKPiZ#GL4KpyBw_uUKRIe0^>I7*PVAyjC(SmwhJzEtD$E&Y}_FuG5F%VH3?_Lm>S~O2)f~+RRpY-I7kfR8xSiLaDa~ z=}F&V^?fNOe0Xkb7bAv)UBD{=o|bC2$yCB`p;`N;>U!N!E@P6?;Y26R>$OcPF;#X0 zY7dp7VuLY3!%)gM5UpI#uPPM`vjzab?7%EZM#tmJk1Qge>%I3hdD?&1V_8RFbmb+$ zTv=rXT0mJ!!@2D~GCv7yIMTL6-goxu1e2@9OX{xpl~HM#1)fkxbst@Axd()gsY`Yr zmjgwF`>PsrHRF2$z2f=hn@=KAk-&)RcRa03M~y{7FOXkD@d!WuQQ(v!TUBjH+d8!QOu#p)# zIw%=Wf5M~}2|i50?X!}7j8W-rpC|UdsW|<*;-B@bw3J`4=KFgkve-pa09NQs7M|u` zH0%I>9ZRE}L`kcOn~uZt&}PItvV005^Kb?}_&JWe0Q^ki)a?<~5i^3Ulti?TZ4--t z5+=OMBwjjy!(gFKjAm0#*>r9b=XZ&N*%OFXP?PnA((fND*)z17pvukw_P`mh6&%epSPZus)^~8~27COpc8xGe zn#!Rj61F2NFamoth+p`5vp(73Fp|Q}-&JQTNxc{D2%}2Yw@_8Aw1?iEHIki=XR1$U zvlj+Gh=tEL7v-ekR!F=|wlD}eA&EX7rD={pgL+@9{Ty>Su274L1&VTx8!VClxb`~M zb=G7yRwgL@5i*|6IV0R+MJ&nh;f)Gk{$is&K<)myxwU3jum&1dS;%dG7nJ*ZCCco4 zF6U3HnKC*g^pF(a`j4a;OE_y)bbBPaCaZ{j*tD@QO(7~2QKX;RT{%jFjaY+Z!(+7a9^R$(!6! zT}NF5#2@5uhO<7eGaP?19fABB$IMT zy)vGoWJAwcgXWIMX?s{xyK~tv5caM`2!I3XLK$YZ(YWy2VAsP5$V=8KkFLCZo!|cJ zJ#R}Dx6$Zvf}y@xSv6KvAx^i^Ofa$77go%jmAO{;8=~ERLFcp-ZP6tCEEP01{`KYe zBJ@<~L|YGp)mnNLGM|qu@`(7^*6yo39@Rd(Vtrd#iJ1PLBCVZ11Y>9WV<{*3s)@m7 zot2D6y6P{U&to7TY z(oEfX*-c2WDQY%(Js;eB*+g`Bw_1XFNX6U$FFwK#%9neO6UfB zw8v!mCUX01gh8!&*>~nV@{8{>n9KR=4aGl|;2A!~YAi%B{-Me%M;p1IPwUc&m*P~+ zF)bXf7I>8W*6`z0A%2H7qhnF78WsXxH|y8p8*d4lJ1+9Au0IiQCq=Dp7a`L8(n_59 zggu|Dsd@`>CUxm89KXKUu`@e5a4G@D(u9*>2xlgx*iH~iw^sAu@K6d287^4W@@Kgy zpepwqg4%Fd-WJQx*yc+aR%4YvRum_;mfIf_LAla4yQnE zvW$BIm{lWcPtlr)>a}ck0n>Hq2ae7eCL%-yxHyZ`J-sYDngNz$frY82vX}LTXLBk)Dm^g>hfH(^Hc!xrLiRVh*WQvn)Me%tx>&ng%P zK}N_ucQ_WyKbN=?x1OQ*I}vNtPF{sAs1wG-Zji|72$rh=5HUOWy&D$g#`O?tk1f(0 zreh;7oMekJDOm(jU$(uIjAW5ODSmEZGC4lhrEs4dSW{nst+5_WEvskL6R^Cqld#YN zRbVJC;v5(H6p+0=!8zPi7p2DMr66GloXUgIItX+~sJ*FEK+TAkyKYJ1yJ|($S$2r} z&8`dBh;5b6Tl{X$jTa~Y|Ixm??Ap(Zxru>c)s-gM?lg*xQ`cu}ebRYh8<=62DOM>1)1=r^GnO7iv-- zZ8>zLusqxKE=t@A3qm-h@KoVgc)zvAV;ykD-cLSc3~YhXa_@Kht;OZOjlIzC5`9x$ zdD|9(Dq$+7rR99Im2ck;Ekfi=AsHiHFq*O?wYW?Z_0aVxG|Wy6R%I|y-wBdBlkBsq zv(8pcQ^!`@^LsBexH9cGQ>=IIz15dTAkU+XJZM#B3rv3VPiOpzkN8>;e+n1WTrLKBI)FYa!s06 z9?$%5TZCCZCdYU#o%XWO&PukLbyKdK>Kk{+m?OWFL6b2$zA#!C)_vb8HjM3|0cn~y zBscjUk-1^@7>|Ix@nGV0I^+u1ss*g88A zaIpVvqDU|7XlMVw>>%!F=VJetwXhPsh>5F(k%^+X5WNz;vZH~mlf8kXiLH?by|RbB z3H?7C^6}BjniyLc{4ZI`|D&5T0rTIP{bLG>CQf!Pjz%UnNXf)mi(Xztj9%Hq-I-p}#=y)( zSm$q@qMfsWvk3vizoskyx0sLbKNj&H4F0`{ViwlUCXV!C)_+@zm>Ag^o6yUc*qS+; z6EJdeu<-Hyd-{P&jRMXn}SRGY35829wN z^r9D*FsobK?Hp;4`O>vhGj;GN6(RCfYG#gsCUa_Vc#42nX#f_&?C%NR3KcBue@DQ@ ziHM#CNcBAj;OYa7q{C<8?kELKqmI+qSF^+&hM1@hxIaenOqJ1r=hL*8<>iREXzu>G z1k!fcb`8{#I3P%Hh?|R>n}nvN%pT~sF>sWPYWf8;0?2KNepfjWv``$xzc|B(6`*Fu z)mTzH3KUw$YL^l>R=3hW-PiSQ2lE@u%fwq`|2%JQV^j7G{3Ma(2Mz**A74nRzg822 zxu0Vt&*p$&FqPIln*fhgjpN$nj~tq(V+gXDb-v{bV+x|^#xo$T#Sfo+=%ojfD&5y- zH@!{vmES?&vS)S880jY2aPjeT>_UK#)EPGSG(WMia5EH8E^Qs- z6Bt8{56a(UZXrozv~smVFHE3(;m(JuZ+{>DR-rpo5ieng#Sd{ZqF^47=}#hS+2zwz zHZei1AoGGBF*n_~_8B)XR64cA zjCJs&rHSLlA}{!|tdxi!La7TwJd0^zFIbz^N%qyLqA_A(+ki1}4AQbP3Z{rkCYD>% zC1pH+2uwn$E-0j1(D6;^DGoNv+V#U3B}!$P^`Z^jl;fos0})OP?o-Elh~M*tvEz+p_w~IpE@x$uXNoctgif|9kGZMa z{e1fNNzbwIwz=4YunOn`7}%!ykaZbWn1=S)aI_%yB~?J8E4;lmZ36m(w_W7$`i~$x z<1qvO${aE78!*v(@RSB(Snm(}=vkXCYthT0 zcG}cO#uL7I)*Q8?h0w=wb~`5!pxW6FVP14d;?CdD1QLX@HAAdEGCXj5BP`qF&K0#e z-#Pa#c-#kHtz}aoz4cwS;72N-1g-TH%px21X7^oFQdJ4f6VnyBOaf6-9$Aj}#0?;_Kn;myhZ6S!_+ z(LzSZZ|GmEJS$*7$lwVHW{Wot>j<7T^tL{>dBiak3UYRsKV0j2BL$`qDkid)c1z#M z!Sct5jxuzznGb}XH$(6yh{;aBXi9m7@4R()|FGXrWoK>!yMWF-JzA``vsCIShQ{OO z5hC*3IBliR=(d9^9*X$pt(7Vi4*0DyT&Z>DQc7saTWeZbK~vLw=}H7`#qiV$k7Z_T zXEKlTo&J`m_@3l>@lUf@**;YO&MbST_Y+w#uI5jwEh#rFqP$0xlL!}TH~1S5J( zujG#FnM6%ZdwH}C9udrs=7&dQB@Jv~-;%dEXGoj^~rpL&Qe3D=V_!3GDs zp}!Ml;zFCsEBtZEfcJVz>(%>LLtCCjN&!@}l8Rkt3;)OV$P-i0uO)KT<9Dvg#Izj0 z#>t6oAKMt^M1;GFtcruKc@p<%wOyU4Y%MSP(`9P{1j_spO71qb(4I=^Eb%?sKfG*l z_5d~hL*RjKSx2Oi4w6bL%sf#3y4hb1p|ZfVY#CS4l`U9yFYIHOKxSxSdKg!1W|{*= z`%=66Emn&y-xo`$T9aW*HD6Z@DJoD%1_Ns)+x(h%#KBS?CFnsE$f1`*xTBGEafbaLh=&8?`+(90S~f+3}w^!&)+B`A?&p_bh8&` zNy#Qv*AJZZ+uUYD;VBYhOpvM0eo%5Pu)VA1_Ks|4+ykDbW2uYgEeBj+Nh{fMxGGS- zEl+xWEo4%Lhfg1|R;`f7X#J*)QeH9D6(|NGxb6cb2ILERk!)1P`T+sYJ1bG3bNsdk(c9F5AyJiC4r^L3B{?NbAxfNwu@lux{7oO16kcD}FkIqueDKzKo=Cm@V4I3V%vE9~QscM*{NdtEASs80$ zWpQmHZ6^NU^z{c9?ys%Me9QrnlT`k9Sc>C6VSu2mt=(Uo#K`$C9P)nxtvLS)O#a`8 zR*Zj9*1tj2e?eI+f1%aCBoO-#l=XiDt^UF5e+#YHIsXf?N~EX`Hcch*&EmHje->Pw z0du%2MJU-sQ-S)O%`sTSpw!0&Vo6_q*}LZx!Ez|6_f)LrS&m)mQ0k861VQU5#^BJq`u110Av>?1ajQ&Vq4K{N||h%$H18g z@UL|+Lcdj3Asrv)pZLOl%!?npwW*sO0PWz&7HbKZ%n#(px4_8{o$Hkz<+6ONvAUh7 zQ%r>oM{B-{eq2TxmZ~F_09$U@n}Fi@-4*QkrLINB-5KTEIX@|?g1ILwe;VLKs8M#1 zJx@#WJOTVSoy=5JsZ@ts4k@JP>L(*1Srfl5v=!xq<8hjWk)k^a&iQ2pR1chn@(toB zVtEw$6(&dBU4j!eunm)RD6Qg2p2_7RGa^P@-!i)KBoBhh=qguj5~i9x)hY~QJo<_( zg$nk5@>&AbrT|`=%P^e_&e}w5$7L(ZFS6||K!RW8$DzK_x`lCwok=`bz%K~3R+nFILcq~SmsvfWLkyrR>q*Flt z8=b}Z4_ohl{(p&CI665KFf#pz4a3GrFGs-iFC*xep{0_u&3~FS&MX^kn-g9Yhz2Mh z;++b*cq)cAgiA)A_q*2BGm6Wl{hy8yhlOownjOp#52*=WD8NFtWEFL5?~li3;s~Aj zL5)g~lbMYId#TEnvu!ZevD+iRTeDY0SCGaU%;hz`9b`P0)x{rNUXOlkHuci?OialkOtDY6+l+)qdLMJ7!0*_lMnCUzGIRBme|1b{! zE&qS$?0;E_{|7qz-&+3v>+FA?Dg1La{^xt@-{$b&qXo|Y+&lC9!P2(^w~f_}1p3Z$ zFX=!IO3y-2Hm|?ovC`jo^E{(^y>PoNS2nqpelkBb>~f)T!riEq3tSEYr#yoyvdATz zje=GozFP8*P&J0~#uR{|dHOD%MyS#_RicfzwDz5Rg7?;eIKzGc+ z0Tw#k#Ka=r`4wlIM1D1@(i@QKwv*`Ve_m-Z&+h|a{SvgkhsG$mEsrkGSgbPe`1!Kx zaSabNHf<3(aN(&ktliC;$m-@a|{KLH0%lAl2J0O8%`R(^z4R?Iq?Jco@>?C7L19)*?Ya8P*7lq zY_5G@ML&Zq2FMhJIX39+mGwQl97Fo15;#d?Eq7>s34(8Yj#9wyd~W>*@7HAO_8)M(omV4V{wY_bDsB zj@QSx6>(a4oD(Z5>@+h7@LzwYtl47B3}X@*GYhE12ZYV;(pT+cnwdg$F&J2?E`R+p z8mf9riWZ+YvCP6m;Z=(xH)hRVxOD~+`7!EpV)4a2H%io0h={imf+m}xKYBJ3M%-Yh zh7j=*Ma2U4XW9NMrdq$x zNBm(>xOShIISHX4Ql68p!+&lzTF81k&(GYZx1T`Obfq(szU2$|lQ(U*Ha?0#=kVb* zT5JhO{RbmjvK;$zlL`)y3m^sAywKpY1R!Ygb(BZ7=5syw22KT{;cTx1Jz3o51kiYSCX*4oNQvoK8sOoIWNK^(b$uh3V0&Q*TvL;%3kWS%JW_Vh*v`0Z z998iv!Q$$4Xez(c=|zC;8+$6ps=W7AbiZTBt5M15kNL?2PY5R^B3qlzNp%;SVM)nu zY<~aEen)O1(IDlsrv{#3Y#1bOTV_HX=d-eUsV49Q&}Ad1%#LMJl;Kx2KXN@1F-WPz5~Gk6SR~AK~ zUbIZnFH9*z&>DF=YebuYJnTU9;_XP17mImnJU)&>qE-B=ni-aa=9XDI459aig3Z1i zm%!N+u-Jq z@V?Z+5p0*;`J;dtNuu2`Taogj-cH-q5B-MB_Th7pL^hDLNRiO4=j8h(VXE32;9O_X zpsc(8PVBQ8&Ofih*0RFT*?&AQF#*uW{D$5`iW^lIKj}Y2>1<>j>#8QY>8Cyjs7K3w z`$|jrtKV>Dp4CvonbW%aO8+7epQ?7?ox(+}Yx8ny`V>*~m;Nwa23T5hFVh9kU6`RX zI}X%qxDg^SvJ>%xpf$+a=sNLdj3l9yW5JnbQ4V=0TN${H0wR!uy-D#x^j2b~qW!hd zUj-lBH-4(rMcfTFn=~PZ&}3=d_XW!Y`SW@Xf92F+E7D+yU>^|5(iCg_Q}5b}JM$T+ zNHPjh_QeiHWU5)~XGHW^dKj=EAWl)&jtsOLKp#?uzYta`*~sb{mX=tx9RPE^s(Y7F99fIqCK=PPo29tp`pmvK-%Ow$^!7rH|Fv zrUPdr`&4P#<|ko;*SpS}5~2NB2(jiVNLCPvujRDKIkU^AfGbajj6H<^kX7SGTq{va z^y~m}=onF~5tM5NBPbIX*&hWXo!%v=VxPiw)y?sb;hx@kR&`cFHTPGbo0d*yQS+aP z5LV)|7ZLt7<)tJwXHt-^=a>8Yg51*1@Zh!q$xW|3iYn5{Ozh%}^R^Kej2onsL&iA6 z-6x&J*E==tuh-nmalcmoyY*Y38Jt^vM5|leR*V)- zPh4ot`hkc63Ox#9k0flRjz>{7(IOCWr3LTZ_lXVW`)$!`22&ogWC*J~h?Gu6Gou2x z|Hw$QgiCz`;KhQfzPK(6tpH4{j;oGM2|dH3(4KcWp>O>x{k+oykEg`UrOxkG&)uIf zI&nsbtV~nw!YEJDmsC!ByO7ESE0h;`nl)Fq6hmd&RIx^8qzz<3x>NP8X;AjGVWB!g ztkHGYxM|_j+p%2M49_ry=}s50p�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%0DNa`ryz?2 zd~zr73)#_aoYTV7P=(%0UvN>I`7I2K2i1tueDB1HmZ)~&T#{nA0j(bgs_B1;&KJi? zfTEjY-)3sg+pTcQDPgJ#6pg%UJaJ%)5(vNKJX0?49I7e+W^EYCZzLGa+b_BIKsU=}0@I8evH!M4jEEgMKrfBae+ zC35EIC00boHwdSesMC=YE2F6shr-nM4E3j^3Hwu+oBFI6U8(t2izX|A`RUwR>m_0z zG^{9e^q>Gy8^Lpr-bLh2z_hV?M-km-)Q4Q!E3$2<+(!w~FTKh`edJB=HTW2I(tu5K z-haNjOhVPAG8pQ^C?;Jwq{6hK4%cfbWSB5^vZoR=^BBKnT&f`uX&cK z;*X)@6_;nKGjK{$g?F|^8%ppa2cOeMv^qz~@movVUThokR4ap=f=Hju$Fa;+9&Ir6zzjy$W>mDYAJy*x?63Pu7gFZNL`ZAAR9|@&(XLP!Kcxjv`~Fr z+Z+JFjn7z9*mjBW&4UU?b5G*S8{?uVPAB`9?Cq}TFou8lPU~uh*=`#~iOdOF^v{qj zX43f>@_Sspdc{z~C0V^Y0w}523mk;U75-uQag7vfyHm@T4RQQa zf-P4aZioQEM-osYJr*>BjN95xifH!{qi?NM5e1z%!=_OZuz~#x7k&JawsRWB61BAk zsq9b=t^z+#ftuFk7}PlB#1LG%QReHpCx&uk*#y?!ofnjtZVNtdc!hi*aVn%HrmUg& z*_U*_c#CIv+wW-D_M(QIyeJBMVxMMf(QfRw;S{4RV_d`Sg^C&DO0^G#3SZ32W*KxD zQmAE-SBTa#bA~^L`05I4Ushm2&}dT@siKN;cbJgu>@#@;B&^*HC@*PT8jK+!U#L5P zy{I7!`Y-JfQ{K_4LneGEce;L4RogpHld(7ilqApNk{x|c!cHO~jyNc&@}2TRi_s;Wbt zo5F-51eaCh!CoAgqkY?x4$cDlcE?R*ZF}WTvm^Q5qE}>r?1OFj1gH%i(3a?6q9h4r zCY=aGn6n#ur{AbnyD*KzZ6AUEvt3B6(s0bPNv5E@<}w_ntR_=?KJvmwG7(N2zGqc9 zQXi?<6%^xwrDV+#ZjnJ+`g@o7_!ki#pmWs$&F~>%⪙AOeK{Q(sfKRYe?*5y-^S< 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

  2. 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 z

    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 xY|_+t9`~?mzY7Nd0%XX@EBwnt>g;0Z=T>c=jv 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Ŗ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

    UMOv+ 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

    AFUw7bt=cX5!q#~|NFPN8!kAwPZFmzn# z=q4iE&Gfp`259z5U-gFlNsCAS*Mb>oTi%G9{VD_ut$IVDf~1%$}g?4Mz6_l7rW1;SdH1I#E77 z07fy~1>yO=|6MJLAq9B!b*(>xI^l4#+rZ>S_w{Cz3U~Zjt)`T2dnYDBHee{R)_OF4 z@)Dg4X9v_iJye@x;plx%yP5V>>9Lj`&d6u5sF6h1w&%0`qwO?Jnt9yX)7T`D-UipS zH#db8&j*x7CvbWv7V+CbtTwjbaHMO(ig^RO{@Rmxkjnvhtvt!5^-Kg_qTX?3wdSpdE+*_{&v@m!bwU%sR*`$)C^o`yU7>eqE=`3mKt0Gm&mVaBZ+cDJ-_ic4y-t{*eyJXO@rkjqLw!rW*U!j>`Q?Pbzl&O7+j=?t9 zKR+#N0udCK$;eR0iC*pfktU@BpU@)f&VU2!>Sp1BdKr1Wd&=O?s|ECIxqL}t@|rqv zh8xS};o-J${B=t4QbBIjB#O&@Z+~v+0Oqbn*fhQ1H<0}0$?xMzogbZ_Zm{YKnaw%{ zqJSIGdf#p^k6%^yn6N@zuJMX)6CvK}LLfu6cggVqq{ZJoiIa`<*Q!?Y(fPpoBb8V_ zFrAJ{@f*lZ4rZ{=wKoC={iFLzh_EwCQ%nw^NmK3_TGQ@jn{$_JXmSY4)#rLt2_^&Xx(n zI?fTS=>7(v{NW$N8!MPaHX!V^874>uvMb+hYwO&kDJ_-&Tf=`d;WRT6pVc!&g}iXz z=xvpJ1K2hLhmgwvv0*gNc|RpdytrZK{<8itb9}T3<48zAPH(rhXgd4l5zsgYhZLhh zYJRAQ3wm|BZ^-82T@vXgU4YA5!%8F@Zz1L4tCf zy%ZXQV40szBhkW$9bojA6;L|OVqR^phMbB5uw>Hx6{$AHMbcw8wvo_qF5sv74Tr+Y z$P6*<3s^oH-~iD!mBLnQHbi|t@SJAdNNBd6>=ge=)kh0PHmJ?B?KFH}1axL3$vlPS zU7^qPcDl;!7yxIeBDpj~Di#Q`*T`7SU z>?5Fufw$T=aW7ZekN47~Pi~+*!3@mk=lkLdw6b$IvHn81%9XimaF~Qh$*kB)N^)n+ zR^wiesb&wz(y>p_S)w3QS4;_qTph?djP~)~BN0>GPc9^*)3VtX>QhgRH7Gg3tDy&m z-C7~Tudm&ZVrmC4p7gQf~+Os3FW3I`xx*r7LN(WYNo6!DFC!@+tYxqgtBE>Vh z)Ue?-QHjn4yi>mppi-aS(in1b1)B6f{a&Y(2k&ETz`6oDYVFk6CCpjng6YVso`PI#01tDrvwL z)dUZqVEv8#iejzc*^_;oQf7g{y*AKkhYl$2kz3R3d~^r1>PH}St!!OG;h^C}UcP&* z%#$+vvGzRoiWCiJaJj!pKh+RAd$qML5~$NNCLg3bt=xHkkT-qt-C|fnTlR?4LH%`{ z=?(w`IS5|FGNp#p2fdF)FRT4d*&%KR93LwSlv2`kR&toC3t{l#Zh&KP0Zo-tk1P2mq;-ZIpcbA_voM^@5mj zwfYHY9{zAw`MjCG%hd@l@mej!jRdX9-fzd z_IFK)fiY5M4W(H(2UZdwpnOzaDM2ZJ3z%bz^90#>cKz9zE0| z?%1`>4M%=XX;T~>Qj)lQ6>HoMT@-;`}t#S34msFj~mo; zbGVX!B8AAaEF;A8J5SOk?d7fXU$?ZYMFBFF;wzY=8S_M-w#2WDdqg{j)!TPKD%}r< zKc}51-L5C(6EFZ`27$Y_vtB%G}#3gC-rZXP!Ly zWCWG<7-_W1$(n+RMTIXL=GB8_Zyn>rHNX*vEO&y0efy}tUQy2Mv2^ggzipM-rl-daQ5o5Z zFD2sd1ra>Oz~H8QuW*HqLH7y7(+Jl|uwo<|CFgF7J0GQh)Z)rcs>soaXs!%HWd}0} z?W4~_npTz~a^khtAfLLj1X&;j3Zbi9vLBkgB;HG`rQDlSFDe~7=%3NKB~lL=9gD_@ zTdxrvZbp<65d5=hqGR?;@Z8QSU3g~^+LKymKdwstFS)rv+NlL>touu}yMo|PqV1nRd@_vP zu35~CF%DhniMVJUu)Hy;TXeHrxQ+O^>35k{f{0C&=_8{Ms+eC1rC1%q$_c1l8nZPB zJ1_}#eBydQN?-&*|E6O^9=vv}CxL8tBVJ$dcN)u~h>DLgC^!;0YC4@(8yN$s)b*&n zoL_;ZhRKh%bVlBPq#z*NfR*TFiwGsbzz+H|K9M5y?*~ew7EA}mOp|aUYAKVCy5nyE zZ=oDDJ%p%+>vEHufy>D|V`|t^x>^-HqfnTpcie~e1XWOJA7N@D5sjH>p5UUnE4d1q zgXA&JIUQ}sRno9U_l84mnjso5A`Z(K+Yc1YYpRE(@X^`|p|eksVmTzcE(&9SvNu!i z1@8eeCh5skG|P#aZH6xCyakZ^swEF+SC~MUacM1)Bf7SmIK9!qL&y3Owo?revT`@u zRHRH~RK9yNECgxH+6Pn^gVXP#nNChF?m`ozEZ+sI;5P;yyq6>en(W7bF%-N_rE=|; zA$Wu4TdQ~9UAdgR4t4vBNCWl)wz-KJ_eFJEj&_o9X;VkBsSLh}Jn~FTj?RYSLD09g zj`dDOg*?-efKUV2FUvDM1<+ejbR&C~gmO5e&o#-fkvS-Q267RQ4ZEZbLX<4ZRrH!; zwmQ8^ZqEgNVuIeq&e(yLK_OAy5avNPD;&1F6_ch%^2r$_@T5)6vw)mcswe_a|Qm1|CBB3Tb}tbw{A?*s{wmnqQ?Z zvRQ*=8;rkLlyBE+_qz+yl2cP6JFQnNv{hQ{XN)635b`~d!QFKT<1p+YRgEy!71|MT z*M|MPHcG_}j%}%H2a>DEfE{Y&)CtI!lHjwJse1R}Nw3+9L?R!B=SJ$k=Mt-cEkMzg#aCDY*a4u}|R4tl;% ziHe;U0-NMTPA<7i-SSwy2;gPi_W4HR?`Wd`;3K5JQa)39;%`JqVVvMP*G0HO>Az-v zT$+O9YLNS9Bd~FlMUU> za3YB7W|5>kW^f#OAr;{0BRtk|jwTRp7c6}ktT-$mbCN^rYV_eyiD@;p>|qP~;T;xX z12(<|S~C-$$bq0eWMz+H8P=72eF)wJkWVoo$>NMj%t1HGlV|b?O!AnfIv#F}A=0%%&J`GrZ$b8u(1vLz%J`rY)yPolOq_veZ}S8fJG=}pEwgXP+$9p& zl~4%Rv?-h7TTB)dlaTQ~qO=<*#;S>SS38qz?q8uGc~}|;Fyh=~>cysg9cf}C{D99B zMR)H$_++dHigfFcH+4P>qnta~?jM3;S;@6XH-Y|vKf+03_ry8M8;sH3k&0Ou_asUL z0jb&j>_}3zGd@aN^{JZB49-j4G&!FbEvoYR@RPtR0zPoE*)NdoI!Fv-A>WF-#{T>u z!0f9<*F1S2MFK5o99o$SVLohM?`0e$OaO}?0vHfY>gjZ^7wZx2J%q1@Dn7t~u=H_X zI?z_VMZ2Wvk!Ps8i#^f0?kq3)n4y2o`yKUrB8UyagLckhv$LEu!FVQDC!3Rv0uHcp z%|0;2>Y8XhKK`SAgl`A$A} z6ab5!;&v)Wdi)T#j?QFmJC9|xnY+%LI#(>p!%8b>ZZSTQ5&N2+AU9*aJ_SG5vjHK21pgvz#NhmKJRj4XD(Z zAz!a*CPP{x#D9H1XNwsUUP%gJ@4Iu+&DITK!Mgmdj%`2=V_)tx%sY3{(@&krk-TD^ z=Iu7zX!~>DE{DBFXT=)~84j!MEls(a;-;qJ^rlSJ;03+)JSq)lih7EjIW7XU9h@gryIV?P+-dQd$%L@=)*x>cvcl=;>$agXg4_6u6{~TS(FJ6xeOO>AUiS_B{%L;M$OM{CA10kvqd-2{EZ%Q}bTI z%PB}M_!#|zkoOUZ_NJS?>o@^dT7CY&0GKfsgpzlFrvXqP4xY?a z`8&6aDb`Pvj=`v@UB1Hzg*^`EVEhEjjp6~ez z$~(x>%`1M%7kQwnlZWz8(Z7VIi#L4l?xGQ$r&tbu+)J{CcXPTXoXjFWPv zo3LC6HmFWIH*Sbt>gZb8lJIE1tC8j##U#HStHo2F_!+G2M;YOV15o!7*~ioSoCumK zQU&Qe+5(P^_si1$`-uocfEaWqp`l->;nANu9pfs+G}hhp&VKVo+x-^!jNk2lb_Gu* z`T>g(@JXf* zEB$*G4vOE6PAxYXea<7Ru0S8~(RK^106j5krMi8|?P};}&2^%2k%)*{cJbS(S<=`EnU7P*ED3D`5Ag~CvK4}@Q_+5MMLV2MFhEa4rz`#^xJhG_ zlM`Daetr-DIA|aiH;1tuP)D#aAKsIf zN6lI^<1Z27CZgp|cT$Hxaa4Pm4xql{9yv4&bPt;NS1J}L zN?T?)6(}-27~GGWlgRurU%uY<7pAQINPb~uAateCn7w&hFd7x_0d zhqp@Nc{Wb~{rj0O5)~m@VUbBBBXJVP(Oo zKyj5v`dYdWf?Bw<|L4x1XH zzS_vI$Fky1dZ6YNg)laC5{s*dz#9J0cPC0Rt4LU}?%T9#_d%9>FX8sK+d#y;1SM`Z zdy@=STrIZdPHbT2))FKXE_%1u#g%v5di4v=iMWphXMFg*s8<@DRh36W$1dw22!Ih3 z_z zMf$$|e8~QgU4{+gBp(Dqg~MGMoJ?qBfwRa&fd_{aoJ4c|T1;o()Lwo|umUzAF=dZ^ z9GcRiX8$*IFEq-Le;wC02+%tuBW|mW>$Oeu)q$RnhM_^hB<-+LLD3=+H!Fe*KrS*t zfv`J3NYD8^^TjZX5W7^%jQF|!$$hN=39Bp>O8-sF3M=TnNaWVur*MPD$*|606h`K+ zy)cth3s{v^EUiZ)I>>FbDk)k}mC8k$`j)<@s~l?W40~x5sz&qOrLmj_YNY5;Ml1sj z@hA#3tyhzBgfbI*4wA3#p6#>{P;gQILxFx8Q=<;c{?q_7EFYaC(jBEq{N8}oJb%{X zOZSYeC531$Kdo0C|L36jnU4gSGZGWX;eFicwFb*?>XZukoYqvTDJi&)@X{%vu<0)+{89VF|%tT9Ubl0&x}q92-v@1 ztjo#9)-YgPW`W*9tPerk?1;%5t;=t0l26oT!HnWOb0wNz46`6%V9-H?PID3rmK?2H zTBgQs?7cn`RpD)C0jD$f^BlqS8)cmEi8UZ`(pBru88WNdnT+W5iZz+lGrkP(H~X~4 z;lK(7%?HPM?14irzvl8H!r8eC*UyX85+=1$KG3Nh}ivSI_YxXmhr8iGXorevM@ISYfpGq!mx!o{>}fB2`D=%edqw#{Bb< z%r zUoeGMefgU06p8uesRt}L^)!dr)?661c@sPCPs0oqu=u%n5M}du>DpZt%doK2AWcxY zl5!n$t<@y0M;NFrMHCCP1^JxAXI7m;gxRTehn>$7W^th{;(mi+0#by5?8=B6N~MMn z6iZo9pY57lmeP7VD>+bMZ@WigDc1O}LfVN%0Ws$ockW_V0qTsJbQ)-_rn5sHYbG&R znU8Nia=x`gBw36zz8m;LfYqavQLzye6(ju%Q@W0zpQ!`VU^O=DVgwKg{`07`In!+C zZF?OMd-OfDQ1u(Sc9GHNSbcrL2p4lr zD_Wgw@BA1TTILxgg7@|@`IwrZAry%-Z)^$o)i1^g7bPYB&sIN9=2D909X8PM3-o-| zPpgEV>kJRuwTbxa{=Mm^2G>i7Ta0@nBSlN{{%M|VPjPLNdP~3C(x4!Z3JaIbtW!bW z29}+}j2ohaseTsi>1F=oMr05A3VsKjZS1slOWd-Mf3l&E$xk5XT)bc!*u#?5Gn~pBNfnlfeoPjfG zGK_{J61cH!2h_;M`5XQWh$%%s9h0Yt(bvNAr0d6syD&j-DzqsSD6ykyGk_BNVS?$i z;@drEg=vP;^f3HzKwm@nUUd7I&Y61x?>?Un>`949cg_?GzQ(iwA7xyenS0T1dM0qv z4WeV&)Mo1(2C^ce-5yB49$Pn8Fp+?3YmNQdlbJmQJRXY*l{tYx$Eb^pqzRrLg&dRI zR&Pa{p-W2%$)4utCKet+F$-5=8Y2c%K8F?8Pic{yOl|vdqA~FyJBEbngznQ_`McVl|+2jW>emD2ioZo2#eK zu>>Nkx)7N`Wi8>B2#`P_uAmsh{Yk9V27@p^0tNw@ru|4qP&cRL;OzFON*l{RcYI@< z1*qW68Cuh$6rN#;uAe0&1=d*Gs`Vg_x&ue-zo=QM_4u0r#2E$Lfu^TB{r#YH>%l?s zVrSrz@4*~unl4oSGu)x+=1Xv;gz?AxT~F+PGFH=$;+(~XtPt&`27*FU{Q|Q2w`>m~ z5!96f_8_1yM-uO*GzS^Q;#OTqhHazw^Tcztr?p$oZRm04R~8nsMX!At7LWaxGR%9B z!-J#c=I%%n4o;_?gARs+N^w3tlC$|;MyKU3k9GLR+ih^D3mcqap>!`Ow_b0g2&c>9 zI7kHxAh!KX{@5q-qBp|lu`f0S42YWJd$?B2Pm%_gWozkn8qU3I^Um<-v%<^fOzJhI z1*8(a`nzLZ6cFj#(zVOL6*z$O+Qc(l_G0G8WE|KkP_eAdS(k2j78fonSZW)B711ks zpc}l?VPV>KEC?_W2zeQtOTMmM%?0)M2Gu;UNO20N#L=!B?VlS-G|-m69}g+-(V{gq z_3KB1jhXuD9Qx7rXn&5 z6)#!ART8(7i|WlBov{o_ti`&Qd?kLx`hNuFuZAKs1P6@%h}R8I(8}c4vVE@vTt>C# zPdM;ga7`%#wJ^W^_P{m4+6aSRn57`t1-&u_1ft%;OG;Goor;T8agYsKc$8?j zNmGY7DJG!531dLZ=d!1Iwmv87LJWxH1`CrS?Db^z56ZMC;`~qwbaA1U329PH&k@_L zJo!O8z8JSCE^voD_m0unV74C>e%~HOfGK%{%pQd}-r(}48kNY`%L_-H-w8I-36PAw zFI=RlFf2((d>DnCOw;O!ekHVCnFZDNnSG*mA5CD;~UI(-iLewA0 zDHu@|vt1ZYKx(ik&?Li~LjniBg`Riz$0i@?85{mnfB@|;)9#{c!MqV5x>cqJ3L(Z7 z7+i_%Dbdb+hgh##gBZ!#=ObmbLRVr99BXsWfm3A_VZ(Y+wk(=!|TJPCi>6A|aiPe+I~fxESy_qHqV_2O%kIZ(u#gp_@{L zA9UIN>4n@wF3=WzJS*)XlrkllrUd}VU;rWnb7|+e>dBL#oc~|zjP%e&A3w_aD39+5 z*Ro%rV(dV)F8LQzpE^g_%f@`FxEJQW^QUa7Ok6ZB>MtlrX4A!JM2ht9buSZ=Xhiru zr8;m^1<}XUFI40Ht<=%vAnc6oGa}3?7VSz5B}fE}hL=8wft|boBbI13B09Kk@f9r{ zy0#M|OUJxo4GkQ3TdM?zUHAW-?S?M@t-SpJ0Ht+zDalTcRp8osyuU%mHC}6HTT*>qmaFC!y z>7DUtB6f~PQ1h%I7L3EXPY>_Tzc8)-nCef9S?aUAM4_hSWJkT9X>`>2bD9Y+>2rp; zYda-8d}hRlmcd48;N=6w2R@*wpw!VC{En#aXQnk1B=%68Y`%xYhoB1C-qIX7VKnh7 zsvaiLtYK1Dv^8_xjRlMn&u<6WvEF|-+E#ae0Efc|6V=TU)WQZ7^`VqKx5Ul=+;*wH z7f%3gcg5;2ql>-CQ+3ILHz0D~;Pw7)W`7-I0E0G;a;AV6Msmbo^^_iZ}Xo z*=0O2#4lS(qQ=*+%U47-UrNXYxtrp>d;4e>MgMEPHk6ChM4zliFyO5LA0*3exbcSo zXo6aiTl%YX>K->fCV!OUIW+sTJzeRxfy}5Xd^W8X^bgp8$+bP{)U4X%Ho2P@bG(tk z%g(~8+bt6BJJYR53}1Iwb%u|n03|}3#?ECi!Ra$(nWdH)M3~<)N?zv0?uZwdbz#li z(WJ?mL(Ba>p&5(;g(d#+mou%x&57?`i~mD6BW@mdcj+4)e1Gi0x!i5JtC{&UmV_Of z%$8@;gDanyAGeuz6%xb%d_GL`z8IbD7>@nXNom1%8BAO>d1H1zN|_Ic+VBYz?g{(Y zi}cyWeq3>q014QLdD8-OzYmcGpOjQFerAcc*H$;6wz!Zx)ody;N|fMruCLOgvCW9l z4D@^wV5b(_3-egsaM6Aty(6xM z5E6~M_kc7RJyFjyEm1c03~kJxA2^vc?&{C8*eTg`Eo$NtsZ{>poxL_3akWzDaN* zxCWKw_6HAjeeK8hMfm{PVCNH^3`5X-((>mF?8yU^5^1eE6UN?|mX9}+lKkW!d=ECs zjM(j2dTW1#vZ$F5$`U}<1<0@A6D=hs^38}KQZGX>)omDc%uoy-CXX6lM|7I!f@I*A zF80;7ASqz01BJJ&^9(l>3-DI0(h!tti9DB1<&N1}+#9795=ChGSM-EzkgCt!Y)sYB z!o3`7S#4Kbd#ZS`$v#p&T#^YUsbhFT7$zHZ8Pn!vAz|pZ>;^;*oLYH2W8A{oXJc{& z2Tu6+Nxr>|S5_=@?l)7$BVK)(b5-FO?bS|-jSY<6aIMEc&2kgQ{l)s+p@wQ=3MYo6 z_TbHJZ|MH^XqWL!Xx)UbM@d@G%&ZW=z^x(CA)Zsu)^@IN&%AiK#gN|{_u@K7vBt@ zH(^L|o6F5SxrVa|#VkYGY%#uiCD2;5qZbz+Vpp+9?)r>rsKsKYbY9GMyo{h3Suqu7 z1@t9vtdU_m^)44Z9bz|2{KN1iXmH*=6BZWSj&%9rzx~s4bOIt|QFI)K6Noh`r7kZ2 zl}i^&5p$l@k~**O-5jmgLf;(|80Ddk3@tN094}#TJfk;n$aWC@utjr*k(o(W)6e6S z;;1;r?(Ruhd@h6_R`YKcuIa@L_)G7!xsqkF{7bGBIJ9_cGO1Kg!3=W0Z4Lh7 zQ9JMu#$Vi~>n`0@cFH*OM?%~W^B;fcq4m~@RLYF)#6Q7d9DK$XM49!vno?W!{Bm}R zihwr?X3Ds4;m9ItxAXOUngQk(omsG~#e*7&zvTll+Z0y#TWrU^TL>dxcnxuuOs!5Q z7Fcd>|J))IH}<}&%lvgP&{(&F5cA;uqm}*d{32=xZF>L$U;Pd&rmaiGZVW7FN>ZaD zVM~`qMtUD!i*i|?ea&;J4_Qp0ANPc&hbD<=v%vb1uD*A1em>-jV76XR4PlZY{4zR0 zO*8J~UHh^s`z@zmHCmJO5TNwddqpT>x$tLr(_FAZ zC->r>zIGLd6?`~1WiF6ZQ2;6(4=;#-I!x1s$@t7^KbFIwpnpEe(EhoUv-8DR02Y^g zw{95AHsw$Imx;`nqFM7swmL3OQ}flo+)i`Ox#n>%s_e2HfSSXvC_*4_;yDaA(XnnF zL^0;l$D!OFy{d`uk%&GJjc8ftXmlh5+;1~QSL`Z$6yj>I6BDH6y>%Gpp~^7jLxr)r z*ewppRd}_@gQ5UJlBv0LvTz)XSA)(uk?OD}&P9HE)`@1yNX){~N55P8A=YZ3$=cHJ zbBSLFR5bhrwy*@50w%9V1`fRI9l`!-Yy`wb_}8vauplJK!J8u;3?GO5OAimw=fzqqxv|%T zk^SS$FfcH3CFF1j)~;8EkEqMAF`@-4OqG|B=NMIBk9=r&BX%1PFhhPR>QowwN9Q5# zm!{&e-z=AjX12PpJE6LBLJLm2NSI+YxwZqFN__)crdIK`NexySh#8`Wy_=8#P5l?+P@zI#sqh^YJ7o4TKT9iEcC5MA1}w#g$UfaU_7m zPZi_4qY-23z=A5M>tL?Rj7}&6z*|G|GMX~lxGA!ikQ_hLC5EKR%-VOD5wb}deAbcf z*=tA>EkDXST7d*rG49NWOy%!F|8w0mC(xaJFLV8H@M^E#0S{+xoN6|XE+BolLLo=K zKmN+f^p$a6!H=N1@ol^4(Nl!0o{VzKavF6^(WEB~t`&B%OYQ(uOlPFGQ>c5?w6=6` ztaDziHbvHM8Wn+vOu`sn#4~oR(TP}j7}JF~s=3kp?1ouTG>DxuDcao)meV(j7ME0w<^HeEyv4?Y`RL9(G2_Fj7; zHPlQG1-NSySs4d$pV6FIc-K2TYcApPLQ^%V1-~J#cIF(IOY`deAdL)4_V4W7nE9Q6 zC`Ms(7Jev{@a$K!G@yI^A~n~fuQt^&U;%i|!{VPUEyfx%D&1=U^IUrrJmHMLuXPFm;IbEidWuiX3d0 zeLfqz1r3`Mq@{q=yznnCV{;AP4?pL)x1eZv!!1m8_Uri99rS^wrwSs$rF3e4rRtSP zM4xyEh-xMCmLsViGo8h8GU)Dp#L!k?oGS|+Le`0kK`h_Rz{*3+sVg}-nn^c z_1tt;V>MS=h09HrSwCR^$(7Nkw=wREi>+f|m8q8HgjO$q`Is~o$@Fuor~4dRiuak$ zx3Py=n|w}2jTyRB@XdrE6Vdx1#PAM^>yVcS!O}%=cmczu! z(jKiiqcCIMuN(YzEj7TYHbvfEFHZfpi$@Oq&Z3*EHP-49*y>dWm5CR6RzE5RiShn# zWp>?XUzjiB*|}`%LFDMtR_eD|f$x0AgIB*-isOKIP)kn{WRkG(IWk5PjStFqju=Zb!T1EOSyMP5h{8c&yU6m4P% zmgw#+$Jkbd=?Pgns{#bBu9B12av~b2mzv~#*4?>RWo1viA;g^Q-Wss5(ftGhrcf*h zQMbfskRKiK?JdiLO=4C~_yDefQ&}F-!B|&XIu!ukknTa9WPdf+agM8ZX>BKcz%gA~ zQQ41tb@-ViYL#`nOVRSYWLe=#JaiWExd)%WJ_fU!$#+K4$-D(?nGsYe=po!M`|7tY zRG66Vq%>dMZGY(xWR#Sm?qT3{;Yv6n@IVLSq|5nPEC5YAdt_O3*qR+G(m?7qpAcHz zkP7U*Zh@{VW0y}__|&jC=iw{J$L#9LVi znGy(5j;aKm&ZkpYR9!x{CGh;4!-Lw8XloiVC_nxwWVionXUM9i_(s4u`kwU^)>wwq zd_2)l$CW9s{$v}PW9E>&IsiMn@+?(KWiJ!9Y-?BE+a{rgvSpQ;|C#;J2g_szLl>tbQfb+MlJnRq^jO^cTo>d2OJsFrH_ zlv+a?G`?JJcFSp&^f+*l0mSZV0~}Hw)TPmPCyA5Zr-HDmGP9@m8}BZnXLDLy*AdU+ zN&}hKSagND7;$Mcg~Bx^=e2(gGR}i3l_4~H0UoFeEA#yO(xI5|SbHD&k|d2RMZJzP z-zTyjed>2Rh{@!k>2cT1VxnQE*M0M3pGvyKP~@myyaY{F^w|TsrF4ru;atw9%qjyo zAk36B{sr3dkw353biH)O-iIy`Ve$b>ye!ph zgM1_i#-+e^y-E^awb==bow`$~G}Bhm^XWytgGB-e9{T+{Ecqg7KlWeAgVxX%r8mQI zTd$Iv`LRyssDMp4iXOkHhnMjg%mgy?W9t2&-POymj3M>=azOHVyog9_cZ&*pI!L#S z5po)9lMi*M`%%y@24yiwYQvvw#HC@uR&z?}rEC}OL_rXgda+=YAk465o|<8*k$p28 zK3Kt|9pXajr^MLyd+OM;ZN%oZ`))&Tp)kND=3QS*alyAc9n3>q@?(_6T6g0Kx9IgLa&T{Ut8FXVa;6^w+C@W!py zsiRJN*VcT%q$PXV;F(*6Xs)J-*Nhb5Dd(ni{Uc@PhN@W2PVWgqU8CQAQKSmvbJ>@v z>y~p}ogovITKr6A+$)q#aWfzpUpQ3f^qgCIoL+Qh7ts<~;Plv*V!HFjUOWAuwU@}9 zUTWzK(m+sHldrAR>+PG+mpb##s(eMAHlhis{)SDTIwG_Yakm~=z8zI)%&n$NNmeJ*~shFR!yM(_}sSJ@;Z&>X>~*Bs1>d z2>DINrixy6X+7Dyzet0Q4Pp?4-BzMp{)PS^)zgijx|xR)!UbFD^}Ux3>4{8wW=dm# zxsLIZdd=huyT=1&7qN+$mY1vZT|&~!g^MKCbQl^=K}u=*1uA>lma|D%2pT;52)&7zv-`86eutW~ zG3Qq$mCh0rwhsh(_WgC{2I$+Hw&AXuu|U~5+3p>^fs!DX7fsbWT1JISV~V4o3axZH zB|-dUR;Nev3(^KFOZxFVRLZS;bmINwR_!F6q4xHe8I|zd`Y<+@G6?K?8elHXNx@wSthua@{7rwBY2o*! zoSDYYS{t~7f=R0p*)ZxK87lWXf}x@XFIyRI^Hn&QBtk2o`@wdZd$H2Fslslnae>1% zOt1)qJdlN=j%HNr0SiUitho6b>z_`7mgBFXl#`95yS)uy}MgSazN`bTl!=ItCHlT@QDBR_g}5as*!q)}z`-MSdKh}q!^~`lfVQAerhVQYUz9AN+H_-W z764U_Y1i7-3|d!A-CKr zjIQoGsx+oP0zy`yWexu<>x^xa(G6Cvb-e?DP_HxTol6~SQTM$!oF~zp-I)gXp2Vu4 z^s5oAws>6xi%f#5MG5av?LSCBi53V1iR3i#)EuJ9Bp(1mz4%04P!w7m3qx2{J%G*K zZ#5;3LEQ0QER^6+)gr^qq5VQYXskK3^*yu)AS8PPHUE^luPYBzhuWvyL=^+p%Qo4Nus!+8#fk-~Q zOkKOq?>(~Rq_q_ee(>L??`ZBY$4*?A{7NWiNP$LfqbUXGP05sfO?1@3pwzRKL*)sg zwb?XaV0U&Q4_1eDx?4KT$x5ui_}fji#~sop`j)KC{r0W&7!M3B?g9b2_d^d?(fmej zyqlHH9tdRGa$U&`q9N&Gd%u9;pkfZC?>C74b9r+y=vFE?nB zX6tvs&c_&oK-w9Vb!u{|EO3OvVC95)J#O-Hb1t#C?)yx59|>9de#Rb-h{o>;n)FZ8 zUN-}>qP~hu(N!8?r-;~%etH{Ym$jWYtASjFZYG{$aUXi1g0XHeT?z{@qayvgdqWo0 z5d~A@;f{>$ste(=}tNJY-k zvx_lqj>)$D3o3CExgyq4Po&9u48DBWun=2vbpUG zrg4-95?A&aMy}|Z48nZU7C74XOLtAtF%o~sL}22@MwMtDy1&G&MFX+DgnxDN*ApgF zyC8k@hj?>#@%S=m4D_q~9qvcXo%}Qbf_g6KMC5hcI=SVW0 z{4TJcIFz`@H~>0d+!&>~M{L!Lc!GNj)+JoUSHj3ZBudFb#o}wt?bpL)D!aJR+8 zE4xqO7P+*R2-3hAlLVQ2`3-$Xljh@EXasS^S(aie?pGQ@#3OO^D|@?leKvBhhO0M& z9IIk{xL5nXGQgbwVc7n6QU|&I&ojXP!|MKj@wfl#_kZhenb_Dl{v)vrdh_{NDF$U0 zcag-BX?M!mDB@Sc97+SK4z0d< zjYjx~9<0L;&%jRHpu*%}elY#!7w8fM6_v4}6t54lE4<#J;lUF z5g!)gaH;B7kEu-I=tlS_9yN!#P!x&bkkOyAv8-oVB_)gzwK^S-CKFk1xRjKoWJd_2o4#OmiYH;ppO zr}xmhO=UOA*H0R|UDg9OZx?l4DO_u@OSq<@v%fYlGP~=bC!D}g(0R0gO{%oxx8hn# zV=A_t}a4ty%my!W(`=!{SZKCgi7df_R$gZ8lyb`Dd3CR^rEvFsTdE zq7pV0J%saO4F9ySP(ku1xfTpRHisv~<)`ORQDR*;5Xm4E znVSR~o0lIi$M^KNVK~Ct#+L4;Wm3-B8?uT(ZX?XJ`PlL+w92&}*IHH{*OhPi$gsVw4j?jK`c4r6KYNeJ!m2Wo@cOhKdw`W~w_X#s z-(*KnDGVI1{)$!OaeBH2%FG2cj!OfO5{}{&_xWyuwiFcZIDLR`OQ2A_^vwe)xrK{B z16WmJ#g6f+uP#oRR92;)Ob?XcjTNvOL|F~~mn?yH&FCU9u%lJNoiT5-ZFnp*d6MW@ z&ux;xx1CR{+(WKK_i*TL(&&S?V-qP<57mVpVXA=RO=_X1LPSG4LiNqu9@eAUHS*DA zi_7bst%dE776>{0@W(byG`3DJ?on(-WoR1R`ty00M%@t-pfYr99J+F)WIFX=9=7@n z;ob3Mn~nrpIo><+j3oe^x(458l$S2+MMU=g<<5k_8u*WNAsiu14t3#~dr5iqnPz)Y z`Sbc{-Ne*c@X?^jR&*Fw)KahUW*U4P0@5kPV#L`jU*4N1@gJvMrhihOIPqzN8emP6 z*{(a$>lEXs>KvFWta!w#3@3qHQJr?RyX+7(>n7LSXz-#Q;pdFvHN6vohG3G)>W1e< zstni0xi-f-;wN07X31I6{G97ApT)HU9=c?O@IYEGGVT05jqKh{#H_}6Xo&j!TeJjk zbyNUC9GqzM@S-qcRIDJmmZv5XQ&d%8`mKm%eQ4HKfxlma7vX)Jd$H}-tex`Mc80W{ za1m#ngq1L1=HrAn43CGURwR&kKDzNaE|I@>$ko3%$ZIODyVh)w1RFwd^7rgJL-a^~tOq}?fFKeCp}@Z^d9O<|18=9$W<XaZHK@oJ3} zJ-bn1lN-hV6@@EkBr1yMk^o3G%opY4ytpnyc=&_J*xI@u>)$2?NIA9)sSISI<|c6%H> z|Ai=XGX96k{BMXdC)59VqWqsmrT>RM|Nk=-{cm66zn5xuPNx5m>YPLEDb~tJ@p*T< z2Oeur-6`bsVz#LTKmX^JC7xjf|CFPXV@GD2rbSxWfX7OeI1QHG`HlO zK1uU+;HXy?qLObbCS{$)g@{7iqD(FO;UW))+cOLzFkGCq`KBts$XisZAYk%b-A60b}?SYdfo8W+k@5F#isj^jZd+t%l#0%ClGm)*UEBNzGecM zQR@s9LtAF~yxz8CBs!Tf-ZuL;GNZ*{z6*5Qh1SDb^0aXyg`ZSQe@Xp{7ZLk+O$Z}S z6jc0rQ|n*Kr7D}T_yEiPX8 z{$QVZgfP4fGdMfFKSA_SQ;-A;$5NiCwgT%K4=XCW6#kG#+EW@_)Z1Hy4sS!abyzeS zNyWZW91gn0QZ7y_P!w~X0T1C7Y7Xb%m%Z2N+yOui=HbQ^(pA*6VE$U0KkEyws6WqC z%Hp6@VM>v{POB&$8tCz@WmYUB8cb=8jl#Hg>LWOyW8iA8^n7tjTt%)4#qJNWBTVjR z*Tc_FUXNYt;5vlrZQ!~4-%WymZaO!OP?n>JAWUV8<=oaav0zOr7P+$S&He2n72it? zOkR~D1x+PkLi>8aBUnF$uJU8f2+{k!t*X`H!_dhcOap~Gvs#O{e&xcS@B6=oW`4== z(2}xg2MG-Im*jm^yF3SZ%Bk)Cy{B6d$NFO7HAgGaD~sTNeMxlA zyTHd3hl?<3?$50eew;mRAje!lfM~!*zp;llRrf(!aEok8%ZZt= zh^G*M1$J8bQjR}?UuZ|6ZO3K373FU(2ge2<7NxwUazxwI(%4zhn}RD1rhG;HHFhD# zg8Z2~XRU0lg03-JFBfiTdZ14Z7JSxsyJA-8qR>~u>xp@^b8M>i?4*5)vk(1H2 zt(i+=K#^anXA~5lDt}4NN3FRx>Y)N9+6xh!M?#dnge9$o(U#7XC_L#Hfg9{rfGdKe z@<8|8{UsR7755NAE+zGryEWH6gsg88u?$fO8&Mc@ZSjJoEvaI;yyRfh{Sd8+xEfUu zI)z}-;JC~zOJts+j%Y0s*6mo$SJA(sEU-nC2JYH-q?f7Ub4NUyjhrPBJW|3@Uu1q+ zuU;Nf3IocfA<_W6jJfa5F8iFjpSd~iMk&DVpsa7ESWi)fd~g2dA94vwhjJly66ysc zEyUVlzeYa+dy$XX&z;XEuw9EJc$?rQDHg!<>CO1fYmnAvGhHGY$z00**$p z=@nDxg^;Ie8Zw(O0gqAZt89Q)pnB8m_?+M6CTs{mvIz(j|G1q|CX7+gwJ9eFjkCmh zlGWwMNAh#vt1>$nbxACDCD4e>qV!Mj*mFh7>DH3km>Y&cJ+%K-VX$$r(KB3(GpINj+BrKII+@xTd;a^x@4sF6kCm1+HL*1O zpFUFIU$?msvT*!+6O>Gy?OmOWO`ZRFieoM$(@g)I{#)2TgV=vn z9Q@DB`~Mpm!1-@vg#Q*9!1=FM{r7bO3lrCW)CuzG1F@wte!irJH7$stJQ7%hmJBLn zJNozSk&2&j^PMywz;lAa)6$~0uZQ5Sx1LsB%C#bAgEr~6_BMnh@Q_F@8NUo;6n3~T zq0}Y3I_|BRHndYx41K~T&yAcIMbh=3>x%a6WZsGqY>bnXL3Pzq@H5L_G~C?Gw$~U! zxQ0fT5jzXyT3hsFelPI=SESApaoGk)Dtsn@MmvOq+GM}`fqV`8b+iqw>>kXwiikAU z;*;|tWWeqP5EJ7m#}?0e$o%=!Jk znZ?;z@J^VbOhqaDqH98W4zMm(%ezmaMTpH>O=x1Nlvz>RsN+Ci3|%h4!xkjhxzg}q z!+7MBi`+=2S#URD5@h6?+)v>OF3KzMVGrP&BoNO-V5brwj;f}=Heu#S7qL`_54;3C zd0q1TeO|e$+d278-t13WB^NddjJ9O@^9nZOQYdQ^ZL*teV{RFz?8z5IU2Y_rDz5`^ zan(tEL5a(?HcLO6{(7WSeR_KKtmg^`RWv5kw9C3r--iw|{XET+AR98<0ikOSKRs?S z*g-L&O6}o=mv9j2=+LiOul{&?+?7FD>GylzC)j3*2kcy@$)#n@E%}!J@yvMPIrE40 zH@RZNF<8fZGqlbIM~ShHJFr58I5p(0*jZI5eRDXw9TZ&dh=1252Ut}GV+nJv@7X?a zuTIE&5R^_LiaqE!ZGJ&BMV1K@V!!vH#-4|S=3oW`Hru9dHQUCrQhKxo){Ip-{d&^K z39&enm#kB_*scw8HJqmYgzZ?CD8O05la!?WcL}3A{j>qs@p2o6%)v`JhIgX)I|DXi==h3>x+|C3-~u>BCurid@7DkeP{?DoV2i;WTjp|?ra2AF zR`Fv|UsB()*(cpHB3`Z(*x~?h%0hjI%6d~9%)@(&UzRfJhJ%{}K)(;W0z=@@ z%GwHZ-RK%h0iX4 z0|;q_*Yv-*8CK>X1>431t0Ifa-$WWebfQ*br{-}3mm|YZGk0Y$`UAEXftJK`D3+)P zs&teCz_-0*FY!X?hSU&Cp4d=?6X_T|tu>_sF(OV)sw&sSGa8IK&KKOA#`icK zms}53Xz7D$c$fTtc368%QCQBU5teqiZb|_QpaR?|_T#QK$lJ2x+J-29n^h?oZ9~M5I3W;k;nQM% z3JY5KyFgjWBx49JTwqEx;~5Olr8?dVh4Lfe4mDB(aio= z>h+%hE&r?ZiT@kqA|k9JVrpz}V#*+4YH4oaLdeR=`u~t5*qGV4{uf9RY;5fR@e`jV zf5S38HMgyG$X|ieI%hY?stz^KM7#D{elvlc_=D*eo^hvnEy=I2raSFaqKR3Ks$MzB z?aAU3Y-U~(=t;Yb{4im|4`Bh9v+gb`h%jhz^hBN2>L1_BH`Xem0sI{V9+HaoL4X^Q zH@eO-e_IG%j=G!bY9Kl;)(nP>p0bg}7j7v0G15-UI6sOu629=5q`*5lkK%jb|@>e?@AFAfBL2IEnaYJotGAh9@<&=Hdq7XXM0f zxG>8Wl1n+xwfq;yb_cWG*+0oT2F!g&EA;hw2Vn;5eqR*=UZ3BGavFiI&;@lJ4opJ^ zG7k`AYE!@5a|8-kUQ$#pc*hlGCn`T^mvGyT6_&LcGK&lB>T%h}xeB18lP1TOWwl2&nw82S=+jt(2D6$&x)i^ zz3eTa6(!{kH}gWQ_Vn1GT}*a+0BkMdvmVMrvD3vrdIomoF?3{gP4#_I(_vc9DsY@Ej?uU*LgijxPTKewf(&BH{G0aft&4F`0k4T7A{J%_}om z%2ewRoOVUXyvoI*JATNz=35|e-V)NH@^Sg+ABC~dfPmTOQ7HNoOoD9^PYdlfeFy;KZRc_L5BIJY_Vo~JW@0csc8884Ap{$O6skIa>CR9l_c_kh$} z*URtb*_l^thL-X0&>zIenFJH2)^Z^8>1gSet16cc`=N)}Uzqlzi>&_6H0JMf&-@a+ zc0a7Z@fW(*EnV9hu&KFRj)}jht{sD6?MOU|Pfy*GfiB56nfSA~wONYzL+i{{UgAdP z;=#AzFFCLbL@ej@iQhOejxF=b;GUEyiJX3ndHi@$5Z^IiS|hzOAS+lSpAZ#-z$Flw zJ^$etD~(RA6NbT8p*IdW(TsJlth;Y8*&=%ZzUP25nUD4^-}RF!&`$gOHIE$}%yVUl z`Ii8*k?RCdKJ3x0R=4cA0s43sUR&n{ky7Y7N!3zD@HjI^NQ4fK)FQgh!&tw~@7{Z> zS5&z7c7(q}>RU-AdmavGYX=ge&`xA|MPe+8jbe3e5NZ7CldxwNs-obNXe!&Ny zVQT#=V4A8_Ynd}9Bdx_?y%l5n6RGv=?~(n?AvH?C=5#7n?UdWV*tO;4Z>%(CMq#K0 zq;rXcNAZ_)``))V`}S#kKsLR43B|FAu7BPl{sGa}er!BgNz&>b?g&k~xZlSZy+2ZG2*M|3;%v{ebYG6IWB7NiS{SLXUK zJRhiVj18!_q1vVz)ryoeW5V!@fIF;OZj4Q{ii70$%PHoj9c$)pFh~b)L%4OQ$CXA` z0HUn^YC8vUS7NoZ#oHIdyTjFmu>ijN-Tr#+KP%!J)g{sunJ3;{*oz8zRN*T5Ogm}R zcXJC(R5s!!k%qN-i1wowB5JTrVS8Nj0>G`ZoO^yJp%%~;8G`&#Tz)H?;EpucJw z2aQ_5D9R<**&l$G)QHN?NnFPR?pFOVw?@CuhVyYeS!KvVXQqlMT9G}>8b(qEav*Rp zw6x%w=H7qbqypa~bwEmYhezuGZ=J;usa=2LGd|S@6y-MSDtPlhT)U$#o({R zgvkm+$ShKV3FRc=*%GYAnpBTvj>dpCz02Z3gf^L5Ht$J>?NY%NV>Y7BU^>a0YxNLy z=z>WuBxY2K69ftY^G<|TVf>602OtuN=M;bayz=W<~$L+9TKRj z*XM?gJ62kD^sg2&p-)iYDQlj5i3C`?rA7JNcNgu;K$bsj+zCNAHo+Pw6(aK~rZ*Iy zlTf?f#*TE`A@0hVaJNFaJz!q**`EKx{`*i91zn{ZpQ{e#eoQoiDaC$_IEr7FjEwel z2q&FEOswNbdb5lbc0SJ{SQk6H;PA7$W{;(3Y=)B8A(VtbOtuV1)_8PZZ9dmBL8RQm znQ6{XEbClwCmO4R$ni-TKbE_G4=wMftl1ii_`z6yoY5vJ zccy=j8-06lkHjl|s2ZDf8(9(TOK#Y;N-G8#KH$WhQ2B}*GB1pNgune87#P^)nL~ZH za)l-9PslqkyQi*S)+2fDV$k+*jAqGmQ`gs{8S>x|7Ap7mNbK}^DhDM+4dA)b8Jsa_ zI=?y3G626DPap~=@&vT$KWTPi(dxgax_`?sIUqnIEbAWy&%x3gc_jdnUwWz&x4m^2 z1ho$=DgKE68|7g2*Q5gHU=p$EJ#;F0wR_Ov?5ElbW;Cw+@+6}|Cht_y>-OVB&>EUJ z-=r^KQ-k%qA+cs7JOE``N{tArJ!^T*9Iw#$aRei#R%pX2pEqG8hgcJ%smtniU=if2J-e*n9B-^S zAurhFEo~NlG@tUC$ZFQx&FhC=Wuv{iUj)fLjS1b)_Biw6Lb|Wsv+|Y-=*5MFx6%d7 zM?A6h6iP~~T}~ae%l)6=O4%o{gS&r{=3yGpIu@*!rjG!;sdGACA2+MJx#$3d8CE;E zDh+BSBGQ}T7`hiu6=0;Wb~rPTH;jr`*SSg2Z@3@Hgk~3;(!O8umO>0(RcMC$u<2jT zrEWW!5KUbo8sK`YrGmowJlMhLeM5Q;>5YhebN8dkR=kiMQ z7vK@jWTHNsN-84$CBe4NFF+2!ABrY+8ty|evFLoscqM_N1{JV3f5^##dymrUP#p1^ zq`JU5VQ43Ni3IO|DX5yy9-D}6fl%)&S78;F&f)(s%FRLk;NJk{VVAWM-Ib(6=6Gtq zFuHfeEmsDjJg$S=PmxscrRLq4<}VNbix_7z z&W|=x^eqK~tDtr`l&*T4;o!wy^d%8CuZ~tzh!;<&}3CC&M(imRu?#q zEmV~o3@?DSX2o0$j?QcsRebMC?7M zvp(^;vc$yXo-me_dYpal?Bnm|ougQlDuN@vZd`TG+?`8}F3+@51PwBu{bAg)DTemZ zPQdHvl#|h=1knxgbalzvwJRZON5$iu(94_{I?Fnyo`Ru%ZeD!z7^Oa(^aaf3+j7%+ zu3Cj(FKNtl%%FA?n;CO3JQ20w*x3**gKe#8o4E!xR8X^45OdJxgiUhi#fq#s!m-T! z>qg&~jd>o_!`FS7h0CLvF{84CH^!opj&i*a>J{~OOU=_?f@(F(nhPfOdDG*r=6RSu zcMfXsVK(6yv~+KMvgEZ(B;DTEL)SLG3K@JQMV$cyE3Ze_b0EZaYEb>w+eYfDH&P-sUc@B#2spvt?ycr8H}P$gEf|KBpPcsf0Q4@WoOGMq@zGXD$lx(e z59Pedc8b>NqbK7D==FGyU~PVc1}ORF;CxKK%IpY#S+eDo%IIg)JA{7eigeajfzcTE zxU#&;ym8&l#&YnEJjy3flqbw!lH)4hoBjYS{w}jgh;FINEP>I&c5hd$;Bq_2QP`Qm zxM(?dZBop9e73pTE53?*FO6jZ3b7|f(DJ$~s8TV0>zr@T@*Rf(EbEq^J%coNV@r1~ zQnRPyLZ{Ck4IfQHvBF}&R2l$IcItTcFt!nv>ob(4yX%DKoob!8cGM@+L%Qf&4e<}~ zmPKvGSN6_+X|kRNZXpu#i_O<3GciV#HVv5W{cMgFP-t&D%|LKpuGIl-Nqs_M2qQL& zOyYtV5fvUmzYarKtJL)<`frqagB%=C?KTg$x4ge6pJA7)7x$iN7^=2)Hy^!+50v9Y zz1ArNpI^qluFFj;VDko;z4@$4-+0)8?%`z~jq6#*LA4tg1_oJ3RYU^xG{f{URC-953Y@*4QNuT51PK`u1jz9HI{(I)JPtK=;v6 zP(=yO-+2#{hy}a|M~JnkfNh_I7YR){T(F+!4zYUh^CjSq%&yi^l5m@77ghJ;`+kE} zBQGlCJGgRc1LH#MOZsTA;T4+G^cc{=;i{{n3#G7E#J5YY^sdkW{vp3mC=MX#kt^oq zGr2tFb@;w2)CCYX*ltM*R~;p3-qi0}g1E(9GtggOi5wmv;(X%WKN=MH-b_6nLKp;m zdPm~w`CG)DR zQABOFQgh}7o?e#)-fX(UJC6LI$cgS8h8y?cyNK-l^7jCX*8oM*zQMs#!X?@st<_jR zKj>N%wgzQv;J!yfPtc1G%1U8zhsV$MH{MB-aQe6P)PIL2_=RA>Sil@B1@8TIcgJ6m-u6K>US^Z)!YvB(k^iI zJ_$i@o(88j1R~$w_uQ*j(@XGu%rEJQ?}gu{$w1MS9+EGP>^T|vUZ+lOM!7nZ>lYP} zKPn*556uMQt@NT~QMVrI`zBz8=aL-E$#L31(Cf&+zO*Rb&lUdGsN81^F`eTlc!1Sb z)p?Xp3)y0}NK7#C1l!2A+M-hZ_$Q)CSD@Z0<`4R-kY;xu&D5(#qmGUmWE)igf;2=P zn(=Gv*wltdacXAgxb)Ozt%~>$l&0Ru!U85`Dg|=bA3G_c*vpUjq0!4~KAV1*n%2Wo zEDnT6;F$o-5Cd~@%Y2a$N&c^nmVZ)F;lrk{WhA!;mCt}s5PQXp$9FK~2iQj%!)GNu z=1Od>MTRxK&Z!xKyv(981!>qLRBX^wp#IeD!_aLgSaiSi9NHp5IzNL?MGZDHh8w2k z9fJGJWZ(h~F_>5ALm(t^LQFU3n)?5)kPtJ<7+~+7C@X^%Y)h-gif`|jN~yYPZQDG7 zw4DW}Dz=aOWfu<(Y1Is&o5_G{`68w31TX)w?$CG(Ie8YG zIEMf7o3I|R0l9Dyo3&Uc0U9p|CUBeSNYuMb?xmk43q)N>$k(JdE{kH4uY{(r-VZ4c zU6?b)AAD_K&KUU~B8KU7U8_h6I>ZZt-Kh>=Cd>nYePF9<+y+j?^p<~)7w-VnX&E~~ z_dTC=8HoQlAZP8ZRZh=d6ahNb?=ZpFPULq+!bl{~U5@4M#gvm5dAf@=>?CS-0J^XP zn>z#6P=nCR9y~B{WX)iNr7)?rMZonEWGBUiO`r$djaV+4U$nxWdS5@p?viF;Vh9s| zvEPsWXyy~;=mrQG?qO-IA7_eg67J}NSJK^K{=5@)0-P1pZvcOGWuG#2^Q%#&s8G)^ z?b@~oB@ftr^zC=f%2}t@3T9U;hnV2h$wz^8RRNJQ^CT8+Q)9$Q6BELpZ#SqHVi*Zy z1eC25i*52xfIflv)j4m+!W7TbmsOc_P?=1U(StV7(UnDInpr>xQX1&)5 z27(3Rt}B>nl$mc~rnVP~nBT4^%I%%dsC>RRU6suszRoh8vL#G=x(&CG9>J`Od-}%U zcn~_f2gA2B+RS&DD1#49>ol&624|L}?-FEKRm(r>VR8cB!itfe*Q~*=XN)`aL~5`Z z$|``D8c3z*aX4u%BX1;2s@y85(eDkHW(wZm1@Kn=RKBlTr_$hJ9|RlKq$rZ7SovmP z@Uu*Vn`(mtv!#bmTdzBT+M|>i|Ms8GR;;Lz$CaB;RyM}O9Ows zUr(TnZff~e7raR|k?pCAOlm?3?BVSnUBkQyIR@53NQs<8VkpY{6h@4Q7U(9)AOVvf zEe|P(IUIv&QA*9tn8daVSvL@^_XbDsb2_YWP3E9=!$Dn&Y($LPm61WcNLYg2mNV6G z_SFgif`Y80ONP+L>d2u(QQfL7cJoeLwG~erGL5;eo)bNa_cQ#9!%v)^W!V$_2%SMv zeSP^*=l0oebash~Ix-fz{lGf->Tdyb4ihL|eAaVpo}(6R%AM+O)(gMiRxAq_xwlbA zeryHxfNRH~n2|99%Im*30@14rBz57stJS`Q9d}5GphV8nmgn>07V@%tzYi9=ZknS7js8|Jn$5=Z~3`}JSCxbtM&8OEB>DL zuvmLuVJ8Q!Pbk0N-a%s@7abn5E8p?vrKB|)?o<6ji+clpYJR_`5uz~f%XBjn0_v=x zDh!W7y9uK8t^VR*G5N{`C#C3SN6T9y{Bp-C>nhvBSg-W+ES-BtQ3-SdzK`Rk;_*?_ z$~Tpg`v81!$b5s6k`0u(KF&V(0=;?jKg5mkF~e&E>_-*WB)mrwUU6f+JH$|GW?e;d!ZZLwxlgZurp(Np=1`HR0Ht$8?{xj;v7F24$)C z>zTqIq>%L#Q@JWNq`yhbX@NXt+W!GNg2b30bYZ3zeG`srYU`Et$~Xv)nu=EOEJUs! zqa>4VPf6b2%AE%anYACpZrdHKlOoDON%esy>77)-0O8*ii0@=Dk?=ml16nsH0DHhh z^Xg}H=VEPJ*Bo`!3{PJZ6zgF_1W1nf+MK4dVa7FN-5l`T!6y|3m%reKsYB>DQJzH$ zU#@!{S43UWYU*OHRrhj@t64;B5jFc#Ni)v1|I*8doz70hEL>dOk_=B=<-P^OUnUv|8jg8_`oUwe zj{}2T1cLs_juo-LxW`=%CFgL96*T#b_UhJd0$|k{b`5LAnc@`eafv_RtQ#(hR=c$e zN#c9Ijz)jI79nODdaFees@Dp=fk0I8;NW42noWC1X$o5|iK5T4n~YN(%A#~Oq?>#+ z7(F&6pC!yM;jgA>WO3qD+cA=zbOzNa6GI*&-DMVGH~7A3*k2{=$+{3_(}k1$nO6zR zqd*LdTZEGR;Qba&35|8(X>1~aA%Ih*{#kiTF_c7UcuwTI*9DctkwT(`i!?N=B?pna zk&*(0#}&kuIj(!2CuBE82?p}Kzmbx5(74)Vkhsu>?WMUB{Wj35)dtH@C&yCBVHA#) zqChJjr?{{rSLIvmok_!UI`Wo@uU7_8w7mGc(mJ+4=0k@?wWPZwKE7L+c@qLjsQdPn zsWCPryKZki0oL5Xwj_NExQOiqS45&V_fmvV#W*@bcD1zmU&=f{(tc5)x8?7Wf0d9C ztYtb_9QU63x%^y&l^2nv;i?Bu=SJ-D%1eDd+btaFd$G8QOdS2SBf?6a#?JwgL>CO> zO{lYOgqhy(ya<`WI?7y+l$yu!-?gnYX=QAB@=80Ng0y=U%{& zD|iTv>x!4Xg=b@(f6$vQ0?lr*BB8(uxxAkdly36Ciq0^c#8y5NrNA_s`F>Totqok; z>Q!q8#1MqUV5Jj~KwXv!8iHEj;b|wFRNw^(>ce;m&pI-1`MZ{k$gnZ3dDZuW*}?Gy zu>Ynoi}WF*-rF=a$6L1hf+~~Phw7a>rbX4*)O*Hk_xH&}(_=h+47aYG16Hg}Jguph zeo;uQFtdWCpPHsQbKf`9HUn@5rOZM-;Gt*@ncM#*)viwN0}Gz#O*ERE_y>>N(y03c zOVaqbhHrLihhI0SQU4Og^^FdJ6D<)x z<;hMc<}JvX7Nq`lMa$h~rOwny&&~p28M_W;`QMMsu74G-!D4c6(xDf^n;LEM=Bc?d z{9YDK4@1A^+!c^bJ=)TlQ9 z(b>$BC0j-4tvv5j@70?KKFXNL^nsoO5CUos2@35SpR496=%eT(s!&XT9o> zN)Wics3@YM#8U-YN>AoFxyQznI6Y1y`b9FSiSe}8*Pi^Tk)cb3oSt)xK^1Ys2^okG zVGVX5r0FQ@-fglPkXGJmD(71FazKpUa|Req4#=x*DK<4=uwIpBGIcK5tUe>ZC%mAi z!UnuYVAsx~g+e1Zk{s3+nakW&=&k&IY12YPlLDQ-8qnCYEpZlXQ?8qehpS z4pKLZ3S3Fn@*(86{B*Q0o(aB~*YFQx2GU$yzPj5KhgdrA!U44mBUxAqG$6vuGPYep z4pJ=f;d$}KXiu+~QjJlWka5J>AqIciiVBfBDBCX_So z<~@`hktOkyX*&a~SE+D2-uv)Hy*!{m4`X|+r>z?`XxQg64Wq8iclEJg;iuYb_dqQO zgAUvJFhX6Tyt4tMxJ0T)rN7DvAtD`Fwow9}?k@)s_`Yc6iE&_UJjBccX8&vZ2Poa< zKd1{ZJA$4hs7YxJPdM(MwcS0Upg6>FOv^@)XmN2|X%QSzavE18#zWK0=qS=u2*=Ka z*b3B}V?~OCY0$s8Yh?dq2|doZ=}4vlGwK-U(o>K@73xYkQQFBt%2OT^G;ZWPrc-%e z?aziB9kq!v7%h-} z6XbmWun4A4^UU88)H}Qcc0-So)AJPN6%%Spka&#QIB1ihz(PmO8DWtSlDrH-V{}E! zb3Nt0j0@~=8N2%@BT~7EhV8|gc2nGV7@KBA&JwUU%i6^rNAL6!^2{u_^LLlDNjKUs z)L{SY|JO*ea=RBj^Qad(g+voeN>##Wp|F5!Q+|Ej3cRGKKUL9qW$Fys+~`lVVSH@tAAW%c*c+T zIR({xWV694y{@y+^L%zaU76r6P&@cJr`D#32wOuhe}tQ*s^C)IlB;!co;+NYv%IU% zQf}77r4C`}0Mm(v@d`(>gQ@n!c0kI`5wNw**IBMjOj4efs)HnH(c&>+xxS_XR9}9b zVd!Y~^|w1>IfjT^o2z&cwGb0DMkTcPe5C46=xrd`AZ-gx!P4}rX~%P;iRs3nDkge* z16SL_7|z%d0RK}yLmK)@9|6WQf;MbXp3we~WS^MFk*<&8a#0k^wtF?$PnfYJ}0fqXvH%OuKY zTpC+;2+80Cesgs)Q`s<_dnXVzPsH3XM_=yM$w*h#-Xv*qMh#n)OOP6Bnv(S=1)DuV zgY_9vg22rvQeeK?0&r6DeYj)s1?->V$trA*eUit`E=? zg1|+q;r2an4U|t&+m&^bW7G>tKUZ%9zTccfC2?C6PcK5$H@{nL+Z9ozrPh9h{|fLt7ZkJaP1B`_il$1Wr_ zMY+Ui#Dq*q?)>I|PxSN=!TTvHR?T2wZfr$))$8<=cOmW?mqtAufh5U22)Ft8mxL@d zu$PAE83K^l1<9P%LQg;@Wkt}68^R5-by-f;3>M#ofJl7(Zi@;qk-L;wk#Ns}w$&1R zw(w^f*=2~0=9bltg8dEnbmK8oA@VOI+^QHD@mq9Va1LqMB*&DjXHTofTv>J z12gJA`l+-t@g#0R2Q_Mh$OxUpPB_`=to$<6<6Sv6sb|+cI@W(F*?-Hr&nA{aSCb-| zAhk(k?u!w=%0rmkp=F9U%2Vg8R~Hy{>Yw0oZ?STfo>NP=qmbf4%_QciAG1Bi9+{xe z=t!QOhiUqhqoZq64Ur;om993w8=P~|S`TZh7;X8z>+F6E>?5;EP4Ul>ed zEIuSig6!!0{uTX{$jI3N29b}RucQW zuH}bt+6fq)qB&nJDmc{JvSbcQ)9oCV@o~34P9vmt80D9R5>H$xQ1nxLk~{QHtZ1eM zhTx3FB`n-Gk*7!^C`v);=P%s2;*04TGl>OD6nzkc1in-&dux+xi+1W4T+;wX%i1~ z@nzzfN9z+NU*Q_~VA^1E3+iKzlAKwI{}dclsP>Fe?HcB-5z-U#ZWf`M<*XwXkH+J_ z!BL^oqVu|UfF2LK&+`-&#=6QF+;rmmMC#Ab2T_q-D-vKE7S3R{lkfD?sSu;BvS*AN zE&=b*U1F`XUXvq%cQmZm24b^5lNcu2v$H=ML0fVKU)Uny zN}i*V=mHhIhM!)fRk#OO+Z)uz^1*r*!AFc%#;>q;WxuZ*4q1l6n~u zpiZOlUD5kKv%&{dFBUw7GFD;kxB##C>OkE`Ru;m}?z~DxRnw>y$KyQ^l!x*!>#^rs zbueEi_C4t*^q91>|2}C}hSp!DLA@oZVvr>sFsWjEs-559gkEINZzQ0?5<7+F3`McT zKF2$@m7`}!b>hgTb?PV_nMG;W%#_3I;ic;yqOJ7!7G|1dmGijj%%w^nLMd?X>jjnH z3~UGlWyLI$@-xlYt(WaEV$5dEPo?GoV`bC(v_s* z%|8K&NzLz!O@jA!pTKWjY@M`*qhYaHVjq=Aidj#rA(c19C|qI7*CL-Y32*6Dq@8!m zpc*4aQz27QwV_Mt-NGK|FKJ-c$Jk>lP#z2fe7`_b9VI<7$&iWoY%`SjUQ!5A5B6KK zPBHu+$`a~8n^5GlxcIG*G4H3_>$ zhZhmM0)(E6`!doE5oyhPti+c?jAqTBkR-wGs&v3S78h*lq+tKS+(EoS25c|)P}O5u zooVJlSJ8%dYL_S%d%<6&wEW)5mXPs7kHQ4r4_#UyXT_V8Vp$lGEH$s*>Fc_z<{7kNNUeE%NYr;!T`WyXa zwiKf8oQ!r%4TGXAo!yQU12*BQRu8WO#?oU9{IZT_EEX2O4-wCpPADct z$&w7%rM4*Lx5dw@1zo{R9d=v7dwxj1u#;IJ1&Hy7$zYdy#%#e{joGdCb&x}}qqpxE z9aSopd#0=w_8Hz&W&{SU(?1iOh!ZKb8tVkEZs8}}!^%zLpZa&|}@h3+@RL1O+t z-M(d{yKKU^r!+`eGzRnfNjtU!PMEdr&VAjV>NPx`_@{H*7}VzDmHQ-A;&H|^oewgv z%S<7P&fDU18vo}0vru2*ycwu+JIX0~!fz8Ic95ff6Jdm>{X8cLpfQ5$;^r5WeM39P zj^MYcX^whL(VPsGh+ecQ;L<%04|}XV-Cb1My+s+~DgRS0SvUnHh)PGwgJmcJKLv@U z1C9!+o3bklp;3%-o#AAAIf=KT@w^P=4we}TC!0&YhAkePXw+9}VR8UH6<5tk55#>B zoN%k58-Ztq9pPzNMYyF${WzRaM(Co8(P=m&JswBNuLFg}9lN}PNak!m53Mnq&W_IN zy;xrXDaJbQiz3C^;i1z&4Tj53#vVUTT_O*B@)wB=`3 zuTg6CyGFInjg*_K4M$DcR+FM}TIvyg8bq_t6gGRHAxBu-;`UY-2m@RWrj2jsuvRjd zV=7Xj^R|5-U!@wDv#Hu^x8}|EkNTt?tV||7{F35SHuNA160e+$=K4`v!VFBs=bU)+ zuv8GNUx30W7-YSDbu+N-k?1uS4{ldFEgj%)f-C~p61Dq<&vR-ZPAwyLV#jKBv}C|hx%l^<0b`O!w(JhU7VTRqNY*=m-RRCE|4(S9J0Hb|c;EG|kBg-+xDWwQhX~^y+te$W9quLx&xc<7 z>dr&W_$Hc#Tkp;K6qdssnqd%J?|7xsgR&ayNsmdi@YtDG(hjD(II2+eWKze@?G#dj zrGOwn#Gg!$S3^e48g zHKC?eB`9V-7&8)=#e9@c9k9BG&dsJmc<34_CS%ABd9ql=EvN#|%Hk2#iE(7`+$c?~V1+*iI z__o4C)>fB`IuVK&?qVhGCeKtN4I2+gM{N-A1CG-p5FP?7drgc3YfVruuH3D!en7=y zfnl4?q;P8~kG##oQe)9_?R_$Hc$vN`5Tjq7;PB^9q{ABZx>!SvP#&ym@7TLeDPGb7 zvxl0b>_mp<5truwZL?Oaa0k+J*(1-bj(8~;dYS{s= zTZCciRW?^OK$<)XVuY9m2I9SB)O3IX(lE*$3g$w-dOUbK-5-=|-bkd!C=^PFv}J#s z_5O1As2*7yopFE6^)?~r*SeJ)NIvYh^YnGL#OC}Jn9s#fE@qQSwkgg1Zp}+RA8w=igpX2)UGuNI^`4b2^sjVb+263?nWutJy{aGZqmY#m@iZ zxJCjkxkIOaC$sOcMM=yjetVD)Q_RG#zpN?~EM9AT>cmc>F5m*{!Ld@|BUO#x$+QIK zm;*3UIBQO3gZL-FXYYb*=PykM*O}e`SaBK628jzmS6ufG2`v4L3oT*)I{oG}mf)ui zKZTJLHf=jzu69TMq^N9;QDYb;KVVT# zLH~6J9!#z0Vgzo0C(G{G9JHCN@j8bSpuF}I-H1Rakz zUBK2cA_`%%to|48yy&&@5orgL5mz;TOt15m#x&FOAsvk8yqx(acAItt1R@q^;Icu? z`C}NA&mM%G@>JGw-{Sxu%2lruP{g8-=@saB^Yo>x2RFPL2&9-MtO{N}@=|}EDrm?d zH@xasMr+F*wXHMj~ z&}{4~Nb7m+v57{`U7}m(-P-FWcwl*btCn z|4OVU1aQv&#S2r}8@d&V0_LQ_@%gz2;d%b)ckE-V4;1p9Z{7FhsBO)Pek*(&RB`L;k(dKccJs5rf*HG>7Lm!r@R3MN{Oy_FZ-?;CW&lJ* zCH(L`>?3WiZea~AekA)tVjGgXLdj}~w~$GRQ@9FIxS#v)oJ`m>I@7#!At#_l9i7s{VLq zDmbV~(A==5Mk-Xm0yy+aJ6}yYRAB_v^EZ1p~~nXo!$lHsmqRXD*lIYhs?HkqJPF z3`+foS7ev!ZYW9{YNJ@2?jj{J=o^Oy$8iEm@~Pz26m9BY?+2O{mqjaxORxGvF(_Mt zvge3hcbF8+Z%p1|=dc3r;m+FT5D|UaQmPLwkTDjWW!>7~RN7QgT2#M39Nb6pSZFM8 ziYE-VNsEYiVOPY22Rc~w<2`yE(ctAuIlY$&dSq^#{y|w^z`$OVQ7?5M0O9wgOyQG3 zc!Q)@+rM*W^3;eg^7~==rQzB(FQ(sT?aw03l?MRH!F%#_k52JA3NqwYlrkw|sQ&J) zmhjj>k4>gL%BuE=bR;llzLe4CFB>*2HPMPxGtOY-qu=;c4u!hwY~9|U?TnX<>6OXh zqDTe6odxm}znN!>)6IW2)`?C45{d;R0XRX!4l;nO8Np1k)GK-jMbjnO<3 z;uN;!iDokpEwIO2`5`b@zVkz#T?v@oU+_@ZNC=*$mA&)D#kyrxpR`bM-)+rV_`8Fb zGA+Iu%@lv(#^i=K?4mX~1}uObU(ck^P7?Rf1j58Ld`$^SHUo&%y1y~X*%yaqDy@%f z!|W#8XT-g}Q^oZIyH5^_@NEi=LD`YWoM=Pk9PpbPZ^U2H%UWuiMTVChzfB@+f775_ zXS(nLgW%EUK!Tk=R91I!gZ(ZaF!{_Z!j8-i$qK8uvy2I;FL>BS;ywma?*oe%pd1ls z>45eCQ)6cN`+;HFSQTGlv2%E^;4_TmFPc1JA>9bGR>PyIVw5*b!IxRt*9sm}4w$S0 z9Zct^@O3udnGnWb-7rl@w&}NmYB&?h%z&HYj*=3mGlX!daL%#fe$y%2G zQ#@C`&Jdx-RYw9u6-~nYX3Y;s^={~dAe)Wk2=wKU%k=i}Qw%ls{nL@QC`R9vCeSpx z)j!X+X3hOx8c8g9kP#GHJJk@k2hCF)-%|3b{S)o}qVvNpda!!KkRw&+iGc z+q!zzRv@SZ35I;6|D;vy+Co$w1q*2Tf}N4+3haLnJ{KluLN79XBSrqov=KE@2~0~kd8)hE{)Bj zI0ZoY02h-bk8K2Nq-aYASB-m!MJ`7>t?k7pM6k6I27w8iL)vYyqsRe7wl~~gWtjWh z-wLODIdi!ELyO7;&+=kzT@J-BEuTjEePW!lnE(`FtOES_ zkI)##9)zxU=;8kG0kjjjUiXT!|Yw7zg1$L=d;IQcTGHuR~b})Tfwe z`2r{%hVCcR_v~Y59=wRU>*}IsbxTpG_8 zC}yn!xeHTmRK4Rp%WU(f;R`ibkR^ifqI)fxC8G2Rk{5U|{|Z{eu*;GddDRDF7~gy7 z6!kgHNh&l7)U35w5h7I89-jp7Z!X;}lTUbuu{X@rtcdA=o7LFZC>GMnr&RgwO7r!r zC;Hy7osr0Kgr8h8YL$T7?`NfA^Ex02Zf?=VXk1TJe4HxGMzx?8G3V&3g0=C|vZQ*? zY-R*4s|@DdAHo%uKt%y1=ULrF;rDP8fu6QG>M(x`5`z3p@b<|7GNsTLTI6-t9J zY;U_?Y5)^yQ0n}@Mrt=8Me&5z_TK}yU<`@t%Xgn*Gw|=aXef((!pA7rgL=TbOyQFR z)y-taLOdZy@dvNpoQ?a&W%=fIouxu*R_nO}>x}L0WcFo;^>b$(ha^UZj)eAsrh6Ta zjWloAYkY!{Ksw=*OB8jJKFs+hXW{(*^u6XDV38G7RPrwKK@Hs%wIKZ&Hp*z9Ev$&;vOY8w&37XIAIOO?rntRh$Xi% z0Mu2a^-1gvjFMx|>Zu?~2ZHnZmFBZ4u5C~BS*P&!-~2fFdPhpI;lXM^AHcINW646` zaE((6=B!n8km$t;W0(V@M%Q?NI8`CESF9!jeG4zJlPM4z6mQ==$rU0*bZB~lgN(6& z-{4jM6Dunn+lLZR2dAUK~GNqVKM!h5GjU>H` z?xY*35$j7He59CR)r*d|aTi&L76R%G!j-Y&;2AIUH8gMU0I4Y?^#wahsCf!AB+zOj z{9`~eZ|xZpLI#laFOSWOv)iC5cPID2d_zDb%?1d~0g;yH$p#K0Dnc$seC6G;u`DMV znN-VbdJiZ%`>(m5BW)c+!K|LH%E@8{AVD1BmN#fSH$1&88i6o|aNqhU%E~rVwK_<%5=(a#*Gn zLuR48P8@)|qJ1SgC~qw&cjMp<;={hW-Dn!f<*m@8yFCS)#vVJ|(#8U{DVPbar%JI( zb{t}~He-9#@Y6;yf^W8$;?c3K0k1-9!UIz9Wm%N`3jPoP5hnM~D=EqJK{>sb%kl4W zt*OT&P*_G7pE4}cO^X9Qg(UYAk}otdIv86jr>WcN${OMr!3)Pcf%!}H!`66b++_X+ zQ?^Z~M#A++Y%wYWefB)*cG`6yRTe@>$V_x7;mnd{3{f{U)#TdS^ArELpEzY)=qH5i3aXV+v(YX7WwfctvmY@EJ!T z!P1iZjB|fG2 z-Gq75x50i!U4t^a=adwIj0=#P9OW;^rZ%E+V(It5; zCa|$cs}BvEy@rNq5&CZtGWrh}9F{*8--Z^mdfRAyM-IPH=hYNb8WApSpJ%>_v3En$ zoW#=+0WqR*;I)Jk#>E~KBn0(>UtdCg1LCQ_n&Rs}z!ssk-NNK7#jjGL_Gu#m2(_Km zFNB>5#?dJnGhnRL*m!JL)9D= zi^WuDHG{>X&O*WVBS4LczgZB5hu#|K_PO@P{mo6^_?s!uw`w5R;sfq7Nt`8EyUC_| zYvlXW>vDf50S>W(1+xPZh^`!cE&HYMuwHh-%4~Dz6aJ?8LNL`g^yt6pYkP|2mQkZb z?C!Ui?Mv@v2>s05iM04PHJPQp;~AK(8!}i?Pu~9} zENV%EGNu72FaujVLM@d9=i#PAJld*X|L`6x5~ zL-3N#me(G9xsn!6jsqUe7+Pds>CE)b*_05h=R2B90D^cC`f4zOGtJU9W77m zCTdlT<0@@}Xf>{RFAgX=*1^b^Nlpqm^xq!=8dg(|r}MwZ_+&O(cT1&wKTh=%5C=Fu zOllsfa6RrG63LJvX=GF*wufvEsB?3xg9bGUjuQ#Rh!j8d0OKZt?8~@;v7d(}8JMu# zq;6@1R^~TRG*kvVt18PmRVv4YNB6e&WNy^*uKFBSHfDhjvwvrQm;)eXaB*WmRk56a z2ZC(rsIo|T^`|U|$sRwpjw0=vI6p!6?tys7MlSkGGwt)Y`JWZXKg!ANt;esCGd%=W zKBT?Tq?PK-x1DF^jw`!U*gnY|DG=EtT2mK`&p=$C-dJ5)b;jF-t9M`@)30Tbcb!`S znU-!?Sd#j-Wbw8R4C4KZby0 zHVZ;iCW(pK9NE8hT|gTk11xdmW(ixLlilur^FF@j1~RJNG_ps6u%@LaH40>Z2T*to zLiXz!J8sLiEj^IZow%6#8Qf`6KMpo_%0_x@dd#x=k#=+n5vo;5zDM`+S|}`TE~?nW zN$OCYlAZ!TrmRfFl%Lj&-|3iN0$+*il4cdtym$2os&)H@pDhu@Ad%gEQ|SMdN7Kb{ zhEeSEI>Y?jY9=feW4-@u50Z^d5KjL_6wkR4{Hq^tGk>_0q>y8#s$PAF;%*gLIwnv$ z5ts`MA4Y9?FI32y&v&D|tH=LtfuRCy^+)=^R9Fdpi-;_0m*c%~*4!-0mJ|diW zC!gGXt;RXr5F(Z8Bs;?OW#Ta^GsLJu(qQ)|X3ooy!9{-7*fgiXpj~>Y(Lf-eMf4Df zY)1^wE8#S;Lhe5hf!8D?g86o2;*My&V};s4fxiV$_U2R0OMw^e4ozsE$rLCrCorps z02_2qF(`qRwph=v_1EG&d4YiQ}Jz@-*yx~3V-&Nt`- zkGbOg3kP0l;|goP~y|A-12Kt z`vBC!B0WA@3);@`fU;Tu#g%;OpO_sC?U+{?uyI>T+5?IgxOUd&jCieH&1*B zcoS@wnzI1Lu#}XHb`J0yCjK%n`XK-EM6xsoS!R;^5vH+zshymVV5@%)k(0MJ6;_Zl zzwyajYO$b21(!H$I^5VqinoZtwpUng#N+$5WN76V z?TD3Qot#4h$xL%y2+`YrKUp^h+!A#tni8H736qa<-(*l6y}@9{BjGUMp2St3DkSuI z3wsHT3G$<*nUcAX1skWXPl&kHIXO)kX$8a26vBbnmS>k9-i4d(bH^GlINdloWnUW0 zb$InokkznaAQc6sh{&sdV{>;y1{U*br5fcu zi0sIzptpB7&pfC}RZ!Q3s#R|9vVk(lMUfYgqKjDJ3@#`dBc$@jKUCNF@oOgv?vx-*-l_Umw?grYXng(i6|HEW#Ig`u z2M=V(GsK9lV?4D-HcD?fG4ArNrm#bhX)o6`ScnI_XfTF!4dFBM{l;oIOekPPXt3yA zCi7K6xu<$@JKN9rF;IcSxT0-HD0@wWg!}MEhO5X*I_NATPrO(IS)XrmW@1xl_SOH1 zu)A4K069DXaI^m;1255UEPmn|{DNp&tYlvoBxmGLI+IEjx=vG-uc1yBLu}cCy+^UF z%9XZc*V+b=4HypGW7!;NDx6s-$3PsjFLfH87fEn2`0R)Ac{TG5APEYXz>frp?JOy{u= z77xd^RM>%hY=iJXU^7uB!w_umGF*}OQa{4BejX#j5hPXY#a1G5X?wP8wyu#&tXwqG_- zm%7pg{&tt&PlK_SB@_Opv~Nf0CDv=yYd`0PAJ0EFXW&FbShoUDj1x@ zzudkMpV?<2w9uqlJ2r2wWj|haN5ja}g}#b>cdN#fnah{hxa;G_&mPCNTYg#Q@ze`` z>rh^)RlkrPAT%B|@==T(an{I^cZzjUIJ?{yBEPKK2S%s(!OhaD)rkrENVx2deNt96 z1xMBSb2+t8ZZ0-((bRIgmALEMFhO)BYx_QDS(t);0|@LK;?6@_*vN66LlxcMD*_+` zxq`uz=+(+8_+N^g6^n5?#TB4MaE3e*aynTgiFJyybwGk&z>UbQH{z?K0|g}Huy?pG zALq9Kd&rL(0x{9Dfl~!YEP(nPt{cQmovh89xb2wGZoMDez1Eq2X|G155YmWf&%Xlh zQB*iN+EYI{<5hy-%OnpI50CCqBEYV~Vq+0gELhoxykeJZ6slBNvJ-025}9NN@OAvR zZ!WnUhve{17$Xd)&>=+&qI4lkf{!nRb_&EI?1s01P}vKyT|J*wm9@Zfc&(oEq)Dzb zQ{-x_-w9sBVu|fMdVJ5+QQCZOt>2U-i@4B>lYleeRVS$%IA+natibb3Zrbk%V1ih( zER;;wmad2-dr1s679&7ko@z;kGsxrdmXmZ{(-#rPHRjgi?7OIro&)jQRl$%qcWpqiVw;EhU*)_6`R!Lrm0yT!xAEZhNKLf+fzp0N`{i=uv_@4 zv{_ku^F7OCk4DJecVvOK4ft1F2|^s#uE(z6go0cYI6$N5l_?z zY%^Y8&tooQ1S>^?%Y3esz?5H#Gd&c^ zIA#{fNir?~G*qqla#&y032>5;03E>fN^2e7EYO_0Zx6KWh)^^6N|(3)4=~4a8#}g- z6Tq;)F%ADNApzWXT&Ve~UuO>lxS&CA;%nae3=^ByQp7K@p^~(p)pRrQ@mP$uJFrII zV^htrYq*2bQ#I0N`bbgH-GP!ALXpQgiEUYWRVhoYQ>O01AzYdAIvzXnAtGU$%kC^T9Q#f?qLa`)bG?E zUv5H_n-&KJa^@HJoHEhfK}=jRXKBUiw_V1B@|LE@fcLbJOa|zyuh49TK4~?C^^ek2 z%riOH4JK4`r`zH=IB2XUInh9PXJYu6w1oI&vWs?M5Fg^e&t6`1+~mHFtwvo`6GEzlFQ@4SkQ`WLkbk3`K>pFzj^Hka}!$0W7K>=mCuBo`U z0kRD*QD&#Bhx6^tQYq&t)JNDri*(C7s8bc2T-!x15XzJ4f0J$O;$C2tDPfu3|~KgNJ4C$xm492jma3a|c};)U%| zgZNpVqZ#zgTsm?#phhn^L+wl-v*+EFQ3EKeoP;Fk-v`gA#uT1u`D!?M{)0=za8>81 zik|i>Cz*NLP-heHJbO0)$HPpGQ=$M-dSn z$}1O4%6yygWd?-$qR6XxQ)CsKo!ClBM}4U>16l&j?yIbK>{0}tOOiubTpXqRZxaS z&hzixs~{X)U`TltKXlmFry8$pbyet zB!85VRdL-&r!|fD#+1c!D$DnZD_~}m9X#Cjn%*zWT=c%b6rVKYCD!XUFkkX4BI08o zuzPZvdc$%-bRHVrJ*`id#;Q1g~m6w$) zVbfWr&HZz=Xf$s>>8SO$E^3`_~!OHWpUxY=$_uf1VXBk-R``w#yxGnWOX*&;$_%7K= z+P?t)2_3TwP6!ELuLPV&53EiMc$DijM@>4B-0(yq8Y&=6%sa#_ z3UL`{zhxP%8<(34y}JY92;cz1$w$hX^G8|^8pH(7%zDlVgP&1y3S+ms1YPd!=(KZ? z>c=V$O`9J9kda(ecUI#649F_03~*aU8+MQ(%2M23#E&^aGeR67M~aS!oF1RuuyC%if@Cg^Fm-YHVL<2Nn90( zTFs4{cEi2Jd0qpjHVvz<7UWrRK+$+eDUb}SP}U3r@Mb{=r=nI5x*W67u=Ep$z^5rs z(Je7K?Fr36BzqP(70Z6nFbRM-i8)j+8gc;Vq$qY8gWL?e-ql>J%+TLhG8pM{7RC7 zxWY}1`{vXE9!;ZQpn4C~MejPT*TN`Fr)=!lDr&>zrQ$1Sr(_>}P_&!S*vYdN?QIK2 zP9V2e6s@&hI!q8Dgw+ny>5~b5!h3amzQNQ&$I{yZy?n^N-ERyXdsYd-ux}%)Y;~W; zIzFC_^r9NZbr4uWdMVU-#G?j@h=T&Fy%75_SSNhek%W(7~Pr~4S+_x6hSjR*BHEk6^0<%BC2>jb0kuq zX{oIx+wp$W;X1jMEtD~ykVPqqvUfw;MPyxn@15u91Ip0yg#zoP7_HBg18#;W^4-yh ze%;^n0wJEI8_m9BOz(QDvPzb@Qin+;2_zhzF9$E2c!waCv?fCmqx<@wSphEQ{ILYc zSHH?CWjWNhDqrSVDS?|~+ChywSTqM}lI5Yz)NN#7AY^-QN5Cr+gYOO^A&C~d0;t!% z&R4FA?)HWh&;AD+d%^AV8H%dp<>sQ;IF6jFh&3e}kyJX6D^AGAhoLo{*<`_fa?Bj> zO%)E}z7eq?&I!BQ-N}A&t;TiEKj<%fNhsu^v#qQucC&Q^8+<_uH0BGDab2r1;My59 zC+&q8kSDx7Y>**YuV~0BI48NNi%w4R;U>SK7_NlR4q*kE3aw~`0y>2|P+vvJM161F zjC)e;(0o!O)y5t2x-_q!MLsH=P}KaY(8nU`bR0Gjz?{zt0~59W@JykKrqsI(bn)&+ zV?hJ`nb9v9^`-R850O6~c^ijBj@SHMQkg37D@)O)eezT5)`#?1rCrNc(hJ1#hZN!C z4%W8r`1z9dNMBGEuw0=bM1~8Eam{x*vJ~IT%LtSJWN~R^wU7V_>ev~FrY@|kSYYqF zD$(Xx;yWOBB`9WXas#h#m4fN+sQX4(Z~@O!{@kC+|Br7APr5_DA!hct&lH#ugsGu$ zBtJ_I6%hJXC%#`{tl9H5co^ea3iV(67}%doD4HKE=NpB|NC`~KEg<$goke8m#9O&B zN(1VRa-hk%S1PLn%UAJf%8My*HN;(CmXk>o!0Zw-Rt2A)!xO z2^+?bzZhj8V*qf%(w`_0CAzS;BbM-FGjz^Xn3x8d4p8cf_$_^fm(5S&45}H zRcqvqqbu=F;|M!_3aLfHl{)dbU^u;Q)kA>8w8LMtu@Nk>h`UBcJ;qgDvU4fFM;DU>|IZ`S}+L z7={;TJf2_^;uA(At36bUf^f%t^nRlOYB7cAozE$q%+V^cwpL4(yRwA@#ItGjL+DvMO(3%u z)D`2v@~6qwDI_1$qkK}V5M((vSjMCEJpDwsWfE3|tK@l2ihk45cz_%Tp>n)Lac!{n zcJJHUT(}Yun0prT(gY|^-)|7dx3O2GZ74^D&ID_#{!Y(e`fENwXwdEpqPaV|prD&| zKhR|*%t#Rai-5r;=+WSZMSc7+jJ`ug`nr+)0RP_Kr1F?z-Z#mmk8u%>hszJ0E(kIC zJO7fZI~*muPk_eH2|6hz;p4TIz0-+woy`;5u{$MLL_oXPjSbCbfpoAw{6hp8Vysz& zn~UHv)e7*xitPubP_w7y{+TQc$(uIdw_IIWd^@le@@T?ZF~pu%y^obYWEntK92bY& z$@h#z2s$SJ4h5_fU|W;*sULX21+*|?Z3BjT4%gtTfhMACLJ8m3}49Irf1q`H%RfJ`=dF$xcCJHU%< z-q>>ld?O%qupafesKn#+C^mkbyH48lQn1q?z}49*;$MXEWYhT)m+lC(ICU(K3TMHr zeU6Uk_pO>ft%v{ZEjE$eF;eNqP7_F}8mdvlzW(~o@dN4;z02-4Ou=S=O3xi&M-g8f zZ3Z8MqS6sqVJ!z))v6Dn|KUVg`5IDRR&RUBXjP{)S<+Q)lG@FR38~ZqJypiIiL!Mx z)K61$vw$h!l#)%_IVXA`Rh3rJ4y(qt6)xxq%sZ(0fdkYO!x z+?#Q5WwInh9OC&CKW?h;CAw%&yzy;(&TZP~)o8v4eiT~FvVv{pdY34E5l=ui;jJd_ zsAS^zmFm7Bl4BkN35mYWL)}TaQf$g3JqAmqm|9)SogA{g#NzGR3*s87T&_q_r>fZW zyOvCpa0g0px6pyJCI@Ns4^~+Bx~{b^1&mZml$tUU;%Q>@OU9MTUhUfO>xs%Rg?8br zn?Ff)N+YiIdkNwv1eE-*FtBAm3i~*)a{{AL@LTCWKmMi0^+x(0%LxBJSEs9=fflGv z(O$JJld@PGVV;_zmL8DM#aUE^s%MGF@UsLl&s|{L5&W7v$OcV*_;(XS-lt8avZ?+buYwo#a zFw5U#KwN!LfD2QAz}t74ipTdr1#N7g{$&`G;rO+Br(ub@Sa!TjcK4Wjb5zrn>Tc#E zR-~8w-4n|1< zUGudE-(1x@TyLIv=qr+BbVxh|puR&N55Xr-Dy*s$A`=sDS)4}l)|ew6Bddq0!F&WQ zYD^;B+QJw~Cj z=jKseW;T~u;W*(A6C#>WW?IaE!d_JHm;f_C%)f`u30y6H`|;hy2UC_W^o>-zMN;DI zIy`%FUk-{oOQe;oC91&J&ZO!(b3-_HgC|YO;AkwtXGG(8SR8$})-?iG1W@x_M@e@&|a*vjx^f+8GfTB0@0Ry@erlxCanGyD~cZ@*6~h08nm>8 z*j|N?&6<-MEL$VMDq=e=FSZWp(Ok`5;VasUc*Qb*<<0MKOp`RyPv*wF#bO9xqmsTh zW46`3%ZHWs78HD&yo;t#60_19k#W6Kz%pG2ZHrOgfRQ#OiCsI;mXn4nb2~wl7gDIg z2k`9b-E$e!4yw+EAZ$wptZB6XNx@qI@sjd4$ck=`Ik~6U*5i(Uc5T4(NVF489}Yc|F`l zQwJk2(re88=wOs{KkH9JC{~CG9(w4>dvcw?egk8gl&=?BR8;M^`>G_oeMrr8GLWnv zD&HUo{tT{W3e>G2#Agm*Jw7L(XIWVcc9kEm4joXh3Ne6lax*w5*8c5bc(ogr6WdSTV#$#;HSm8U6^L&#Mb^3QAeJ!0d64#UC3XLK~ z84P4nG9ywmj?AH7M5fVb`=qh2+a(pkOk=zx_`E%9X4@5An#-T>CQ^5D2*oDF6kTbX z1jYXjqf0h9{Hf>6=nKztVY?#sk!8^FDpzSNo?P4LI4}~=dKfbS95Glru&*v+o^tSIU|j0|8US7y7E_?NaR?(&KumiU#e;mIx1PlsKR_GP5ciq zU?UiiYA0(JFHf#G%y*|x>WenI@G(b;hl2veJrf0Kjr?UP2JSl@BvER&02%0)qb_`W z#&CXC@X!FRD+D&RyOev9oS;9rR)`b-2?-~=w*$hI0q*?*%|bPQm?JvQy3lZxlR@o^ zaCg6elwxU59p5o5m>_;j6eh1?Sz0UC;>;Y1*M|3nB2essg!{sM{j#Y^^>LgS5#=y? z)=MmUb<_rGDK6km?0SRDfI=J(eqJ$|dip6- zQ%`9MqT8T|5dWFH(G^XcZe6;N`^#%p2^ZtgO`tBc9)hamIg<4&$V}JtX zB;YR@OyFqT`#)c)Eh>-s)m~k4?L_n#IS=z$p{oA}c?Xj_%;(&|s5&ts7!#A=VSTiv zVyI=AXUQBSoKGpM3c8Nbj4+hVwx>yIJuq>n*R?>SD!+^F>l)}yHx_C0o);30mo^Tr z?rOM1-pu0r)j%FD)kZZP zy1tG{9F2Z9kH=6}vmY_8n+T<@gEi4yh}L^um9vbA{3#UU@1+snCW1M8(-Y$gvhWdj zeN#*jxf{-tG$6=bU^dGOrqrvk>W8!2^4=`#BtwR{Fq&^%Vp}ntsBlSJs-k#8Dt7r`4oq3=l&n(^U$_wuv*+iUQI9i+EhsVE{Y{ z@j3G-faD6MkJN%#SHH2C^`;sT zy4|d|Wnwp@&-|NBdoMQ&6=I9e5pYC3BuaN6lS>Sl$Mo@BD;^u5X_qOn5zd`D8{4{ z#P7fg&};bAZ8v90eZAjjmX$qFQ}APUYjT97Y~iAK9v%6tKCl4J{vHh?72E=U5UU*R12yY&Bs#1Z44uRAULzcw>Ma)Cg;tRDM zzw~1`*?{OT#39(Vbm6PzgY~QEP&aeD1xI?ObXG9HxnZ}1}Waau2~VVhhy(!sVl3Bgy|+K~8;6Cj~h zuS|1px1o=hZD}f7TRGHK3%(~EHWaPH)cRs+th%Grkg$q}XQPhC!+|~{css@X-vAVO zcu#-!zk}l`jW1e;rch|<9s)jjQI?ry8`=^^1*%IzG$r}nuX|iZ&u$9^?oByhx$g$5 zA%YdoZ1SuUIvOL;iX_jN7pQ zL!tnMuU>#DTSPH?L_&fdO8__h{9ibPA^oNrt!B`~u-K-hddcLBHQ&=esxC7j)bEjb zwb&9Q<-j6fMQYWy6qvAKBP#4s5^>CUnN1u8C99W0kcZ`BNOMUbznepk>2#g_zZ*Ws z4^e4|W!t2xCPsal4wPswVGEg9B|6PEHsYb56dO#Ksklh*=$?PixQ~T-eu-6xGb^#U zg@da0FL|1uIGH7^Y$ytn<~?Lz)4@{8W@oj5VXfdarL*F)?TuWlm)_~RzRsC}UBOlUgq-M==&QrbJmm-vdqt&NnutiqQ~OroBl;Yx?<&=K@ytIrSP z(?1bsbP{x_jNr6;5`hP$0oKG_sy&%*xmMSkasS78a)-}3!rAS#^b2{@o4CmhLYWsm zb?spbR#c8`Ua$82>2GSroz6L=h!i37xN>;r!C|hsmX~bK_vE%P>tw80OqX4QO&w7Et^{rLcq-S!6NcR=NM9M`NggtZY_uu2sN0K-(y2ekN%>>hq+M( zulN2+;TbdSo#tWv)@s?X99t)}mvN4!e&Gbq-neuvY&S3a=n`QPz|k254B`%MGn8+P zf9!4bKz|}2T;Dz|h5y322!t(g%$mNy8j)MUM{HFv;u8xw--DHwJD>|1SY=t=G6;gXI!hXzvEQ4P>Y8q56Gzl z!YrF_W{cHYNES7>oi$9}C2T^NJd$5M1AUy|p8{@OByI?{>km6VK@946KI4oqk16AV zkROPXVqoTD30AhUZpR(^xbrciFZCwV*$u7tvHU2Ka;#^2vh*~&wTXy)(dHUC6<6a6X57Z^$;5)ig4 z4<`QpSUpl7(Q;bj2o&K%srt#uxXMERlhR1u0zMw<&Zee&*oN!8jkqqK`ho1N9WZV# zxp7#HMH)2O!JoqJ()D;MlNh*ByAevD!V6%}(^$xNJH@}(zBU8c2Y@2ORL{T+!@Fk& zzvhhwK4!&^e)o;QW9l}UCmd4TJo)?dJ`nIn6(h)KR3pHOA@Zck0PP5~GIlv~_S|_W z1q!=k&wscpClT2`LY(&uqBZvf)u^QGT`|t5DA{lFAFu;BVN`Q_Z=MCJZS{aw|K;tO zAO}N&C7H_@;iW6y;UV4Y6Sr)~tIc3Uxz7z%rV+|P+VN4~5lByQX3L`U5MJ_RFeD-~ z1V+Q;t7bWQ5!8axzJ+>+6cv-3Bd*^IRK}d;JQV$$ghjou!DbWr1+z* z#nuheqM#mDutRN|TjS@k^P2N=H*hQQG-%(xCTkP!WZw}nU=(bg-D}t(J7M}w3pW}N z`IfpyP}-nCUL|lI{_WsL^=BEb6F?c<{?2!XVQ)3;5L+Rj%xh}24#Jpus_bm)RN4nM_Fg^Gdnq#e zqsax#+0l=kTx}v%()2$V&U-t_NhoNbCdk-2#QofKnu5q1p~Pj=AX3YYmJJk$T94Sn z-N5S7j$nv{Wc>Fs|6?*QJU61z7x(%WLF>hHiayh$R8OnFQJ$wkl`c1euhIh0`VwwC zLz;vkAF)?UbE(+Hvf`h!eOuU=uX~XK|FJk|nhEo_r=l;u7n* z|I}(*GzO+Y5g_ia8SU|`a?(VV_uk?=+F8U0sHCa2Rw@?cb6;BTHGFU!l*^V<6Q+Y<}GD>SJ{l|1R>`&sE0#YNF-w{wEhyFrae} zk36C$Q;*#Zb`7FhsT03y7`|bqY?;BpDo7decXyc@jbEs?Q$H!dA9;bbfEOQd_g^+- zVwN4m1sB0)suSY>MAgF8QM)%WFqy`*g|s~0LZ!%I$tAby^8!PzdHM@p#DSntyne(5 zOYQvMhx?mviN%ktAt(txu>4XS%bls%B5cA0*{mvJ+hOg)GVIEuTNEm9@<`J(M!J~_ z;|b|^JKADASwz|hEEaSDIPRziXpb%93(jIp)UI1`dx^?T;gsTdguYkJN~%-LR6 z*EO`EC^7#%i6w@Wt9HFWK1BpqlWW0LKxtf~+lz!DZ^L7L`%1c!-d5Z5C)^HN zI0%R<->S=X_8Sz~?4Xd|94H6KpHj94;QJ#nHZ5OsebDNdVYw~OeE|OW2ID5p-H}t2 z#Cy*i2`YB33d9VGorZl2p^=W&gCBovmzYKa7lBYM+(2x7OAH7d(q;{inyTl(Hs)jK zZ8{=&sQaibV;(bI493k)NV9Ayd~XbmIZTCzj^lwPKn&^L4%v_)QZcCmXGeX#`QL^B z<38;8DqwIV`Dpihxt*cn*79*$l`=Wz1MMA{j5WLd9r}`uT0#3JuocJ{2!WG898#OU ze|TqFk%EL^L9LAY>}FK+68Q_pbqHt2D%Yr*g1piX7{yp%G{m017NR{O_JUbP9M#b@ z%_}B4GT4k)$bRz))xaAjZEkbdjG0g*04%qU(G)5YY2$q41-(|{mx?o?2N@;4_h9Fe z{QB^j#r+>cgob+rc?_wHx`tecyr@rlZ;-C!&>H6~Rx2AgZZ|2m2ZHB!Z|yflU3qKN zaRdFB`l8F?aY*JwLRLNlF+KTrXTl0%@6b-66Vre6t1ay$nvGe>Qxjw<+X}7Hsw9y> zHjbK`JZ6KKQ5IQAXmwi2BQ$w1^F_9C(fw#ip?jWiHGXnu>h;-<Sk^NFmkH{NIclqPS39$=aJwX~eMRygxNfSP4W^Y$!fj(JsL8GJ(U46?O zAK(SSUth{zZe7kXsAS## z6z{d?qQF1ZM85an;$GDUXO3aZ*HR$pVn=@Qbl?)z>S6#XJ0atqDy^)Z3UL@W6y%XY| z@-dxG!DiH~<;_BQRzTwu(fU5h+3^9i0RN5@WOcmG_P$`UKeIu#iWwb=5B7Rv)cJTl2dE1eSQLvi3C?91Hs8{StEsKdn2k?-2FvAJC@=|u zVd2ZdNmO71uslD@|M#K0$qZ`kggs)19-!BI8J6Hp9HW*s8bn^w-Q>~YTAFcU-FrQL z^|exU{Oi`}HMu0C{uouteg@(Ny4TAWVQgUDW&RM8tJ1!3y-?F`i^g$-lP-_4LR)}} z2-=33xaIZurO__T@AIXOz?Mk26y%cv;tv!HVe*jd%`dUIs;Wd{uMCPwXGoQb_HSS# zBaetax5jwnB^Dg7A?p@_S9$@{Xc$2cWEHNp+xOS~@QO$8VhtbCs2qqs`fIYkPD_1z zj)%ooUydtHABx@(y;{Xs!@>2EOU&y%xSNO6=w_<6)6fq`1jiH@qHAoLFQ6YoWTw4m zONsK5ZlAqTfj+AquE++7<8%$AS%Q$*JaNGmIIAXM+1mq_@L+%Rj=Ej!^H;$q^_HOH z6n&(#x+aAIM*Dk|;6R9zOGJ2rC9Auwrc}{a0Q4O#0rqzh!GRZFU64awct{1RsT7Cu zR@l?ZPwh*PEE^Y8{#4S*v{q)t9!qnSQd5w^`l3{lMPkE%BgZ&#;LqtfU`QQ6AY?t^ z>qKJ;T;X^glY%O0nJ5c5`|JNNIr6XYt(hJqrJ*S2ZveaJ-RMVNQTmW-LGUf5OhtuX zoeHKKcm8V0fyke$0Bv4^MKz@$kyosxSHadot1RE-aw4I_PG7spB_Pd5MG`ft>ui1p zN!)E4r8y6=`V00=#tS(pL6Y9m5FMWpg^pmsTI5HWx>06uz5{<=mmPv&&1b%J<50L2 zRrE}(f}-(Ue7vc72zNU?9KLcOW%?@yt)tiOgHDIVjjw(1*ZI%8wt>-i3;C1>OV$z2 zSULbp3QJ`kmd1=bJGJ6n`oIF%&T<72j#}OaZ_V1I;hXz&c}!{@tVP|lY!@u$$n>M( zdG!p(K9!<@@leRXWQ3@4`Ysyz+;UZ*(0Dm>c8?+QBR^z?LQN|dq0+Uc`Ytp9v52~+ zO*)m1!UduHCO7x|>|c~p1QrvRgX-j3svnzS#ww_7r=!`x8EYVf+D@;Zm17YAy@^Qu=HUU&>Vu!5zgLn zt~d(yX>T4(q?Q&g*YaL4WET*=J75mn?2IZCsX|*DQ6v`oFOnizU^dITPGxa=UhZ6i zupJn?@Mg&cd2u_SNel)P6Wkz7-vLy>jt4 z!Z7)k>S|=Y44P|IS|C2@B_!9fL}_ie9L5jbs^_amw*Bt%@Q9be6pZ-szZo$1tHmy z5RsYU$}`9e?r{1)abN*D(is1_APNe2zco=~tV+2G_7=6icCHh+yGM%|?O0^n@-EZE zPs;m)n|dtAz7&Xy`mwqs|JMW)snccppRC7-GP{mLWiHwG}l@AS?Nd+oZn!fHW+GNxQx78%kd_umkM}l|UavL5m zG+&eS=VbNP7y2Rqr&kiy_}m>y;Pm-hA~{<<2 zK0OTSn|bS!QxZlU|4A4%}R4v2MZq#_j>Rmh76j6@YfsF4mgXpP#-fZgsgq8ve6g>X~^ z$RT~VwDN!gfx}C)(Eg9CocKVp{*bLbA76fp@fEJFrG#>{p`C&%^W0;*X}FCBFIGR~ z)5F3k9_hwxS^E)In0!Dz>hYA_PTc4xK!m3G*-8E#Oun&HWl=BHK zFT#MDVkQ?iUgW4_z|84JmBep^aqKE`n)xi%sgzMDd)8lnSe(}mQ>1nP1Lb6@jE5;l733KK5Je9W zTX+-YpJLc2m%Fi~D*t1jk6mZxXGjbsGEPCAI#42!O_F6?79~qB9ucFFYQBko)|E0% zVU));E|b5+7E+g9dE`S#=+g5qva36FMr*0u>RGim)x)?OS3?1_%wF}xRFGMP8K>5y zyTZzbj11zLHkw`yY^Zt(D-*55GUAJ3(Hp`^4!!$@y;DsKEtoW{?(wbhpGvA5Ij@mj zQ!{R~Y)3O-HsE)JO_MUj`8u>W@_h6ag~CEX>1f8!84v_mS4Np-gjq9BWQ%9HIchPB z0bCId2)h@;M(gjoo|xve_-7s(P^Xcgs}^ zaUji>%$URw1AjcUm|c!ijb+A;vUV*Lb=@>>_+h9>_H>dBwEc^u;?G3)8LE;mxoQtl zL3rMs&N`c%Z~#p&|1^$2dc#93DZgyWVxr{7m|E!h>Rv%mo*J%Mp-5kTz-5eJ&mM$w z8Qej6%LETR?%3eoK$aGvtB7vcA{q8Kz zSyRw7dYR^}dlZ4x^iF~SMhIyls=w%V20Kd6?2t-Ky6SULexLenu4yTv3h{{UIP)=R zo^GZg|BOc8tPb6tl6N`|cw&L|Jogiv1zQJ{NR>JsrCk`i^hdqG=WSz5v zFf6TASI#fJOAO>|Z-aV`{-CRgkaK2|+xFO)xD`#AFww)rI=k&W)w;j0V?r2+rP7yx zQ1fYLyPxNj6C2p==h)nPDk$KI9hON;)acBxjA>+2jx{%HC4WrBoxI+gmSl2|rf$l0 z6+MTD#X>gRWhsf}yEw!oTlL$bWwj{TRJXt~@>@oP26$|eU9?-u9b+?KPv5xaYkdcQ z6S2>s>$KLSQ$U}p_6*&uJ&^tw!b-SSP)B?e%@Hkov`7Xl(dxcRlRU-Irs~$OMOh|c z5uUd5jU-iJEYh|o%#A1~(SJs%Jx9tBX18YZ)zf`g0X}CV=#YyXK{(Y3C_~*}r+yg| zLuAiYL%Ub}v+_T<1nwBpNC{H5lwl$+fhhM>-X~i8K`ieNmiKg89uM^G4+sD*=6D1S!MIFiSXOpUcZ*{%qnt2{kvHHU0&ahVeNeil9}f|z9NnA$ zNYA*S*9yMG7{n6V=fLAp#rDIAMnV<#jQ`)aIH$k+6p~~qSDF6s@P$V=W(Lf=kB=?7}AN~eCoxh0p5wj1*_{fha zQU%sUmUX^>?$k1*qksDDF_)9K);k4V=Q$DL08)}nZJnj*b6(r$z^egM{h2osO zd@dDD6>)_kAPD7k(@ zO69=auV2+p8jalwL@0?6bu5>hTATC6($ynDTHRyrb6s)GB?E}JHAiYWm02sJK)bJy zj#bEuq1S|c>z&*mLy_!miC`WtPksif+h_)rb(|oCjgw-oU(xORw1CMo`IIQ z^ZL?rw_0H(4V?D#H)&?Xi}5#%1E%Kfyci7|4-KRl;R`n*<`}9C^ zm$vCK0&uy|oljxze@+3zqP(|3rDO)z6#$-9+fqf5T}`n7H?Js?)^GEwzj)uFT_`C!g0_N?8%hk*p=6J5{#JCJR77hOKj!D7bgi-^H z2#zv^$T_{8ZT0;}OVlmNc9w;Yx*X!3Z6w_k765FHN&DV#?i02aljyLG(HC;r{1mN` zDu<@nsFm@MtGh8wjD9(PYoOQit{X{;h(YJR5UgOa2`d8r!-3iB=&d8`z~@~n9>EIS z2D)Srf!oAau)wj=6AiSeg47=(bmAAG%)Xs?2ShiS7I^_}g(#Yb3$pdnxPx0sGfYBr zZ9U%0Qg+#6;;q)lSfekwiirWB65NJrp_3863kq=n;+_!F;JT}d>sFd(it~|WV#3t8RB_Yd=O9}~Ehq!b?)5ck54tWsQK2>x~)!A40{NdI7`FO>C zSqH1=Jefv|IzNKnuo_b%n9_cCZUNr!)&+TNu*ABp;RmQUTJ%0!k7L6(oGZot%m(bm z;wYqe+TiwMn1icjb&S`|sqY+Jh2_kXsKHR;xi;6FIOpq(b{_rdSxBDE$ySGIJSy%* zL5oPn?;OluEGovD?rD{8}4D}%U>>ng_=b*b~g#Fwl`o5cCBLP_IB&-k1 z9aMp#ICh<0{8D-ZGuro9qmplqa}r3l9~d6_<-M8{AJ4lV?Pt^8X6FE0rqYH-n&#P| zcZ<(Ecg8j?+*<1Q5P>dIfTuzQPIe>qwFOUfZXF*#63a)Ltg~~9Q+xEph*50O{{CeH zbqD~`bl+aqcNfR#LTu*W)e?e}<2PqvFU#L<#-%w}?S3!rjN|O+>){#49 za@;VrR92y7zL{=WBEU1TJ`=AvTzsP@tE8v;oF7w}NQaz%cxZ`UwWXFZjQ0xe2o;8` z?b#Fx!s;%WtYK)nzNBtm{|VQ3dj!bZaKK7{0J>*s8cWg5Xhx2&FRH@q>Lfaxy$;0N zw~jF`DR_cFR`5NnXf=j1b?*E}kEz(lq1TR9eNar;|9A80%C0<+JyMtfcWPuxcXj4K zfgU!^-ZrfmO!oOUv%+H%Md1{B@+n?bvJ@NcI`#Ux1Dpna8UoeHR39xw6;3kV!@?x> z3>S6O0+HU-$xQ@}w991dJ?3s$T2+~@qwMaMsDjDNcu?lp^WRbO(!(!eFllV5+3`y% z=OED8b4UE--LlIFh5hF1WuW6FF7 z(@(VZt332~7!@D=H`9$-tcdJof)?$EOpbaIqtYU+zI`*zvhY8#XT8ghvKCY{O1_s$ z$u)pzv%v@@=2+Mc05ryaUrg0NkWXLbs_2^``f{B5{{K@ke8hF0MxkcTeylyuR2&?v_F-9<82 zhcGiKEV$zqu!tugr8-N$?Q&&6Rnc3CiUD2ZQ1t$}mwz(5Ziy9xrLUUG(D*LSd7EHr zA=cRExDZ8f*d64up{cYz`alOWIEZp*@Q{J7<~fgYq3-caXYyIGb?meEQ>>o$=H$d_ z>Sfv418_D|0guA=p}q%@4@q3n4cbB991=-S|2|ewIf;yN?_$l_|RzGMOa2%YT zsF!6#3Um3CUxo^douihW-mMXQQwMnqwJD2yn~ymE%YV$E(362L7jmm+RRh1aaQAB7 ziW_grUM8>?qk>l%(yz1O=Q%|`WNO)S2X8L~RF(GLG@h>r6UeAfsQcFCRgQatCaVUy zuT{*t2x$IRd)l;Tmwd&!X{I9{>%`bkFtS7Gz3#hKc(qkY&=e>xW4 zE`MI?vczAwyylxb{h%Yq5F!7AyvoPsp1oaAmosQqGC23!P_6H2g%#x}wP~;BKQdj+ zL`&%-+m$j{bXnU!7belWr0KMtNSK!@F(^M@?eIKuki|AO3x}w>;0&YA35`-26AWfn z+OOG1G2?Fp7B2;O(Y`CKY{wHJ?`j~>tBFwx4QU{$hIGlhC~Vr9x3RmJxj{(w@w4(G z+_jiBLrx=8Ahw-g#_ROqDVm6J;|NRbx8{NKo1U%+vZq@_T+#H$i!tTN{NCr%Ggv&7 zTCyoniQk_NaPbe3wKD~eS^P9LJvUugZ~s0mWoE;Vj;)b2tM!C+ndr|Vgw@f0hJ0O! zcJVH>B`&e>lu;eI&eVg3*GbkXHv`#)n$l^dJW6(>W2lJa2J@=jR+rGmP1n zHPyNGhA*;WZ+inC!Fz1cf4AdBlwP4tkbVg`EeuTlq4QlfM+FEI^u5Zni)fQez9?}Q zB}#pB#!bjM{ENh}$`?V=G5}5>f^Y`H-H)-6O8{LGJl~R8ISMA&F5L~XlOT==7{pWt zyPIhdb2 zwRt=$RgO)5g&*FK3(N0#$jK5#9GPr;YyW|QPMb&A#p~M!tkLL$ohsH-8~)TBE3;&F zR>C^F<83aGiNVTFxmN9;^!u=Z!Mk}6g-K12iyEV(v|0({bGrWLTD|ruzLas9=W7<0 z!*C8oEI3BIVo2PBWeopOacC$$M;2Uv>~*ilhvr+oX=s_gk!sRO1h7JeK_;4*UIN*BiGRDlG-|Y*1d-|b{ko~cO?&!Iz__<6JU!vuD8Qd zX-sAZ2X|fY(1#c%*@JYW2Noz!gy<~HFqJ;EuKFy_sQ43kEI5r& zG8{7R7A8hbN~c__M9qx&^Q@$M(({6|`sPYpGmXNf0>$Brx59MIj3HA$U*S%Z+7I=OsmV=)I*i2?K>EG}P-E@bSD_<=BCtKNHt8JlP@alG4D z&IPaaoyGsb1kSv{Lam^ttmm5YO}~vx??Bc#b$B#sk_~|mE}5(lYABtJLlv|*cich5 zF1a$BZYD+4!sisAlyMw4obm7J6m^sW6htAC$Zj{8{Xp3W8>$y!yISf0`MgK|2s~D$ zh;7)T9?&mMd>-uHkaNNLZ9*-&Ce4yrtaJ+rklSGy<&fI=@XtG1=Gla#fKMtp?+P38i3lgnZ@4y=$IGOp`mXYW;4)w=jE-fae zXfbu+iCGifPTN=oNE;uD57t`M@0#C6s(cKkr^NfnEYl@bOI)4G29dtPda3GAem%># z5d(j%d6*F%m+warop=>NL6)6=V@BM}B4Ybd9yzPV|?mMMxQJaN4^5!Gv1LcEicO=v8K? zp`ARH_dWZx2(NW)X@GTrnL94!=V6EKo(zZyB{EKgff4ZuyX}|UepHDB`h?%upXY@e zbN0EI`quV14tjh+cp6>jA2Yt!au|Gi0ki61YkJurbY*Mr9NA83SlL1HHg(4RB)9hq zwS(`Y;{>P=Gy>XT?pq2-o~J_z5A_zwHqDC%p?LxJ;E6)G?s%vroQCTn2KXZuhQmF5 zR66}x%*4+qW3_2qW=?hq@252AwcnRLs>;jDM|E{&{M*RnXv&KxWnaFkPfi?u&FuP03&^XTI+8}Y|&yH>R`SJsS_t7i>;R&W>gIq}ORbPWYU6{74rlbi$j z{RuX?uOQYQ;#MTw3YeXL)MPDPyooiw^3h*2eX=F^7IWy{V*wR&fS;?vd424hw1n@k zwH|5QaDGB43052+Yb{8yY3Y`#buAgsgX?us><2uOmiH~pjTEobA48gf-xXg}Bb%f7 zCw!ZnzNPr34fL734BT&mtOsM8#OeUR>;_y5etqAEx0;_*>XU9jfY2KFl^tLt*`R+D znMbCDHQ>LH-w;hN9;vjI`CnxFyvPh2PcAgX4MtSFVsca5ILmIYHXg#p|8tm}?>%ria7p1*)d}8@Xbwo|mv%)_i1I zqB{KZvMgXY1}R|%Sr`Mnz^Bt8Bqop#B)M3?Id35H8}#$oogF|C0|{H=f50_Pf*~tJ z>IjYXgtU3YryEcZCc+YbEJ%JOdNKu(6}cG!I(`8l+YkXEVLymp#sj4xc@;$NtC}+z ze*6b|f_mCr{NDxBLTjP>rY%*15{kD#A zH2{hO&{y=?VUWX1&xwHxjKz$#q=u*-8`DjZ(PQXlb4pO}D$7g?f7w2o;3-;~f(m&% z(xu#mot92N>x$Q@U|ty9Z$Yk%4mFyVRgdWXbPQc{U^0KMKw?#9&U5aSQF#3QFyReW zhb*G2eP(~E6a$D(nNj-25YuKESr)b8g!*W;+{+hb2JO~MA#A;VNmQ3z?Q}4z$9mmC zxMW?vEIxyKCC6VADg^>S!<6k~RVnJLA)iW7_@R^Jizc%{24$ow+~y2r__}r66g5k? zrV*YOb{mgFuAYwzvHysZ9ou;p_NedV-0LiJh+_rhI#s_1i>pJIJqRwBXcUWU@C~4Q zH=|oE2{k}DJDBF(Gx#rJj51&83H?Zx3tL z6}mg!Zsr&UamjNE6$4Q__3yD@-X9)4fDkvDc?i>uU`XU%VyjKV-4dOZ_3qSFE;?m` zk@U*f00>D1Kr=k!1H)wTX*==DOc(I_ZEmcYmJAiN6M*^VUw@~40OTFsIH12Xu&@F~ z=X^-js6DihBGKwm&b!W0b6}{1<5ljo&CM#Q>kd*IvXY)O^j^^>M3A<{kn4eUNPA|H zAsI@imTP_R>Q}dfNW#rU93+;`lZ7;Urt=8paJV^`V#;osJp1F0HK*dsenq3O`4qrm zRSeDLyhJtxZGT%3RxZh#h0m~j#4h@!C~v9g_Be+bV^||)AZF;pnz&S(Oy0~vZAjhA z$S^+}I(3J{xe;>P@tcq7TEXTv#nH+~oI24fdrg5x0P^}OJ4#Zt{*Fnm=794D?|4z_ z(`ZrKE{u>)o03CBw<9-T>Haa(O4u@xdVz%OF`mP+dE|pL)ZUp0v})zSSWxLVxJLIz zB$laf&p8`aiw^TMROLk1Bx3=^#Ux~qVy~M@I>^?3DkdKMJ&9J@7ASY{YW}YSM}36Ox!s;e5-cn@oXymuW6fO5&AMF8zhB> zk`Jq)`3&ulf0K!dB_}RRIMZ{%?!HD1is-V%3vRa@i7#+%FFPm>gdv$+YYwzJ*C4#{ zgh_2rauO1TsqF+IDuk*+z__e`)twN<;CR(3HSa6f+8iD}WUim)?Z1{1g0z0Vq(9DQ zzsUxr&|->mG=Ro11MwZ5O`*$69Zh`dNp*SZ`Fp^cx3K#YyAtR&-ENcSqz) zk#3XnBEyCH#OYG5sIcTr%yS>#kW-k2azu#a%hZosxuOAU)f|HXgfIy3>gSR)F+ryw_|j^&D%n#&yAIYbg8_G{{~ybs)i zz~d_QN?w_+@29ad|6h^1Um7y;-8W(L7|J)a-tIc9Yv)!#&(W{_GUh>6{ya4$(MH%Rt+81VwkuGn~ zHX<~fx-dow1}!bI zSKQZvmh8GA$?Zv(T8c{xa8H#ncgl*Xc2DkxS>$Wxdd1d|I|$O03B99aLJFDkyw3&m zl99{^p)qA#i{g0aF2PVa!Y`iMqXKM=(UPn2ecsPts|MRsgS!_8&{&_#1t12n zbM+I#4fS=noMOu;BmwNK@!dqz7KAWmWqYc^mp-Y%Vd09S^~-PBvN(s2yCb#}l8Py8 zNq^T8!e8Bk&IMIB)Q@{B?BB&O(~S7Y+QUYf(~3Qdl8F|l7=n^`vrLd~3eO>RdEXbC zYvp8@XfJ8wKz8A$Y9%Ur&pyCt;4CUA$bMn6=6KePpfwQN2+8#iez$Jjz$9?^S^uwq z{2EX&9teQeKyX+E|KYU3kFZaKO<2%p#jXVm-~a?=$`_0#T5& zFW|K&)%6CxPd?c}M3^q)x2xxy=ntM8AdpFf4%dv(2-h;`UxY_PPx#%)GB@K=;oRziTcR}^8z)yWpi3J=8#B&#V@$xaLMKxS zEH|+62RAt`Bzt`eF-`r!`_Ul?se3>q0xd5AfW$NbQyA?>k1MVe$s?2&hT7y-kaPr4 zt^!)+k?bIk?7Akl4yqpCNn>jq)A@33srQB}z-w%yF)ecYH%Y~{Y*C|U=z(AQXr#`x zp(3w4Ii~-`ZZXE+um^ykx$&+jRomGl^ua%ha8P_}EXd1WCD)rk-p-gbVQYY1%NH#( z<$L1*1YC%v4=S?9p&>ZS>(s;hGDh!P=EWLT=XQeOG3g7ico?vve<{tMR2dN`Sj#Gy9xI1 zOvRtacaV(WOytCfQed$VH(UL&0FqenjGSxx2l~QZRL?2~QiZ6BrSgc1-#hBWPG-d3X!DS%|@Yh@k#zNsWXA>JZ} z+Zy7dAn|MgL$v(!&{vqk>?hjAkrqa9K$hU50plU0doW*JTxn7Wa>-P1i7dwWdlP;2 z8r*Izvg#oHwBlIwplL3fu0~7hTY-S_IW(_ew13sDM#!pvY#zps=K{SI@Qk-|9&B3X znlMx_tO`<$Hdku~u){L-F<3slB5W%tL1gF#E1(KxGSc zoLuP_wN_jd(mIS@Sn3FZu5w{xvQ~*JjB=gY{UpMqGVtPbg@@NK-Mk&!a_BWg%irG< z2!E$8qF5XnakSc$F6M$L57Q&`Fn;5>;F3p~MGgSH`Yds(lcn`)Tb;-zUnQwn{DrCz z5=Si|uaA|@9_?GzmV=Y!VJ&D(F`n61vSM;t(;i(mGUI!`oN7^+7nh!6f zPIQvuY8;jWtF`JK&?4YP%9@6=-q5-ycb+nv4mOWCSc&}k_1@0{H^ceUV<~b6jc-0Ps)7FKZ2LLi6AGMbO6F_wWZK9)PPQ6uAZ!DAR zIl8|c3gi~}g0Z_bhUd?jC^~EcN>7Bc*nU$gkgLCrvCb zoEYttus8bdbmVk7ES@twafjo}!MFZ4UwlT90BTq2Xs!VbmVj zdf+gy+ja(GZ9W$9tz6Qprw(b(6LwJ@QQ3yq@Fhs)oGQ{@WO}!^I$-jCeTt*3s9H)n39K9xkCZpKh=2*yY~3Kc zJBz`|KVt|BiKF%KDIAg+$E2uTT05yyhGl^H_lj@*4fIz03f8XL3HW2ct)seBl=!*Ef$6+!*Qk6JJ| ze1!XIHCH90Ix9(khc^9V_X%jppau6X;XLtVVVmMLfbH7B;%5{h9_m`lajivxqDkIj zaxppUGkHtx%2F@e0W+jLXkP;0C$fCZ`4M{+))v2&rn4cYq^apW144~r-!9wWqnJCY zs=i7UkMA{1)em@kpzLHOVlBXQB~cDuGzyibTw37z)I4n%Oe~h3*whY)8pJ)Bz-ddE zqgKcY2-Dw;tAL>%+lrN(MmWue{`BZeY5bUo@%TS%K}E z#o;>iWpQaeo|!^uel{^&Ux3;yb{*LEp#-s@3TcU%`R3<1><%r1B+TWByH3aJ$lG&q zzQ0TU^mnxlA`;Y~^e``^To2`Y;3C=0!0Mrih0!?@bj|xEkIFlAqh($&BDLIc#u@!9_wjN-Gf=E3cW=r5p%p!+R?Q7 z3ca!L&Tjs_@gK*^*v1RO;%S;)_dat-M@k;Y(>}v;tA=DP{w!`=ffl`1Rb83K_96&H z+HzjXhI<8m0R>UxLWVI5_Vd>soW`Bkp&PXKhJ{I>V=PBATAV!n`B~M7P)7dPN0U(5 z;Epva%CN3~tR~CW)86GpiG)+pg`()|H0RbH%P@a$979i67}dxEaIxZ-28gS3hLI0O zp<&Q$mLZQUL3|yKgYQU;h!h3Ai4k=vkETI^(`UYU6LcTY{b8(K5e3E?A({oa#o1V} zu4&?s4QcT6tFnk&&+V>$j;ymfv~jSMlA!dEH_I`{6{{zCUj=7BX-HK+hQ1^_Z>uKs zECKV8050^%G4xonXhS?rnu##Uz7ONwXJx1Si7$6FnJ zt@s;(Yqx%V-O3l?+m98!3i_#VxW{LK0D#^<1!y-~lZPON)6D?Z*TAA&j;RM#IW+ki zU@QyZ@U)QkkY-?$`aUfeA-{rceo;HwY|+HIb`YCKi%RnClN$fTf}K)P-t(LygA8eo zT<>b4n-~^F=b&qaG-RQhphg*tu;*b3<;KnzS;tA}f4j{5VXeof^4cPT3-0P(Um7y+ zSYxsG?L0+=8-;e`=D{a5kguMJTeGvxK+ve0c}q2Xs7QvHxH$=1bvCr1*8qR4=I$c@ zS6VU``R~=;X^9nuOVC!c9c2j`vE-%#DZUn6wi=*T?ff#(*ys9$z{wZ5 zmjOlz-QET?E?bR~Mryp;NEM|q=athw_25S*F#4ulZ*zvswz$?= zhTJmaJ_GnmQ@5r)oP6rZH~dDZZu(u(5Y6SHlBZaaGu8xunQ=O|vZAUD$vD|U(Yi(S zt#LwyrTEb4jbn2dEV7Vya?xM3rShekR ziliof-`>iW?dMv;0sEXch19Ul)klow+zVI~bb{JX3t<6t|HcASbGMk-v${El8Hi$s zqVCmi73EaC6x%3G3hl(5srKjUWHgR`js0}Gw6LuIfmS;(G%|6v(Z&Ue3*EK5WWi0@ zvxYK4SQ|N#5{R0Il)9cfPrY-2rW*x2dhCzP5XSowuRHyKG@JF2ywUhItuJEGeRd02 z!NXc%O0MOK*8j6M54hu(f@J#02=w6r}Uc4Jb3rR)gfOaux*451JZI z?Gc-BGafSCM@X#SeSOiOjx$E1^q-bcLSBmK!v2p5^kU`BD6qGK72yyy(~_EnL_%-x z=hIWP4@=`ElM3H44PT%oqVezN;B(udoYj*`_%@7F1kNXYTn8%eq0n^uCL#GrZV+Gi z!#3q6PnwcFz$3`ecOo_04zJ+yVA0tpiUQ3hw+5lHVDQHFZr@DN(!Q%9DjDpWz!dbD z8B4|d{2G=$Pnhocm9<4}vl#<{g2`+y-mx-1;8j72Nc*#V0ZqVd-~DYoxRAcX9mar} zH?#TSmoR}Cn>W!};LEr`1w`g^kA8DWSo#@9m`&0PlsTCvCr>1#b-t)f5WrHbddh8I zW0~P+BhNJKRjV>kzLF*DNW@s7P;!{E-FE7h#DRJi&|RJ{12BMgdeCNy{lxVz!@{}= zC74Q?d}x~W15H;s1-J4H^tIKv>z!^pJ$h%I*%ssk6g9&FGH}hJ^4+nVMEWCTJFIiW zD{TzgD6e3nql<<)FLrO(c|ICtSpKl2MY{QpWR0vh^ka`qU~Q}-TvwulxP)>1h|UAa1ogC568e2Fu2}a^G0XEy9%TFYwvP6 zIyA$o3o&~q7OtleZPadPgEciJDr*gGvP`}PBl6}bj5^7@84=3WD%1Uzq`Oi*stXAj zfivK!(QwdQGUIo5?19pjO;9pKllAl#V`E-23E#2BSnR+nNFY+0Lz6!d(UhKh%&G0vS=R3{22*3fB~oVH z6Q=HdwbSfWjJ`zgG;Q)u=Oc}{aL(#II*j3>8+wcQ%QEZ3nKcyn#IG4;Z5+KK>-&>J zh36t-N96{&Ms=~7joY$inG{=xPByGZ&e{v+5z0+?w2EJEfujsud7eALTY`zR=+1ou z|6U3UId^s}+QV1lfskV!b;H3u(HTj9g)H}4BbvVDnQ1V2w&rN0v-O%c9|%fYO|Xt_ zH`Ra?sl5O)GeK0IDmx+m`0Ro8@JC>pkvmcf%mMiDX9vKAUu2XBOvQXFG|7y#eA9hg z56HV~$SE~M<>uRge`rgU(AfEx~R6-xYyHu9&jjhPz;a1U)V%5sZXes%`}^cU&lQ2 z1x4|KoWeop2i$V2bVWh2Im_q-P2^6C;%})k>)CvDma07Ta$_!3;lNILk~;CLt(U2R z*Y@m(>9YJ9J5v-Eynp~k5+53K7KT-;a|RUKL@9-k&LQpI9?w!=UR2@#o( z;pM^RVW~X4`TG%C;n08(Q`l)lNg}+8sIp7eg$0in1==iARm}2gGvF6~E`I%3nywc0 zUIx7AK6{u2)5{%oR$a8W9G%Rh(POiN5ANjV1P0cO-bz5x`+_LvAFMIV|F%irTm zWlO%ev5XA{_;oSqIO=739+Bs_jd9bUAplidkQW|_krg&dY|#@l@>o(t8>P_yBmVdb zsy2W|;`y~Ez6E_^Y4Z(i8c7l2y^s9q-()W4p&O_1>~29yo(ID-4(Kl4sjQHoEqNwuK*90}1@1D3R21T@3bRzH=g?B$-Ia`t(aamn+`F=8x6$^y49UOw+1iN_)8(DuuazzE@574>s8?ls6| z_glnc(DYIN0(cT<-2CeVxv2uKuk#YYvOcMpws^ay)3lSb-O8z1N(mGpwcRuVekUyH zmdUoi07Y-ufx@uibh;5l>;v`;k9gRAC4UjZ;I8a+dp|46wdP(37J)FMyMYDc!1MIf zgsQ*WWVqrGVIm@##ZWPN+0~*rX5LuV*$wVc(yL9XcSl(jF*$)=oaeM zpbu-fN`IBxN4n}$h6j=$yV}BWhpMo*Mb3M3fkB`PYj3vF?>;6DI9mi|NQW05NHs0WWT=7CqZ z)TBF_^?pbX3gwA%#Bg@^dMtp56_)$6vJ$!@={yg?A}(`H?9GAe@>G~i9nz5fta8JS z3Spb>*C$$&>6hGmV|%sKNO_N431FVKm5-``FOflk=?#~;qq&3@MeFFu@iO`ku4oQ}mJPw;ov6xvh{;v?hMjt6Dh1@Hu`bzV3&CoWEjoSGfjO zT6dMkHeWpuKe8zp%5zda})kN|iDdcM!CM zB7q5(MpX>Rwkp+*Gx2c>*Yg8--D z-$EzXjNoOG^SY!yUzhCZ0M5@GktJ}s9Pd^*r?u}~;XoKgVzK{T6n}}dTj@X{0wD-w z*Lh#$$RS2kgS-HGxW#{+Ku#F%=Q4!+&>I5q851Ob9qUenMssx1O>e1FvSd(`5)94+ zkhPwS27GeiWSPhl?7MUvnN>YYu1L@OTmIHcE_|rbGg$=9R0Bt`k1@_`g%pdDa#6E8 zR6G6+NCIjT2BT?v$`;y?y%D0^j65k{B$Qbuv5i1+2X+TvYASHj-klwNr*iZt&uuM(*B9~2`3DW8re~==kz@7*G0Imcg}4f zQm*7Nde@ocPtv{%vCCdfZZFdU3&oASpoLfc>$r0R`A16-{z#<8nWm7Hx&$S;A*?1L zgJyB37&F0r1;U)SbN=>wlk#K1NWgwlKnFjA9hdjMn^0IGn0PNTi=}2mYZ?!IN?lu_ zrp(gY=^!>XYhiLBqlnL+pzSF4HW{dD0ezA;WRa6a%g!tYS?a8L&_hshAMtnc$~LeN z$B=0_4S(QjT+FEm&8%rs??9;!<7(bW8dO?iVei|g&ab>XF8WOnT?DG58E6eWXVrKe z4muiH@GRdEnZWx_gUAJ$^<`fO&aLY$sF1qhKwbBIVku^{{^0Rfl(;QJ>>vr&sL@As z6A6vG4>^8TLt3kY^SLBDAP8kXY>mu&N~IMKbCR#~G;u&7O; zOQVcV*fQu}lg9{(vkwAC3PC!=3++U=P#Z8nX0rD8Eaz3fg$A|++=m7lh&3sHC0f-< zxLum{;uvQ=oi~y8tfy|w^LIo!Xg{+P_{{x9z>;Px`exQj$&Gh~hnxM**{Qa)yG71U zcG9Zp(b0hq=CdfUa3gD}B2Ui-+P!Gt95_O{eEQ<27Wvf(yf9i3H3cc&E+tL!)J~WJ z#WpwC+fB+HMS^7y!T{5`m|kH&P4EQ(S+vX;1)6*h#B3hk>vg_qJ5H?ew}kR_-5rvs z7Xgma`pVQ)Ua~MdO-)-QA3DMm1+H%go9%;6+pxjB4p= z!0sjl1S{|fKq}Q?c*m%pttFi*4{ZvRd7||US@32R+@Od4XMIppeJ>I+T_j`j$ z&5r5N#xYr0jNlC%aZ8Et7{ns&Mz8W*pvHyh$>8^{akx~m?6J0Q9m1j|OukAg`_V2v z)N7pY+8Yt}PI`X{7Z^wf7f4cmt&(>t#fjS=h!(J7a6A`Qy6LZ5o%$QoES3psbprj zUUA?c;FoeTiT>@ekt0>{+|5-#<05NhgQqYksaF^+XyI=+GS1DFVo-iwcO2BxCn??Z zn>DT`RvG|gZ4e^bklwmr_plvFYGEKs*rH6wvjrH# z16Yh@RyJ!_9&58=|F<*k`Rh_5R@&lx zd^^AMRwa2~ohNfG8_v8%DHz(ruuao0Tbqaf<4A0p(Z-Kk5cDu zTeoCh7>EgFOv{2ChJDOs7q~}dGq3+>aNmQzK1*yT_3GkImByx6E-S8#y80Eqxy{Am zmW2sH@$Ke9ovHFEtJ{QXyu(72vR2#sqPW59EM%k4=kGsTKSjLfv84B2F=dB|+DF;> z7qg2ihLT%I2&=!F{ezpZg-WP#_2aU>PQau3O#bQ@$-`|ln{TX=z z1bre?@={LdWvtpVACC4V+E|2BX&}})|D70(KkuYr?)LBLXnzuiZHM;`V8j=^vdEon1;|z|g1d+0 zl9m)J!^zs9(_BalxV{@UBT_Jg))@~4H6|JAQ6W(gTZ%HRBxv_8S7J!=z4pGgR&vd;ZUM-N0?g#$fHw^YmNg=qob0YU}q&?%L=!--E@6 zJ!J$h`4^&Yi|71=W3p}xuAtE_Owj%RHsL;r3@j|}g^G--U76U5c&Kj%eIQ0)3bS$$_l6nu$6b7xHT zZDz4fcVb~#AsF4sMR|cKx0q?s@JSL|3s8)(VQ}k3`_N=b1wR0mgOTX<=+L(s2SJhM z2A@S~y@cNTPSdFDGKK^%Ac8Ds-o9F}COdisyN9g$sjPq#n=7U0L{By%P7o8g*!7|v zp+CBA5Po*Ov;4;T@E%C+fQUwDk+Ikx02rW4*? zTycY5O}!dy-3XOYhyL>?!;c|55w=52nU#)gke4*ZiI9$Yzu^4Sgy$7U*4$ynx5}>c zF*y6IQ2|ePEv?aN=F}-YEmOLn_dB;SG5{9W7Rg2ceo@eqO{Tu|!CDPqSZ8!ww^ zo7o~eTJU3Gp~#713r+o0(X`yF_=5mNpittgE8fB?(oCy<#y5-z2rSe7^JnbQTF_kw z*u^hhkgdVrvQ`dpPI)g)?)uL`3-g}RWRVyacGCXff0j|?cg);q;8gGvLT|p&<3CZP znrT!;zbE+#=u>LW8-#(7m%{|2DT=eNFtcU4`g%|a#eK$Y3o^u;P{C%eQ~wm}%PDS6 z1rhztyq4$Oal2T=d{VA-^XhT-!IhHL?B=tbnrb8j`@5zEO@YjxWY-(huLnK3xAy^* zl{f`l(Gs)epE>!q0)^#S;w~hUJlXg=_ly1UqJr1H>H82f-yDT|x5oT@!3$(gR3M;w zT4HoJeRBvJY8YJXg11rqev6fES6-dMfE8GE@SM%b8gq3mN1k!~PT9Q%3$^7P>TU~% z!vKPAbfMr5VE{xn<-h3eszY-6f(8ZSu;;$FbIyw z#!@phq62InY(u)en?4P^5OVkZ!kT(o9aU;<+_0Ex&I+t(H<}%sgpKYq_d>~LPs}>) z5OX*np~(!jul=6KAozoWGrs+o&M%8$Y)iNJkuU02Kwm#rT+Hfg$Ts#AN`>q+S!XK^ z#;1Wz7#$dIIMUG_Ox4PtXCWh}qG;9~C&cQUHP|G9+c3-%*LY9wbJmOc00<9m{Szy)&-@ zefLv7+`w->$V3_VgqdFEOr#_txXtTb&>aMTc1`LbRv}afqQ4lOqFOj!U>ncW?~If7 z1+tuIyhUviRm1bIGTt_J@cW;Chxg_4CzZ&F(eR|MOQEhDzC^kqxb8~uD-Pr!f_mjy zCO^mnJBeW#>@~RyaW*mN>ko(*xrZ;?jixlU#v4Sw>9Drew{IDC>yUPgYxN|(MJC`V zC{veS7Ky1dX1vW=l;_CV_|`zTNj`JD?y_dY`C&=J zy+zTlojJ5$QEcw1_i4fpFjqMsHuWEQ=#umZl*r_SK`}X7B$SvXF0OxAvN*|>O>Rxx(EDiK%JiKA4idn=4K-UmHx+SVNg7EgAPM5Sx=@}@7aUUG&2 z5m`6lYAtM=N*8Y*FNj%29r)6(&6%~aKfqAt8fBIh;nlvR z9@-2g_W01--;{<{VbkSWdZb0t4{9eSEgPrQOKl2bCc1DSo?}Qk2VQMWwyF&*v@L^b$s6_Of$i|&{d zgq81Ud4S#DWNaIOCM>irtUOtQcUgVU4HnO%jjrm{Z3Zs9IQOi{Os(y6#(&rfI3cSW zdSUjN9cuaQ=dtw}0M>qbc9(wQ4rJJAArqE?QP?i`3kuShEM)vLCDkO>wM9b?X+F{TJT4IJ*aW{1QsUT59Hql(Xa zI4e@&OMSNnq!Qx1+jMvxvV`VeqN_EwvZ5mV4Zx@VQ~pAbnOn| z?c#WkrJ6D;SUh_f((dTG@Z5hEPNXKq+T6@`6DIGE5W_^}_W=-RD2Q#eoSa=yGu7HK z);sM4Z16}(@`gEhITu@%YjRU2GDfYuM^wqEemkof%aekhoJ;FLpoOv4Rf`$0`VbZ# z+)eOn_ZMCd_gnNhdZ3a+nKs6d zgnz1KMM4TAKlxP>}L#~eN-J(-dq4G z#0#YgLvD^M!=Ul#DG! zXb!H_64W>xRyR-dXfy5G5jujo1B)S^=@>Tan{sb5K8)Z#m%o>JYT$-v!}KCC$(rC0 zXBXyd1?3a9u%@g9XxN0mZwQU;kPB9vTwf(aq^eVz8!PeFp#xXqx-k+!+@9$)%$b%gUZpBK&(digCA-c&CT3e=$O<2WXxxC%3zsT6x$>}6-y_bOP9D!cx zOc&?**u~+CHZ|QLOzGe_%bNj>>J^TfpHw--z-w6C#x9&;o_W03*^LQx@hHKT7@6s{X$5U{#=KBBbCFTC< z=7i74%J{D-C>T51Iy)E|JN}F!@-w}Ee(3NS*%|(IR)hhcf#KhC6=D1_|J_G~37>)S zKTOsill7mrKZDCT*cvJtJ89C&35n1u8M`^rid*ZO8VhRwoKvuM(swe(r~CJG<$ezH z@ca)a{xiaVI8nsh%E{P)R>bP3wUDu)t&uUUl(CJelNmleI}<$*&wscdYD8nRIdj=B zj^V;P+{^WW+WnK~;!Tf^DG>L}Q29_Gs$no@0r6Iu@9G6Z0roWlgJ=K_fPDTI-e@L ztf&WRf{~GOuS~HAotjE?nO2rm%--eB@Hr2f)w9a9^Wfip86x$QD> zC57*Do`|Jnm^0&J=%M4u9sHMk#CXNuHQ5OcxeNWDrF6~(wM7tAY_k)$ZQ{upQ?KP_ zs^~hlR!jIw;*g{ZRT~;(8*~9rize5io9Z)j6T~n`HT^92!j=O&)fEs+LTxdL7m4=6 zHR%fwl(UZQy!Kc#%*?`%9FD=0sa$U*v$3|~B_q4q{Ue7Dq5%m;^7RKvt4U{c}IxHmu&38 z621B~kzIdHg*^fVYEv-w;fVM3IN(*pa*_{WeMtq|q=@PWyGG$X7Lj zp2&W>RjUHqjytS?mcsuc&53*1ot)X2IR;XL$OJNk7@E@oD%s<{5#xzS$dJOBuP>TL zZ%Wp%x0I6Meq_r>6qwFpqu5IDY}yQ1YH}B14olH3CS8Amzy)AA90`?dM~Gai2@->3Wf!GTY-|VO=-3Ojx9! z%C#gKrCHZ|qC;77f$QIMQ2!C~Ccj-}oO_fgO#(t)ZST6|R!h~9=mwnYfe}l72v-A( zEq}HLOpvn%V|)%Sp8|^!R-gEWdVGv>gR#%hI3ZfMH1o^I-XnSBB9^~@vpxS5J-4zA zrmF+C1oIj>rE#hpbjR3WfxxhXiW`csYMmfr#PlN^^Y&$^oNDQRuQ-wGNGj5Hf6h=4OT7%_;Gy?=<_i_BcAEC1Rsp0O(y04qUSl6tBO+?Ie)--!ZJ`s5u(+ zxIAz{sVx0cfD!^`Y{|JXUgtft1MO#rK25dZ9ow5`YFnsJ>^?vZGWA(=g~c0jb8$;icxJKX`OXDzsD|7T-tR=Xs zbt+3U!mB%XuFQSg0~%;02sd(4>fBu3ZMp+Bsw!p(1+?r9s1Qdhw5q`s7xN(jwIun#&SjMEis zKlM~x1r2-PmV^LRn;kF5JBBbdVXCZsPf?I@V^A}5nygi7!Bd?oz9h#wM%!!?0Im45 z+-oSUa%OA_V8kad{VmM7fUBaxCRYXrVvm8${5&&c`W@8xK@s-c*-F50w0bt6+ zbiZoSg%VwU#?RDGLG!4EZfBVI@Ccn~*7$1R&##GRg3&(ovT^+~TQlKB&G1d(+p@@| z41XU@>?vc^nN=0D1Q2Q;L`$amXW)H9dUV(t+RL~1&sU+`vBUZ9%_`_`3~IuGi!E2D z!;7^$`vBYylCYQ9)it3|y#+%AcK4q0+U`copTEv?_x{s!k-ACy6q-GWlNhQM_-Xgh zJ(4F!$m`W(0KGBPT|xP2Nu{H>?Y&ABPkGRYwDdkH9p9U9ZH;m$ZjdjThHX>&?`~^6 z{9W(Opg@IVqpvMf~lJEc!YHkAIW*{aRL!ZK2v z=muDXwa1)Jo&o#}tJ+0@@iP3ovfVAHJp%P+j30uf?Q4 z42MlL=C*|oz?ZY?VE+|B`Uf2R$Ge^1#>Vys{QSJg{{=4ockmM1zk2+ikC*6wpwmB) zP=WS8L#O|QmzaO>(!a3P{};UUk2n68c!`yr>3_nd^}IVqOqw|xEbfpVqWx~uABCYr zT52d}$^tkf(-GaU*vz2@aueH?;NihHC3>`o4)tK&Mu#MX#hr1+dCg9Vq1?MV^U+AL zPD7?y7R_$B9SRX*0PRO-Euu4Afjw7WTelJSJI#c>F%C3q0O#b`m`?Jk*) zQ?NJjpMj8q`Pzl}^?*Zv&3we_&1WA(1^sNF_gx5LDgRh-_{RE%AED;3P1I3jF}{>B zXoJRe$n!I8+-c+nu^?=J!(mLG{2eJGx`5}<<^4CsIA_g~R}c$~1Ch-qrT*yQ*xsHX zYqVq_IsR~Za18|zhmbeMg{TlV;o?1FzZ9_SSCE%ZAz0f{!u%lIcB$Q(EQzT&tFHh; z8zNFtNR?@$pxl7r&}V5}`GW-i^#b;m2p8Fb{D9NVtnp>>sm&3J&_%bK4Kt86e_dc9 zz`f|lC}HxfYK(Pm2D+ELCEql~7}UaF29ts~*(3y?Y_XY?{U(AsniryUxS+jkN<=1w z+%sdLhXSPP5k)E+Recz+wyX15YitSvz!@1jQG=Y!cQxPq$J`pO1SdsWBY+}RE^9&& z(5Qk@ojK0ktb1o#O?)(;oow~`XVO&HtK&w2g_T%En6D$vIRec(WVKzKb*IzOZNBf% zMt@=c!89(EW^6kPG)A(XTS=PXctU5sxT6Xsb8POsgk}OvHig|vSXK8A9T90y8VyLq zkc%j#%uWmX;o`vLteQY&YCg>Z)MEuldk>p;t-#tS#iqWr%r5b{sbq<)mqLYRcCLWe zGXe7_RAi=(Wjcm1KTr#WY|PNXftuuBD1J1C8z#6f4LcvY`tC+?9 z-#%X=<_?Zd`1B0_BQas2r|Y zz7#bPG;0fH*{fW~R7zOxN)GE(!TqgeyB#!dg8@Jk)l*rsJI?_#v)G}ZA{m@nUitk& zvEOVgV6>n2yjb6MIxEOI^JyqDYhjC9&tNd)y9X+}V@Go1i?NzXOsstB<28Zec{Ewa zmI5}-S?P3*Xo!8n=`!r!68B^bXoqpL`I?_HZvk{)r2j&#RMmfR|Lp%Hu>bFv{qHRB zet=MvotR?}qS z7r0cl*o~Cl?y?&f`1MwG7yd?DOE<`QL91c$$y-f=wAJEi9x$(Zm=`JvSRg)KuEm2s zD!7MPCDP=lm1+h}Ei6~{Mdp+l%rV8dAqe6YtY?GNF|$!1a3S(xUm1f)n8#CH6QU9U zTz=iOMk8_(yhpS2n--dFBMnZhpV`#7*HBE$TS9v_-5TSLVn^cx5S&iBRF}qYOfeh| zt{#HeqD)opT0L8G60iQVv*f+$ZbyHFzV_VUO3jPKD8dwJh80cD>%Xu-NW{|^(GXmG z+25&or;# zid}UPriwy(mYgoovY2PO8gtg(9D8+$oQ-7*>L8@4-9?aJhR=Gi^t*M>l=tO}T@BqS z@=Sn?+Dr29Hv8+K5%4Vu;k-1~dMsljLxcxFlP^y3Ra|eamq9QAxxG3Xs`Jd61vcWM26V!VTo5QE}gN4=z&E z@&xBbJfNH+H}5%I_wv>(6g9JPWOT?jtj?2&5;n5ljj$QN>E;JIey`@v^1>?IIW3?a z+PC-pbv^7}6s|&EYU?0L+3oON8ayUYc#b$;{>cE6S7o(JmoUOoLie!(ce8f@dZaoA zlD(sQ;Z-rAnK~ze_oBb#xJ%$AL}i3WAdzO4$ViRnZYbQ@SYYX27NvjoBmkZCiLf*g z7XxQ+8X@s)Wq41(OkECNF$j}d*a>1q|0px)69;isXn7S8NM%X0Ct&2yqLNU@8?ij= z5`wK`>o`q;E}mQcT6^O+!wuACcOw#hDQqv0ocqxBs=>#ycW`PBT`+Pg6Da*Yq{|a1 zTtqJE0txJgRys|bXZ-H^^K1FmRz)QfSH!|4{Yepy}+f3OU#aAwvd%_qL305^|cQ`Ci@b)-GZ%U5koW zb&Vm*4f`|`{vtvZ7d|koFyLUGyEqAwXJxf9OlMMFJGoQH%|cA`m602a!qtYB-Ki9h zc*%#KPckuBOc9Q&al(sAs~CVqs|ZS`Nc%jL5Wq5Ym=S3x3zG@DunbYxgdP#L!ekQ7 z0RU5-vC#Uz&zq#YCS!VA-A<)S%mz`PQ;|3PTyQ5-==zx;he{KocJ0D*$nKOr5}6P1 z=LQyZ6FN-&t%2nB;}?g412h?G zD#9$Ibx-z^CnOhU6x##_(zLPusK}d8SmI)GZvA;XB{-gkzVDzeHkpljP3kkj&P_xX zC>M9xo8na^OB6zMoo}JrH=DomPNA%gtQD8>DJkv)*Ec}Con4*5y$W}CY0usg9 zyYfNJA5Msp(GD?gclf?BsFZm&18@sf8+>1BChmLiq3D8tMDgM zJtIrfR9Grdej`STqBTrftT~QVqXgLvMv%W93CdgR0VZo)2fyqaU%WAG*#)=P{5|xL z<84+H2H`MG#2s=aoc9Q}Q}KeC1~$x2b=#qoYP4%=5)IM_bAXj5QgS6X&`0=Qg?rj) zZ7^XPQ(U|fRUIQ>bb@655XFv45mW5vd|XET{{E!;5L~;y&yslCYa=|xQy&WB$QKHj zXERNDPAw_qm6?rTiB}i7My-&$6GD|Q+R@;Bv$Nfh7;L(TaRAY_lwR;QPWoc0Kv zUntzd8unGH67$MPv8W_>)>Pn5v)T9ZQ<4^N30m~3%!;)U1hAkiQa9IxA`Az%&={cb zXI+1;&H9tXoc9PTV3BRLVMbT0!aWX&RV~%Rh6Vv)zZZKmW0atjwv1h@_!L1OU>mUP z5($HB#ESRo-fkL%#j?d{VN(qaCMM$tUB^XC=@R6`G^ZRAzs?Qam@<-qM8b0Kd`V^k zXyO14B0q8n7}zk#%#gQS6IO-C@XtT-^$h3D4cP_cWBW=^{q&2Z9u5-_61%iJ!<1|| zVx+R1QDe|rKYd!}qv54UPEdT6>NWX^Z8(#LRg2woh9*5%B5Jl)-LVucEheb0#%sVq z#*M_+ArOOYgpSPxUVa;H4O)l1#o&f0QmL1KeQol3r2t`w>Mq-^ZioM@%;H?X6CqEh1@t&t5!5h*NvRhD389zL&4CTyp8U=#)>Q&JyB5 z(I3&y;h3O6<(S|w0)I-ICq&y}1V2^qIei&-DNFa{^z8FEd)neZ#sC*KLsv)7x606` z*UiTB|8Vz?O`1mCwr1M4ZQHhOXQgf1wr%stN~6-YZQH6;*FL>ZobHJCM07`g>%TDL zUh7^X#x=)qf?BJ8e{-X~F8xz2#%7YHycHTkJB7QNVEjUCQF7BKsF7j<0oe#{EpZ~tyDW9WROdE7*j!2|25d|v}USGq_p zgU%d%B$xw7g^Dou*Bm!GK8*%wao*>`i{i+F8IxTVk-lZbvElcF-Zr>Rn`rIOhAp|^ z)cfEjm1TBFzgoY2R{i^9!#pKN5gBRyT&g92WA2F3^^JE}CuAz|)@{N!nQ6>y+`iP4 zc{bSmo@hna47g>CUxNEZX7B>GL8nIN=e}AR@l$e|63C{zL14e#Lfsce(4ZZ|(uohGv-OhM zWAo;KX6p9zc3jr@0-y#_-p{xXiGX3WQoq%t8x0(3i)A$JZZY_-a(aZ{3vtZHQ&=vD z70CF|X$cseD&T%p7G@&RPjdW;OP^4}x zik7@bbn);(WSzKws1)^0nIp{){dY7n1xhWL(j&pi*?8QVv$9RM`1Fx{s$yPQgCQx4Ql@ynEsT#D{Eg{36cznV zUV*o@oZVTK&B{(tNmh7IFu+wO4uENvT5xav#B;71$8l$puLK98!{@j@DGpc zX+=qnSc5!C>w&YG^Sg{N7O$c)Frm?we!BGhh4nIp|AF}DXPf_0BVnfDx{q-9##AK! z&xYCyE+R|}Y0{Q@!@_lMivo>&x>>LimeZ((5c4>S*Un6_1S^E3)707H-%ei;^QK5BFEuFXk%ZajBM4uP?tQqd)}H1Ut}gu+iDsePTR^vQ{XXHlGV*Hqp_d#fc2aXe9EYB@tc{UW(Io#m1b=FdRfSW zvQ-qhnjR+_>y-8ZCyW3E z7eD)m(hvHI?5bAqoLNaeT!XuRp;Xfhl10ygy&Kg) z*~K>NM%Yg^M1Ciw8P7$HUF~L*Mwnf#0sT4aMrzxNFSKz}%}EfmsF$WgOB04?0@Imv zBa_l{0tAKtrHGvIBKga8^`vuJh%5C%__g>NzcWEuWPO3>oemd~+ixWFUw)5eWn9J^ z_|;CuJ+{VdSX{X`a9$vek%<{NXFK{#F8mBP!*U-%cpMbLRneQPa%3DHxHd6-nZ|aB z@~_D{Mnfq;zhRR7-Jux{S9CS^n=yI`WgrOM?UD7m&<2kXk*}>ZUk4f)_5hT@S988T zQI;^L2eHbgMB$!4{0SO8rueXz#`}E5mP~RnYXc z@XkgLPjR902N>)hl2PdX!sfrx1p{uSq3Be9_kx>8=X@$kRGQC@7Jh=q?-6SwK39wZ ziq#Pk%=O|>P_@$i2&jb^FW0IKFn{GNuffCSs6C!N=y2~CYd};)tVH<4W-+*JvWAyg zh}qXiLL?7yCgU=&p;s&?&k2mj7Pout~3hh9KY0ev)>%t8eMUiEg=iSUM>gS7~$MH5mw$;Z&aL z_N8@MHlQ0~j#V}oR`l@P)_GB=#@Y48*+^tFW!u7}GVA{PJ*^Ra%>?r19vYgs_Pff- zP$(37|C+kIp{f9z*Iir~omF_H&w59o2zjd9=td5ge#ZU%Px&&I{~q@0hE-S~YM5H6 zWGBb*V2xK#2`s3)ab9vkM*u}Px|FK#ybu8rkL?f4%Nrf8IKE@E2S)43W18DWIqmcn zO~X;GY_R)kzq(&e)bJg6Jj>w~tMS-}8L4F5<$=x15pFtJBF=`2L$%oRb}=`{!pIG3`j*)1UM)s@jB{RFFM) zG32DsQ93FQKX-u&earJWFuY$axPcM;`oCKmG<{BqF_bOatLw#&qpz6-!niZ5PGvt` zXbEmpw6Wlofc7RZJ|m4`lZ6Cmr5iuy*}ymNRqDl%v5cjav=knveHQT#5q~*vHPA$j zoPkINV`x9OB4{%0#wQ`7gE;N5_b42G)6RT0fcxtL`vDXT&ey2yM-c42%wmyb)qp&P z@tG?qEa7O(?f8%tcd{BiZ^}zUHrdG1oeYMJJG zMjQlv_8aFNb1J|Py=o}T29ap>wnwU0gnifQG)k0!oVS{B;RoU zw(DJv5O#t(LOZL5zuuznp9-ZO zICRzCX)dEsRCZ8r#1`ROE784f&nwj=0_4k@%fd3y!Ur02D&`_b=sA)_YG515KteEu z$&UsnyC6)Ny}}A9F*+{ie;D-rTDIQjTa?cLpV(XqdK`3q##;*>TXGExW zOz+q(Z`SbY@EEDw=w^tE+M222ZCwt&%ea*m*x?{^Of(c>l_e*c-<5>8$FahQZ4;k| z8F(&66{Fr6P_HzS;r{Rq$@ulp6{0;CQ}Z~Q21%RUIDR)KUxM(q^2>-%6ylJM{V)gd z=O4=VBktTVGzCAbCq-3Xz(u16%5r&{oX|Re>aNjzbm=K<0S>N2YHNzj`>% z#^Q9ZZ$G{Yl+yvV8J?`voopR5L~3trfRhdGNcd5h>Dep@LZ|;S+y-MG$p%Hz@P-jJ z4H2_woJn->F+tb6Lbp`CiMiyohK#e_HIjb7j>GO z_EnzLTj6u1S0)hjs{n1gy2ujiLv0l88NEIHHMUJ+)31`;Y)_LvTzDnHCJgGDuWL8r zu|jn|<5e=H+6cl!=m;AFZi!DoaEkuLq+#@lZ+_%%S3mOx(u=!a`O+5^VIAT=s7=H} zx3%}|Fz0W3lZv=7 zU(S+(jzC@KB;t&$;hDLF`||J?4Q)g7!Yc3=b?VITid)Cc8Z7<`w}CP`uj76ay70fz zU?|v8ftiIPTyF@4H+;{WM8o+}B4oh9B9KVqN7|>2ybbOFdr9BwObUw)YEUa}VAka3 z6cNUeXmoZ|P>WaH+ZKrq6DE1L&hc0WQ!*BRMa)z%U3|DMgBNuGMsVz@;=gv(5?2l1 z;DB2yM+{<-MV8`5sJyH+6S-*nBfgS(Bo-A#wxJF%(^bJxb{G`PU#p>RysFR1BvO7y z3C1jVMMKYdU7@w}?T!c|jgZfO0%o!M+=HO~s9BK|taxy)nV^KZ<)R54A&QeK_=0bUMGW^d_FJDxYS17R;? z$!zW9C*{D=Ts7)Lh$YWdw$0!{x)7rT1*?CKQvoNZ;Q$jChd9I^xtCjt{*WE4tOwM{ z;Rt>uj5BujK_tN;ZU2MeO56FgYGO zzQ6_KoAfN2UBS7rQM9#~EFTnLa^>}ddtj!SX_rRrUGjO%?w1Q7{SX~lZ@4@i29Z;8 zfK9?mvEdQsOE94UhEGfjA-+jHA*it@KIh4MoUB?R{iM+B4#A%HLHHjkULW(+&o9RL zynXMSF(reVs}}BysFd#`BknOYb;`b61q!+1wyo0WNSG2lDjGcXSg%x-`W0L?wDtZ( zAcfFTN%f3QJYBN-<@I?P)~7?rvzw3t^;*zH|^E z^)ypj6}kb7X)7eQ(u4zX^x(Y6bMa~dDK$cBXK*?Dbz;FMJ7xPM#cxAik}u%$l_JZi zONpk$U;P00PRQ)>-P&kGOiZM{p!z2m6?)leosu6DQ-C(zlNhh0!3nST8Q~eINz$Cb zA#Rn6%`c5n~kMl#@tyY_^({<*T7o<(tk2D|BJTx-@9%9ZRT<@{ZBWSgOlmM++61W zZ0CZl+@T+S?Y}Pp4VoPC=cI(TJ~&sGSoGOg{MI8?PTE6&(|zzn)1N_7#t3nM$j*lrvCG#OHKM=hE*k=GQgEAh zOn!%%@?XGiVr)mA3#(?FhpReUe~`E6cp^j|HkJam0@Us=!lM!ch5z8Fr7M3QXo*%!XAow!#qg7RSDAXNY ztSj-UU?E#szsbg0uzg~Kb)@=HP*?$=-4s-PSU`*8*^^@($KFGKyg7Pu!6sSM*?u)m zL^2zfE_M`@h;Yb`EWYCl+u*lB4U>*NY63GPL7YlbFjF71cGCt!Lwh}A0~BOM7GC-u z5S5Av@&hP+9iPxUjOw4H=z7zz7nDqXx*h=y@Mye!5_d&iOI>OAncyaOb5*-btVwR~ zB<_xWVZi+Fi_n|`_o)d6zmi#33~CxMX6-y@T`|O5klxAZ)o!lmRp$+hOfQvHnUeA7 zaXuTCLpzqL)t(=glp_&QT)|^m&2f|z^t;+F{~{Iu9tcYuibydoh*|%Yz%gYKkmgx+ zVKahXNRYyq<7;|X-kP#1$xa_U8uMtlpF`<=aI<$?LO3`hr3y=yIk%if>FKW<{&dR$ zPodWXt?54nKN%AJeM-AMnf<}-8XFwu!X`aRrxB3hKnzE3PpzE$F8{G~K6cVug`cui zlMR(P6{5oABMT(!GnV#o)$f?FyodcJmGrCLNc`A?t! ze{tIXcQ2oX`F{Z0|8IEp|0cHn|K#QWf8ekF$29);SIU3$>MX3>tpAGxL9a_ugdb;X zlLgqX5<4lYGhHXORD&4fGhdoMcY1P(JksvY3UZ#ZN~TTdU-9{w!XF27WLy^W9eyF( z?<$Z=*Pv?|>!vlI1?-TD9+9W~Xe;rtM+U;w&jjsG91G%@TWVy2kBTHKu>v-)Xf_F* zJ?G=874bRVK{IUkyhIJeo>!i4b#{gp+9A>dbP%n#eqU2^F>Ml>2nAu%^iR??hA2qA zac{L3KO*dj?4^REmu&+?OfkCeyKhE%L^S?d#HV7+7coCz*RGTijk^{g&Lfv#1M0XEUXo+vpt7aI> z#C33povrX@yGFS|+s-=2@Fv5iJG|i$a3=~!VEtr_OlcD146u}hAV;Z z8yZ*lwNxQ;oYXKJd>TrZ+#o&(t~7+bY__R6-|cW3lZw)-Lx?o^A)dAyxSdnd9bTnUGGsef7N-0go%8kW|Mb(-;k zk?Eib3>2S|GXtVD?38|#briIiH7+Y^pd_;gycTaZ{$;8@2S zT)1RxqBreWx=7gkHQ(2Zv%3ynAQkpW1EK{57cQ?BG>{p$ZC^rdfe7p!Zu%h-x|jru z-rylu${~2}ia%sBlKC$)1$@;dIkYraK-!qtlvy~AgF1mQV^Q0?#5~Q}0dcDSE(E=; zeD&jg?d?AFM856HVp-_8zz z0~!pksYO0CXVr-ID{fmwysRy9Y%=jQdm%BAz+z2kE}w8F+me@g*2|6Y@!OTCawl!x z0XJfH`lxw!nrQYmh#m80!}a&>h!8sdDn)=<(m4?`BazG^P7^kXNAaZE7GqZmwjzFR zJiM1=cm(Tnfyo~%U?7p)?l!gk zp#v1<&UOiCUiEj7>5sz*jK;=ytz84<)=xqIg3$n(o88dTOx+&U83t^dq1KVN5myu_ z8$MdTZuJ}hVto}nda;>536@OuAT8`L4(7N)M%>Y~f!RPPRbJyF>p5VyRpB>wEtnX=d2IMAQE}k@$Md0YyAzf?t9mL=T4ha+g}wbK%4;k$QV=4 z^+@N3ygYN6k;->ccjLvk-;Z>#IZ18i=uH7y^pPZIT|{0~V9N53!X2ownQLv}w?>DQPu9*uNtZ4Fp<*;t?W%)NRN*bN#ND z>!&s2+pM`UQc2kze|t6#O<7@PJp^Fwkp9LkD;u%q`JF5Ka&07@Y{h$@yfH#}f zl4=EqsB~;QC#iRsK7RQkv^6uOiBquW3QuvC2gnjL4zu zL?OOHyhlGOk#M%V@@mGLZ|tYY3RD^#a4_8g_jpx)jCZTUXOU zZRE9Gv4Mw9cGt+7tgGKev{1dkQ@gmx=OC2) z*$Yqz<#&s=$3J`@%WR8_{tf+Y9wxXh?0z3i4g^K4)b=aG{#2HhWlGh^^}d71a*QiY-CBrd)G2v z(7@rUAQtl~p3|vi@N$y$K*8<7j`o|9VqDoRy`ugBvuxB&{qb7ZO0)Ftt?h@(E(jhO z4)sTxpGA?CSJ9<)d=Th{;1j~`SQaARSV~>WPn4X^#aDi`Cb4VgD&@}8J$6(Rsf(UT z;Caw&R6ahQ40Grhq3ZdU;O_h!t!iOEH68l(jvkGm=J3L#r-m{jWQor#!|4(P-wMQ8*o&b*UALb-v9`U0y=cRYou^=3@v<&S*ja# zJ(B5Et@AvusKq%jZ@WYlnP}K34>6hpEtuq6mAT^}0b2#dX7`*4ErMGaO`OX7%Rv^A z0uK@R{9wkMCj6%2xk92m(LeniHfV^VzZv&^?eQPlDnI>*`7u_zcw?s5ri?q94jKl@ zdxuyI-tYE`XfQR7S?s=YIpILH6@hU^)VbfW`@*0UC(ib#Lc+y6tICxF8+9hA_U|1J z(bB72ft~@ztq`nZ*|}lip3y`!1V|4#nHXCe&?h9=>FneFth$fv0S5_!>ZGnNXZ7y( zTCBYBV_c<45N^iJ6sW1q>lTBC&@$QLz)Gt1MdgqOnF&>2iHD!(I0_MGQ~?Ooy7{z` z)H(u15$(SP10pd_f-4seGB?1<)Z^85APKJZ0+K}{v;w<4#M&L(0%g#NS1(4$mkYx-ngj>R^ojJ>M2neG8)0_AI zvXuEB_6h$_$;Zn1KNTMfJLf;e$NrxMpHg+baX4qR)=$ev|7)?T8*ytRU5R;uOB8mK zgjH|%^V|(|U!yN7Qu^8XarRbpq|zW=j5O;kTc}_cCv8ZDc;mlV$S`~&7fj32D1az_ zlbS*aKb}}A6=%JoTkQt^R!wx$On6p?Ns7Q`k~E*f(n+jW7c~d)8G~HuksOV7@NtPb zMl6$iKTao-sf_q~4pwje+(HQ{3AIMk&mwyEEpi$XWIdk683OlK%x`8FiY*!UyDaFG z3UQe2Qf=Tg*yVaKs8`9A@6e_X2Sg_jh=$e`*b4VPu^aTkR0uw`d{34$oLvf?Y+YQs zAkfc%{NJSt(=UwxC_V`GH_;_%&e?zEdT30+(xs6 zLIU2fwx|kE(vY6siAOpkD8j!b@?I6^Mq#Wgw0!K;&N2$24?-XVn(y(J6!4g7qN0Id~xD{d9~zNHwaVgeGOOp_qYB#E%qR*&*iM4NPL2wTZJK1&Yfx& z(f^mZQn@hV>QMcoF5Xi7eKZHMZkO@rTY^e-&6_=cojYH(OWl)R!THZwd^-==@5n~P zm2TQ>zlxx6yy+}Usa@x|K5JTntkocqRFxZi(ww$0Eorzx=PPtCZ@O3>#rumwlAK^p zh6^#W5IH?VV?Yv9^%_0>Pa<97qJw2G>4+abrs+?g+}gHo$(&7*5!8r)Qg7!UF( zdSD6;?%Xc}6^!l^$+c?MaGG63^hLSQzdCj&p=y0SJ_?Y-_Vy6TJ#~kE8id1}#6UoL z&zqU2SW}=*-*nf*ed`v5$yGnV@>Q=Z=ZpFj%8kQcysHJqOM4dc)B%iY6-Ji1nvs8_=B*)><7>cTfK<)1-PA)EZT$C?aJD`1>!#!z{2nLkJli)&# zjDGUjsYq*|N<*MKSRJ(aN&zD?Wwo`5sf;Qxugol7p%DX{@33T1Vj46tND3%NCqQs~ zIPNGxyq?)smXAljVH;W^&(3DtP7r4Fq@NEgJhs!K)LX@j3#BaA#LU7|uaQ;c;nBJf zmB&T&1|f5BMidJ4G0ihf7%^BG(8XCMegQhDki93q@g^(ItYwZu?4Gm6VGgz;U_siYiddEE##}mjK*|~xXFnmo#PeNS9Mg6UeqFMqmL*-^ z9B)qXBh4UiL5S#ACnklgS&zr0T%g{G4n{aat112Mc7=MuOSvFer7b1DL%xq6aAYg} zBU6-6$?9Vj{&xV^D>gODWkka~I$9!WD3ZzXP%L@ctL>m4kCF#Ztd4~l_$d8ybgOUH z$0|ZS)_zwajDYR8{m(}VR#yc<(fhusD_S2|8t6y%o0A!(W}gP(-elO^6h~&()E)CA zb$N^I{ye?91GX%)PYWwBFPTUQR+(Nw(yH#cOa=&`ar$sm4S;zXP3Ru2+~~g%27!6oJOP{FL9SGn7{TJ#YeX2piagFAi|`^vW~N z?vicV1sysQE5yi)2B-z?BKWmp`e^&IM=cXQ*0tqa1WtoMDYYEf>NKj*O~>ma7=yIf zbGmhI6kX%K-=R=(J-t51CArxAH z-ySSPot5y$l~;lrGQYxQe6k#Vi*e0{fb$88NG(X)r9nIBG2;d5VCe>$5f?U!N>|FT z!6;Pt?#XYOZW=yc9-i&9Mm&()Z}q|lX2jJsaj>ETRAVSH91Hpu#fZrk;f^9j<>i!4 z^?FU#PQf*907prvMuXe&m>LM>E_2>9MBh1z0T#ll?u4z4f;(?W`(niHmV?f>TIC<@$A^$oaN~-`h4%@w=V8Ua_}+geU}b*lAtXkUH*o1#6D>^pV-qQ74VJyPw=zn64&dMM6|6-o6DWHg zaKNYXWsXgL`wsI>I|`u>IV1+iZ1EG`g7KG-5%WTAN<&(6W+}@_#ncrADyaSeaM3uGsg6mjE-MG$vDlO1>|TJHWe^7W@; z4G1IWQ`PWWQEIl~_pFkHa{Wn*$77m5=7Sl|+lV|&O4h1^rFgydAp-=C%#fvy-lCJ- z;&wMZaBbIhhgsR2FQ?LN=elu7zRHrv5Lil8bKz425#&?U&2Io-egC7!Xf*i%rQ~2> zD1SGF#aoh~cokW_&8C8k`drQ*e2m+Zt3z{_DU8gp9FI5e842!=U5ljt9jme3riR`- zKl&WhDG$4W4%~^9l7n-{Rsyv?cUnq{z<^>|eCe9_IE4>{r-o92ta?Op#t8LIdw*NV-XR-%9q;YjP=i@AZEJ&%TT z9jNy4BM;*n*T*n)v)ssLAslcy*yby8NzaL}ZGX+!d_NjROZ3&5Sc07{0=Dy-4wl2- z`o%U9HZ2@KyGV0Ca*Xzds6z&!kW<_7r^5IW38@~15Ah`Gu@g{n^IZn^E3h- z`~sKEYNfWVg{l0kMA)ZJd)4YYRx@<^6Zcm`rNW#owM`m;hiWY`$haq-Kt>eNsh#$d zv;nZuj=GpN;D2383ZG5W6Lb|uD^~ZJM*Qq#EGs5(JFSV^?T&&@r5uSA;>4QJodRhu zmljF?MzR1ms7=JAhOhJ&_xEEdzvPZuuEVAdzqNb>jBffMknrcPsXR6_u~gaif1C|w zp_5+QK?gxk0>1v5SV2FT6cm;u=pvhosua3@7R?fDjJUgwj1ay|P z&M4ps%uriJAFLG_G&k#$dM&fQ>&^|=lMW0iAjb`C^8dV<%0uU7qEf`epr!x@wIxR5 z!r`#@Lr>X(N0OEgdk52s%E<|6*+oD-`G`o%`Z9bg@G-3q;zsk8fXZXQ(TR}8c0&6P z%rX#epkUl(9rQUataz8i3t-%{K*U*SPwo1?p8jPP#~2Q#o;1=#iG^L%jsP(R{YG(* z3@xeCi}A1wPI8RK?4_TJt6{ZW1cSPBslMAw6k;I2-`MqL zg#)$`uLqp#*U3|V+*Bp!2v4@>;7!K{ob8rz~SMoF*pl-{4-p3D~F&JVhQFLFCn z)|Q;kK+}}^4lNSfgCG)DwK8}xF^RC3&v0VPn%vjlvv5y{S+SOIBoh(=szrP?X6s&N z#|$r^dMG%pLB=0YyLxZ$F@uTWzXn!SX(yO?+F>*Ro3hGOrjgELHNH-J+&B=FU$#dn z6`L(3LTJ(EA(UxLR=zrsCM^U~eg`Ki3vH`0rPp2Z+My(WTAHq;bGXy7_pCzYT={i< zcLEtK!B>FqoDGT@g_PT^Pb|)dxWbB>+j+uoURy{e<-HrPEN+b0;4n@C$p)X>ZM(%f zxl%@oj?jph9VjRzOZ{tP+EN0& zT}Puk;tRN#$2?MbFKCzv63QpQ9yr8;8G#_ecug0a38;|i7E=c!SW?A0z9JTt>nGY_ zbG0dC(1PsqsPdL(%c;RlUbOH{@X~EP0=#r*9p(VbRH74p4W2ghqqN*^1Ek%@_`1Rt zlPcQvr;CupTZ%J#mq_0IZ|N|OK`GU?`{xiGSyN3aHB+AI@eIJ?N4g^m;&Tm6vPyS& z=dNH7S-;|Cg0#}hZRiy@Hf63Gq49Bgt!{Sa1uu1}Z>fqzR-72yQL#i>#NwcWjm5Ni zr;`2S66|(E2N|tJ+&>2C7FLv$$w==w%lZr3iU#$%Slf&hUUyIWcEn^a@nlac`Dl-0+x0dkAsphpg>Oo1V8)aH^Vqf<&RmroWo_uxm;gR)*Da5?M1RC4)G z;hRbIat$su7$BicgPZP&8gccpoddWF(3SPRFgFq7VWh5n9Af0&4)sa|mzg^oMmmJs zH>zUo_xL;eHzzVgXmi?NlnLssovZ1+N#j4H`&5(b;Z-)G?k-l3l+&Kx@K0sC^7f}G zw7A4>I9}3g=mw9!87gSQyW)jcLkZr9b3?-%$Uv~LD+%F#hBK{eVWMnAAi!K+jq=ST zsH!KH%hX!x;;&|0y;J>cVP73sBy6vBbY5WEH+GKO4606*NVy@ZA>xy&^$e6;g+)27J-H?xUSXJLFW!Xl)^369F#c-_jOB>{ zX|i3*etm3OV{{6@Px$VlK}ork+BSa?I(&~!dxDpOTV4C*}?9x+f+lr~M4AhK+F zNxE@-i@Hk@78SNUxLMSP$o-mc>%;Pv>h?`Pu#IKNnOAv8iUl-7-bWeoj}gFFHCH1` z!TU61lY-1U@A)NuN%1L~){@I31Y0wL+rw%5NnA{HAKul%ekQJlUuFE}-&Sn`12e5q zmV@dc*pi*fm4c|FdC)=imjcf#Y1YH-&|OVebSHP8e22L#_?pQg&g#;h;zuQH*{aMw zy??a}Fj~*3Ea}EHU7D9c^sTmI8iRle1ZJy~T!!HOE8{dm9M7FUhmGeCBOZf&?RYAj>hzKXwX6b~Y_;7yjDoZ93NX4Gu!0*r1py{#} znG#lCl`q`wHEp?Z@eoCc{6qtqykyyd>kLYM^Uut1#;WN%IY*Y-P_ z&4|qJXR&mss?0nNngTxjzU$~%zZ67AIvY9HY;`3Eh<#f!gGChFs6oYZGM`!%$iSUf zB1Rryg^(4;Dmq)g{4aLyhcswL*HDkOfU~YwgkFMJlqYK7Q`C)AZTAw?duw=Jh0P|V zG9$*BAPBeHg_FcYfAX_MX~@5Vq|ef^sQgoW6K*RE0vHdS(MCOUzwxJaU2m5sa#66m zS0`paG>bVY6RCy|7jh3?R%@Q0Uw|`Y2imD<)E)TJ=50)GSTF&91}{^I)4^deujV_?0G$HoU0 z5|xr4<=al6Z!vpEZqT(4C@S`hXF^*oJLCWIRBQFzFh z{in(n1^1~6!*e|u1s{R8atefV-3%O_2Dtwz&yjUjbtNW+9)r#&vo`j{z}2hXXTev* z_Iiiih|IW}o(EJXF)7K6=tlki3)y{aQ@%a1pPy)^nOBASe$`R68rBi)(>azp@@>N0 z#J716PKP`k0xM>;mEhKpQ0g;8y9T(6L}vrgw1Jz(utq`UDd{OyM6Pv+9rs!7apNq@ zDVyogeqdUTa74nt7uib^YEubeRaxJnm&N>7U_e%H%!i6bS?;A=0I5pS-mzLlM2*}^h&P%9sEU{Tu2OsPKs zm^{mLQRJv3_t7gHFi5Yj2|;hZIW&|^+(Lh<7Kr(p1wF2rZ1OE>)Eq6``K7j);dE#| zUk5H(8$YNhdgSXDwV3nk7uBv^Gp4}cGi4I9)7%F> zhti|`qzxAclH<0T!|_hAThvKQGz~NQguU%mIu#P?2thw=m8wEcQ)?_l??)jm=U_I~ zHG~Kbx!O&gSy?!pVe1?cPFpWRjS5o1ILa`&7E$l~$N-b#5o9dEK3=}-dim=qGhaffLRxXH3OM+Z%^^-CI!f$TS;Z+JLeHM9< zD_r@LN?KV;cl?wjU&azSc3NrjBHX)$#Fonf8XWz)GqZ>xWS`bz;|ARGXiO@$A*E)LPT@^PS!L&q?jD` z#c(lJ7zsE!_(MzK$7+Z*C4$w}#`u6Zg&q1wc3X`T zJFYN;MbmZqFrUx8`TDG-Puv`w_-(hKvmjyX66k1yK8%&g)>0>6`wsXyV)0X>1Mz0d z64X&?QbQoB3;5WC>nY!OXA{Dqb+hZ_)A@c{59A@3_EWPOf$;@*BfssVB z2w`tU>r;dmF8*sGbXUqDK6eo)qNyxA5?j9IdW}e9=QQRpMOy60^G$r9cn_5vh}?vT zH2&G~6X?j2)FsP{!D3C9g z?mWrnO@2AdcRFYKpL4a(EIoTsvL&{BDE$6k^T}FQ>4()%G?V(_$vCLbs@WX9XoKA>D*!^k1izQuA@u@aCuWa>H_KGS|6 zjl9=Z@B2-j+|LF zZr$Lg3V04_T+SU|4PefcnfQcgw%OSu!CAsm`Da8$DD3_vNi2WIw>i0U0BogjAvSUr zbKC*)90-!z!}mat_*E9#K-c5LBF+N;X!IC^80AK^AKJ=e3u=bopv6`2)LY(#ftpXV z+%%T_Xtg=z7CFYy{&m_JWF=mXQr_DixLpM5v2DgdW@N~Gd3C*CB{B1m`DfA=)PPai zn7|)Ii0e%}(us&VY`OOfRUI-tTXn*J0z{M+%@H<_JhkYEB;g%+LA?f^IS(7Xfqd4M ziEEHwGpkpa-E^YL;R_+r2n=+u>Iy2zZYL}xg=|yt9Vbz?QNivpmP)G#O;eKV7t_tg zEcbgt*#aMTx?rn*ELB6?WiIlSajrS7H%V1jQmeL(IFKSz%t)_4bYAYQc}cLYw`nqx z*)s5HyXh=Po9kA5i*7hRB@+CfX(p$;R165dKe5R7nh(4omRQWXNf@|fSg1ioNsCt;uCtPMxgJZiZiXHG6~r(_s#Yw$XtB5AFQ2D_}tI1`yyh(xOshGO^F z3v8uifHeDM)E3NcQ=7Of3g|{Tm4$uxm)GCo@=D=YlH`IKpI()eU7mh{+{!3a*!^Af z#~Bv^;!VhjJIaK5uq1JJ5>w;ut+fb5CEFELE~#$bCu*@Mp#mJFt4W72iIOKTmTR_n z5D&o$WkSQvJ^dXuNE@r{d&cnhzXtzmwd&(avR~=MfbV}Q%9W~Maz#XWX|Ly{IVwId z6c=+t(?t~Vt5E@Yi*g~!l1S%-UxaN%vct>Ljme=qeRZfZ+<4c zAisIrlI5kX@?*n!5B8Y6-IHPDZ~LKjDvH$oRY^vtFuvwi^E!7vpP(!yd{ZUTOLquT zMfPM{JL?-D_bGx;AR5&5OP@$JG9$+TuZj1Sj`4X~*^UYwU?>LBkb`G?1f)P09Ia z4Rgkg9!i~FYzNk>e{5iTg9w6O))<0+AFeN@g=i>o=Ese3+h;L~U&J(=*sI4d-SwSC zTBvMu^*LZxYcRc&8SPgpJYegcqmM4?fhT+#n2>4+)Pvb02N{||{;)cJYgk3HORao@ z)W2DOb4ywmx+b!#+fz%uGVEmG$dl>;-l!WdlQCyo<; z0X&VOI)*^=ilg9wp=auC zuaM*NrywBca%CZvrB&)Cyos*z7(63V`Vb75CN16@p_a9 zTVi=!meN_ql;auW`hlRo^Qy1WV8ED{u$Y0YKJbIAkz!`86^BSGZU}bn9_@4Qu;q}< za-9OrcIpIt4hyzN40JU3!MU`B6h7D=fCVM<1(R;J%E@Sf6YP6?_uE!PeH$UK(yt;r zKIx!kEELMece?{a!k9LCad|j9FOsa%Wq(#hY!5v-^wfFfyhv1sJ#bWORu(cKK)$cZ z-s6lF@^>y=k_86fxC$vN-a1)Q$y!N&i}`AJCt+MD`(74>RJwVl-sCP}M6p7wwLw^mp-UKK!*^ z#dwhfL~!Y4ahUrzw%rk5i07MZCc{Z34m4;?&ekQ--h`l zn^!Ym<+@6Hx+`}vm1WH?n|_b@{m?O*l=Z2F$);F;_wwEcv(YaVhpUSto27q2MQ|fX zYsD+M0s2PIuXn0GE|MPbT>I;kvMqXN-LMp->1%J&aq`DomE&*L>srXyAS*-SXkb1a z7Tf+~oyko{Ip57{%CE(RYtM|dZtoeY>m<#V&BX>S+MBH(sVV6H13*B(zXMcFWP9qT zTI{9WCa#~J@&{*#t5qO%X08u@t(SqZi#c@(!l!=fff)MWQopsd>yH2~vk!iDOKVM8 z632=!u^T9ngcn2Idf06`+ZNYcOz)j`lxd;k8W@a=B}67j^PTyHsLI10j!mUU?pg6? zoq{f;iK!(PC&IpMJp!JH*8FwSDO!*VvC<2n9^yjM|vv_+$jp=_#Cqui__( zE&{G45n&O(^bJGXWijh1(iOPyFmh<2ya5si(loY?KlDGj%i~35+*T-G;5M51(*C>c!Hi0i@gN|Lpil)7$+-&}9xx`p=N=(ZImxKINQ~blP@hJvY^Eq|}-r zrY8at$U$1{Sy)6w6r*fB(aQ~yc1bWcgdUmte=&HUdQ8e!EGkyIkXJ&_RBJ*Sq#=gD zAsJ@%EO>63kqt6)gm_wU;LFZrrwuLPaDSE-Hdw`aZ}f_wMN`)|o#E`t(@DUvU^6!u z4hoqbdq6~7A2Y+LiA2eA!fgpNE z_uRN{;7D%XpR$6g`~65<0W+Vb9%Y=^kUp>zD;@89`K5ack!gzU?~s$Z0!}d7`9Uh% z!N(#s#b8HLRxAYSN(=#<3OYdvYmH>MSXoY4zrE3SYXS#p3`VCEb$u;J>#0?CeKCrE z=m(P@E7?Fr8#=PLQ;yOVkML{Oo6aQpgLx4~tZ+=>Rx4kLx5BSTLs6KVaHv9QpE#)} z0kW7|Fxe`OiVdQ67uJ}v5nd$Y?62P=)*c&c-gUwpy#3)-Uu8l*XZ$+ejl>v!J*PE} zUyy7RJO2{lvZW1N%i_>XKsfn-=5UGEO->U4hp#K$J5l&Y>U4xRH zT&>|33(O;qZ1{<{#HC@+bWPR5q4#%!h=AjNo!};Tak1$R(#UQ_SBWsF3%e@0TaoFh z;JrR_forVk=m{}Cz?va#EKLoJCZ?7*`pXD?MBDuvCMS6RLITk6{j?DR#g2mgVDOxG zVCrA{&!oK%GfRr7APq<(7)H!8rrd`K^rOb)Umw#rD0Uwuc5c8L$*md_8J`8eb1U{= zcY7J#$%O!iwxQ(+*41f}j^VYID>~uMFF05L&-fUHloPTBtCjqeq4kRQdg<(nSyonz zZXjJql`Cd1zO~hY@vV{iRq|W~sY){AN*LiX(vxY13xcSwhw7Xci(z^F_E-5ZU?kXb5;>fjmSK=i3wOLxY z@W0~?qIU4d7FyHD9elRu{hi0;hnSD6&~DS2lOgiOImymuQaCdjfvFj_tp_)1*G^T%sys;&+4k73LA z?O}Pp6EtB;NYNR zK9Z1*#cKcAC4JVA&6^He6^b!pK~j>TpHC8ruW+v?4og-rTd35?<~Ig*f%Z^bHypg^ z-7PC4aD;z8nW`d9q@Bm=W2Mo)*plTcfxPwnU*=RUz&lA_>g*0Cdd2G@S+JM6Ooo-x zftl`9Fc@kYf8#q(lZb=$Jt?c@5}7`OgpI4f%bWNJH;~#Ob7EtCRY?IKoYWe}(Gl7~ zcq}9AY)+#%BJesOpK4{_p=pGCO=}HFj$cY5(b;;P?P@59>iofrwd=<8)bzBV3eWx_5*0CW;JLpmNtsQDqyG*S9ic>UZ^zHKMM zXbh7WTR_T4Tqwak(7IWxCN${e+&g}YX;DzIc>dDFg-psp>`+}?NO{Ox_E@fF^`|72 zBi>oAWo}(S^}ucRr>{bXEdF}U1J7id#?Ts}=QNB?z0iAB>cJ-UGyoDN%u4xPl1DaG zxB72WgU+(n`?pXD++e$>`HVGgg<*d$yD4gu#_N7mp}?j4d0W2!Nba9nXpoS>1Z%G{ zaFob!j0-3hFnz}u_2FGc=Zq`j9OZLh$3h^3-qODE>cy;`&GqJn{9koBV4Q6;>#10csE!07`E zhJb;RD26#ECot|%rFM&NXN5=?(5H9AY4Myj{_+U_&x=H%eJ_Cga2M;{;yqF#c`;&; z*$qdB+Gxvtsa4g=2Ibw6;|7R&w3fIW#F+dKI1=rHh+ zIJMv;K%W^YsqDfwH zn(9lDW@B8vV`5PN!Lj;6SGg|Ex z%*%)ae*6tVSJYCGx{cPhY_aE<8Z`}2c34|5)GgX6-O?CCt`yR9rMt!l-G z$fEGimw`Z7xjs8Jos_*S`2p6@h;%pNkqu*ipAHM2xQ;`fw{RvQ0Hw-jX8wwa!4+`v z+w}V7C$ZxPqR$4b@xREI`I?#Y&KT*2wxpbEPUsTadt*SlRAIJ(;{Zp^4AdsQMLbO zRzZ-x>hd;agjV>!^MSd~lgh8ZE6%B}#M^^V$|yFW%nV#7`&%aE*A&&#>}oy7t%C~Dt)c!q{oRKdg@!e7=hPC+Kq%q4ssWh zj06W;1_OMK7b=bGuJXouLS`GEy3Z#S9Diddp1W9SmRXR|<-F}N!@h~asmzhrfoN-R z7j3UcpcZ)Pm0^fJYHg_j9ob0bGn+)T9KM&@qOm1}0#bO`s1S;9e?O8mvBh0L{K>(* zhHZx2f_KDc@rh6n=;s`J+tcTh$mZnZHrfdhmb>SW{WO$C0U7d=5kDOim~li;w4}g? z{VS9G#Yv}6wBtu=4fC=7n+6=Ql5h3aiz=S)XNyNx@tqq{u#pYGaDTq1B^!A-nXlZq zT44bhCRo>nr)`lKQYwD8bO2d@qNlB{R%h|Eorz4rsC9#sZX6~0b&>t+i~jeV?OB|o zMk^9jlX^?7;A2w5MF6GM#Q^08KmI2~QYlL0%q|wzZVUlp(YbZ_DD!el_CR!q!jrRH z>;I23Uj zrp#>%>od-e$ZB2i$K)c`|J6A`m}_zF`;By-{p@Gc1__!mms=pJ`iWXT!rU6FR|0&MR0f(=qNJAi5i5TQR7wNZyqVU2EK-n)qhrAeCaY|R&KvO z2GWuTslH+yOZIkGZ7ocPZF~4Mw}{%z7_4%NZ^zc*MhIk;+^LPK+7fRiim(!;bJNA0 z@2vD;XTex#Q`jR`tgQ4CNnzR?GXl&2)SFFAgRu~v;osH02lJLGkcrxq82RX9gr-N9{hFAzT{9$gK zs+)rip``B;ReuvPuua-~rIl+5N6OG!$QIp(ct5~pumA*7unSz$e24bT*=Z9oEhMV%u9sGAwr ziVh9^ec&t==>cXEl>^kY58Sup%m2s`7^9OTwrVN#{sCxL;O9_J8{n&VM$$8DCw~$e zG#akBx|IK*Y{O%N17y7&-ixmpYR{G_p~^>(s!{Qmv9m!fRdxF$D0U#;%iUZc>~9l@ zhwhp_MghaQHvoU7L><&vI4|weIgOldk%@bVf(UK2G;~wu_?9Fb$!Ez=!t9HdlRSlz zlENFoPlB9QR#F$UyJhKTSMjT~k|4X;fEoL_P5e()t?YFpcr|SO`oV(NGx98#9*$Y! zZoR3QJx(pIrJu2Nb65iSL#_(Rl_!*xZh|9B{O^-3$7&lK%3E>?lC2JKJa%L84S9+5 zysTF#iIQLR&xzbeOT2Hgiu_R;Gbt2db?752x`z5SUTdrsp-+H3>db`i`15B9QsAG* zjEA(bmx%~BS=Ot%7jGo%4fk{3pI-nGu^!(xNs2!4L&pZW)oMV7;&Zk9Jm;$(NCI?m zB>{0)QF=(^jTo}N?Q1F8N)?YPf1Tm#;e+M?m+4^8Wa#fGOe`qfdd;6w2lSB`5*d+m z-ATV!Rw$;xcoz9MQzu(-m^PS9V*1L;jK0f?_YH8mLU~4{2wGZ$U4O>FeF>v=0mpYD zwp9w0gS`N;Lh*0Gy=lDN_Z+_=RJ-;I5uKW*~)A1SXPwY;B{a@a^GDKOQo` zC=DlZPCas_Y)eJY2R5g#jlR$OBuRYxDxD$$E#?&5VhCbfEuEe6!Wbw@Fau2?Frr*G>dTVe2JY(*^`%iV z*MDR9EuWv34c7;Kt2XXznkRcPFSZkUKL74HPSWNMRi(ar@=$bj{GqyNQ%p`jm+A3y0DncofXLpQK2E#QOYds ziRFCjCORTREGq)}yJKi~_VK_;`G{k6UW}X8?2AUSHzxOHqsC286+j8qP7IfRSB>eu zR5HjAs8z<+PZv)ssoA?@JCWGhKjGmR1+NeAA;3{7NG5p>kwYqOmm^(XR#mv1gorvQV^PmG+X>z9c<|Z!s zF|&rukdZm}lglgRnQ1j$fBKaxp+!B=Ap?;mYAWDtPAi^Pv3vw{2y#D-*+A6tW=*D- zZ$uPRo(1g*gH<@*y?_<3Z1gLXhf`Ub?t$OP?=1awkRqL3Uy&~Q)=8>O&A?)HfW%4k z17*S7bv$0Y*C1e~U1IIR54?!4^BqYf>%96M^r)#FPsn>55BN+kapkFBx1ZU1? z&9aP&Zp|{t^_f@$kTQQWi*X$4@b$zf;PK@uoCi5Xaqr;y2=yqiu`qW?;{oGu?@e~> ziM`=+=7*Z8(}E0^e(d}`2vuSi*Vubm4n@F$vh-C^bcmpVq*eze;L;|<7VM9l?I2~0 zhxj>RgNwON|;u*b}R~Yi%2^X9Drs4s;DdLa|mA4{)zw|!N zjx7C`lt>#~%uW(Il=$_a_a{4kPPawMk>3LGl(*&q68=TDhzQB{MYn@{j~eup-Rg(V z{MidAimDxf$r3cF?yGs3Ol3lr-ZEMzR%J;uTwd9gP8VMB>R43a0$LiM`KvTU><&WV z8sQV#={@D8`RU(R7hG3du3xsu5=8I!!U7LYbI(%0^5d*h0xkd|RWId<{qK(<%V!lK z(i_7?HI7g13}_+fOnS!#vXrKc*h2Kjo0_nftKdm zBPME?W45O~Qo`EkV(q~};TnerJ`J!(;oO{;VW#*q!O-QhaRu;K03^Y)o&@GGF?vi(6c+d6qOkkcOpx<1gu z))6FRL1Sr~s(!Ttv0H~eG~oTo5L>kSMZTu~G76F$O0e)TF(f_7DMsjX>a%Mkc6Raj zF^p~+i8Mt&e&+Ph$r!3OGTA$0eUg^Y;CtST;Z0d@`;8HB$*RKQgL3@4@yCqxqUa~zRqP#2ZUw!0& zbS+*G`c0mDf%*-4kET9TOL7fkNIC3)P~<#V8cV>#VSE0$y&JGrJI>WW3Aw84aqQGG z2Ba`0a&xG&7@(fx60LA)QUpY%C~Dnz`Xj)dPvLw9C1cVy6cDx+{GgN{1icbZ&H~$; z3g)Dv=i6+w`8uw+P29Y!#j=b2*T3AG%HFFS;V|%nDu8vVA(p)F@30BSPq1qr7UwY> zdhAPF$ipuH*lI4w>JJm(ByS+r-x0@JMD)o`3-ht6y zq?egaeoHfV!*Iko4$Fzjp36j^HZV~*okT(3ajpkNKM(%}IlQbWkT0#vdK{kz^0UMx zk;)=QeLZi#Y<5K>1~@%No~6et*j#wIhFO^zHuu=yceb`#dw-VrltLvs%*iLCDT%J( z)5@KjCX5A_!4lJelMXF{@jfesk`hWvEs!%ETxqm-^ha$@SYEvN3NLl7;3vPv6Qg2V zebU>Ibj3+<(x!Umd5#8JDQ%~Xo9AKCs0J!cOQE1T))_sT zWBiSx9}=`QL}=%eGo6KgGB;2Gi&k4=kM(cx7={YBGs>A9*5ZfI@^mzvEeE9_TzYU@ z!)7%Xx-=AVegh*=0;#|L5Aqwbu@ty(yl#XOC=ZD%7M+3=PUDq0aZdJ{xT!r&WZl7Qx zmdtY(ew;?NVgyAIP3uPRT19Iq(TD>zJnr`aXzq71RASEhB~64ij~}J`bcWZGrdYV4 zNto^JhI8GqonSINzR+y!|ASI?ReMofp4^{e0D{3R5F=UtfOitA)H*HXmJd54)2Xa6 z8uw&*h1AC^W2F@1NfMJ=^X6Mdzg0$dgXqU0O(J45hhR-RGYxnBZ{HIShCRJJUxdFe z#sTP;^)|!S=(DmVIwin5S5zuazGNxg4awq*psi{XD~1*R0NOcBo-RIWidmohBARUK zzQsFitu*pBXw$l{XT{Phxj(hiKGE<;-j*!vs)9uHo*c?k9LqeLz%9;6^R;dyNZ3k> z4{lW}`!b!MQ_f7qyf!2CNCfiymSC-#h$S_KvBx$E^ok=5Y+b+t zZ%!azLt25-zvFtibpIm9FCMHP0HOSpgkARlQIV8}M=J}}_OJ-b0T&kCg$Xs+%>X%Q z{Mji1VKJE~Hi{Za`Z-RefLg^*N~%XEnHgtC;8bi8@X6;Oa;hG|5$}UzU(3SX=J>ol zp2jlRC#yk_78-jA?tvp0z4o1^Qi~tRP@syfA((%$4o&mJ6G|2&opVu88L{MF|;)}V)mctxaA>F=oY5k=!~QK+y11Iq0t6%T7u6_lCL6;IMPB07iUsQ zsuC0+Yy)np^!rG^oeNH0x6^-|v9ZMPcl&oFT;^adgKOVT3$GCj&QMhxbDKOJfn`1FJnN8jVZ!6aob&J9t>S#6dacge#FuTcu&4i_cmG)~9u8KoSE&gzl;>BKY-D`A8ziACznCe3EyxdWvrLudX(`B? z59f@lm5iK+M*M^mXE19yBUG~1Di0YW1iAxP_}&Pv3u#Cbw%7^M9@q>+!$I3rl?xRR zdn?vvsUmL&zD_&OBRKg^%c2C&7EYU{I&{-X6WdimZay5u%PA;KywATFevADiVmo3a zu-@)p7T@p!5j#@_GeUYohi+JCnV;wrk7Y{NI90?bf>1k<&(mKohhz_`VLF1EHo zDvcdoVtmx%Z@ZD!>f z3(HG|VWp8}sBp6vz5g$|0#F@{$3a^EqKYgj46X28w6sZ*E_N)-X@<;VAb4!u}I9>x`-MmymSgEpQa7m&+y) zRiSCR&j9zg0j@2VV;1I(JJ0JVNZfnxV(gUhR!7hSQ48t-q77y?4|84c_J0#A`&R*v z+~@hLbJiQVk&}oR%&Xd#HLD0SG@?sl8=3R%yRE;F1b+@OE$CEe&( zi;L~h?UnoF+gxF{);gV9CB*=iNMS)euJpimDfhPf1OGP|?lkpC{?+9C%EOZ?;vFA~ z9$j@#$o~#LCQo8jqf+(c135*pB5s7vy-L_a?M{P4T~P;j*xy+A5sP*juKC#uorkB2 zz&U?(B{aBYVYaUkvGUlg61Gys2!Y$WvyyB^PY6aQB@Dv8!oev zfN#Ye5v{+CklIfhR>1cyWbm>%}Nu`b{W%CFhKe29Ps!_30RpLJZruAM{y9v-PFf zT-8v@b~%5m-kH|6sU4HGz=7VyOI6{P8_mP486Wl>zL6rXo`LpTDkMZVa(Yn>zY>ng z3UN=xrn{kM=q8^KX|(!&e#ZYO`A=8#{l7=a$iUj)Eog?ssFDDs&%B)?HR@kP-aVeyBd(&eUZXQg0N&3I?xE>~AiNw!{6Z!n@3t+Omy%^~_B!Dhd4vq;)VVD$_Jc^~I}+%cE^>Q3=>mn4@EI)m|+mh&RXg(G!N zqH!-7&9qC%i1y!==#hF+wD}@d>2?;5}J`Dr}73ukW1Z&oWsX zuve1%x5^g5T=!Pwa6X@5C2Z#I*RufK$xP6RPDlAuYktG@=LJ~sOVyeMMTije(2f8X-tXt z+*`4VRiKZrWeULnGdNw9Qy-MhHl~Ig?+|Oy8eJpl;MA*)euR{{E#YO??EemGHG1r; z-~xWsvep|sMCnvshwED5mZm(tTz)@vb#P_~Rh=_~z8`c+-*f|^Mt62xQ<`NQp4MpL+c!x<-#>4+D0hC&0Y({1(y7Kk1abZ+ z8;cA1%O2V@D-^ef0R1C)$7VYuB9LHj)|wQU4ryH=MdbqN8KDCJ2Kwj3ZJ?L3!cEh< zt=W2!UC42;K(GJiuo*7CB=6NOBgNC7XM$;^8HDRVx&R8jDV{MTtG`%+owi{xGI+!9 zu}u*a%TmTXr#{2V^ei!=;p31TMq_#jzEqrv_^K%`UCy=S8_sgRL$Os#Ee;apWeVd! zA_tEv0vFU$@Mj$vgWL0fBA$yRI*&AswluWw;os(6#v!V$RKTM7lCTvBQ040lG5k7wyksUr;Wu(tsM*ya%jPQ!l%LJ`w z!isY{dl2TLd9rO+{HpNDA_4#FeVeZVQ8fJORl zcp!WKWW;^}es-Js*ZXoqze06E1MQKaFy)_5=5mF6wplz*izCwA%3mN)UdFIrmw{Tt zsJgRV0F)M=fZ0_J&{mYBAS96MW#n*&WB^x6Er)y=DBoLxcC5ZO^((|Fq z&hi8TOy|_U9n)jeAP_*pJC{goLzmBC4t1Qpp;12YFzXvyYGJhk0cn!(?OWsTJo^Yn zW<#5ZHg04A-=8%bi3{cYs&aw_?*szuEzJ?_bMVa13MYfZL|LFa4no;salDz<@S zPcgS972#|y>iQ10%=?z~Y5`#{3*QNB_kE6wAl|p6N*L+Fx3*Lf+sM-##5?Lb?7YBX zc@m*{J7>y{g-vdJV5QM?y!l>cMKvTEGaIZDlgFWJ@o7#th*dTk!5xEm(Jx?ry$KO3!{y@V&NN^uPTgQ)i z4HJ^qhR1#N%Pzw~qIp(sQp^+;F$ukv9Q5R92+@;|sMtFXVu}J&8VMYl(3SpGWST{V zr9fp=0ueJ=5~7`rxr^8GG(dd8{!6dk~T3cRc8yq?kTCUTqIB?1?pH-4%bf6Bz!ny zmoA=yd>BVgu`~g0OySJZ3v$hO-k+R{;kcwRI0m3o+p~7Iu7rC0QlfYh&{K5WeYsys zkGL?QX&x3|SoeUQJ17pTUdUOe$P|+Pwv+G?Sr|rY*9Aq4egTIDo|wQ_3jVDHz25}hkavk#7K zmD`l=CA>kAaHGfNU2X5GaTuvmaNij|%E~W-n|J?m@}cLi5@2gzC1KNz8t^j-SWTJcsiR1@i}}*priU3#yS){T*AA0yf9Ydu%{ceRaUYm| z)a`tu1~dDI1Z*wA26#kz*b)MyijlL`iNVq?3iENOmEs(1++S!Uk?7w7&RUsVt@e5>I=BZ&ut>}QFWMvG{`4u`RluQ|g?FdrwP4SDUghHnms311PY zCUehjXgmV8t&GtD z9yZ-n&Lca)Sm#4u+~SLFZzGZ{&$Zy-?cw2CZ3cT8MXf*>(jWhGpVLB&Cc$OMe*0WRBH1tME_qm>6(0YO(d$$RT!RP5IV7fZI>wu?Yz1AnX$Li9;q(jB_R%_{1nP|$Wju8!B{ zYP2)>&55hL>zhkES0P&H7xc%xM!W)nFNbrYGR16`Q`-2B1BQ5yFDH}xWyMw+z=gwn z8MO|vv@MYtYcDl9%EqXGrn%0?I)U52-^PU~Xkrr&hZwzA>Zz<<%(ZVPtcNc4*j3`E z{K;5x@54%0NBCf}Rihni$tic+0PxN~Lm{+%Mre#SB9H}wXh+^a_uu9gURhFn(jow$ zcBE0<}rkJvPrlbA&Yt6Bo3~%Bj^8~FM;N|t*eCvp;#i+v643={=aIY-4t-;0naPo6> zc}=WqAYVE+u$5uHH7%Z;?IOr+%Q5R_NflR+`GS%=g0tMzXt;B1_P7wi^%q(?3=R3$ z8yo4kM1+p3F1{RW0xu*!0Ts$)`DjpIXPW(OEYIlj=+A&w=BQNO2*?2s!wV||@2

    A<)5rb?Ah6MGPY`W=S0h{ODpmwAsN3V!IhqdhCcx*Od zrq}QGw2yJ3FX*M86wPc^HLoJY@3xUOkNV_T{E6*`2?N6LNif^wPoIi4iw#Wa8s~LH zTOEeMPyQt-vM6a7LJax%`nBMa&in5I{zZ8UmAyDO{_siQ@rs}i#UR;5_Rlzz7Uju* zu}~YjLFTGZL&CeLr3Q{FZ}uH7hhB?!<@Irx6%`B<%S1TEvTbubf{iY8ofs@YA|2sk z^LUVWcu2dCD|qrTw+gAX+YHPBib;|=>~@(ktDB>Vx(%PFph7JFUp{I^`lVH4yaMzK zxQdcNdIvX%lYKAnfUD}2@bpKLZTDniW4&j(StX5qi@A=?9o~0+j}h{_)0&z0`Vp4zw=E$dYT}qJ-;8zRm(j} zbQaE3oI-h&R-(k@${Q0CsoP;~VW1}}tF)(;vLbh(>Kc!bO`F3~*W%Dz`FEutyM8}! z(43l*&X3yOACnL06vpk)@9f}8hLOh$Bt(UTHLl@_=d+WOz}!(*L{*t~kfHwWEbn1@ z#t&NurP(bi3iI{JYBj6Jh==iaP^{Z5FNh*k!8_3DwMB@rMwEb9CQ5^7%1vd{#l#BJ zVJ}_HNxi>#ApYR;O;G(=0LM!*>9RjNho}-X0y_&q?OS5PD`o#B6(FCz#ipC&iKni7 z0!f_QUxb;0b(nl|5Fs$$tacfo+qw0Z!=R;g*F00Aa~j*9qi58hDyu777He8J521q# zj@tdcdtkd@ivRJ1IHPerW2zhIKG$rG8-z?W%l`m+~{IQ|S67sk5H%?rvFA zRUDo0mh}2!^(3uM%J(oFiE@kIN!<7^?nJs7l0IqmIdumKN|-J1H-M3Vah`L2aO4>h zs>drI+d%bv#tm7`<-XPo=dlw;pIykUAzj!>K42LR1Mg*N&iY#PeHi~~ty!PDz$rwi z`Hq(rdv&c$G@~Joas0a|vl-%`ILE7v1|aiI#<>N?VKO4Y*l8o)JEnJ_5a*6Lu9UCS zpQ8a(P~mC zv%%L~T~WZ(nldRpT=hl#I~pGztDkq(6*cx>zR}_0+S<>48+dG2QxYP{_hVtIl|L8F zvD%NAJOptZz&d>6m=j9opB~R+@9}us8Fi@@4r+1&7NuWzr^QLHwM0gI6ka!-yIXE+_^ zo0@5ZjX-b*m%x!+ZCvt@$y!ti1>Gq5R|!D?FLhPmieuZwmDGWfXk;$3pzs#QvqGzw zn=b-ZNi8bwXroV#{ysjXe24i(5=EK_ER5S9Sv0+DxUKeY=l#rM%pC+f{JPvNCY%l= zJq|s2#jJpD<3i~oAw{c*^S|)iHHmC=KkxGo6v+aDQQBPiTIiD!6yMllOyt;$e1ax` zzhkrQ+d@u}M4Yi$jDMN5(~eTbVx`{vYf%5-=j&;JQ)!kbm|0D!QAIke5H6{dc^gT` zJ4C`Bp0!+X1uL`xWE}({Z)2WiE0%eUDQikjFoHXKnt9S+U~&Yw%8Ih(Bs#4Z&;&5h zy7_x$S7f#ZNk#fJUjqV={YGoIa4!Pk1P2mr;@HKZ6RTn`23lti$3ZDDW40)ZJHSO6 z4%S{WTX^F*FNS)3T5O|h?{C*oy&m`{+D+kyjq!HRP_!;rAjW$A2+~b$Vb(!%gss^@ zQ4knS-`rHcP^j}<(kKE!@LcIn7!Nk~SG@QAzJ%+KE#6z?X8bET9OTF20Sy7u;nT2N z`#q(_wJw`GRSKpOs&d{Djhp$aUHqmL{NG_r(# zAT&Gz5*M#}mW5LDLE0|xHHQ5TJ&7IrS82yZu86rGmf(S~$~&4#3A(!<)Rb*(5flBvkn5}O6J$F&YaB(yzhRFlNw@%zFdBxWu z1p`D6^JjRXY6+6{rgijVi49SL(jccBAPsSc>AlHj?@5--qEE8k+AqzO*H>2TK+KB# zpP;%(T&if>`lvwD0#~X8C7@HF`0f-PIae~I%%C2O3dmqKtkPRXXmOxHOhR>h?Y1;Z z2k3>p!LFP1Mq;2%1+*i<(f9If)BSwss@zA!c;PDld^CN*Q!nFu?tf5WA+TSd)<7Xx z^UH&?x-J9HPR16zZKr$OjLGqYa4&I6I*hBxM^5!wIUa%iU zfo+GJ3^d$lgwH{<-?>lY>*5vOs?j_UyJRe=%!QCczVj^UGikLOR{k+DcUmV$K+hKz zhZ9WNM24Uby#+(Lp+N*tswHj%oL(%uN{G*>H`?%F@w7vPL_xMiMGun4q={-&oCx&U0 z4VY^U-G!EyW(`A2MW=LdDn`*fEs%u-koU$i>?O7^=I9}%LJozejCjErydy{*RpLLR z)M6(n>B4hX(Bh}5`Q&SR&c{?CVWmuWWrV3bLeSk1@H!`iY^i2uoLIlgkMs~~UC>JL zV~>cA?YfmNVUFP+#>F?*aRu6N|1wDZQ(WM;E~;upgy~OWgcMijp8>bNoxu`#4*%w9#z*}9Ki{R5`aC&4k*EdTg28lzMQ|5QMwjO(9i z7>Mb zWX2q-z{O$G`*A=r7) zkW%o(m4TXh(=$PZ9YiQiAnFBOV&;LG5CF3VLCDM(;f3D~>e#4T%)A;en4NpO=m!u7>z~`^V_*>JEH5gM41B{nGgw z0)zAb{}z}UuPhQra}PZYwF8bGHyfBIjqJi>ebJZnQeEG%$VKc>GV1&|;n@?zjZ(Ed zY7a&ygZk|K=6^y5&e6mh_QJ&3re?ikPF-+3z^E?jxX&z%>Tya^;015ooy359G}|Bz zwHI<=7pghgOqH_LbkhE)DDR{STh>FB50#T9Klz2B>eIn{2$guBF6C z*4*Bj*HZ*vA_x0f;7C{ z0wqzmy0BW1D%7EPyxPIomM+69qr;&i$5IiIlEnuH)T#L?zT{tBqeYdk`(H919m+#y zxe6%azD7dwat3-&YIIgy+aNS@uX)*tRc|1>ZoiL5OHIx$;It1fRaE7ihEE84>nEBi z_00X32hE)$dKbYmiX@*~)S6c~;G%x~;8f-cyXfSL#$M&;p%ae3BRr+_V-Fn*REGpA z^%Bw&iZaz~e8>-8QRt&<69kB0vNt6lN2N7HN*Ru>a=LAm_rVZ8Ux|<+cWvYV<&lK& z7AQ2tJVn-VXk^)&La>qbZM-pF>(P1Fc^Lh@${l}78w4)4%!1L+pFFjSQ$yy)uC z$uV|Tg?%SUG0+Y3SFsNPjD0%1Q^YX{Uw4KLsxL}5UN?>idPB_Fr-H<4{I^$^81uw5 z!!Qr{x}kQAP`Tz|`Su7u6_B#JXNxIv)AQ`a$AfV4%qa1(i}3Xa8}(cOboMLM#t!gx z=i++JlUEH1D}&z)J_0p`{W;HMz!k zr^NYBFvh#T_!$lRdO6!Jbu$^9;*W+LNQ~izz(6f=J7ZQ3y|=W`h+teYLIr5A;A0u$ zM|Zak$kHKfkT}%TRN@`zw)7X9DmC-jnfUyuqU%tmSJ({PfFn{HSO$F=Fc@7;X-U7EtNpn#+s^sep@p(Cs=?lK>r^#(%alG&>eevHv zB&3Wk9^0%zIO_tjVN4(vcvqh%5wt5QsB&QzYjO0R6>T;FD{1DsYf0;LF3VJMT0%OZ z-$&W711l&-@dS%Fi$Px%>5?@AhdFP%_vl_c~_nMv_phy(fk@FllOMCchK{S0C- zgX!j`>WU$|$DLhB*y)3YudR+M_U&7`d;k;4w$|TBgz`@8kO)!=c*8Eh-~-F5PNpv} zcta;P*gdUf3jbU^zql4K)o(Vnahg_?DBPhH=UT%_YUhZho+0wP?!`jLB$J6=rw+X} zA&Kv^lg_h1j~gB~Yew!orm(AFppD=NH~rZw5xY0x&C$tiWq zJT7s@eZRZnIyaZ2I-W2@{LRkI-J@Sunl$w*o>Z}%#!mfzQ-4!oBjy;BoKBq5UNkp@ zk1jzBY?^4yKuBNHHVWzmJK~CF^HlSsS^xc4Xil#Ds>a+jFqJ$1+J7Xpp%LNVWVMKP zL`Z^?E09&8)JhI+v()P}ta_sPg<^ZF-z*t^G!wlHRTj}(5InnT21hP>%FI}=h)?lL zykwnC=peT$u}aJkgNdy~Ok60AokwysSEI8oV8BUX*yPP0w}K2Ag}{OvX?pFUX!44& z!R~pZ`G#FqH*P^g(B<%fEsFb%uhDjrh0v?5`iDyPM21gns3op+J7Y`7v*{o! z|FKRoBy;+BeklqAc$^oc!wE9Xm4?p)dAT=0qJLbVGbjfd;pR(6>Q5y~L0bynUj8RU z=ghvmBCOe1crd)n;&?U+a%&oC=HLcO&B@THc zmJ2DG2wIM~F>D{5)R`{huizRlB_Z|ljz?pchv;7jxmpnAe!|&2 zJ;xFTlG|4A@*jVVA3PxE<=(CRXfpQU7!_HCoGCjpRgknZp1^-zo#5=%ZB$%j!EYEZ z3F7t~L=)gpnZY0ROMS=@HG8#T{qG1UnVpz6B6IhKV=9Vjyc$OLm?t{?zS4!Xf`spa zLHaEFpL6Hu$4=s;HTN?DcpTuFy9eG`r4k@1kH33PqkQ>UBv+f*SAj)`Fc(%1)9&If z%)6cu)ozlOI6(A8hyw^ol^qzOJ9wZI(0?EiGKedNSv;r*qLhL8q%m`txw7aU>*})Q z1+#d|ruHTym2Oh7XXm=&3n(Tz!#Bd?SXmvrZ)(M|LrE}2)NAy!mY5Dd9}rBUmoDsN zNMjf)vCczsIbx=Xc`4=&ic+?93ocPoGm1Smy1<_6xBN)fb*hEFyR_=CS_d9}DH0pC zry?6ZV$i;36z!}uER_mv@n9?Tu2i$C`Mk9COd_YAK7$ozJ?nZXpY7A%o8CsECLp)P zg2cAnJ_sBQMarp)$TBNa#zsqK_5a%7_9*9laMxfl|J0+7M~9j0yQtadsEO+aSmwue zYNRWmi%jzxmfz0ua+rlT_`h`W{2(LdBvq75!*ne8fd}1K>_F}gNbhQ)qeoH^*ro-( zg{f)=;%V%7sHE403Lx)L*#5*UTBn{S0>{%$WU^pQtu`?7g*RSfVPowmd2oxN@Qom| z^AFC%Kw(Aem#^LlZIP55#OlGmeE7|ulJ$WeRTC02Jh4G`x_`cS^y z-Z=r!(A8YAT6=)cb^Uy*)F?dTE@9-Re-(*JF`?<^$Z?x&JQs0JMB8>IVG!vOis@0S zN_;FFMH34cd%&GlLNThTQ=i2v&HnRiXp;IAo)SR{N(FTHmCV0MU$k3bULY*F1MD1M zTJnN8iLGdDR!-?x$!T>+f3pO5?ec8(Q<*Uom(iirEgc-roD>Uo4$NBc2? z2DJSQcirOjV1&F{VXGmw)%Y7Ija!*UN2 zKPJP_CuWw5+V-)31-NeW_{xWEOkx5XJy;?3)%y7rhWYVbUq}-)2`%Bdi9uVXyG`)} zwc5iw-U59kEJWwr*%8)3hu=NMM{z(OL58|YC$`~;D*elpo<5MkH2bKeq^XF<68E3Y zYglAui_=#8K5~ABDF5$R=>-n<`bZ0xUZkbD^1d3^gR7v@*xkR|6pZd6jecD=*o5(u z)m(j{wyYgapo&$wttNhVI}taf*W067jVZzWP%>fXUxn)U@Dk?13&R*gR&83<`x|-0 zm4-I~sLRibRGRoJ`g29p1{ALTe=hM1eOz)D%B`j?f}2oi?c~~V6QbcGjol+8YxNaC z;-Q_o_NBmDg#$1wso32jLzT>m^!j|cz7U6JXulUPygG0D^SDv3al_Lwh)|ux@DP`t zL^M)v7SXPviT%5q2mh5-IZow$<7&T{&>l|2jg^llZb@O<#LU&`v#i1kV!NZQoNfrC z;bMoFEJlO@&}SzGRt%r|vFePs>)c=p=y$_=nyRQI!Y9k{tD%D8!7-#cqF5}80YCWt zgOqw&ZspkSvIPu21}c0d;6&;)&n~5*hcKN9itRZ}KZj_6H2 z;5wPg^f!;G$22Ez7*Fa8OUubt;hp@L=H8*9IM1}3)&*wE2^gsDD8DX;mg)fAbV*Ce zJNEONjWc@JQCWMGkMO$7=_iSZ6S1nvw7JEzASb#hlkZ9Wfw0OJoI<00%Sm<=isPOV zsHmd$!!twe;>&HaZaDCJv}3+-p{cBPDSxOg3` zeA8pVJt93sP6O}dE2AS)tRx-Khd!O!gNX3SO=NH`Xo7kj=bqnpX+~*NFBMwkgG>PE z48-Sa#YNdXR;RF0O>BA}aoTQ;klQ?aqgYTj>C}69w_lRD8FD&ONA!p5%=cTSI-^_c zn%~wD!sm;bPI5;C)dUe&R!akPtP@6&mj}$?$B9>@G0_mIRf@U$G~Awt7VYfOX(>FG z+nogYe%4`=JEo&glQ-mHVyht>&473WJ&_|Mblzv}M zDW~D0UzRCkN=P*idb81dhb*$;LtuxByEhUKh`5WSYM&M7LnYn>d%Kexfz{eEuWgmM zyZ{VQhSL^Q4*lKuvxDv3`KuD z>jsRet#97k?3H(TogytrslE;*Ad2ctBm($ji(u`Ur;>vnvT2 zDIQ966uHrBi4}yg28My9{jWtvC`UP1oZRc<2JsKo9>qb9Y7#z12%HHM+E&T_ zewqMy(=ldJjH}1e{%^)gQ#i`u)p8$UGP}}{MZ-`lDUHefMhsq`fWX9vkNnFGAfWrx zht+%f>|DUUXOo+1@c3XXDK$p^gSgK2aS}>lyI#GvG1B5)4-#qv<0cxjAS%Iw3rdX4 z4{P_5``hX_7(?!G6L0`U`j~q1h7@)N&U@3V+UU#))>!e9yx98nh=op$NgK(ahA|9s(tKjMkVLTW; zUgL9?!_srzxWay)YLkYRKy&amvr~2Er^fY0!dmLb2|EpA>1WfRXiR-=_e>ms6FE@E zc#awUU^F*bFcZm7r)!m6WYbmk?P>miy7YH13`-sahEs(vPgXy&0SWbYL1y1aZzmQ- zR`oGBBq9Uomte=NRV=6z@ zVNJbp$%MrD=s`Tdpe@)NO}$L2`>K9yrqCvFm?B5mSrPklHKH^SQhB6;%lnBNY5}?n zhCnD-YxrpDim_E!X`io|1eUP?pH|A8880Nh^Qp45h*g{ zwiR!b*nwdqsf_&y%CnuQmOlt&1Kk?gb)2~Jz_R6{&-rnmtSn*qv%SYEKgF}qRrqGs zTt8N5rT}#NIJnEG6vY^jMVE^)@F@eQ^4s{*R%d`~>U0D`7sD78Ny+RW{CojTLpCI&^z-}ognGPu~$ zYRu!b$v)lcia3vz4Y97T%}4v%{W*o8p)GeH)Qfe>bGuDoG$)x6SCimWJkG2S&a#fp zPaFyP2?zBY_)5b`;DQ^j~Rr zuCdt75WmHMdpcU;KFM#WD78q$3R85X)cng=1549wk(dVgfjWHSWE;jOGE^}^43UD?gVJlF~TKOcev!z>lT`1`?bmSFj2dxy*xFzU~T*;A{5 z#|o}LSj$XCYbv4+)R{HINLvWut6Lp8%0|=6#ZwLfQ=IsM?Yh(TXXACTLsWaHg0P!Q zyQ;5s+D8|S*yy}??Ll6tKdm3c&5J+ZU+{Iu+-WG;arcB5kXr@Tc}M*+#XTP2FyktA z-JvBI3xsqA4h4I{y@LJ=BgzezDa%~039BP^cGHOt` zuDL6X-A}x0d8ZG4#3HmfBcO64jawbfYjNYpv1O{`k+1#6?qAH{LFT-ck3^ zJBqd+O+PHtHwSTNOSW!Gr8A@CR@Kv2|IHK8;;;wfr-I>imc(P?!EU%~Q>~EZFHBqGp4(ct0j2RE^X;{gmD^|j zrgtTFxvf+dcCtjcyu(jM)V4W-N(SA?TF<;&N*c19{Udv{Ul*3kFVYmG|)t>>Ei;(R^ft3FO>ZHsv( zSZge-aX&frSFe_CB;^_Hi@e-9eLVQ^DyB+>A=Py;2n``Q_S-G{V-^H>E0hsQ1&&Sx zKoExpaCif^?&_XePek^9G&#*6-&eMzn0U(D)|?|VA%r#WUyj&8B0nvj)hwt1L{i7# zKnkY<3l`Oa{4_k9GV)m27v{By^$s(ORgTym-k9_&Fys~02-P8o&He%VBUEorBH89< zX#KWN@P;KrWOcn@F@>FDg>xPKyj0a|TlT4rwt?-ex0%9isPcxt(`fn;hlwPcG~Psb zN>6W!!}n$MC#7Y(Ng+X)384=C;c5>RhYN`KSXw1`RA1SS*ehfYmn9y`VZ4vhJ5sN) z9@JGX&4MaOPA1IXpXt=I#S4|xk#b^yFf`tcBfUFFP-1$Zp}h+)m>;wr&|9`l#0qz{ z7V3+9Izpme){4A~JkVBD2dHVi@-5USKe0<7Y0@gX-q;h-e(!$&D{QG6i( zS=nL@`MOqjQf=LC8)tEGi1`q6nAXomicW3s?#~r@mC<#rKX4V4d zfQK=&H+6A!HZ!t=|A!omt>M|Zh?t1}0{{R3F5!&tgD$b zqqyzA(V}K14yI;|vS#)cu9ifsEUZlY{Qnbv7^I=Q)+IE8tHdAbBlAol!lt#-U4q!S z2giES_;GwWkGlPqDWlAmP=Pnci0~MB>yo$%{ISv6z}21Ov)d2xx9KH|dH&b?-R*yc z^q!stK^=Zgdl%$X_w0E}Ov91_!h?g;HoiQDPslBOcQld;uXL&Lzw7Nn_7j#T1=uen z1h4f4UCRsgK-z?vPSF&c=V%%O(>m?n(!QXEKtI1#O=5EC&Ton{N8A@g)(VQZF%-(| zMy!(3=-GvZ)S(>Cx0om9ZhOyx&BJc>_J~hWy#h!oS1z$P^LrKT>-ib1V`$or%J(SF zw`*qFxG!phPnC#93TI>dP)La&MquLDA1uC^+Fi6XCT!!?>aMo2uO7uWU;2fu1(hL5 z?pPU`SC;4Ihnw4)=0Kf7XhFtSop?8r(mT~slBaIA`HeZnx|Gn|mB4r5q{s{l^_sPR z53%)FsM}{=xDWo|4udc8Fns&40rjv%BbpEsPLU*wh^5>%Ph)enc2k*W#(%ZweN(R6 z8+^|<9AC$L!*fcHSD`>&?CYC2E#+{Yn|v9$(eWLpptzXBw;77cx8Y$*+DIws{dlJm8H`%=Swj^v}2t^3jg#v{Yh9Ftrg^I8Y7FQ&I znS#{C_^x_bU%QhV4;Xn#H!Er)AnY*JqY0L_bK4_6l3hcO@i{e%6#SQ^$1dHA{=QG( z%p9a_!;A5d9gXDhij{knwrE;LS)_>qN-}vuy_n3)bQw7wPef1gE`2<1WS!O20gLok z*V^~g>7em7ykBk`g3gauj|t5NzKG+`Bj%EG7%idt*)huFD>!nQ$uPOz zbR0sfP@!9Gtrr*3o9VigPaUFP1;1KTtBrL&h@P8%3_ne`7gX=6fnH&3Bf)PYwH?3~ zlzwFiy!Dc2(!|#VN)kw0FYTd@ds<3R-}@mAn|4io*`!jKT4tz1n7FQq-a~0YXx{Xj zl~MeRQXIyY%r@j4(X86D&vpQqFr5_vW_yBsWL?8rwFEx_vd z;H^gZ4vGN{J;c?_ZSs1UHis^PE*91){%fgarGLqQbCI8s^$X3;@Qd3q5i>h}F0CQj zATGp$AYcMl=*#gATBkIyxm!DURK~X8#<4S_P4q6S7J--)JMhH9F!cM%FO1SnN_T@6 zcF$$5Kgm~jPnM98lTpe_n>sC;SiS%fRLe6A!uyA_QCyy#G({<`nzjf_M_0R4s4E}m z_I#Tkt8!Q6$IZ=WF1IFMm4U>cLS?@mcXF%Y0$XT6Cw^7|8cSQWJux+F@cr z$~^L>_hO;RJz}LW_>;_GnzKd-(-ApspUWd-r;oF6*$+S(KFNlICJ1$yHbO8%ioYX( zjCSb*obnB%$lZt|`3|)SV3ZutfxTN*%E`;p^u;%SBj6QJD%!oD{E^X#sOby z3?tLbD(|h%qEF?rl&4>kjL6bpeCFbK-1$B5lNo2a`D2cNGVo^+jJ!IF!nq@du!DZp z@2OVgF9SAsrNK8TLZaW}f;?rrpc$31Y(`Fwsb#te{OAwGBfx!LWs9MJWxy)xq~v0z zL^djdqZKvR;`SJs(e;MqAuOptSkKNt zS4^Xep;S2nCdbxD1iX=R zwLqRB<^#V1hfIcj*q= zMaefD<#bQE>VEbdC>7rr5b~MOOb$_ZQ7ZU=1s$Y-oBDWno^Hy{BZ|eUCj~JY#R570 z)Yq<;*IOa}b{pBTXkp$%%Wf|RovD3^6uCpLEcysBR{wQKuP^lSiCwzihT|m^YaF!# z$rVwHa6|6TrYe;%{Wc6q<~3jgE1M{%uUjA7+YopB%e48cf6<=g|Db9PaVfS`SARF< z8JBN`dL>Yr8bp@bCKOI4y85kOedJ0wqgg%r-Sg_P{SsXIqIuQ!{&TH|`23;g6kF86~?|DB$L?SiNJA&-e=(3)}Msoy&EplE}3~ zRt|E~$4&_>L`en2fNVb_!jD=-EGYNPMmynhJWMUaB>aH1ws3vQtL``Qr(Wt-q{wN$ zBRTyVBtE!2QM;=RCWgS#DueaegCy8VW;hE0z7hLX4c!T*6w}STdC=84iO-R00j4boybo9l z5x6TICAmRs;nI&2@+JaCc>uc{QBBmX?%0RzGt+`LnVd70wE6ZWNTo!FA$cuj7 z2Vq@-8(jEw-68|#mh-7QZK&iZRmLWTIybzwgj#OK12+aIVLk1I>69akZ<)ornjK5R z$)lyj0OoYjGG;T6<1y3Z<(L^1U+wNdKRENm#qy!i}^zk zj$2_x#x@tq#~q;qM2b;ifG4aq?&pNNb-(wN?Z$I>)x$P2xfjF`ZuSri$^%5EHsZ&p zS$Zuh_)-dXAbf$^bj2V?8KGJyjjecjIst-#h18eop*}}Y7p_^FfZ8IwlpL~iYvtdN zFMLBgRg-O|V1&PQyWm8yNc>cVArkOlAF{j-O=5~*`4n{=pd!M5Lk;j%u(-(3=D3Ej zA5yru{fe}|v{rNo>^3dm>%bukqzvKCv}6uJIp(Q21pRZL-Ip|p+k2whdfE2J>V2RP z#%OC4t2I1^l!~q@ylf^x6rz1XfX=gO?MOK{N3Du6+On1i45e)$M>*q$mD?Z6wDIsS z3g%k`xUY}kU@$W|EWhXXBj?;O6D%C|oSC;y4Kt{6B7F7DZ8wLsO6b9wt&T_BWyEZq zI@=C3tsY^GR!z0sB)=8Hmc(m}if?iH=&G&lQmGsppQGhcoSGGLr(JYIHf#u3C$P+> zR;981!V>oYnk!I=Ku@wUB;*kMDP(mZ7m<>M4XIoJ_>Z7I5${y{j0bvmc=tT&A->}` z=`k^{@H$+zN}k@@%G62spN)W%;~#!bEwtQLH<$tYe1-Mp3g@j@mv3GuNe*B^E;;{S z(xOswia_K7nZ+Vi;4m3Ow?hKQgt@oMoOKjU3g>!3Xlb)lj^_U_Op)V1tnmLoQ{-U& z54rk3izzZQ5wWoS4}tvO#~S}DGXI~fk&TIq<^N%go(8j$4m@(q5r>$tDXj>z*tsC{ zh1DZ>NwGTan!;p(Z;zP+EYs;#p??z^!Sq-(_(@XE!ChnBe zh*1uklrr7|!U-yNgeiTz@-+0|815U3&_(GhsGGW`JQH{>9ZB##DQc35@ZR)$chXq* zp6#rw%GVRa0xxK(pXY ze=Dj(3zR<2YZ~T-^BdI^b#UyrUY zky=N!oCc|9A=4>>-$~W7MoYKP-s?lRh8!yDC49bKy|F7V^@=F@U4w6cf)k zgxQe@=CM;y&J}@~_gz(J;16s4HZCyoIV9FUz*iBd8b1gsR0ha53$vtjSOM!9llW0m zc|`0YC)84vFcj#tQ!o9L#2^eX3}JGkIZFu+^)GBA$idEc5FVUWH7I6AEoc`9L*Ua! z!)t2m6<0{%)LiJ2ee${qA^l?HLEZT$=k@RXH!(5SE@-vzsIVwdBvew#b((Ip7U%nt zdu!$G=$SKB1zyl7D4uj3<(Jzb2!P`?w5P(~?@U~%2mNOHr*9oZ%PI>0udMz}s`f^v z0We}3#(KMmYWVLGNiFk1jI) zNFkr#Va;r6g+lpC93r&7$DsWq?IPxfVJIY_lJj!x3<(gYRLf6nu#_UJ4tsRDffnNg zzHU@SIFvv}Pm;tME_NM`58S)Cu=u^Nnt=c=X*0_p=t}7o$5Y6fLRBItn67q+50Hy? zmZaPG)V5Qy&j8_~R|vY?PbtAEc+YX&_*U)T5Msg6MjTgBESB z$zY<3xjGShWjP1lg#ed%dwH$iN1Keq*B#oE2E9DsN3G0=;yiM`Z+5AzkDb+Ww=%jcF z+S~~>cs=uotBpH%Q7}HSw~nVH&Q49p$Wd9T(s-=3dJKkhlm(-i^BD>)#(7x7KaFQL zyDM6IwD_!@42&YJ)uQbequ%i0T+o}qHWM+MX$xUeFl=mVxoIoTbvM)5*I-OTG^enj zy4|rsSBF1U@9%FKjR*soB@!Qyj>^23$?^_jzp(f!+Z1@+HIiqS-!fOF|H67q}xU%~% zJ>^2oznd52sd7jLN6A+Fl&ps1SqxA zn+N>f5%-)d^^j~tL*Y~*ZSZlftd^`iXy9%9;OQa!)@siM#k*g0R7tud3sZPpg$-(`P&Ys7gJx4j;GQKk2)PMzEYc*QVqqO{Ox z8Wv2uh)J(ou+&iC3%ei|q~xz=a57#|jA|Fv#K*V$A4{}suVmb*!eNE*m_kGlZ5zJ; z3~+7ouUmQW!I-|Ho!NtA9Yj?9`_53>gp|yoy+uy42jPe1@~{+4|3`6?8)=accJdXDkZfHy|D;uG{(EO8u1yXg(9PtMF-6~&3d zgxhq=Ldwj-dRL*3kNd}VhKEt%RlP9n_#oppQI$qEQ|}Yin=?-h$a~ucfF|H~arvCrTxX|(pE6COxnc}h0svR?>mA^KeWoL~d>dvbu za3n^y@8JY-#UX+mV*`~$iYjP(%0!tAL`V0V|twl*+L#2vBJEsSn@nC>K?hoV=$zz3VI z51mrj#^>;ES&E*buR zkdfApZlwDODm98O*Q1PhZ&_8LOXI+t%Q%(mX{OihHxqKk;`##i)fQA(kZ$t+@LYip zf99x$rNhCY8~A2dey3HO=Z2m3JQ<}))l>A4(;xvx>e`i=;MTo|M#_%m?SO(8&!;oW*5-GLIR%<^kx1%Hl+q0Z%X_ zkSzFfpKSG~Cz$IX8MRy@994pTzLCu)NiY|WPYZUj^6Og@+>4E2@4>*1is^Nn16HAf zy8HH=24XHre!#d(J^9i4nNlAkpJZsGw_ezdsz6nFBx>{vRhP?92cKHdkEFuMxd(hd$*wumf{$@NW9$M1Q& zeAqJ&+yk73`LrjGg6N&m48xcoYoID9F~$Dnexi1>QIohvZEZRKN@bsV`(b5}8q&Fb zrfT|=i6E7MtG=fr4!54PR#tp60z12cc6DN9%ZvI2^T!X`7Iwk^c6CQO@v zZHSEW#4S%L53v#mBD{`ZP?c7~L@#^vt@Oq*Hc_ zjM0YnPoui{1=Cu_CX!72eBT*FU$qQEnqLksvwWmQJrK29g2#KxqPI0 zxu`~FUN+{hns_5AW$0ft{t3N3z+1Pup{MC5#2CqEg0V#2|CAP{z1z*nA_KML)!}TA zr@9lJ4;^iL+Hbfx8c6*GT)$+acjk+u28^inR0t1LcQbCWkmvB?TzP5BwnDg(Eggo| zUC?~z7!oV3_rmQUL}|~<3@(4JT4!5IgKCt03@14el>32{8`LQ{H9z$4t%Q>PKt4UL z=w^z+P-;BoF7Q%;Qjv9(DEd13r}6_cbDORtVS}!2@=ZR=eRDU@4l4NarBb1ziGYoH z2h+%TGki;?s_{2)mE){(8jL%zeaf+5I2DjUuB}Q~1Nt32H~AZ)B~5YGFUqvXrrt-< z^If2>&cGv6zA+!bKOy}x!@317<|aGJ*!b(3*nl6$|Z*EzjIC~ zw3@^ZX+5}To0Y|s7lrWCyI&6hm-&9n{YQX)UkT$}{f6*aZ z&iB+*(!U(JIbqo1$v9_*>P~b`UVyxg2_icf`1fg6wKOv!oHV^sSMeNgp{CO|b*aM* z#`I6}p3Vs54s&#PT6Zae7IO{!SJA`;V*#$kWIB;yPuonZ@0gkQPB361XL!8Yl& z1+BL3Pc&z?DFujrGK)C1pnOV+0qKn_-s8V4GQ_|my1&;2M32zX(?|}!MCTjC=52J7sL5E$Z^l^+raBaVTa0+@z?)QLF25icdzWn^ zD5)B8e5%Do2l{a-w&0i+;kREr{514ST~F;iSk9RDC2{>dvg)fy8X)AMF2`Wjl>;$r zyX&bFwHM{!?4;oc+D#kUSO*Awk^*c6`=U=HCBKxfFt4A!DL$xVQJY8NSBgV9I8))= z>zTbx?uW6#OiU4WlFdrEiu_;Hy;H1c;g+pCZQHhO+qP}nwr$(?nzn7PX=_dMti7vF zc0KIe%DFlBCN-YM!^n8(`IFw#{@%XsnHQE5-k9%SZ55Z&h!Hdke+r>^HM!sZC@z2; zBXyE{9zUp%KC&u3!oL zmYkPYkp0jNZhy&Ek=*Yvwii$LNJ2XZcPe@bo1!3>+sR0z6FlB_D76~EdeeMk*iB<} zf>}t5DJqe7U+pRJ*}sAN@0^%_SQGy*oS6T(@%|rmXaE0`6Z4PC{P#`_I|s|ZoS2zJ zXt*bXWvNt#5zJR=mYO-jlxAxL1&*xbC`x;2GLm!+zVhb*(p+Krn0LqtGJC(2XugR8 zT-YB!aZeA{#j{4chxVp4W*3;kebk&zJvX2MwxD*K-!`1F!7_thv#O$nI|l1jw)D^t zih$H1?C~vxLTnrbhzq{lnfp`tW@{l*qJczVg&R;ki(C-g@fD94iI=j7*kDlnlp6vp zsIs1qrgm(m2$46uo_&C&ChY-tek zhy*~--$Qg|%1zXcSnp72svb)=S3;x*cX)Urtd8xO-OBXDE;4Stxvda1mK?oNtM82$aDf5$DV{Gu|p z!%Ttun?%j~d%jSopiIEY1w+Yt4y0XNLx&=xXN%_S(Cs%G6tf5}v1Y$#2ba;x6Yffm zI+93~a+t#}%wgX=IldNZpf8It7Id8{)$U1C_Vi67((saAlVpuzhdbrAY>V2~tZ7JF zVQM_aStW0vyKAWe!7#l5Lqq{6u4mdYM^qZ=-<^=0o%xxh^AGatSExyCwZ(XIjh>W*15M@2oll)!>?j&uJzZ!|vx%x)1Q`kP8WZ;dF2(P4a zFD}9|7naxdaPeSjs5o2+=;wtI1_R-Xn2jVF&&Bq4Ho(#zu%;OA5+-ZoJ#L$42JUm? zKdHgdXNq+9>B&#EzOEgrbI(Aq?{@*u9e=TjVI3;$M*IP92V!CxTkXS#x5y+q-59$O zLR40xLS%yUN__N413VuNU&|FMN25bkarS0NyHNZzwQKNYRCr?uZuWLj)L(AW-=tVk zGG0+cR8{8=J~QBE7LoF}*AcGJx3{ceeaSHmf7h|Yrjp7%Z`yOwqeX*xb)y(eX65>? z=z$rjx*t!}vOz=D{$hy+Y#g#M1bE)g*JSAMfPvW3swMqdp5Kv@nf`^U%hr+ zl6}5WVUccVl(J>z2VacU>Vlg9qNyPsY~f3Aw{aqxP~yC}5AhRvSfbF}H#6z%;|zZL z?nCo1fR_Vc|51I>xV%}|kyt*;9NAcTH~&PtvI*I$GD=LbAqKDu@I3d5Yb3YiwM;0Z zU{%Gx1H%Xpz+uS(h}wV24HI9Hs5sXuQxgc?IOUyrBqW#KV0zkhi8KsJ>`Xy+SSLyo zX}&x?+ld%CAZqP(OX)f8P*ThS%HQj6?;ZN0USIHVs9a3P7Ag-Dj2q_^&33_~7~9wz zY^)}TUxD{JI;JNZT6%F^ag0n5%94y7IQq0}eSnYvGoh>kZMBxu7s`RJJT$4c z=_U*IDbv6cw#Ks;SU7|((!(VdWJ@f#E5IuDU$IBFkOo}oSWddm4nTl_q>FsaBr2Y8 zyjw#Eb{ZTo!CE3I2rSFtaDTTG4u0umAuidIK0`>V~^5_Z<>J_na zF(~8YPDs&|*=kh7fO0(gV3Qe^K41Fwifv?u)ZP0q6Am=;A)YqfL+xtlA~HANqW)u{ z4a<5F+)j6@ryuysX@`CsXn;j?`=k;cjjs|(CH?EAk4Jo86Qu+d<#|c_H1jqsfVDiS zLj+J-TA}R<+cmLAP_(dSr0Zm!SqT}ewaPMTLI^NgZd4O17L_x+);sdt8oRg%nflad zwr*k!2pAQ%2QYrGf_MT|O#g3P;wP+_d2{awnOd0@3>v6#`*(;VD1L_hDb_Gjkr4gH z6NHk9%*dTbczJ zxQ>ter)>{e_(UxdjAV-7OwY+7&zg)hME}`mdxGRsNT3K{5w6W$D|}fX{1b2C7A&70 z9_XD%FRgzMCq~P_$zd{tKR^!hNQy!>Gz;Iyf;65LG{h=-xAf^ZzjJTAk5+}c@4_* zpVDgZI5l^5RkWz&h4(GhfsSG9H7y7!#v{xb2-=%@0m9)h{Rz zMCr&`Ak}A~1hh=6ALu29>)hwG)wjVlUE8$|D@bGq(JEM?vi*M%lV( zeFh*Yi!vTnf>w))UAkY)YfFhll->By#Q9E9jD}On9sY5aUvfX6VAU6$_Am$_PN__a z(C$T$jC}5AC0B$NoW6yC<-C<94?|Te?P3JtQ+IAw4lgaju);_U!q<*lFz0WcZ&iG~ z9>#o71OglNZ(2pTDWrZFbYY|y#}wS&xc1Lwgf~N==Smku)Pcsvjfx=Nh`wDouC<>W zHxFse3k`!fFE(wAN*&jPkwrg~CG*6DAYP^9UEc*mZ+&7hvSEmj{bi*1j>*g1FcYQy zGZf)-%ac&*1ev2#29UZ1M`6$xAhjr;kIyt#m11H6>xwLPLZl7?NxImPK*pJLXp9%i z#m!z%twzXL)5NSz*OiFE!T1%mu6ZbQPQ4k+oG{u?_fV#9tCh-4j`51mK&A!X92E~q zmo~CnD#Pb&%&2^}Qmkpnp2HRzUBKYJco-P0d*pS;vElA$fhcODithn~ezUrl8V^z<4wS5Z-x%M0GOt-zup^gV2Y_ z0mM3+0Bl@2*H}Q46IN?(!MJky;+#0v?!}eF6-;lXCA~NQIN8 z9CZ}(kT{>zyIvQxWvfH-`!T|nTYd9E$;vYwA9_bEx+jZK=md50_B(AV6IqY>CY+~B z!jCSU#wk4KFOC~BV%+um#b=+1x$H7o`;wsqQ6-)Zyo>Y#?NI@Lo#dhvO8u%h zpbU`Bib65)KoOY3qR76V=b<}oK7~C!G9{a@sTq&0+8E25(0$LH!`;DvQJ^*E-KmCm z&#v1YoMnL%TC7t1cu0f0COh1yO4jsOPjWdtN`BpeNWi3BEy~ju4R&pW zMIs$s%}O0x-S^w4ENXuDRoFNaO`IcOV=M74+g{gX?|Ao2yHNE_f@cx;KnjiX zG{PLfuc@CLRkU9FR~|xfE^GD&{*z&{J&sX$9GR}8FwEoi@!D}Uq_w;)7 zn6S_Dh$4;K5`}dauHB%xE?h#t+F^)15A?0Of5R3gL={|2aHtAW>_5xAa%Jb6z79yb z!43&0#Gip6IJ*!^2WE=(?fN#a(}=4$trl`{G#JAVtRMiG0g zL~2>vqEi@q#t(I5gC!S+WC#&=w;_0%w5z+*oF1YoK3@lR(!IOEb`0N^;Hs-JnWeT^^U86|6ZJZl1<*d6BBvyFKqdeR$Go;{48h963lRFH= zAFY8Yn8p^alF5=7IGf}sd}LFv(_YHg6M3|Gx^@=wDo|Zzvv@S3jwFY( zx>_3T$n(b)QHlhGM7da<=wBeY3YgE}-7xxJ1U&)uV-4eU#nP_2-@8NvF#~HWZCn1L z$4N|$255<-t)3H28q9zKlD*9e07o_utIQNN2Q5?irr*oHB*aKy`r_lE2zFbSn+GOF za~)lO?3=xR*y_8JOXp5eyBS&tlfO}(<^ddzBk+XA$mrkBXQg@-jn~kD1uja8b`1{? zpHidrth{l!(tb@}zD>!=x-H>wy>S0Sa@g)Ly^q9F*iWy58kI4pf8r*h0fycjzvt>m zGeu#{)2BJ_I%>V&cSh}@%cjE6uOx^&U8eNAJS7M+CCno$fns$h_c+<1VPesaZGPUj zSi!Bt@m7$7>tiV^gme}oDRU^Vy^b=i86z_D6gUcy-K0bn$fb0WbxZ;@^DKQtSO--7 ztPXJRJ8_$zboNDp^28^%@Otdcad`~Q9=8S3$D0~L3Ew&NZpQ)q@FaG`i=zhU6CQxdgS)zF8vc?G<9yA?cznfJP{I4Q-`f_ewewi_Y%- zM#S8^zb#?l&GMg--e*F5szJLYH8rK)0&`U53WVG|sefaV2U{Q07_Og4sY*IePYca(p*xc>$Jx!~1` zDDDzv3N5|@`RwRB{s1KIrHfO=ag~;a7*v4)aX5>;46#~&Qo-MXG{2Up+V#F|u5(@P z@^>El-}#6v|FXUQ53)aO|BlbUk81q4-XS9!E8D-kLrzwN6zpR!NBG*h zG8(x9FZcGN+Z$dV&2Cekylr(1QKFt~I1Xfw>**wGH+zxXBq>`TK~-4wUb+c<932~1 z)vFg;vB^sacfNE{Lb(r6N-;KRU3ulV4Ja@k^TyJC^SO4H&JsM(&$=_(@K0X%GWHKh zPfFPr^P5y=@4x7PR{KS z9AP%DLQ9m$yJEIlnTF@P1mfk|(3mPZrgXeMV)WSqOrw1bWmsff+>v~J*)$#x04N)M zVF^f+Ygc+o>NxPkI=CO0TwS(0V8IG4ah6YtWv7y8Yshl86Dx^l*`4sWC_D$s>R^;Q0fe3}&DW436*CTwd zw0}ZIa%KUxY*!@hfSo^pg#x|&DASh}`rM(L-9dL2A!T9vCJ=3If(T5n0{7l_kk2Yy zPkOf+KY;wPC_f(s+X+BeW5N9uMnhb?^g%$t8~-HaWK6{1@r;GWyG}d1npO}CK0{II zdojP>*cK_HxhpeZ>*yPJXB}D?`{A}O2@UQmzmkcu)k4y9xQD_>My_SLG!~;?msvE1 znorq|$W=#VoH;Mz5nr5l9-RvI5QC{2kG0aiIKInvI;21$d)J|drh6BeWNV9K6ThTe z7!gEkEVPUitRhh?kk!n0bZMSN2Az*d(7ut#0!=)zwX*}Coxxc;cyCUWU1o8( zwvLtQ6Ui#Ehz^CcE7`fx3p;j-)k)Y#$rgCYTaQ;VQjT%$M+80z@%mnAHtY#p(XNFR1P+;&UO(*+`tga^p{0=UO%64!a_* zBa_Vx6jcsM?7o-j{;Ku{qXrDIfN4gRgH3B?57cR29XpV_ygDab<%xUG=j+5;uE@=C z(HK&HDWnXNWNd8Zx@BqFa=RDUIHJ?9)HqG72gg^#0o(iyXL*W#b{k&UO{qj(bTzKT zo_aj{IyACsbmw}#->p2>D0GB(EHm*}rg>mDwM9!)|WPDjprfH#UxrltLR zs31ny?#g~;Q2|3^j56Y`?$@XW4%|9@@d102+}&XlP~ET@DB~uYt6<;=mT#L8Vx~HG zTbq)1b=Jr2lGv<{p?1GxK-yQ|IU8m0gWf1{EP}#cL7T(DMlQ#VGF>yH_NU6)WKl_} z890QXDII(hy^_)g92u&0Pa7(7X+~Xw2ykxD@rzMvkHtL@zc$5NR&-Ri`rPL?iqC5W z^aC`<$4BBa%komESl?ED&p)11hA>6qBx3oCldgp&S>OUjOizkTfIa1W{vhtul-e2S zODVufl_-j3EcJ1!YnMOG4BkS-R{?NPy(f&zIs zOa~@Ym}Io{lF9xWJkmftXu5RrN(qkMM|Mb_dU?8CbsxOK$IXKvrnj>DoM%t--;JNzH72 zchPpZh+fRu>wV|2Vt=TQ28JJK=NrcTBo=XzZJ?_)A+P`!%XqDQCwU3Qv4gf)qOUkf zkoC3hK#`|nt7RT%U`ae=s^JPk1DcYPTC%JkHi7Zy?>0dJZ_6Oc&N77%7EcuB7YFce zI@+BY)YXP3s3U1YPmEP)Hd{z4fuZ&VzBnh{*|NnZ3TrAeq4Ewr`t0R-pI_-E?Q(pE zgLZn&$l~Sfo$Gg7U)taDt^~{1&{s#30r$Tj2TDS~NYv2(od)4SD~2Nx=Fy4*Z{!-~Ts~!T&7Gf2$6dm>K`ejQ8EL*dh-a z>7eC}7XWJqfbP-XB^3I8Zz17TfiGt#sHvnfNh-%YnL)KM78nA}e*_paP)%ar1a=Ey zkmm69=8Cz_Kq#J#OVyza&G`PTlnu{(1<*g89lu_h4%nO1VG*;}B?~L*Ld7UcyFEl0 z-doz63$V9XLoRX_08LG0->67Ezosv!_Hb)?IlQ9(AR-yqUI9SKRa_N*mJ0x+kS!s4 z=Ri6)>6n_?vnMi1MGf!s#S*;tEYP?w9QLRkv!SM%RP5=}HHPFOj==@2p{{Pp5WmV) z!n#nR)FY92xs~ZfQ1gQ?K_1^ zvNt8+$9!kUaqJXC7Sw>wJ0c6ctp#d}s6QsS@XslgM_0+9s^ipdhF+9SY+wY-9>0$~ zsQv^L?R0taez5i&yivNV>B33F3Y5!`);@Q?E8}dR8kafgN zS!=u5J6J02)uJBOtzc0X5|8xM4GO%F7yRM?w}h`TeL|`k#e}7zo|EUt1$!X+-bY!G zs4C`Gxm&xC!8xKLLh2WiD~K8o=Y$qciM)L*AS~Wf!X#W54w14~4ww9KWuJARwuSt( z4d{~ogT?xe=)YnN1=Ox*mKb3pX4esr;t@!<3IS|Pe)$5O)2U8S%OAe`_}ZpZP@%4@ z5qo~QNQts^WliNM3q^^Kn`D>n=@e=yd1izJ)p&aG4MoIYx0PfAgKo{$O0bZ~2%IeT zp6z=Lf>8C;(0INU9pH02ud3trcgi+C9uSF z-fu|RK)cm2WV50`&W5}Ww0vFTH#MG~fDCb1ug1!@T`dc5HG!!YGKY@JDiTS|6Fiq0hb?K=LJ+sLpz)OHt;eEFr{= zAPKahAW=J@x*1-nG!Pj3zNyoZSM)@07N$R`U+67DCx)uYkv>gR-T4&j=y0o2z0 z+mTx&H4?h6{9L}$-AhCRag%w3Kc{Yt^&_^j@DDfMDFeqT6#(9PFQXtK1SMNyB2Zr= za!Bz`p!ky{>@>SHmUnm2!UTp=l9Qpd3@J3((+5#itZy^A@4Ew>ID+nuX3UFK0XNbc zZ+QcYz&N?l*1Tc9%Z+&3=maG>{#?B9gtGWH9mERb~<^mHYbsk?k! zaK-RldM-e$1Vsej5ZLEY!!DVt<;Vq(kL(b?!Jd``G8v$LI-yAZrk&jLfJv&XLs@I8 zMu7?nR)p*;o`}kc@QCQWMnOg-+LO)q_0ZDGc zOlWv7CSvdcGWb|L&{shX%0)gB>L3bwk`H1ctcu+sSJwu=-@t&M-_lctxn)yrOP`mIjwrE_TX zehqI^L=x0yKbgIjIHM%YDYm+WZ7)%<28n7gXg$>uIHV!j7~sRWw-9pxYH;8g;07N# z#()OM5xN513}AXuDUg`Hr9y(I`*Btvttx`CSU7?P7fHzW9#ay#y;(?U0|CvfGjblB zVEm7a7dR!OcEoxT4@L1=M(miN05r@DmmA6*MB)Ur*Cs3FQPC=7>LQl1FmS ztX4R?YBMDJ%gbnypbs|BAFb~?>EsSBQY}PbJUQWWo!qmMwa-&P@y2g4b2lqXl`?Ye z^A}BE3ln%P2uA9;1W2$&nsuh?0NhAg+(AfDN3j<{1N#L$4@Ho59>cn2i-vzw62~B+OlCV0_|B*ryjx(6aDR0i>HB4!zcXcBT5v{#xm&5AKid05Zww(K(r6 zsyJ&~RK~9ekW>CGFWViLQ!fI_`gs^ot!7LJje?BRNxY|+z6694sZuz~HUM+MR8-(l z^9!Q0G3C8n)>whk>es-)ksbIY0j?iD|1nY#g`Z<~ydhWS#=|p9X8c+XFl?R%R9W7P zB%BpTchs_s&uNLB$*=eRb@;}XwPt$6bCXti!(~J)oX%oq)>p&|)duc?lzXeH_)VE` z$g=b(T+g&h_%NXp^j1vL;EOd^*(ro@>ohpI@XDw69W+1V0Jw*{pUj3Aw%~8 z98tyO9gvKh;5zCO4$~Ey(v#1<*x|W1Sr~FlMq<3T&x~Y6J{{ALh(JRtO%j!@Y}3y9 z>ss@-7$Jzz!CVZ80t!hNWUkbiDHyhA6EufoFIhsE;tr(Wq9mLU20J;#@m!pOkKz$_Y?wYsW~C# z*#bGYdd8z79j=tUT4B-W{~(>UyA|cp95S%;~tb{L%3x@F(3mpWK=!dMrltWioW(b z7KX^_r*Z!8O7&luH2+)JbN)vb^Z&r>WB*6!^M6=+^Z$;pr`PymIUb>->USBG8$ziPnwVin*w|` zp;O*WuA*^7GI;Fr`4`JO(%1q`8T5M(hkSFyaqYJVKFn_82XaMf>|AxvSe6K;s*!`6 zB40`7QtYQmePz{$$g+4wH7=by*cxlS5a1+A)Te0E$A(;^0vZsGK|o{gmCrl+@I$sSACN&FDG^C#ajFhbdQJPJqFyoX_d z?;Gbi(>2b;SmEz^#og(g)9qS|5RJ->y*Sv(f8g8)&49h%TBx25lQ3iCHX&5>wx z-YXu$>A6El>>E%<;icZ#7ZAYl(joMS2a71G?_ z{_=)P@AN)-{pmrwsebSokGy_A7(wK@MzW*Mlh;|c-@eA1I5$|m*+^{QBsb!tgr0ax|2Ip)jRmI>c@$p&P-Gg?li^ZBTBDm!nKV$to_59p}X zC;hx2<-*3NX)v3eH?49sKK9WzY@Pk$(@ybkBWO-_5K2X+x<1+3W++m~(9atX@e4@# zka&ydeA-)o2Rf)KC@nK+luEC@dE%r!;Xpb7O3mqdz!QEKPNP}pn)E#HH;KvX3VjGz z7;7Xq3V^`P^v=w)xnE?#YsTdMHY03^Q>bR57bA;CNm-Ns0cTGtg-a8k!WNUNtvX>+ ziELP1skPKg%RpF1+3#Ego+441eK*8X$5dPrGV;%sS99@62Jt(G2t=6%R@awW`ADoL z(<1#=B?qYcMn2z{n(SY~HS_*^Ra7WCkg!bHIaw@@*(^VO;fqHaT)K&w{uuL-Ipr`? zl}tWuWwPy2+*gHf{jetd@-R_aCR_?=8D!fop|LvOvdue`Q<74Zil<=y%FKMH*%VoHvG;gjG#sX+yRp3~Joy@g zqB?*shlZWJHI!MEIU;4GiyhgqM2%5y<|NqRi{0X$^yNiQiYml!Hu=O>UfnxJ>*X=; z-3MfOZRV>#O(_+plth9$Ch|58r6#GA6-2t4R`e4;zid^L<*U4JyFrBc zXExtkPYY`S?zc4p3*_oR3Vnt`WSImFey{J1OcDEY(kB`*yM0(|hvNSxJt9!5 zP!o-V6{7{h`gk{6kElP!eAJ(WWYNLWDGLl13|WgK0GIc5^2$IqE} z;%7vdq9sjDG1r{RwO*04%doKBAf{>p--XzBRWOO+y?sHH{j>|7q$1WXi%L-*r%N9I z#a7e@r;Qw6`n;vYX;vej=pMI+Z_ap+xLX9lyjF*Op{1c*(+>kLep<}*yPfjxc{2r~ z?aU@Nfd!BLMbqVD-ptu#ZRrEwN-Bq&k1kxF%XoG>(08j|sFK(eTCp>jRBkk7HcvDT zz*=Mtko^JTI{stXg7t@`Q;BRiB_GR0If6h3;u9=!U9K&qjh#Ude~C}jZ)fl>3pFSo z>(lWGexi1!W65vYL{y)O9UmZu`lLkqEJ-$Zx6?0rh(xqexYvMuC*wPgoin{ucScxD zCL9IOS6CVM)U|NObpnMzPBs=h9AZ$&3d33QjZw`U-((0L$^;jhk}t7C8aL7Acg43L zu#V`6j%J9S{of4v9i>|mhO`=g;c-ylMpX0iOw-t|yY#ad?a`32_2*wIY~*_r?FsE7 z^Hdv&Z3A+^gO>p!KU1?B`eJ|LlixZMCkA|dp;oR@z(o!GWNfb6aQ?0|Jm7u zEM1%xOr3=7Z5{0G{=wqo_zMQKv3F8-Ff=y(FPy*sz~BAl_5Iyb`WFHCk58Qcs zuC{j01T5?fe~Ej4d4I+(_D%$hf7y8S|3=eEm|B`!xDc?ju>4Eaak4VeE4v!G`~w{L zPeR{+D7^pd*!1d_CVz2ze}Dh4CQHh3Um zf6Sh?66!m8GKW%8&hb+ZjtG?&gVG3dvOR}fPdHV$Y?%;~=Nt14QUk;vimA**hX6!m zJ+v4NaX}YIa|s}6c+RH>wuzkVtY&?MG)$qF|h*hf6y@eaZrN-0VQap5cFDvac*v;7kx8Z)D&zi5r`Lq2#xK9 zmtVQ?ToN7M9`!GvWP!t|!NyKcInMSZ77{k7RQ>UNvC!Afrtw3VyRRJVMD^cd8KF!u z25a;kjhs-%&-4w!hA|wi2n%nWN?Z2ha!}OxJ!cb?N{%)uJqIHnGJqWuNc^??TI(lk zhNkcCmyPYae!wF9>ETlynOxpagJBau#Hnc#0XZD^{t6#e6Edx>lvc%1H{o z{$~nOPm86m%B}=@wG-R6+dDF-#foeKqaugw z$+GSny3lzDx0%*&&Eh&;$nt=o3q zTa)NNp#!@F|2}30&mE7mJ%bB-E&C#-l_| zVnfsn*r%qi9(KF_{FXHCU!&Vhx7(fRee9lt9;ELW>9pU+pt+@|IK1!c0xF>Y#34?Oc707n}%p%fFUk+6%o~h zR?SyZ$ZV#Mf-F&rd_PvFY;Oft^b3(g{UOJ~-!WRlWv59qFr!CtV~2-BSF==~>V|6| zmDylZZ5DTJaa`p_UJ^vn)3qCC47|XCE(SvKGc@#0M_Yexv++H1PIUs0#{HpYI2rf% zPP>n+Rl)?dM}JJaRhutl%%}<<-#U?s|!|`0Uas;fjI#n9K0H z`?$pPLWJ(8Al*&8sP;&}T55foH7#0kqHw_{o!G9~el`#iKzYzW&NO2RLZD^t_OKy}e@0 zs2*X(#riSpe5ADmn0O}%$h%vc%DQs*ymx9RRwo|=WP=N!OmM6%H zjpMmNL?LYGZ3)WXdWIlTJg{CP&2=O~;&DX*juRZCLEg$W6rnHtX9+tiP`DLe2)ggQ zlA#PAKl?{b{0bk{n$M_`4McGAeV}EM4vE_+A7c41Jc`Q&s}uu_gZRDljprjE=qYAo zY8O$g&z9f%nxoLwTE{ z6>Sr6;GHPUjPiFS8Tk^?x^O?Gk6Hlr_DEl%t~2+!?W+k2?Xtp4Dr>Ua1#eBz(fipd zYFS69CUOI=+q8=aIhFyW9QO}e<}6qhk>>&-X?DFB2zZjQ=z==%L4zKjXA>aJ&JPw# zxgi|ljHG;vsr+$|ru8Bs^s{H`d^$}i{)VRFUtFB!cW*VUvkrGPKQc~d+TBGM;VK{PWS>@z`ymd>0$|w<`rgC7U;XQL3JVQzbWH@HSvAD5kB3t#wXzM8nISX)gO&{CcVEbI(?c(5i*GLnaNWoNT2&XQ$@gj>u@tsjLH$_WUe* zLsoXMgx9FD^~5xU6|r?T;Z@*%Ya%&R?yeu!$X_*Br1}=liN&}Ye-RiSM53z~y0iz) zN5o69Xx|B;Ynx=gcmR1GN8Wd@>Y>+~-Sy32cryph%V&Nji|uMsk=OP^$)2R57Q=!K zbF#>;&WN?mLnPrys2m)Rvf|8L)82q!^wZDMR}~{NeUEiLb(8JqD$~LSOExcleg=l+ zn{SDVg-k2BrJ;`K2n>T^TMjnRHYIac?PwhFKJ z_f>R2G}okMzgX+_L?<{_0xm*Ll-!I#Ud1hj_L^w($U#@P@53J?qqkmiRQWKP?xay> zH73QRkE{qYV3Vr&U^0tU3!_3$^pRkC0b0k8YN0tKgolI`xZ&xW zX}H@b9;R^_t+*N}Mh{_^bgB8{KPpa)`$uKUm@yCinp8C$q?EnR2ORnO(djY{W{ZFt zR_tMg`Wj!Lf+SMLUybJhsnt;luCt);M_E- zP#{yDsDcKE75-{hKCuk%4_YaF{Ee*0z$`2&X##XeCOUi77pZf8_J^c|JWGQZtHb0IM^D%`;<8y1U8XS>Q`5*5-PMhT|+Le*$%; zlg%Oy1-J(G_RR^di>s^Lu^{xrp2t#mBYDEKdSOfxy8Kq|)$ob*&TD{@iOnY8c-5hL^1bErU5tXon;6;7Jr4<(myNEm#(tM@-{&uo~ zD>OV&%*s{Sx^W%Yf=*_Dc7y>K>0{OVx*aekAv=;`wgjuz*3jCO&yzGdU-K%(O+foA z2Xa~VQ#T<$9G7t7^0#2^Z%HeiOsF2gE~EhaM&@&6H=NvUfW1C7m+`3j4^PN6Q+79w zTFr>q`?;rKz`!9doQeXlV%>f{Ux&CC7pG>SrG|e?@3|WH1*Sq*#?_7^X&;w#n7%}vBdt7+yKNLXmQk(f87xw3Dbxv#W@Np~q$UrNRKR8NW+ z;WNVqJXvaAT4u@(-nUe06)FO)MV+V$91!|uRey|@#Wcd42WK7!f`IFA=%!ho%}5Lt zCDrqixBza%3R%;qityI1JI=uimB$gOj65VQrWQ(EzyeVY#d?!~0`Ur_>q&<4Z1VZ2 zf(xN-(0Qpj@QE&`1~Nxb7PK3+vl0H0zSd1yr6%yR*oe`)u$?i}W>!rDJ{@%v%9H*x zb+r)pC`_z*2gr8h6ifD@>dRLdfK=dQ&q(@;Y1jES-vIcM*TaLLM-8waEbuekddP*; zj6*lwU#Iiw@e)orS|M^fs)*!mPoFJ;44-(G0=_{LQ{(;m{W-r$rHYfs6rCl;mDcfi zSp$1`-oCc#Vt<+j0HEOkbu=A40jbpWDoU#MJjCq=gL6PoefCXJUGB8ettdX^O{D1) zcQz~0UdfPj(l}gPUn|7Y(<5?S8*o-3Uf`dpFW@u0YD}$RYjxF|l+E@|d3qG`9B`FA z^A4eC^RV7=r{+njJ^1q!IW)bKNdM<;dLb&Y-;an47q4!a^g)`wK}Z&ZLTTthI`$8n z8rGC-o-ZgGX+F6{$!XZCWJd$k0>ogpR!=T*QI`GFxT65q=u30V$8uC~&lC|2zV`<~ zcF8$pR<^xtF`+~bl{-|^ue@MLdlg6~_k*VfL-*1S)5wrmnEV>l7jG6ZkN~5&>(CkF7RZyezz%(EwYLXJqFAFJHW|)qBRDgN zTx&gY!+h~E9%HjXlA23%>K$x(J;OxqA4#^oa$>~A^6D0K$HDeMM44&sm43C-WyFw) zg*YRILml^F%^45kM?PU}C`|&$E>Er>Zp5DcZO28Fbzya7Y^fJ%bWRS=dzv%QdWeM| zN1-_q8L!jPQ=jdYYPRw`gQ{wUJ!WgRYh63sw-$q=byoNd(-&b2ERs>bFG%ic6Z&Y> zZk?VT0EIGWNT48Hbl0kT!ve$@)w(f6~Klq!7&@|DDPLJlN+ z#zh3&BNUrje!x!!pKPV_qix1z^XvgWi{UWSm4omci zSm1G`Bc%9K>E%u88I&PbXhvc27-|+37a?>!v9e=V>qH|pq(cV3jEv-ek9OG0miGq7 zS^LEJwoc!!M^S-TnT)gPuq*;QiSZSwCC0W_c#(6Mp{15LH!$O8G%w#X(A>b=nxZgg z0gP=lPO^9k^@a}$QHJB&n>mKaV|I=PMR*fg-^h5Ah6<5l*>p_Kx*J=_c8zayMNOk& zP}%E+XWQy+eOhhv5EiNnq8$fg4#D?{;nPFQfL}+g!fU__hz>BAo3kyEQI35(hHnTV z&t?!nE+u|An?3h1kV;Z35P&uWsIabKhB^(^vFPGzs@tuCi-T&Xl%Rlw0bC|Cv0BPtlAv@xa)qR1(rjc1Y9zHTsA zOPT7q1@$D05v5=aQ@I;FaV*M{ufvu=o%9X?*F6ZkZ}I9W`eguZ5wkNV=z`Uuq(qx;*tp}( zDVVRv4cawyej$@Soa?b}L?l!>;DIu8EhCcqEG&nOe%jl_#4-$$h9;>NI#wz}W=5~> zbWRWkLSONRoL9wQd=HLTYw%?zWpo&%vE5TMf>FyP&&3O!*wVJF*`>eIh@$iQ8w$8> zjjcFZE?;#XutD2^$rI_}x%oiE{x9mzsXNptTFFDTXf5NwJzP09j-{&Dku@X)@?hu*b(@kP1<{jitzS-^P`LreMv#_GEs63pjg7g~xlqh++;F%nF)N_u<>;W8+J9IVRTCHZV_#~$>lAqcA}OLlkP^XG(eo>T*^~aO&i_ttr>t4Hxn@!aJ>64 zwdO26z7kBJ*f+>FI=YjiX=P2Y0zM+kSrs?gn?*SZ`xb(vPth?7xo;*{-`YWhk(ZH; zU5usF*$@*Jve9prooakoUHPo6d~@F_QHc~VnLuj#!JRFl{}yvbYwpIAJ*YeRi+KyO z7F*%HK0!MgX{a+oeMdGqB7EOkE?tud*BsQgsZOw{tp7Tn7rK`7uQZvm9nS~reMhSR zlr9RQlS^M%8_>XIIHTti%8dJ`0-*vx*Op>=R>Obf?> zROh`C8rCiGs6&XkoA8>IWdjKENW=3W8GKH%y>n1;U&Ze!RSotSkf*k)^=O;m$T-Tg zD{LQ>SMgUhc>)Z+PpYBs;{hVd^mN$%vf|Ytx>n{D=hQH8$K3Z9+tSJ&7MITkkDk~I zw=~4-9jua7th{8tNITsaF_6UYXBZd6Vak!u#pb;ltgCJ47AsADW;ug zrI}d_*WdN{b}+C;1Cz3_A3L=F**^LWxYD&hO3MOSsga^(E{7K&5&_vLTZBWh8EzR+ zY#+BJp98U=_-QHG^meX#BgfR|;bU7yc}4V%)-*h0XI9#*N$Uv!g4aaNZJi$BDMXv@ zXK5%Ayf+_Qb1epAGoC?VWyt)g=YYEC*wzK5t+ms;0V-)@44gW!n_2z>V`r*3ecR=o#a1mBf^Q^q)(Rya^mjvRec$*_AKWo-sp7d zkLjL5j)mrHOzwSloC=jkuMgF)T8l_&>Fx-P-PVOPWuDUCIGIDQn>d9bA0s*Un)(BO zlq2gbDQ=K+4FtwpQmhjp$=s201F{bzh7Bbew{Q#7+|%okXCRe_TSYYwe-#ldhFlKP znin%AWUg8U{eKHjui=c|OmI}fG__&A5Mr*6uhdkYsM58Awafk>usH-ZezxBDhx(Cc z7``%N1xe{>Jdn!WzDE_d5cW?3tB`Hh^J4+?G*EQy0-9QN@RtW<;J1hk{gYP=-`fHB z5st^_!5Qh{d21f27?8aMC4RGj#I^wXj3=hI+fEgSp1?WA*_o||i3pI`0H_$oA|ukQ z{1a{d6#|EVfTe^YV?6L->qc0!_69L<@DQiq8iRR>l+-51o)ddhtFX}IM>K{%ToR2S zU(;#lVI-g8UV+aqJmgQ}#iFXlpr^6`*Wto0-Y`}l!D_y5O5|TcOJhX7@ zHP1iOOU24EscDZAXVUMLS*l5s1BmhzX|ilL6*8DF!QV~}(*&+^ zUyjfuTM$_y?VOL{p=#os&DT0F=faWi2A6SoOTz_VS8ULkEWL9cRf6Y>%auZ!R5g|4 zha6yA0pTZa#u(>fr7|rS_=j`M6k1G*P?^)k){i#OriZfWK#i^-2eZCn;rCVuP`_R< zYEJSBFbab2)gP}YKbEq4=p6~-!<*b(oiF8fq!}8}@P5Sq{dG_*T2<`a&opEcMuo9Y z%R9*+92?sy6`uno^F6Fi!GvJLLIe}SihSA^;PT}=)gL$qH2M4rSa!!)#%engqDyy5 z|IbOtNGcNTPvzuK1x1|2Zx1fWp7Q;!YqE52KoG|;#!H&^PS*qjKGx0E%!8m3$+Vku z4O}l5YPi69k6$O(cVPFGI?V3Qz)SPSUC?GZ4j#Jnvesdlz2I|qk5~ZlCl-Mn=T0Jw z+;pVEFCQ>OGW_Sv^fRH2jVLa_@>?C<(*uxjGB%oFwOJb)6H(;EJ_ZCam^kqbEqKoB z&X9#OD|6?)GgO9*OOsjts)bFOmb@v$XjibaNAWRvQ=M?7bvKJvlFX~LJIUOt+!Ag| zgR5I*OCJJ9gRO8qz0s6RP8P`{AkNb>Vs2_4soS30ckY$t7Kaq(bNr632=3|nZ$1YV zGd~Mc1RTZO`}EPCk%$bSMpfT7CVkbkvi<}eu43><+|4Y2MoFqlPASWocfkub3RlgD zvtumUOe;8glTN(M%(%PbbEV}8w zKIN2$Aas8J2t@pLnGysDDE(*%H>ArLA!=XPUs~{|W6)BOPYCl$v7KDk?k(VoDbtgY z6r`f46r}>m$Fb|cZekx`s)G*50!0RCzcw!Y#vhQ~Rw=5#&QCv147PM76EmMkrzf#x~;uEvNQC@S~fvi2Xr zzIPIVUws#zIMv4&6*>?!N%J@0(K#tZukp1?CA!65@eS+F4x|~lpdrPg-V;Q|nxr!k zY}N{?``cevOR>U3{dQdd3(_}vHhBlY;28J4huWuGMoITji26s06?(c$?wbk>`oab2 zBQGJ~-yd+RTM)L`UUt=IUvJ$Y6@^xx+m?~VQ0udL`JKFmOvBj}(rhC3S`!#S+YP|# z8si7SzH4F4zhBK$;vet>AA)Esb+#sL#VldHSH)YeGM-k&pl&`Sd_o*A$A)GHew0n+ zXhb**(r*PhN%^nBh`N&h*m)2SZ7ogwvxNV;Jt?%w%*dcE^^~*JC(#scF5Gry{`zgR ztRR-@8SFn!>5VyV;YcX1_vSjwIDo@M;^ltL?=*mAWM5eDt zmpX_+AAEt67F>d4^i=bQ>V2HDTq9Wd+LvSkgzVX-Xf)!_YlyyXD8m3`a1 zT#^Qo-NbtWcgE2%b{SJjI3CKs!K1LiS8e0S*gsoo;Gr)75e~gO2O;}aApz4jA9Xx@X+m$MxPF!Pc&uC?(B8O7O z!12(2OltWOl46|J{{Y7NA8`ZL*He^%hC2*jRx)%VX$K|o6`rPNFY+YA1Wh{n%<6`kImZ${&Fq)lzZObXp(_xj_5y)FxsNyJzg(qRrI4RTF+c^V zzWk2Izx+bgJUUF<;7d|QzcVIWfmac5`2WF{p2{Hl=uzpW0u*Qd`?vEXI^`eNr)25K`;%{QNJ5bS<5gYcCQ*&pCEAby z1yo&S4%NDlAD}J?(|ti+-Zh@T`JN(MvcS`iI;{ZZ6vsQ@CN|N%o5^fU5W)e&ofmZk ztZ9;vyw$}0!Ql()dM#=TGro@~!ymqOLX}~KU);hLySkwd4+_0>4ry%=>4()XcWeDa zUh#%BuaiLlB9(+FLytxDQJRgu?uUPRDcgn}hl=I&_;8x@BkRfrBkO=9-oAHHoaKpf z%ZE&`btZC=xoIR2B0n4vzh0!2{ry&o(#yF-n1bK@r9#%a#U%Z@Df_aOlkG&ZEklXl zv#yv$_GPS<#<-LKvlEiQ|1a+GmY;^F4OXY{AJyR_B$(n)3Xu7GC#K|!BN+m3UBc!@ zh?g3d0>nv?ZvdE+OURUiPlXX#`}|MT$BvUxujK?g7hgFb{rSh%QE{IoumVlH!@1p% zgNO3XLaaxmQhC;mHq zanY;7NV6OV#z#?(eZh^|&{k4T=Wp?QyJ~^tHcp?jP(A^o5)ny*2XQ3mRK`#HbTHw{Jlv6A|6=B_ZPEqtVlHKYw_Lh?oQUnVx{S!2B_Rg z3$_3eQQHxVx2pT0n%uzu)PN~8JR$v;Mt2vb`ar2-Z;-oMj~-c%nXS|P zryt|U$r~TilMT{DLEgo+-;}rY{Tm4zyCv2^cmu`z7aGrjD#v4sAYiQQmNZ;Mq~YWG zz_E6pcj)f2tgvgOGR?=ls`+R_yI*Fv8@!6ew)j<8YEqsnOmR@VKwD+${hre;6#2|xNO6HiuK^w>@l2VnEwEbky^#I4ODBFrjTvS1^`zpeBgfk2gK~3) zs98)^y*Vo%b)GWmsLST<9)nA*AMiwxqVi>odgJhf%Nix!;y6>zNbk%Fho#(HLXsr$ zUOefcfX`nod%eY4KiZxF2Vv1dEm|)iOKHo0#QJZhT#&PUxR%Rgq4-4tYyL{!P}{zi zEKog~!D;;3-(~8+*9C$O2C~b6fXkENl2-k}Epn!IuZ|w?*U3DZLbBPpT4%xFplCRKT<%1?0XR)1x{mG&=d_uYyJJ829jzZLYdrB(keLrSX6< z>ikJITqq2PxS68L>BWE#U*KhLVkiR8t87JLx#$zy#n#7&=cTj(8U`c=`?hkX*K8j< z6aQ+Z@u>mwFFITm1;5e4QEXWEh@Rm!HqaMa-DwZ9)2A_CVjkqf%R4Z~Mt&s%m1fu; z%%5I!HWZXbKW1~xajs3+l?d+~;KLfSpncAl)QbVEFX_!Jy>#`r^z4>BiT4#Q5^%&W ziUMwruCg__e)xE(B~y!)wZp}(W2ecS-L-K0)$Yo8AJx-O!dNG#MeY$~ETkyg*_yfe zd>_%VOU09jHJJ!YZb$twt{v|ke?819pkyi9p@qXj`c9~m+(^wUhjT1@izz3>A#-WH zPB#$xL8FP5AQw*!x-rs^j0t!@;1e=+Z&SoF!hNnRf8?B3qVDbr8x#x&-^8m6(_sb~GOD`CHSQ zNgBWwx=A2k^~HNup@Uj>X2TT{SR+SqW0P`zE6{PVo){*lDDG%o(tn34<>2MRe&C|O z2r)R4Y_T-6SCCPB65FdG?iM#vWV7tIeeNWz*JM&~%nL_7IgEUG8gjpqOOAVKy{3t+ z*~Oz4Fnxo_Ula-&xQ0Ae+_a|TON-k}2trh_PV8~yFA3pJKC#Cdz%}d}LyNd?A7|JN z0Rv$<1Abvt06+_o_bQmixLX(z#NHNx<$7eT=@raE$RHzCc3v)j+1g{WR-G=}&7bci zFW#=iA^XkQYAm5vLphyBNkT2{`HLgHR}5kVdK2aka;r(Ar+s8gj?0LPFgm=pSKd(7~V@1+T9DwP0C~N_i5&wkNUu7`gxli z&7QU_DD)5Mf4c)9&-7{5iNrNWqO!x@4gX`6!=ZfII$2MxDhSaey4VL@3uou)VM%+u zf0(hWIMKjLSrk5txw1t#U5U(%Kfc7o59$#slQSq%1da)oZnWQYC*D=E?l>Zi2axf& zTgEd0;-unqV67m;?VtdHk2JGrIAE%4^X4+k%fjcWwE;G}nrQ+hF-_L`KA!@F zM-)9 zb6wO~MP8;iU*XAcp9WccTqVYkLb4s0W*z5a{Si3DT|cR19{P|ORIIjGT(?Z5VD1%5 zd-;b4oqC&>M>5lF5v6(g_#Xv5go*oAuU#zMcct zKFJ29M}TySjFqvnT5`_6X>l(aFC{=Qr2;}9J}qY_k?QtERqVuQQBvXlulRDhCRZvA zi)eW~$cehVc-BHy(p6G-wU=5<6el{icApTwN0OKisQg#?g%u8;bcAzA*>@BWohqqP zs-EHes!br7(-29C)#3-osNmKxT#{6#bTcgEt(_y{rIFnTk%@S#aw@oveIX*s9!5#APU5v zTDap6&nw5h53yC=^nXW*I#K2yg)`=UjlLRpqyV$ha7T9rRoCpv*$5Y|FbwMV5u^OXx?y_D2ArY6FB~236zzj0 zK7cvt(^(Lzw?xm-B3h$i{Px8BCqG^jJ?rIcII~4~fgQ}k>pWR0jhRb!NWQv$&kGFw zlyat;>?KIEq-0X`Mqul`M@*OtQ5f=vP`QrUak+UyRK50EWgKWdq)5-6vNuP)g z$5EN$p6^&%$nKW15i9D&#QkLTckXW25Hdq5m}8Bq%|a-&e!)tvKb50eV^9YBhBFZpO4f(8Vu#N;`&_>;@1#iH z%Uqs9-$)bViTqjc0m2;2 zvkN2rfF6QNfFb)oC3HRh_1Ot6-X*Es6tqd~G05QpLi*1ZMQTJ^NCvqBiX*+6ppk;1 za_f4FgD`$d@WJn`+T%l=jkLv7g%jMW+*fg!^!q6M+ZNyt_)fPcPiTM2IJ%o=_ic@y z824M^rqhl*5y|Zq0_bo$61=*!Kg|imdybe!ViU(0Vx0r})h!c#>P;DdBTqtr`Q7QR z%gc(SVMASxjy*E_IHg%>6_&KVJ$B-oAiP~4pOYT$&;I||%5ybTp$P^wav!0G{Slb( z_U5>^$t1QmfELJq#siRE{XxmlV`BkiLk-JYuWZZ~Wbza%OhZUIA>NyU9s~4tOP$!! ziM04-M5k@GP(q-FOQPT=zbc>rb)9Eie{dyt<9nQ5@@L`cjP|?(m#&m8JIWAW5cs~A zcgg(s&pz+nzJH~v3m)C4+rh#4yM95E2 zf2{Mhp<6g{H1)6BGf3s5MgoHgN;Sod=@bd-8gf$H1k0IR1BD*Ol~F>MScorXY1jv^i)F*J#% z`x6PPp+)2?N^C;3gW)@mksZ3%>5#ggBUmL5i7Ts)Ox}3mT596HRHS4ho^TLMl)_I> zg>&roJ2OXb`h^BF&j@snWea`2F02&jSp;APa5YQ0qDWCu=Y#Y-h)&w=rIMonNyU69 z*yTSFxiFyePf`hcX(@UX&BA=#+n%A}-vuwl+X1L#)%y<17WT{yz@vaW6G6|A39@nN z)j$ZW$$f&I(vrN7t(RN<3tX(*Pw?i61fw+qotl}sg;s{FCZRSHa1~xAgC+imswiuePKde)x^cjvvDq{~V_Edo}$+FZue7orkRe=n4T#O*=@gH?0W>hnmYlBuO+id5N86(>02 z^r83d4^3i|Foenc3&wcUZeYQ2Gg>aGxg7lqckqx2ufWs@8}DioK|e|-iy85nGqJKV zL+n5;e6{EFk(z^yHt!e4L{}daH52JK=1GWBhv)8ieC!ry2}S%!_cp9ce{RGjgRd{E z^ahzzxR{;B#e*7i-_0t*DiP~!OAZ9;$6zx8@$EJf>GJ8Ki}@+)K0@4(64Ig>;X=(yt|*cvrrFM1lDvvFy-vk^daB2i zzV+?^l46eh2Vr>-_V3+G&4d6`EIJ! zK}RFvI>Q*kY&X>O9}ft02&EsoOC2=D@Q8F0b%l@l1l<_l(Y3kM7$=XUjp(3Jf#~}= z?Xhxj%fh7E&t`*3$V=$g?YTHvjd{9h&cW21K8ajQX#E&-d0}GqY%~wcqr@Q>QUr1r z;jb)VeE_2(t;s@Noy_)$#`f0&{pda$%DdRE%`Z!}H7$VpD~Mw%2WxArAMdMYlgLBz zBF&AOuvR@UQTTJa@|OUIlZ*HBnfJ|=q$c>Jmr-KUV56SiXtf4n;XZ^ZAQ8xjW_F^{ zcX*iGB>9%bKO}_NEi&zRD@U)We#zr?H&^C9vZGybW%3J)oZKZK;#YU+ClhmqxAV2i zFb~qKl~;nVIfG0C0XsbgJ42T|>G!XMi}M`Ep&!z={UWL#bz|9$53|{LvsJxJ4k7@o zG$>Q2H0rI<%9u69_*FYwnV;jz>$h@8bm0ahf`rWNquP3y zjkb_|)ZvopDeZ{8C+QadW+695>havG@OmbDV01WRodai+2(H;Rr$fOhUdRB`JOp04 z3Gu}W*?}}hM7c7c4u~22SvxlubQ6dyES(4}A!U-i z-YPcHvq_$@osUk)q(0*RPK=HHR3!OuKTyEERT6nGZ-8*?_-5sgaTNdK);VMvLy?ZuGzhemf}Ip{3hc0;#_Tz|NNd zJTwvue^m;8bAsde-39INq1{32yq)SDo+hq}siB`_TMEumW{}u4gLo zJf0Rlpc(ty5%e_rgH5EOgZMOX)uyh@(}|*A264lgR&JI9%QpPxf#HYki+W=?riir=rU#BVmGcA?bbULU~0 zpjB^$iAvs<__3>v?IIj{#;5m(l#3t zJk6>4TqJogSu8+_lkJT0T!n2tYid6C=rJ}-eD5>U3?hy0XqbcKL4OCI5Oo;W61exe z&b5lZ?~9G64UOVo+Xq}_m?Fq2zTL*CCbt#Kj@Op*^@LHDtMZqQQ08~I}GFBkvRWW{+^rdaCA!fUPb!VNJ#NXtFP_!2mF*_2^mkd4yDd?aL&;wJw8Jl#dKgVam3tf9$)0_lC*7u2%?2ZU}pbnp%j+_A({SQYFQB#_nEvQig<1e zJ46=6urNMW1uBd22^3gUSZJb-t^PM@U{SBEWDIqcXeg<%hy6F9yb1Rf;ezvlXq#_7 zp_37j6F%~Ev~e0xM$k)-t(&hg?W05i)h>}4WN>unc6&gs_)ps2Gk^|)zx#%Su=8j3 znvo*f+(kMrA^B4;>766N#K{%wydwO@MTG+gF5BX6PnpjlPk@@$rfj~Zsm!lK>3v%= z1vU1z>4})lh%0lUeH+D=S|Yc9R;fTW#21zgqv~Qa?Tl2>;i^BuNW|sH)e>c3jtY25 z_h=UASu6KAsxyg|MH`Yj3vkFPoG*_^3p3-N3o3E&196kppxzgIeCY}yfzbHr8x^L&WuEkE$ws$n+KOBf*d2P>iqZ^*&Zr3)sHGZ_W# zTu_?UoSw=Nrw5N|Jx=5e-7}#%EhHs4b=rm4%RKL-zIk*{!vO_a?=&NYBTVQ`HtYDG zX>YwH)4meAM0c+Q%puS&Z94MLQGu(a){LYjexY2!uqN|w0j9M%g}^IV0ojV8&)f=I z$yHNeLnam{Qx*y7b0-QTwI+N>f@8+(wSK8q zjoe6!y1x?L4Y9bnq$gNZ2NpMW&Q(%huQdku>T}++aLY$lAtkef=D<+63lOj;WNa?| zCatjGd>CZcP*`x$DzCfdkph2m&?s~1lV`75{YH|d8#5#+G=tM_#slTopNaS?5Oy76 zIM-hr?F}uB6_`gJtS8#fU(*wuoDfR6HY3yzk$d(iFj2Fq8DlXWb#6h73R=5qisS>pHiWypNh6tGqD~dW}hR!`}QWJA_+epNnyB(|8*56%2P>YyE zCp-z3*5)t;>RI*0TcIT!2Mx)#S&y&|QpFlBHu#eyYkwSZQ(gJd*E3724-A&=qY7*` zbH<0($J&TOTld1B7&DPSs?LR1$`wqPQ$0lH*q3BlGn&Gao7wS|)mf=TV#B!YbYW#w zUI(3^pYQZ&h8< zio5VG$K3Gn3as=cJGNZ2tMyv%&~?~DlTGB^Utq_ju6$}0Utk?SBjw5bj_r7$}BriaJS27`=hDcL8X7MM?x6#oR*4(J|yvfTsy6c#E$Z zYBA#COWss9iB_A};%uJ$vp;%X^|i>z{0NjAm(QbF<0}7*pNf(@PUYNMCZQXGSCq|3 zr&kO+2XXuxHqlKgi!Nnd7#i5|KqE8Gthu#Sg9@T51#r!pK2H!uKUE!Zxwcd5U?uxo zNPR>CqQ%_U%rr6yCL5PJ-=XC11-V*Ykm$Zn1o`KuO?}UEm4w*-S9(L42DxZI6tU^}WK*Dgal1A2Tk{Yt?w$;3I=2yjYSKEs{{b!gYd75B-hH z(eL1bQmary%xR24-!tcKCZlQNCMeS;p|GwiD66;KU3zS2U5`xFHKun9x>WnMEN>Y5 z1sn-FLb~;C_D$G@(u+K{{oLxF`^KINtsO29G27^Lfz&|k`FT+visBxbk70mDH*Gu> zCo!M!QrAm=?7(6^>|hCO&O(5eV1-&tSQXRuCaYRKfUVIQ{U$s+2#sSyB;FCsD>7ij zt3aZX00Et+Ye7*+wNq#Oud9Zrptk8JLn@`#e%QBWiha0i>sst3TQIZB%lg<1>Y<_1 zmtt@R4Lwf}-8%rP<1t@3Uy39rhAcsT7D+9{sl`0#lX|2?#F|vxOkS%dN$*6?uzZM< zbstibQOB|>X>r5SXx}KCz2R(_-1M4>8Xomj3@j9PuEjOyzqvoFf*2T;cz#_$Day=i z8uOWu=w<=%R|>GYT8Cdm9z_Cbcd;Oh^q1h65YbD~YQ<}&%T1sc!v(>|sbQAUW}y!O zwu|9MGB1gJ3_65h#8G}v+Yyi(e*Ka~nz$@XgO07N-WlKnm^~r~I9hP%L(-=>=h|=E z_2c+<^cGn0`%Wt@Hbf0DdKA3=u^Vo*`d!n_19gK;vMn?-F@i#RP4Fgmu#dCQYf*-^ zX;OzugHi?jAa4FJ$jX2u-3k4c0w~=N(`8y~H;L-<)awma_6=v_z_q49a-tq2`tst& z+%~M)9R?EDw3|<-PyUIkrdQ|mneFfHpK688sb)XWclrr;R?1K|702Te59|B$;*guX ztibvJoMnI{ToazOhFEh~kQX7n>g-Mo<)V97tl`)Bs)TP$4%ypeX1qza&T4#~6UR#^_|%%&&<*r9xGAp9zI_i;Xzz3?cG@&`9C^heKySB{okmhWDQru2bU zr_&9F&{%iCwZrbqdR)77##lHLf&_OSN6AiIfabg#GcG8^a4CzgTsl!kJaoll{dzG6 z`ETUcJIFL?NT*=x7z!IY#m+qof#qgE+IKa;(^fFxH%s|JI}t z^ZxdFX{f2tR0SmLD+Xkn5Q`3%Z3YJKz(h9uXOp3N(Azez>_S_ln>ls7&iq$#;0PnCR%2kof zM4s@M2hvX|^3iW3^@##vW*M+6*!)5&;0)9NEqoAPZap}1k0=GA9oT`4xZe7HG8*P5 zr`!3Pdd?_I@tmVhgzb*9tKshg5cuH{hP~wMV1z7L+lx!A@iyR7gT=S=5laCbMcbtQ z>YPD*HB&Usdz+kf+~6JVRJAjqMNtpy3PEk|5u0(__Em!3Ao$7ZACat~Qsh9FlrHi^ zk`;aKyC0(LdkK=FrL3*4M-kIeIB~Ddl6&YWikVUG8xz)zYF=E;B#gWgchX2iB@+D@p-G*roUDntS1jQrzhLx z-ufdGGG4H<(RP4!LX?U>Ms!)IO`k!_ z2yEBi;d-dmYm!wJs}f)HYaYtW@S}?WF4(0_06?zdB&fN&7dN1Df9@ zFe(3wF;+@a26Mo(B2N*yJ$978NDpAGwPiGpct0w&et}M)WclEae;4x@=3~1U*~q=A z`Xa5)<0H3%XtZEb2D9-+8GN*_CA<@X(VUEIt#yz^ZjybrNqb@%JPareLdtEuYN+=H zMl(Phhf3rG2x2ipvs5`x>+~=qx@<1j!118YmhbfxHePobJwa@PLdl$vzgcIS2^<@T zcK})rO}MtLdoZI3j&O$m*m;-f#e6TXoy8G|qonhod*k^_afv)3Sv06fk7}PX0@FB} z2}&kT+E^4!h<4`TDz2W3ehH+4Qk)Z~TY3?}yNty(R=u3T_uKw$#N%N^PWbGXM!6^p zfNo8#aXRZ)hq8YGd>sj%17jGTj!{>U3CAT(C=D2l^_rK==I;{o8F)<0AR+(? z_2{9D)Lumxt7RHN8h_i*ZJ7*XOMjnte1Z$qzZ5(^S%JUk3I0Y@!>2X@YV7q@}|zwAn0 zUM$L4IRFjGd-R+g&=}@K5bci_XW%|lx~onFVi3$sR8~lda-Nizm3QvTj|YvNV!O>y z>!sZJT=m4uJZ%ECv(7dS!KOt}e8%FtbxfLy9~$_Tf-3x{?E;^e30*Ugd0 zyu7%VOnu@@)q$j(KKkq+hk5w8g7H-R`Q8DlImgSIkHxnL7>G-(Bw4um*8qU8!y&| zQSGy)j^t04fwZ^k_I*!!~!lCAYXB;Ntps(3f`3?Bduuo1yzdL<6f4BEChs)yq;*JSP4l_*+>B%&U6vOag9F**i`Xqfr=2HAjD(0JDYNbqzvuza&6x8(V7WUKB931{+ti1e zLc82%*5XAOtjW$>ZCII2o7Vl^Xw>o?T&q43j{z+yrA7_jYY&O#2c&&giGLP!5F99{ z=16Ju;$p-37YUfJhv@VS7Lo&r^+oaLWU2P>r@EYww&{I@ri)t)^`qPY+ZE70Dy>{x z&GWGZnicp>2gE|?Ah0^DCI;6k0kJ+EWe1hhedTtvDrl#AoS+}pm&-9ZclnnX;mG|Z z02r}0a+%jxe{~jnm&(sT2qP3&2$g6KZSu7u?(?LMdmYHahf z8+itNz$%`GucmV8w})#5aH{|3lAa*jm;oZBbpnj-6wDjN0Jd@^o#K+UH1*3}=mgjU zr$#^RV0X4?Tp6Ag5n5N|#p(|uusFVbTg_^LWkpFpa38(Y!^s$G20hY*^T_Z1xG~v( z^=&FW)j8H$(SOMZsh*hI=aF-H)20IUOu{b#Qh_pQ=bXIl%c?0XRxRJoaip8MT~b_U zMp}}Ki3=~IiN%w>5^(|uXizAz>+b5FDshdMU5(_fHd9H4Z*gBZzQ!dL@Hq#6eiMRe zsMy_cp*TCY(~W{J)i$!@U%wMK`bt2xByW~VhWzHtRNgwC=+Y`s zp>PH)_A3@rA{9hV1Dx(c<8SymXGL7A;?K#NP{eKj6{+$+^ez8q2J`>U2xt92Gs1}| z@jR@z6sJI4piag20?_a~5hb|P8ONI=!e>$+&QcI`cNpnoVvQ0eJE2i%MO9PCcF6ng z8Gl2_GQUeI`EOL?JFb2hMTv!qMn<%~BGuOQ3F%;unEQ?dVxZ)4doqD7Z7O{TZEALX zXnM_QD7bYVnf9^_07;4a)nxRJDzI{gIgGxIBiuuj%4gDS99hyL_eK(j28U@ROs~_sG;!&Ox0*|J7kJ z{m;Ytf5C$PhdJ>7Gb}jsui586zE<&_{|oi| zznc#K@6_-Ax~N^r9jjrVrYsO zYLAl>S+7L6!usc#1PD#w1Ag#Y-jwZ<{nIs8?pslrCpJ_S{GL*l5+6UcFs>Stpgrud zGLZ{f&5Omx6XO_^QC+ytalpCr2CK|fV-QB`$#J%WoL1DO=hbF$PL8i`kIQejJdk*$ z6qKqz>Kv4Igxv=dbxKwNUM!+?C>TA8wA|q|{#0H1Mwm?N!ygc#!+zBZcH1bcW2s$l zK;Wj@Vehr6XcR{zu{REC{yNR5SHz z!Pr&Q3Qr?ipdLAhSjJ}#*Wg)COhbzZvaae~Ww9n*jGJ@V^+sJL(GwzSiZ;(%3mO@X zzf1)xElX6>JG82#M3^O}ccst|^bN?XQvW082aZzP3`{ny9@x4uix2n@tVvH&I+$`1 zUWgQg+{@p*cKHj8MpE^Zs+4%^qfl8FV>f{fyYy{q5pd zv5Bm%W{c;p*x6d_qI2^=k6rkgwUyn#qOTa{PN-HI62yrOmt5c+3lAk2TLafHU-$aj)s64nm3{XDA#=W?Z0Q4j*si+hV!kj0#2*{o;R{<5 zM@@CvQa+e#eYN+qP}nwr$(CJ#)u*Y}+<^zovR1~aj=gPCuz#n^YV;cdzBJA{#i(oK-{C_x6)}tB@BErR{ie|3n9PPJSp$ z6`Pc7g01-DL;cxF=;e1~QbgGt=oI2(emZkc^B?ja{##*6do&@ySYt;7p5&|yml zFFtge6mM072(Vq!QSZgZcv5JBuVp>#_UxY;!GFv)_!U~F80t<5McbkU|z)S zG%PY@<0&TKQ<{|-hzr%0RfND!0OeuL;Qn+x-G%2%1gqo&$JKE*XQ$cBG0z&QcC>+U z3&Xtc_+0a$Gak2SrSD+0eIuk}XK2Ps#8-@KEpQIk*xv4O^Sxy>rwUtGGzz1d6@SC= z?CZ-aLDls2Mpsx@-tr;nR+)D9?XN^FV-<(})Q|dDZ|&ukc8;cI@^GI47C9wzOmgCa z!(5_|p7Y4(OKG!VeZ6r|mgUTW2q0jf!6)`Be2b_ERg0?K|8>`e7{M%2^gOV}D!WF6 zarxBr`_z1UUr$rL2$2nO)CIjOP;M&NRz*E)y?5Iwj?Bo{4x04mAT*@7meHeBHBQ67 zdg4DX_P4|)jIq4>CXeRo+|!a%AjA}$xm|&d%H2d>g_JDDw-%FTr|}r%J04C~LTO}! z9yhhGd{d5u6gi)nx7^AXDmZ{VF@&{|ax^wKKq!|>%aMa#lit}ep06V$QBm@bJ)y{F z|}jH*~hQsf@VP*Rg}hn6G1`MIUUEVDB$+kSJ%e@8#fFv5WH7E=9W4b&o?YG``PE( zLKgI}D*DtvGOjESaUI(S#jl7CBmdoZ;;Nk%Lt z_<{n!hA<_hMkMgXXGBUjF53!kP!h7I{>pXr4&?1iYX*Na6Uvxzf0zz_yDZ6X@_bxw zh4k1&>t`1inMbT979hp53PF{)e@nYv33f9XK2R22^-#;;gTxjmGYM|d@R7gb zLw9$FZ&52XN1|H2tW{bOrKgSIu|b@LT=({DZ3(uZ%-A^&>Dk;Q>`%E9nU_c4!}-iucJW`M5xILf$Oo_X4}?^pEPrv1Ui} zu~2IzGYXBT23WSf^4L@}Rs*qSDk!s3nV^?=%qWOE(2A!oLoi>2tZg}E=IGrJNOv2JJ&#iNwtAicr7qt&EfUzcibKN8~!9veWS~b zBV_mU$SUv&Cpsl+eeI0*kycg}wTIRcPL8RvWxt{82GTNaYbNmtXWCfHO_b7@LwC; zq8WN!*aTW0U8NY^#K}RFee$H-M$S>zgmyu zlDyG3nCb1<+Z?N{sCQ!_nhtvE20PUXXe}*WrYlO8f#F?5&=L!z05h}cI`6*M6>Qxc z=N>-8pb;?agmwVExw-38ajXaExMxI99zb5R4lg)?oe5ucr{eUheA^_h^eM4 zLCH+48z(`PdNxW6lu#Wq1v0Le z%rF~3tq9v5Cp!8CWB#8vd7lQ{*N>}p{n^uRw`0#rdpqtCx|r_oCKR_k2pgVE#nA6a z`w+Qi^H69!b*VFaU}2xEG>Q1vE%YiP%l9|eFB_8uombm-j=#vBhbD+rHqBtB^G~0O zmkpP9)Gy$$xu!8^4=q?H`<2*(7`k;5r7YKFj$JDhD?XgWDYHkh zKJDPmKwe?H0l|ktas}cE{QllD1qJ%JU-t)34UejSOM4k!5zXSI+CYMS*xHmkC#$0S z%GcjyMG1tJSWD)=B8qI2iXH>zG#KI<9?HZeF^eLV6i)>dX|;%~EG!L8$_G-(eTEOW zGYJZTQH(6!A$V;F2itjFWGWDS`fRm1&3mc4ocb_uhM75ct~QmA1@Nst>JMGy&*$zo zTV6mF>SFel8=W{W+1L!p5a6m5VU=TVGsQa#n-?MTP4|+z?j~zG;lA$6<}_$_tu~lv zu%L=JJ>-l5+TzPFS{u5zbA|xCOA&baff_qs@I$aa37B?w0}*+AA1=$qiE=4s@y^>`2!T2mJ{{mU}aEWi~Am({s;5X6rpui+PctCWGWhxv

  3. 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ð+K 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 z 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 Date: Mon, 10 Feb 2020 22:11:11 +0530 Subject: [PATCH 48/54] Attest: Updating QCBOR library Resolution for the Issue: https://github.com/ARM-software/psa-arch-tests/issues/143 Signed-off-by: gowtham siddarth Change-Id: If1dbc361d59b784c4095f40ef8fdd50dc299d3b4 --- api-tests/CMakeLists.txt | 6 +++--- api-tests/docs/sw_requirements.md | 2 +- .../platform/targets/tgt_dev_apis_tfm_an521/target.cmake | 1 + .../platform/targets/tgt_dev_apis_tfm_an524/target.cmake | 1 + .../platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake | 1 + .../platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake | 1 + api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake | 1 + api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake | 1 + api-tests/val/nspe/val_attestation.c | 2 +- 9 files changed, 11 insertions(+), 5 deletions(-) diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index 5a850d74..5adf5860 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -160,7 +160,6 @@ set(TARGET_HEADER_GEN_INCLUDE_PATHS "${PSA_ROOT_DIR}/val/nspe|${PSA_ROOT_DIR set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db) if(${SUITE} STREQUAL "INITIAL_ATTESTATION") set(PSA_QCBOR_GIT_REPO_LINK https://github.com/laurencelundblade/QCBOR.git) -set(PSA_QCBOR_GIT_REPO_TAG da53227db1488dde0952bdff66c3d904dce270b3) set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/src/psa_qcbor/inc) endif() set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/testlist.txt) @@ -261,6 +260,9 @@ endif() message(STATUS "[PSA] : ----------Process input arguments- complete-------------") +# Build PAL NSPE LIB +include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake) + # Create PSA clean list list(APPEND PSA_CLEAN_LIST ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER} @@ -363,8 +365,6 @@ if(${SP_HEAP_MEM_SUPP} EQUAL 1) add_definitions(-DSP_HEAP_MEM_SUPP) endif() -# Build PAL NSPE LIB -include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake) # Build VAL NSPE LIB #add_definitions(-DVAL_NSPE_BUILD) include(${PSA_ROOT_DIR}/val/val_nspe.cmake) diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index e0424f3f..0dcf67a2 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -37,7 +37,7 @@ git repository. The cloning is automated as part of the test suite cmake build: **Repo**
    Name : https://github.com/laurencelundblade/QCBOR.git
    -Commit id : da53227db1488dde0952bdff66c3d904dce270b3 +Commit id : 42272e466a8472948bf8fca076d113b81b99f0e0 ## License Arm PSA test suite is distributed under Apache v2.0 License. diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake index db9a4fa5..f95c52eb 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake index db9a4fa5..f95c52eb 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake index 756a0b41..64ef4bf2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake index 756a0b41..64ef4bf2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake index db9a4fa5..f95c52eb 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake index 756a0b41..64ef4bf2 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake @@ -73,6 +73,7 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c ) + set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/val/nspe/val_attestation.c b/api-tests/val/nspe/val_attestation.c index 50e400a3..4b7a137f 100644 --- a/api-tests/val/nspe/val_attestation.c +++ b/api-tests/val/nspe/val_attestation.c @@ -256,7 +256,7 @@ static int parse_claims(QCBORDecodeContext *decode_context, QCBORItem item, } } - if (status == QCBOR_ERR_HIT_END) + if (status == QCBOR_ERR_HIT_END || status == QCBOR_ERR_NO_MORE_ITEMS) return VAL_ATTEST_SUCCESS; else return VAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING; From 2ea0a52575e6634900e0f38421465aadb9cd32f8 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Wed, 19 Feb 2020 13:17:20 +0530 Subject: [PATCH 49/54] Fix : To pick the right shared library passed down for mbed-linux build. --- .../targets/tgt_dev_apis_stdc/target.cmake | 20 +------------------ .../tools/cmake/common/CMakeSettings.cmake | 1 + 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index d3ac97a5..87f63ba2 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -40,22 +40,6 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Create the PSA test binary. set(EXE_NAME ${_exe_name}) - if(DEFINED PSA_STORAGE_LIB_FILENAME) - # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. - get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) - - get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) - link_directories(${PSA_STORAGE_LIB_DIR}) - endif() - - if(DEFINED PSA_CRYPTO_LIB_FILENAME) - # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. - get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME) - - get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY) - link_directories(${PSA_CRYPTO_LIB_DIR}) - endif() - # Create list of test binary source files. list(APPEND EXE_SRC ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/main.c) @@ -64,12 +48,10 @@ function(_create_psa_stdc_exe _exe_name _api_dir) ${PROJECT_BINARY_DIR}/val/val_nspe.a ${PROJECT_BINARY_DIR}/platform/pal_nspe.a ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a - ${PSA_CRYPTO_LIB_NAME} - ${PSA_STORAGE_LIB_NAME} ) add_executable(${EXE_NAME} ${EXE_SRC}) - target_link_libraries(${EXE_NAME} ${EXE_LIBS}) + target_link_libraries(${EXE_NAME} ${EXE_LIBS} ${PSA_CRYPTO_LIB_FILENAME} ${PSA_STORAGE_LIB_FILENAME}) endfunction(_create_psa_stdc_exe) # PAL C source files part of NSPE library diff --git a/api-tests/tools/cmake/common/CMakeSettings.cmake b/api-tests/tools/cmake/common/CMakeSettings.cmake index eb812a9f..4061bc2c 100644 --- a/api-tests/tools/cmake/common/CMakeSettings.cmake +++ b/api-tests/tools/cmake/common/CMakeSettings.cmake @@ -22,3 +22,4 @@ set (CMAKE_C_COMPILER_FORCED true) set(CMAKE_STATIC_LIBRARY_PREFIX "") set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +set(CMAKE_SHARED_LIBRARY_SUFFIX "") From 0b7afc82808f30266186a12fd2b10f5711835d3d Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Wed, 19 Feb 2020 13:17:20 +0530 Subject: [PATCH 50/54] Fix : To pick the right shared library passed down for mbed-linux build. --- .../targets/tgt_dev_apis_stdc/target.cmake | 22 ++----------------- .../tools/cmake/common/CMakeSettings.cmake | 3 ++- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake index d3ac97a5..1f7d6580 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,22 +40,6 @@ function(_create_psa_stdc_exe _exe_name _api_dir) # Create the PSA test binary. set(EXE_NAME ${_exe_name}) - if(DEFINED PSA_STORAGE_LIB_FILENAME) - # Define PSA_STORAGE_LIB_NAME to be the name of the PSA Storage library to be tested. - get_filename_component(PSA_STORAGE_LIB_NAME ${PSA_STORAGE_LIB_FILENAME} NAME) - - get_filename_component(PSA_STORAGE_LIB_DIR ${PSA_STORAGE_LIB_FILENAME} DIRECTORY) - link_directories(${PSA_STORAGE_LIB_DIR}) - endif() - - if(DEFINED PSA_CRYPTO_LIB_FILENAME) - # Define PSA_CRYPTO_LIB_NAME to be the name of the PSA Crypto library to be tested. - get_filename_component(PSA_CRYPTO_LIB_NAME ${PSA_CRYPTO_LIB_FILENAME} NAME) - - get_filename_component(PSA_CRYPTO_LIB_DIR ${PSA_CRYPTO_LIB_FILENAME} DIRECTORY) - link_directories(${PSA_CRYPTO_LIB_DIR}) - endif() - # Create list of test binary source files. list(APPEND EXE_SRC ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/main.c) @@ -64,12 +48,10 @@ function(_create_psa_stdc_exe _exe_name _api_dir) ${PROJECT_BINARY_DIR}/val/val_nspe.a ${PROJECT_BINARY_DIR}/platform/pal_nspe.a ${PROJECT_BINARY_DIR}/dev_apis/${_api_dir}/test_combine.a - ${PSA_CRYPTO_LIB_NAME} - ${PSA_STORAGE_LIB_NAME} ) add_executable(${EXE_NAME} ${EXE_SRC}) - target_link_libraries(${EXE_NAME} ${EXE_LIBS}) + target_link_libraries(${EXE_NAME} ${EXE_LIBS} ${PSA_CRYPTO_LIB_FILENAME} ${PSA_STORAGE_LIB_FILENAME}) endfunction(_create_psa_stdc_exe) # PAL C source files part of NSPE library diff --git a/api-tests/tools/cmake/common/CMakeSettings.cmake b/api-tests/tools/cmake/common/CMakeSettings.cmake index eb812a9f..790a58fd 100644 --- a/api-tests/tools/cmake/common/CMakeSettings.cmake +++ b/api-tests/tools/cmake/common/CMakeSettings.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,3 +22,4 @@ set (CMAKE_C_COMPILER_FORCED true) set(CMAKE_STATIC_LIBRARY_PREFIX "") set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +set(CMAKE_SHARED_LIBRARY_SUFFIX "") From b26bc956985a1cc97a5f2930b2690ed486458ad8 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Fri, 21 Feb 2020 16:53:49 +0530 Subject: [PATCH 51/54] DOC: Add v1.0 Crypto API specification Signed-off-by: Jaykumar Pitambarbhai Patel --- .../IHI0086-PSA_Cryptography_API-1.0.0.pdf | Bin 0 -> 3502888 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 api-specs/crypto/v1.0/doc/IHI0086-PSA_Cryptography_API-1.0.0.pdf diff --git a/api-specs/crypto/v1.0/doc/IHI0086-PSA_Cryptography_API-1.0.0.pdf b/api-specs/crypto/v1.0/doc/IHI0086-PSA_Cryptography_API-1.0.0.pdf new file mode 100755 index 0000000000000000000000000000000000000000..0bf442a2f1e6df7157811dba8196ac8c0b46a8cd GIT binary patch literal 3502888 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 z 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⪙+GOQV%zw0=sp`-6E&rHNT220#j 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 DOw1skV=#%q!x)m@RC`x=lwf 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

    mxJ@hkrP2c;zhS=&%qEe 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 z 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 <}Q6r6}ssg%48 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%0ApT%O?%G}|{i4xvi^G8hYJu5H^B{d)6 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%0A*|>f1tc>Gn4u_TV1a)bD(whFJux#PkrC)rItB=- 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 q&0JpE{w625#oed~yiB7o?xr9oc@k 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 Ya>jSk{uy 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�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%0Af3@-!*7VBXZrjWG2k7pB7!-#;1l~=3iJK6 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

    ~b%-aNG4QHy`5N+N?opfZwJh0K4%AHF}! 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

    )mL1ZGDSpvU~ICA6=5ATYm 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

    pdf_xFQkm%26W@_JL#))~QW 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 Date: Wed, 26 Feb 2020 19:51:37 +0530 Subject: [PATCH 52/54] Changes for v1.0 release - Documentation update - Addition of new target added - tgt_ff_tfm_musca_b1 - Storage tests update for 1.0 spec - Bug fixes and enhancement --- api-tests/CMakeLists.txt | 114 ++-- api-tests/README.md | 7 +- api-tests/dev_apis/README.md | 6 +- .../dev_apis/crypto/test_c039/test_data.h | 25 +- .../dev_apis/crypto/test_c042/test_data.h | 4 +- .../test_s001/test_its_data.h | 37 +- .../test_s001/test_ps_data.h | 36 +- .../test_s001/test_s001.c | 8 +- .../test_s002/test_its_data.h | 71 +-- .../test_s002/test_ps_data.h | 71 +-- .../test_s002/test_s002.c | 2 +- .../test_s003/test_its_data.h | 8 +- .../test_s003/test_ps_data.h | 8 +- .../test_s003/test_s003.c | 11 +- .../test_s004/test_its_data.h | 27 +- .../test_s004/test_ps_data.h | 27 +- .../test_s004/test_s004.c | 29 +- .../test_s005/test_its_data.h | 18 +- .../test_s005/test_ps_data.h | 18 +- .../test_s006/test_its_data.h | 14 +- .../test_s006/test_ps_data.h | 14 +- .../test_s006/test_s006.c | 5 +- .../test_s007/test_its_data.h | 24 +- .../test_s007/test_ps_data.h | 24 +- .../test_s007/test_s007.c | 48 +- .../test_s008/test_its_data.h | 30 +- .../test_s008/test_ps_data.h | 30 +- .../test_s008/test_s008.c | 22 +- .../test_s009/test_its_data.h | 26 +- .../test_s009/test_ps_data.h | 26 +- .../test_s010/test_its_data.h | 10 +- .../test_s010/test_ps_data.h | 10 +- .../test_p011/test_ps_data.h | 36 +- .../test_p012/test_ps_data.h | 36 +- .../protected_storage/test_p013/test_p013.c | 4 +- .../test_p013/test_ps_data.h | 47 +- .../test_p014/test_ps_data.h | 18 +- .../test_p015/test_ps_data.h | 7 +- .../protected_storage/test_p016/test_p016.c | 4 +- .../test_p016/test_ps_data.h | 27 +- .../protected_storage/test_p017/test_p017.c | 4 +- .../test_p017/test_ps_data.h | 21 +- api-tests/docs/porting_guide_dev_apis.md | 8 +- api-tests/docs/porting_guide_ff.md | 4 +- api-tests/docs/psa_its_testlist.md | 8 +- api-tests/docs/psa_ps_testlist.md | 34 +- api-tests/docs/sw_requirements.md | 2 +- api-tests/docs/test_failure_analysis.md | 43 ++ api-tests/ff/README.md | 10 +- api-tests/ff/ipc/test_i003/test_entry_i003.c | 4 +- api-tests/ff/ipc/test_i003/test_i003.c | 4 +- .../manifests/driver_partition_psa.json | 10 +- .../manifests/server_partition_psa.json | 2 +- .../nspe/common/pal_config.h | 5 +- .../nspe/crypto/pal_crypto_intf.c | 13 +- .../nspe/common/pal_config.h | 7 +- .../nspe/crypto/pal_crypto_intf.c | 13 +- .../pal_attestation_crypto.c | 20 +- .../tgt_dev_apis_tfm_an521/target.cmake | 7 +- .../nspe/common/pal_config.h | 7 +- .../nspe/crypto/pal_crypto_intf.c | 13 +- .../pal_attestation_crypto.c | 19 +- .../tgt_dev_apis_tfm_an524/target.cmake | 7 +- .../nspe/common/pal_config.h | 7 +- .../nspe/crypto/pal_crypto_intf.c | 12 +- .../pal_attestation_crypto.c | 19 +- .../tgt_dev_apis_tfm_musca_a/target.cmake | 7 +- .../nspe/common/pal_config.h | 7 +- .../nspe/crypto/pal_crypto_intf.c | 12 +- .../pal_attestation_crypto.c | 19 +- .../tgt_dev_apis_tfm_musca_b1/target.cmake | 7 +- .../tgt_ff_tfm_an521/nspe/common/pal_config.h | 7 +- .../pal_attestation_crypto.c | 3 +- .../targets/tgt_ff_tfm_an521/target.cfg | 10 +- .../targets/tgt_ff_tfm_an521/target.cmake | 7 +- .../nspe/common/pal_config.h | 7 +- .../pal_attestation_crypto.c | 3 +- .../targets/tgt_ff_tfm_musca_a/target.cfg | 14 +- .../targets/tgt_ff_tfm_musca_a/target.cmake | 7 +- .../nspe/common/pal_client_api_empty_intf.c | 95 ++++ .../nspe/common/pal_client_api_intf.c | 99 ++++ .../nspe/common/pal_client_api_intf.h | 33 ++ .../nspe/common/pal_common.h | 115 ++++ .../nspe/common/pal_config.h | 97 ++++ .../nspe/common/pal_driver_ipc_intf.c | 293 ++++++++++ .../nspe/common/pal_driver_ns_intf.c | 145 +++++ .../nspe/crypto/pal_crypto_config.h | 323 +++++++++++ .../nspe/crypto/pal_crypto_config_check.h | 223 ++++++++ .../nspe/crypto/pal_crypto_empty_intf.c | 30 + .../nspe/crypto/pal_crypto_intf.c | 516 ++++++++++++++++++ .../nspe/crypto/pal_crypto_intf.h | 103 ++++ .../pal_attestation_crypto.c | 344 ++++++++++++ .../pal_attestation_crypto.h | 88 +++ .../initial_attestation/pal_attestation_eat.h | 80 +++ .../pal_attestation_empty_intf.c | 30 + .../pal_attestation_intf.c | 56 ++ .../pal_attestation_intf.h | 32 ++ .../pal_internal_trusted_storage_empty_intf.c | 30 + .../pal_internal_trusted_storage_intf.c | 62 +++ .../pal_internal_trusted_storage_intf.h | 31 ++ .../pal_protected_storage_empty_intf.c | 30 + .../pal_protected_storage_intf.c | 77 +++ .../pal_protected_storage_intf.h | 34 ++ .../tgt_ff_tfm_musca_b1/spe/pal_driver_intf.c | 131 +++++ .../tgt_ff_tfm_musca_b1/spe/pal_driver_intf.h | 35 ++ .../targets/tgt_ff_tfm_musca_b1/target.cfg | 78 +++ .../targets/tgt_ff_tfm_musca_b1/target.cmake | 109 ++++ .../tools/cmake/common/CMakeExternal.cmake | 21 + api-tests/val/nspe/val_entry.h | 6 +- 109 files changed, 4096 insertions(+), 652 deletions(-) create mode 100644 api-tests/docs/test_failure_analysis.md create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_common.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ns_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_empty_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.c create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.h create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cfg create mode 100644 api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cmake create mode 100644 api-tests/tools/cmake/common/CMakeExternal.cmake diff --git a/api-tests/CMakeLists.txt b/api-tests/CMakeLists.txt index 5adf5860..e1508b54 100644 --- a/api-tests/CMakeLists.txt +++ b/api-tests/CMakeLists.txt @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,6 +31,7 @@ get_filename_component(PSA_ROOT_DIR . ABSOLUTE) list(APPEND CMAKE_MODULE_PATH ${PSA_ROOT_DIR}/tools/cmake) include("common/Utils") include(${PSA_ROOT_DIR}/tools/cmake/common/CMakeSettings.cmake) +include(${PSA_ROOT_DIR}/tools/cmake/common/CMakeExternal.cmake) # list of supported suites list(APPEND PSA_SUITES @@ -109,6 +110,8 @@ string(TOLOWER ${SUITE} SUITE_LOWER) _get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/targets) if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST) message(FATAL_ERROR "[PSA] : Error: Unspported value for -DTARGET=, supported targets are : ${PSA_TARGET_LIST}") +else() + message(STATUS "[PSA] : TARGET is set to ${TARGET}") endif() # Check for the presence of required test suite directories @@ -128,6 +131,8 @@ endif() # Check for valid suite cmake argument passed if(NOT ${SUITE} IN_LIST PSA_SUITES) message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSUITE=, select one from supported suites which are : ${PSA_SUITES}") +else() + message(STATUS "[PSA] : SUITE is set to ${SUITE}") endif() # Project variables @@ -135,7 +140,9 @@ set(PSA_TARGET_PRE_BUILD psa_pre_build) set(PSA_TARGET_GENERATE_DATABASE_PRE psa_generate_database_prerequisite) set(PSA_TARGET_GENERATE_DATABASE psa_generate_database) set(PSA_TARGET_GENERATE_DATABASE_POST psa_generate_database_cleanup) -set(PSA_TARGET_QCBOR psa_qcbor) +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + set(PSA_TARGET_QCBOR psa_qcbor) +endif() set(PSA_TARGET_PAL_NSPE_LIB pal_nspe) set(PSA_TARGET_VAL_NSPE_LIB val_nspe) set(PSA_TARGET_TEST_COMBINE_LIB test_combine) @@ -158,10 +165,6 @@ set(DATABASE_TABLE_NAME target_database) set(DATABASE_TABLE_SECTION_NAME "NOSECTION") set(TARGET_HEADER_GEN_INCLUDE_PATHS "${PSA_ROOT_DIR}/val/nspe|${PSA_ROOT_DIR}/val/common|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto") set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db) -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") -set(PSA_QCBOR_GIT_REPO_LINK https://github.com/laurencelundblade/QCBOR.git) -set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/src/psa_qcbor/inc) -endif() set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/testlist.txt) set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc) set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc) @@ -169,6 +172,9 @@ set(PSA_CLIENT_TEST_LIST_DELCARE_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_li set(PSA_CLIENT_TEST_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list.inc) set(PSA_SERVER_TEST_LIST_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list_declare.inc) set(PSA_SERVER_TEST_LIST ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list.inc) +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/inc) +endif() # Validity check for required files for a given suite if(NOT DEFINED PSA_${SUITE}_FILES) @@ -192,6 +198,8 @@ endforeach() if(NOT DEFINED TOOLCHAIN) set(TOOLCHAIN "GNUARM" CACHE INTERNAL "Compiler used" FORCE) message(STATUS "[PSA] : Defaulting compiler to ${TOOLCHAIN}") +else() + message(STATUS "[PSA] : TOOLCHAIN is set to ${TOOLCHAIN}") endif() if(${TOOLCHAIN} STREQUAL "ARMCLANG" OR ${TOOLCHAIN} STREQUAL "GNUARM") @@ -203,65 +211,99 @@ if(${TOOLCHAIN} STREQUAL "ARMCLANG" OR ${TOOLCHAIN} STREQUAL "GNUARM") message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DCPU_ARCH=, supported CPU arch are : ${PSA_CPU_ARCH_SUPPORT}") endif() endif() + message(STATUS "[PSA] : CPU_ARCH is set to ${CPU_ARCH}") endif() # Check for VERBOSE if(NOT DEFINED VERBOSE) set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE) - message(STATUS "[PSA] : Defaulting to VERBOSE=${VERBOSE}") + message(STATUS "[PSA] : Defaulting VERBOSE to ${VERBOSE}") else() if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS) message(FATAL_ERROR "[PSA] : Error: Unspported value for -DVERBOSE=, supported values are : ${PSA_VERBOSE_OPTIONS}") endif() + message(STATUS "[PSA] : VERBOSE is set to ${VERBOSE}") endif() # Check for PLATFORM_PSA_ISOLATION_LEVEL if(NOT DEFINED PLATFORM_PSA_ISOLATION_LEVEL) set(PLATFORM_PSA_ISOLATION_LEVEL 3 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE) - message(STATUS "[PSA] : Defaulting to PLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL}") + if(${SUITE} STREQUAL "IPC") + message(STATUS "[PSA] : Defaulting PLATFORM_PSA_ISOLATION_LEVEL to ${PLATFORM_PSA_ISOLATION_LEVEL}") + endif() else() if(NOT ${PLATFORM_PSA_ISOLATION_LEVEL} IN_LIST PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS) message(FATAL_ERROR "[PSA] : Error: Unspported value for -DPLATFORM_PSA_ISOLATION_LEVEL=, supported values are : ${PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS}") endif() + if(${SUITE} STREQUAL "IPC") + message(STATUS "[PSA] : PLATFORM_PSA_ISOLATION_LEVEL is set to ${PLATFORM_PSA_ISOLATION_LEVEL}") + endif() endif() if(NOT DEFINED INCLUDE_PANIC_TESTS) - set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "By default panic tests are disabled" FORCE) - message(STATUS "[PSA] : Defaulting to INCLUDE_PANIC_TESTS=${INCLUDE_PANIC_TESTS}") + #By default panic tests are disabled + set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "Default INCLUDE_PANIC_TESTS value" FORCE) + message(STATUS "[PSA] : Defaulting INCLUDE_PANIC_TESTS to ${INCLUDE_PANIC_TESTS}") else() if(INCLUDE_PANIC_TESTS EQUAL 1) - message(STATUS "[PSA] : Ensure you set watchdog.num to 1 in ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg") - message(STATUS "[PSA] : To test PSA APIs panic conditions, test harness may require to access watchdog timer " - "to recover from panic and to be able to continue with next test. " - "Ignore this warning if system under test has capability to reset the system " - "when it encounters panic condition.") + message(STATUS "[PSA] : " + "INCLUDE_PANIC_TESTS set to 1, therefore including PSA APIs panic tests into the regression,\n" + "\tensure that watchdog.num is set to 1 in ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg") endif() endif() if(NOT DEFINED WATCHDOG_AVAILABLE) - set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "Assuming watchdog is available to program by test suite" FORCE) - message(STATUS "[PSA] : Watchdog is available by default") + #Assuming watchdog is available to program by test suite + set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "Default WATCHDOG_AVAILABLE value" FORCE) + message(STATUS "[PSA] : Defaulting WATCHDOG_AVAILABLE to ${WATCHDOG_AVAILABLE}") +else() + message(STATUS "[PSA] : WATCHDOG_AVAILABLE is set to ${WATCHDOG_AVAILABLE}") endif() if((INCLUDE_PANIC_TESTS EQUAL 1) AND (WATCHDOG_AVAILABLE EQUAL 0)) - message(FATAL_ERROR "[PSA]: Panic test execution needs watchdog access. set -DWATCHDOG_AVAILABLE=1") + message(WARNING "[PSA]: " + "Note that to test PSA APIs panic conditions, test harness may require to access" + "the watchdog timer in oder to recover from panic and to be able to continue with" + "next test. Ignore this warning if system under test has capability to reset the" + "system when it encounters panic condition.") endif() if(NOT DEFINED SP_HEAP_MEM_SUPP) - set(SP_HEAP_MEM_SUPP 1 CACHE INTERNAL "Are dynamic memory functions available to secure partition?" FORCE) - message(STATUS "[PSA] : Default value for SP_HEAP_MEM_SUPP is ${SP_HEAP_MEM_SUPP}") + #Are dynamic memory functions available to secure partition? + set(SP_HEAP_MEM_SUPP 1 CACHE INTERNAL "Default SP_HEAP_MEM_SUPP value" FORCE) + message(STATUS "[PSA] : Defaulting SP_HEAP_MEM_SUPP to ${SP_HEAP_MEM_SUPP}") endif() if(NOT DEFINED TEST_COMBINE_ARCHIVE) - set(TEST_COMBINE_ARCHIVE 1 CACHE INTERNAL "Default option is to create archive" FORCE) - message(STATUS "[PSA] : Default value for TEST_COMBINE_ARCHIVE is ${TEST_COMBINE_ARCHIVE}") + #Default option is to create archive + set(TEST_COMBINE_ARCHIVE 1 CACHE INTERNAL "Default TEST_COMBINE_ARCHIVE value" FORCE) + message(STATUS "[PSA] : Defaulting TEST_COMBINE_ARCHIVE to ${TEST_COMBINE_ARCHIVE}") +else() + message(STATUS "[PSA] : TEST_COMBINE_ARCHIVE is set to ${TEST_COMBINE_ARCHIVE}") endif() message(STATUS "[PSA] : ----------Process input arguments- complete-------------") -# Build PAL NSPE LIB -include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake) + +if((${SUITE} STREQUAL "INITIAL_ATTESTATION") AND (NOT EXISTS ${PSA_TARGET_QCBOR})) +# Clone QCBOR and move to specified tag +execute_process(COMMAND ${GIT_EXECUTABLE} clone ${PSA_QCBOR_GIT_REPO_LINK} ${PSA_TARGET_QCBOR} + RESULT_VARIABLE ${PSA_TARGET_QCBOR}_clone_result + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +if(${PSA_TARGET_QCBOR}_clone_result) + message(FATAL_ERROR "git clone failed for ${PSA_QCBOR_GIT_REPO_LINK}") +endif() + +if(NOT ${PSA_TARGET_QCBOR}_clone_result) +execute_process(COMMAND ${GIT_EXECUTABLE} checkout -q "${PSA_QCBOR_GIT_REPO_TAG}" + RESULT_VARIABLE ${PSA_TARGET_QCBOR}_checkout_result + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}) +if(${PSA_TARGET_QCBOR}_checkout_result) + message(FATAL_ERROR "git checkout failed for Repo : ${PSA_QCBOR_GIT_REPO_LINK}, Tag : ${PSA_QCBOR_GIT_REPO_TAG}") +endif() +endif() +endif() # Create PSA clean list list(APPEND PSA_CLEAN_LIST @@ -332,22 +374,6 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src/${PSA_TARGET_GENERATE_DATABASE}-build/ -- clean ) -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") -# Cloning CMSIS_5 repo -ExternalProject_Add( - ${PSA_TARGET_QCBOR} - PREFIX ${CMAKE_CURRENT_BINARY_DIR} - GIT_REPOSITORY ${PSA_QCBOR_GIT_REPO_LINK} - GIT_TAG ${PSA_QCBOR_GIT_REPO_TAG} - CONFIGURE_COMMAND "" - UPDATE_COMMAND "" - PATCH_COMMAND "" - BUILD_COMMAND "" - TEST_COMMAND "" - INSTALL_COMMAND "" -) -endif() - # Check for supported toolchain/s if(${TOOLCHAIN} IN_LIST PSA_TOOLCHAIN_SUPPORT) include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake) @@ -365,6 +391,8 @@ if(${SP_HEAP_MEM_SUPP} EQUAL 1) add_definitions(-DSP_HEAP_MEM_SUPP) endif() +# Build PAL NSPE LIB +include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake) # Build VAL NSPE LIB #add_definitions(-DVAL_NSPE_BUILD) include(${PSA_ROOT_DIR}/val/val_nspe.cmake) @@ -377,13 +405,7 @@ endif() add_dependencies(${PSA_TARGET_GENERATE_DATABASE} ${PSA_TARGET_GENERATE_DATABASE_PRE}) add_dependencies(${PSA_TARGET_GENERATE_DATABASE_POST} ${PSA_TARGET_GENERATE_DATABASE}) -if(${SUITE} STREQUAL "INITIAL_ATTESTATION") -add_dependencies(${PSA_TARGET_QCBOR} ${PSA_TARGET_GENERATE_DATABASE_POST}) -add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_QCBOR}) -add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_QCBOR}) -else() add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_GENERATE_DATABASE_POST}) -endif() add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_PAL_NSPE_LIB}) add_dependencies(${PSA_TARGET_TEST_COMBINE_LIB} ${PSA_TARGET_VAL_NSPE_LIB}) if(${SUITE} STREQUAL "IPC") diff --git a/api-tests/README.md b/api-tests/README.md index f0bee670..aa989847 100644 --- a/api-tests/README.md +++ b/api-tests/README.md @@ -18,8 +18,7 @@ The test suite for this specification is located in the **ff** directory of this The test suite for this specification is located in the **dev_apis** directory of this repository. See the [PSA Developer APIs README](dev_apis/README.md) file for more details. ## Release Update - - Release Version: 0.9 - - Code quality: Arm welcomes suggestions for enhancements and error corrections. + - Code Quality : REL v1.0 - This release contains following tests:
    1. Developer APIs test list: @@ -31,7 +30,7 @@ The test suite for this specification is located in the **dev_apis** directory o | Internal Trusted Storage | [PSA Internal Trusted Storage API 1.0.0](../api-specs/storage/v1.0/doc/) | | Initial Attestation | [PSA Initial Attestation API 1.0.0](../api-specs/attestation/v1.0/doc/) | -2. PSA-FF tests that are written for version 1.0-Beta1 of the PSA FF specification. +2. PSA-FF tests that are written for the PSA FF 1.0 specification. ## License @@ -46,4 +45,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/dev_apis/README.md b/api-tests/dev_apis/README.md index 83aac79e..2cdff611 100644 --- a/api-tests/dev_apis/README.md +++ b/api-tests/dev_apis/README.md @@ -40,13 +40,13 @@ To build the test suite for your target platform, execute the following commands
    Options information:
    - -G"" : "Unix Makefiles" to generate Makefiles for Linux and Cygwin. "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    -- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms.
    +- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms. Refer [Test_failure analysis](../docs/test_failure_analysis.md) document to know the reason for any known test fail.
    - -DTOOLCHAIN= Compiler toolchain to be used for test suite compilation. Supported values are GNUARM (GNU Arm Embedded), ARMCLANG (ARM Compiler 6.x) and HOST_GCC. Default is GNUARM.
    - -DCPU_ARCH= is the Arm Architecture version name for which the tests should be compiled. Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. Default is empty. This option is unused when TOOLCHAIN type is HOST_GCC.
    - -DSUITE= is the suite name that is the same as the suite name available in **dev_apis/** directory.
    - -DVERBOSE=. Print verbosity level. Default is 3. Supported print levels are 1(INFO & above), 2(DEBUG & above), 3(TEST & above), 4(WARN & ERROR) and 5(ERROR). - -DBUILD= : To select the build directory to keep output files. Default is BUILD/ inside current directory. -- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which depend on the system reset conditions. +- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which check the PSA API behaviour on the system reset. - -DPSA_INCLUDE_PATHS=";;...;" is an additional directory to be included into the compiler search path.You must provide Developer APIs header files implementation to the test suite build system using this option. For example, to compile Crypto tests, the include path must point to the path where **psa/crypto.h** is located in your build system. Bydefault, PSA_INCLUDE_PATHS accepts absolute path. However, relative path can be provided using below format:
    ``` -DPSA_INCLUDE_PATHS=`readlink -f ` @@ -99,4 +99,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/dev_apis/crypto/test_c039/test_data.h b/api-tests/dev_apis/crypto/test_c039/test_data.h index bdbcd54e..b90831b7 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_data.h +++ b/api-tests/dev_apis/crypto/test_c039/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -41,12 +41,11 @@ static const uint8_t rsa_256_keypair[1]; static const uint8_t rsa_256_keydata[1]; static const uint8_t ec_keydata[] = { - 0x30, 0x49, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, - 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x01, 0x03, 0x32, 0x00, 0x04, 0xBC, - 0x79, 0x7D, 0xB3, 0xAE, 0x7F, 0x08, 0xEC, 0x3D, 0x49, 0x6B, 0x4F, 0xB4, 0x11, 0xB3, - 0xF6, 0x20, 0xA5, 0x58, 0xA5, 0x01, 0xE0, 0x22, 0x2D, 0x08, 0xCF, 0xE0, 0xDC, 0x8A, - 0xEC, 0x8B, 0x1A, 0x7B, 0xF2, 0x4B, 0xE9, 0x29, 0x51, 0xCC, 0x5B, 0xA1, 0xBE, 0xBB, - 0x24, 0x74, 0x90, 0x9A, 0xE0}; + 0x04, 0xde, 0xa5, 0xe4, 0x5d, 0x0e, 0xa3, 0x7f, 0xc5, 0x66, 0x23, 0x2a, 0x50, 0x8f, + 0x4a, 0xd2, 0x0e, 0xa1, 0x3d, 0x47, 0xe4, 0xbf, 0x5f, 0xa4, 0xd5, 0x4a, 0x57, 0xa0, + 0xba, 0x01, 0x20, 0x42, 0x08, 0x70, 0x97, 0x49, 0x6e, 0xfc, 0x58, 0x3f, 0xed, 0x8b, + 0x24, 0xa5, 0xb9, 0xbe, 0x9a, 0x51, 0xde, 0x06, 0x3f, 0x5a, 0x00, 0xa8, 0xb6, 0x98, + 0xa1, 0x6f, 0xd7, 0xf2, 0x9b, 0x54, 0x85, 0xf3, 0x20}; static const uint8_t ec_keypair[] = { 0x30, 0x5F, 0x02, 0x01, 0x01, 0x04, 0x18, 0x33, 0x8E, 0x86, 0xA8, 0x81, 0xE2, 0x38, @@ -216,19 +215,17 @@ static test_data check1[] = { #endif #ifdef ARCH_TEST_ECDSA -#ifdef ARCH_TEST_ECC_CURVE_SECP192R1 +#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 {"Test psa_asymmetric_encrypt - ECC public key\n", 9, - PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP192R1), -{0}, 75, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_ECDSA_ANY, + PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), +{0}, 65, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, {0}, 0, {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad}, 22, 128, - 0, 192, PSA_SUCCESS + 128, 256, PSA_SUCCESS }, -#endif -#ifdef ARCH_TEST_ECC_CURVE_SECP256R1 {"Test psa_asymmetric_encrypt - ECC keypair\n", 10, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1), {0}, 97, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256), @@ -236,7 +233,7 @@ static test_data check1[] = { {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad}, 22, 128, - 0, 192, PSA_SUCCESS + 128, 256, PSA_SUCCESS } #endif #endif diff --git a/api-tests/dev_apis/crypto/test_c042/test_data.h b/api-tests/dev_apis/crypto/test_c042/test_data.h index 5f8592ce..95a1c72c 100644 --- a/api-tests/dev_apis/crypto/test_c042/test_data.h +++ b/api-tests/dev_apis/crypto/test_c042/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -212,7 +212,7 @@ PSA_KEY_TYPE_RSA_PUBLIC_KEY, 0x28, 0x1d, 0xb1, 0xe0, 0x02, 0x5c, 0x3b, 0xfb, 0x55, 0x12, 0x96, 0x3e, 0xc3, 0xb9, 0x8d, 0xda, 0xa6, 0x9e, 0x38, 0xbc, 0x3c, 0x84, 0xb1, 0xb6, 0x1a, 0x04, 0xe5, 0x64, 0x86, 0x40, 0x85, 0x6a, 0xac, 0xc6, 0xfc, 0x73, 0x11}, - 120, 1024, PSA_ERROR_BUFFER_TOO_SMALL + 120, 1024, PSA_ERROR_INVALID_SIGNATURE }, #endif diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h index 4372bb18..b31767eb 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,52 +29,55 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s001_data[] = { { - 0, 0 /* Unused Index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call the get API when no UID is set */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index1 - Call the get API when no UID is set */ }, { - VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call the get_info API when no UID is set */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index2 - Call the get_info API when no UID is set */ }, { - VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call the remove API when no UID is set */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index3 - Call the remove API when no UID is set */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with UID1 */ + VAL_ITS_SET, PSA_SUCCESS /* Index4 - Create a valid storage entity with UID1 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with UID2 */ + VAL_ITS_SET, PSA_SUCCESS /* Index5 - Create a valid storage entity with UID2 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID1 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index6 - Remove UID1 */ }, { - VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID1 */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index7 - Call get API for UID1 */ }, { - VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info API for UID1 */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index8 - Call get_info API for UID1 */ }, { - VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID1 */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index9 - Call remove API for UID1 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity again with UID1 */ + VAL_ITS_SET, PSA_SUCCESS /* Index10 - Create a valid storage entity again with UID1 */ }, { - VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID not same as UID1 or UID2 */ + VAL_ITS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index11 - Call get API for UID not same as UID1 or UID2 */ }, { - VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info for UID not same as UID1 or UID2 */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index12 - Call get_info for UID not same as UID1 + or UID2 */ }, { - VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID not same as UID1 or UID2 */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index13 - Call remove API for UID not same as UID1 + or UID2 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID1 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index14 - Remove UID1 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove UID2 */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index15 - Remove UID2 */ }, }; #endif /* _TEST_S001_ITS_DATA_TESTS_H_ */ + diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h index 283ff861..b9b775ea 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,52 +29,54 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s001_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call the get API when no UID is set */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index1 - Call the get API when no UID is set */ }, { - VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call the get_info API when no UID is set */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index2 - Call the get_info API when no UID is set */ }, { - VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call the remove API when no UID is set */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index3 - Call the remove API when no UID is set */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with UID1 */ + VAL_PS_SET, PSA_SUCCESS /* Index4 - Create a valid storage entity with UID1 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with UID2 */ + VAL_PS_SET, PSA_SUCCESS /* Index5 - Create a valid storage entity with UID2 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID1 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index6 - Remove UID1 */ }, { - VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID1 */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index7 - Call get API for UID1 */ }, { - VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info API for UID1 */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index8 - Call get_info API for UID1 */ }, { - VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID1 */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index9 - Call remove API for UID1 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity again with UID1 */ + VAL_PS_SET, PSA_SUCCESS /* Index10 - Create a valid storage entity again with UID1 */ }, { - VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Call get API for UID not same as UID1 or UID2 */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index11 - Call get API for UID not same as UID1 or UID2 */ }, { - VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Call get_info for UID not same as UID1 or UID2 */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index12 - Call get_info for UID not same as UID1 + or UID2 */ }, { - VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Call remove API for UID not same as UID1 or UID2 */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index13 - Call remove API for UID not same as UID1 + or UID2 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID1 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index14 - Remove UID1 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove UID2 */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index15 - Remove UID2 */ }, }; #endif /* _TEST_S001_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c index 3459886c..76bd7531 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s001/test_s001.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -112,18 +112,18 @@ static int32_t sst_calls_with_different_uid(psa_storage_uid_t p_uid) TEST_ASSERT_EQUAL(status, s001_data[10].status, TEST_CHECKPOINT_NUM(10)); /* get() for different UID then set UID */ - val->print(PRINT_TEST, "[Check 7] Call get API for different UID %d\n", p_uid); + val->print(PRINT_TEST, "[Check 7] Call get API for different UID %d\n", p_uid-1); status = SST_FUNCTION(s001_data[11].api, p_uid-1, 0, TEST_BUFF_SIZE - 1, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s001_data[11].status, TEST_CHECKPOINT_NUM(11)); /* get_info() for different UID then set UID */ - val->print(PRINT_TEST, "[Check 8] Call get_info API for different UID %d\n", p_uid); + val->print(PRINT_TEST, "[Check 8] Call get_info API for different UID %d\n", p_uid-1); status = SST_FUNCTION(s001_data[12].api, p_uid-1, &info); TEST_ASSERT_EQUAL(status, s001_data[12].status, TEST_CHECKPOINT_NUM(12)); /* remove() for different UID then set UID */ - val->print(PRINT_TEST, "[Check 9] Call remove API for different UID %d\n", p_uid); + val->print(PRINT_TEST, "[Check 9] Call remove API for different UID %d\n", p_uid-1); status = SST_FUNCTION(s001_data[13].api, p_uid-1); TEST_ASSERT_EQUAL(status, s001_data[13].status, TEST_CHECKPOINT_NUM(13)); diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h index e3ac2cc3..b0c25411 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,103 +30,106 @@ static struct psa_storage_info_t orig_info; static struct psa_storage_info_t new_info; static const test_data s002_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage with create flag value 0 */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage with create flag value 0 */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the attributes */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index2 - Call the get_info API to validate the attributes */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index3 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index4 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API */ + VAL_ITS_GET, PSA_SUCCESS /* Index5 - Validate the data using get API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Change the flag to WRITE_ONCE using set API */ + VAL_ITS_SET, PSA_SUCCESS /* Index7 - Change the flag to WRITE_ONCE using set API */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index8 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index9 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index10 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Index11 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index12 */ }, { - VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed after WRITE_ONCE flag */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index13 - Storage should not be removed after + WRITE_ONCE flag */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a storage with different UID and flag value WRITE_ONCE */ + VAL_ITS_SET, PSA_SUCCESS /* Index14 - Create a storage with different UID and flag value + WRITE_ONCE */ }, { - VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index15 - Storage should not be removed */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Index16 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index17 */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index18 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index19 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index20 */ }, { - VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Try to set different size for same UID and flag value */ + VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Index21 - Try to set different size for same UID and + flag value */ }, { - VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index22 - Storage should not be removed */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index23 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index24 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index25 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_ITS_GET, PSA_SUCCESS /* Index26 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index27 */ }, { - VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Setting flag to zero for UID should fail */ + VAL_ITS_SET, PSA_ERROR_NOT_PERMITTED /* Index28 - Setting flag to zero for UID should fail */ }, { - VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_ITS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index29 - Storage should not be removed */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index30 - Check that the WRITE_ONCE flag is preserved */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index31 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index32 */ }, }; #endif /* _TEST_S002_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h index 4e7b1f70..162984e9 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,103 +30,106 @@ static struct psa_storage_info_t orig_info; static struct psa_storage_info_t new_info; static const test_data s002_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage with create flag value 0 */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage with create flag value 0 */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the attributes */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index2 - Call the get_info API to validate the attributes */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index3 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index4 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API */ + VAL_PS_GET, PSA_SUCCESS /* Index5 - Validate the data using get API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Change the flag to WRITE_ONCE using set API */ + VAL_PS_SET, PSA_SUCCESS /* Index7 - Change the flag to WRITE_ONCE using set API */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index8 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index9 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index10 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Index11 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index12 */ }, { - VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed after WRITE_ONCE flag */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index13 - Storage should not be removed after + WRITE_ONCE flag */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create storage with different UID and flag value WRITE_ONCE */ + VAL_PS_SET, PSA_SUCCESS /* Index14 - Create a storage with different UID and flag value + WRITE_ONCE */ }, { - VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index15 - Storage should not be removed */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Index16 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index17 */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index18 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index19 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index20 */ }, { - VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Try to set different size for same UID and flag value */ + VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Index21 - Try to set different size for same UID and + flag value */ }, { - VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index22 - Storage should not be removed */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Call the get_info API to validate the flag change */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index23 - Call the get_info API to validate the flag change */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index24 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index25 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after flag change */ + VAL_PS_GET, PSA_SUCCESS /* Index26 - Validate the data using get API after flag change */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index27 */ }, { - VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Setting flag to zero for UID should fail */ + VAL_PS_SET, PSA_ERROR_NOT_PERMITTED /* Index28 - Setting flag to zero for UID should fail */ }, { - VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Storage should not be removed */ + VAL_PS_REMOVE, PSA_ERROR_NOT_PERMITTED /* Index29 - Storage should not be removed */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Check that the WRITE_ONCE flag is preserved */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index30 - Check that the WRITE_ONCE flag is preserved */ }, { - 0, 0 /* Index not used as check for get info size */ + 0, 0 /* This is dummy for Index31 */ }, { - 0, 0 /* Index not used as check for get info flag */ + 0, 0 /* This is dummy for Index32 */ }, }; #endif /* _TEST_S002_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c index bd923dba..5bb0ccd7 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s002/test_s002.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or sst affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h index 4bb3e650..095dcfe0 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,13 +29,13 @@ typedef struct { static const test_data s003_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Call set API till insufficent space */ + VAL_ITS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Index1 - Call set API till insufficent space */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the UID created */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index2 - Remove the UID created */ }, }; #endif /* _TEST_S003_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h index d3d8806e..60e750d6 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,13 +28,13 @@ typedef struct { static const test_data s003_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Call set API till insufficent space */ + VAL_PS_SET, PSA_ERROR_INSUFFICIENT_STORAGE /* Index1 - Call set API till insufficent space */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID created */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index2 - Remove the UID created */ }, }; #endif /* _TEST_S003_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c index f3c20c38..90573169 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s003/test_s003.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,7 +24,6 @@ #include "test_ps_data.h" #endif -#define TEST_BUFF_SIZE 512 #define NUM_ITERATIONS 2 #define TEST_BASE_UID_VALUE UID_BASE_VALUE + 5 @@ -34,7 +33,7 @@ client_test_t test_s003_sst_list[] = { NULL, }; -static uint8_t write_buff[TEST_BUFF_SIZE]; +static uint8_t write_buff[PLATFORM_MAX_UID_SIZE]; static char test_desc[2][80] = { "Overload storage space\n", "Overload storage again to verify all previous UID removed\n"}; @@ -53,13 +52,13 @@ int32_t psa_sst_insufficient_space(caller_security_t caller) val->print(PRINT_TEST, &test_desc[i][0], 0); for (uid = TEST_BASE_UID_VALUE; status == PSA_SUCCESS; uid++) { - val->print(PRINT_INFO, "Setting 0x%x bytes for ", TEST_BUFF_SIZE); + val->print(PRINT_INFO, "Setting 0x%x bytes for ", PLATFORM_MAX_UID_SIZE); val->print(PRINT_INFO, "UID %d\n", uid); - status = SST_FUNCTION(s003_data[1].api, uid, TEST_BUFF_SIZE, write_buff, + status = SST_FUNCTION(s003_data[1].api, uid, PLATFORM_MAX_UID_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); if (status != PSA_SUCCESS) { - val->print(PRINT_INFO, "UID %d set failed due to insufficient space\n", uid); + val->print(PRINT_TEST, "UID %d set failed due to insufficient space\n", uid); break; } } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h index 22124d13..f92ab6df 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,37 +28,28 @@ typedef struct { static const test_data s004_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API after set API failure */ + VAL_ITS_GET, PSA_SUCCESS /* Index2 - Validate the data using get API after set API failure */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ + VAL_ITS_SET, PSA_SUCCESS /* Index4 - For same UID set the length as half of previous */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get with incorrect length */ + VAL_ITS_GET, PSA_SUCCESS /* Index5 - Call get with incorrect length */ }, { - 0, 0 /* No data should be returned */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with correct length */ -}, -{ - 0, 0 /* No data should be returned */ -}, -{ - 0, 0 /* Check that we should not be able to access the old data */ -}, -{ - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index7 - Remove the valid storage entity */ }, }; #endif /* _TEST_S004_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h index 54f4d7a3..e17dfde7 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,37 +28,28 @@ typedef struct { static const test_data s004_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API after set API failure */ + VAL_PS_GET, PSA_SUCCESS /* Index2 - Validate the data using get API after set API failure */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_PS_SET, PSA_SUCCESS /* For same UID set the length as half of previous */ + VAL_PS_SET, PSA_SUCCESS /* Index4 - For same UID set the length as half of previous */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get with incorrect length */ + VAL_PS_GET, PSA_SUCCESS /* Index5 - Call get with incorrect length */ }, { - 0, 0 /* No data should be returned */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with correct length */ -}, -{ - 0, 0 /* No data should be returned */ -}, -{ - 0, 0 /* Check that we should not be able to access the old data */ -}, -{ - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index7 - Remove the valid storage entity */ }, }; #endif /* _TEST_S004_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c index 7e299e78..94240c0c 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s004/test_s004.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -39,7 +39,7 @@ static uint8_t write_buff[TEST_BUFF_SIZE] = {0x99, 0x01, 0x30, 0x50, 0x04, 0x23, int32_t psa_sst_get_data_check(caller_security_t caller) { - uint32_t status, j, p_data_length = 0; + uint32_t status, p_data_length = 0; /* Set data for UID */ status = SST_FUNCTION(s004_data[1].api, uid, TEST_BUFF_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); @@ -52,35 +52,22 @@ int32_t psa_sst_get_data_check(caller_security_t caller) TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(4)); /* Call the set again for same uid and set the length as half */ + val->print(PRINT_TEST, "[Check 1] Call set API with reduced length - TEST_BUFF_SIZE/2\n", 0); status = SST_FUNCTION(s004_data[4].api, uid, TEST_BUFF_SIZE/2, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s004_data[4].status, TEST_CHECKPOINT_NUM(5)); /* Call get function with incorrect buffer length */ - val->print(PRINT_TEST, "[Check 1] Call get API with incorrect length\n", 0); - memset(read_buff, 0, TEST_BUFF_SIZE); + val->print(PRINT_TEST, "[Check 2] Call get API with default length - TEST_BUFF_SIZE\n", 0); status = SST_FUNCTION(s004_data[5].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s004_data[5].status, TEST_CHECKPOINT_NUM(6)); TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(7)); - /* Expect p_data_length = TEST_BUFF_SIZE/2, when psa get function is successful as in previous case */ - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(8)); - - /* Call get function with CORRECT buffer length */ - status = SST_FUNCTION(s004_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s004_data[7].status, TEST_CHECKPOINT_NUM(9)); - TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(10)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(11)); - - /* Check we should not be able to access old set data */ - val->print(PRINT_TEST, "[Check 2] Old buffer invalid after length change\n", 0); - for (j = TEST_BUFF_SIZE/2; j < TEST_BUFF_SIZE; j++) - { - TEST_ASSERT_EQUAL(read_buff[j], 0, TEST_CHECKPOINT_NUM(12)); - } + /* Expect p_data_length = TEST_BUFF_SIZE/2 */ + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(8)); /* Remove the UID */ - status = SST_FUNCTION(s004_data[10].api, uid); - TEST_ASSERT_EQUAL(status, s004_data[10].status, TEST_CHECKPOINT_NUM(13)); + status = SST_FUNCTION(s004_data[7].api, uid); + TEST_ASSERT_EQUAL(status, s004_data[7].status, TEST_CHECKPOINT_NUM(9)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h index ed61509f..5f985e8e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,28 +29,28 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s005_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Validate the data using get API */ + VAL_ITS_GET, PSA_SUCCESS /* Index2 - Validate the data using get API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Validate the data attributes get_info API */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index4 - Validate the data attributes get_info API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index5 */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index7 - Remove the valid storage entity */ }, }; #endif /* _TEST_S005_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h index 52e35d08..ad248bd5 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s005/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,28 +29,28 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s005_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data using get API */ + VAL_PS_GET, PSA_SUCCESS /* Index2 - Validate the data using get API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the data attributes get_info API */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index4 - Validate the data attributes get_info API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index5 */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index6 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the valid storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index7 - Remove the valid storage entity */ }, }; #endif /* _TEST_S005_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h index e52525f6..b6a3cf9d 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,22 +29,22 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s006_data[] = { { - 0, PSA_ERROR_NOT_SUPPORTED /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with different flag values */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity with different flag values */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Validate the flag value get_info API */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index2 - Validate the flag value get_info API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index4 - Remove the storage entity */ }, { - VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Storage entity remove fails */ + VAL_ITS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index5 - Storage entity remove fails */ }, }; #endif /* _TEST_S006_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h index f40f34ba..0bf7305e 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,22 +29,22 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s006_data[] = { { - 0, PSA_ERROR_NOT_SUPPORTED /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with different flag values */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity with different flag values */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the flag value get_info API */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index2 - Validate the flag value get_info API */ }, { - 0, 0 /* Index not used */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index4 - Remove the storage entity */ }, { - VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_ERROR_DOES_NOT_EXIST /* Index5 - Storage entity remove fails */ } }; #endif /* _TEST_S006_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c index 2adc5d5a..bda5fccd 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s006/test_s006.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -71,7 +71,8 @@ static int32_t psa_sst_create_storage_api(psa_storage_uid_t uid, uint32_t data_l { return test_status; } - } else if (status == s006_data[0].status) + } + else { /* Remove UID should fail */ status = SST_FUNCTION(s006_data[5].api, uid); diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h index 6a680849..b5be47ee 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,37 +28,37 @@ typedef struct { static const test_data s007_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Increase the length of storage */ + VAL_ITS_SET, PSA_SUCCESS /* Index2 - Increase the length of storage */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Index3 - Try to access old length */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Try to access valid length less than set length */ + VAL_ITS_GET, PSA_SUCCESS /* Index4 - Try to access valid length less than set length */ }, { - 0, 0 /* This is dummy for index5 */ + 0, 0 /* This is dummy for Index5 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Decrease the length of storage */ + VAL_ITS_SET, PSA_SUCCESS /* Index6 - Decrease the length of storage */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Index7 - Try to access old length */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_ITS_GET, PSA_SUCCESS /* Index8 - Try to access old length */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Try to access data with correct length */ + VAL_ITS_GET, PSA_SUCCESS /* Index9 - Try to access data with correct length */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index10 - Remove the storage entity */ }, }; #endif /* _TEST_S007_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h index ca4fd1a6..6414d2c6 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,37 +28,37 @@ typedef struct { static const test_data s007_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity */ }, { - VAL_PS_SET, PSA_SUCCESS /* Increase the length of storage */ + VAL_PS_SET, PSA_SUCCESS /* Index2 - Increase the length of storage */ }, { - VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Index3 - Try to access old length */ }, { - VAL_PS_GET, PSA_SUCCESS /* Try to access valid length less than set length */ + VAL_PS_GET, PSA_SUCCESS /* Index4 - Try to access valid length less than set length */ }, { - 0, 0 /* This is dummy for index5 */ + 0, 0 /* This is dummy for Index5 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Decrease the length of storage */ + VAL_PS_SET, PSA_SUCCESS /* Index6 - Decrease the length of storage */ }, { - VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Index7 - Try to access old length */ }, { - VAL_PS_GET, PSA_SUCCESS /* Try to access old length */ + VAL_PS_GET, PSA_SUCCESS /* Index8 - Try to access old length */ }, { - VAL_PS_GET, PSA_SUCCESS /* Try to access data with correct length */ + VAL_PS_GET, PSA_SUCCESS /* Index9 - Try to access data with correct length */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index10 - Remove the storage entity */ }, }; #endif /* _TEST_S007_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c index 9caee670..610e0455 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s007/test_s007.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -43,55 +43,65 @@ int32_t psa_sst_get_incorrect_size(caller_security_t caller) uint32_t status = VAL_STATUS_SUCCESS, p_data_length = 0; /* Set the UID with the data_len and data_buff */ - val->print(PRINT_TEST, "Create a valid Storage\n", 0); + val->print(PRINT_TEST, "Create a valid Storage - TEST_BUFF_SIZE/2\n", 0); status = SST_FUNCTION(s007_data[1].api, uid, TEST_BUFF_SIZE/2, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s007_data[1].status, TEST_CHECKPOINT_NUM(1)); /* Call set for same UID and increase the length */ - val->print(PRINT_TEST, "Increase the length of storage\n", 0); + val->print(PRINT_TEST, "Increase the length of storage - TEST_BUFF_SIZE\n", 0); status = SST_FUNCTION(s007_data[2].api, uid, TEST_BUFF_SIZE, write_buff, PSA_STORAGE_FLAG_NONE); TEST_ASSERT_EQUAL(status, s007_data[2].status, TEST_CHECKPOINT_NUM(2)); /* Access data using get API and old length */ - val->print(PRINT_TEST, "[Check 1] Call get API with old length\n", 0); + val->print(PRINT_TEST, "[Check 1] Call get API with old length - TEST_BUFF_SIZE/2\n", 0); status = SST_FUNCTION(s007_data[3].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s007_data[3].status, TEST_CHECKPOINT_NUM(3)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/2, TEST_CHECKPOINT_NUM(5)); /* Access data using get API and valid length */ + val->print(PRINT_TEST, "[Check 2] Call get API with old length - TEST_BUFF_SIZE/4\n", 0); + memset(read_buff, 0x0, TEST_BUFF_SIZE); status = SST_FUNCTION(s007_data[4].api, uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s007_data[4].status, TEST_CHECKPOINT_NUM(5)); - TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(6)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(status, s007_data[4].status, TEST_CHECKPOINT_NUM(6)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(7)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(8)); /* Decrease the length again */ - val->print(PRINT_TEST, "Decrease the length of storage\n", 0); + val->print(PRINT_TEST, "Decrease the length of storage - TEST_BUFF_SIZE/4\n", 0); status = SST_FUNCTION(s007_data[6].api, uid, TEST_BUFF_SIZE/4, write_buff, PSA_STORAGE_FLAG_NONE); - TEST_ASSERT_EQUAL(status, s007_data[6].status, TEST_CHECKPOINT_NUM(8)); + TEST_ASSERT_EQUAL(status, s007_data[6].status, TEST_CHECKPOINT_NUM(9)); /* Access data using get API and old length */ + val->print(PRINT_TEST, "[Check 3] Call get API with old length - TEST_BUFF_SIZE/2\n", 0); + memset(read_buff, 0x0, TEST_BUFF_SIZE); status = SST_FUNCTION(s007_data[7].api, uid, 0, TEST_BUFF_SIZE/2, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s007_data[7].status, TEST_CHECKPOINT_NUM(9)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_EQUAL(status, s007_data[7].status, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(11)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(12)); /* Access data using get API and old length */ - val->print(PRINT_TEST, "[Check 2] Call get API with old length\n", 0); + val->print(PRINT_TEST, "[Check 4] Call get API with old length - TEST_BUFF_SIZE\n", 0); + memset(read_buff, 0x0, TEST_BUFF_SIZE); status = SST_FUNCTION(s007_data[8].api, uid, 0, TEST_BUFF_SIZE, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s007_data[8].status, TEST_CHECKPOINT_NUM(11)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(12)); + TEST_ASSERT_EQUAL(status, s007_data[8].status, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(15)); /* Access data using correct length */ - val->print(PRINT_TEST, "[Check 3] Call get API with valid length\n", 0); + val->print(PRINT_TEST, "[Check 5] Call get API with valid length - TEST_BUFF_SIZE/4\n", 0); + memset(read_buff, 0x0, TEST_BUFF_SIZE); status = SST_FUNCTION(s007_data[9].api, uid, 0, TEST_BUFF_SIZE/4, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s007_data[9].status, TEST_CHECKPOINT_NUM(13)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_EQUAL(status, s007_data[9].status, TEST_CHECKPOINT_NUM(16)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(17)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE/4, TEST_CHECKPOINT_NUM(18)); /* Remove the UID */ status = SST_FUNCTION(s007_data[10].api, uid); - TEST_ASSERT_EQUAL(status, s007_data[10].status, TEST_CHECKPOINT_NUM(15)); + TEST_ASSERT_EQUAL(status, s007_data[10].status, TEST_CHECKPOINT_NUM(19)); return status; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h index 95522c9a..f5476c3b 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,46 +28,46 @@ typedef struct { static const test_data s008_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create a valid storage entity with zero flag value */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity with zero flag value */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset + data_len = total_size */ + VAL_ITS_GET, PSA_SUCCESS /* Index2 - Call get API with offset + data_len = total_size */ }, { - 0, 0 /* This is dummy for index3 */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset + data_len < total_size */ + VAL_ITS_GET, PSA_SUCCESS /* Index4 - Call get API with offset + data_len < total_size */ }, { - 0, 0 /* This is dummy for index5 */ + 0, 0 /* This is dummy for Index5 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with offset = total data_size + 1 */ + VAL_ITS_GET, PSA_SUCCESS /* Index6 - Call get API with offset = total data_size + 1 */ }, { - 0, 0 /* This is dummy for index7 */ + 0, 0 /* This is dummy for Index7 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* get API with offset + data_len > total data_size */ + VAL_ITS_GET, PSA_SUCCESS /* Index8 - get API with offset = total data_size */ }, { - 0, 0 /* This is dummy for index9 */ + 0, 0 /* This is dummy for Index9 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with invalid data len and offset zero */ + VAL_ITS_GET, PSA_SUCCESS /* Index10 - Call get API with invalid data len and offset zero */ }, { - 0, 0 /* This is dummy for index11 */ + 0, 0 /* This is dummy for Index11 */ }, { - VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset = MAX_UINT32 */ + VAL_ITS_GET, PSA_ERROR_INVALID_ARGUMENT /* Index12 - Call get API with offset = MAX_UINT32 */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index13 - Remove the storage entity */ }, }; #endif /* _TEST_S008_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h index 598ac992..e9945925 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,46 +28,46 @@ typedef struct { static const test_data s008_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create a valid storage entity with zero flag value */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Create a valid storage entity with zero flag value */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len = total_size */ + VAL_PS_GET, PSA_SUCCESS /* Index2 - Call get API with offset + data_len = total_size */ }, { - 0, 0 /* This is dummy for index3 */ + 0, 0 /* This is dummy for Index3 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len < total_size */ + VAL_PS_GET, PSA_SUCCESS /* Index4 - Call get API with offset + data_len < total_size */ }, { - 0, 0 /* This is dummy for index5 */ + 0, 0 /* This is dummy for Index5 */ }, { - VAL_PS_GET, PSA_SUCCESS/* Call get API with offset = total data_size + 1 */ + VAL_PS_GET, PSA_SUCCESS/* Index6 - Call get API with offset = total data_size + 1 */ }, { - 0, 0 /* This is dummy for index7 */ + 0, 0 /* This is dummy for Index7 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with offset + data_len > total data_size */ + VAL_PS_GET, PSA_SUCCESS /* Index8 - get API with offset = total data_size */ }, { - 0, 0 /* This is dummy for index9 */ + 0, 0 /* This is dummy for Index9 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with invalid data len and offset zero */ + VAL_PS_GET, PSA_SUCCESS /* Index10 - Call get API with invalid data len and offset zero */ }, { - 0, 0 /* This is dummy for index11 */ + 0, 0 /* This is dummy for Index11 */ }, { - VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Call get API with offset = MAX_UINT32 */ + VAL_PS_GET, PSA_ERROR_INVALID_ARGUMENT /* Index12 - Call get API with offset = MAX_UINT32 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index13 - Remove the storage entity */ }, }; #endif /* _TEST_S008_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c index 25783625..32ddfc50 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c +++ b/api-tests/dev_apis/internal_trusted_storage/test_s008/test_s008.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -54,29 +54,27 @@ int32_t psa_sst_invalid_offset_failure(caller_security_t caller) TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(10)); } - /* Case where offset = data_size , data_len= 1 Also check nothing is returned in read buff*/ + /* Case where offset = data_size , data_len= 1 Also check nothing is returned in read buff */ + memset(read_buff, 0xCD, TEST_BUFF_SIZE); + p_data_length = 0xFF; status = SST_FUNCTION(s008_data[8].api, uid, TEST_BUFF_SIZE, 1, read_buff, &p_data_length); TEST_ASSERT_EQUAL(status, s008_data[8].status, TEST_CHECKPOINT_NUM(11)); TEST_ASSERT_EQUAL(p_data_length, 0, TEST_CHECKPOINT_NUM(12)); - for (j = 0; j < TEST_BUFF_SIZE; j++) - { - TEST_ASSERT_EQUAL(read_buff[j], 0x00, TEST_CHECKPOINT_NUM(13)); - } - /* Case where offset = 0 , data_len > data_size Also check nothing is returned in read buff*/ + /* Case where offset = 0, data_len > data_size, check if just data_size is returned */ status = SST_FUNCTION(s008_data[10].api, uid, 0, TEST_BUFF_SIZE+1, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s008_data[10].status, TEST_CHECKPOINT_NUM(14)); - TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(15)); - TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(16)); + TEST_ASSERT_EQUAL(status, s008_data[10].status, TEST_CHECKPOINT_NUM(13)); + TEST_ASSERT_EQUAL(p_data_length, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(14)); + TEST_ASSERT_MEMCMP(read_buff, write_buff, TEST_BUFF_SIZE, TEST_CHECKPOINT_NUM(15)); /* Try to access data with offset as MAX_UINT32 and length less than buffer size */ status = SST_FUNCTION(s008_data[12].api, uid, TEST_MAX_UINT32, TEST_BUFF_SIZE/2, read_buff, &p_data_length); - TEST_ASSERT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(17)); + TEST_ASSERT_EQUAL(status, s008_data[12].status, TEST_CHECKPOINT_NUM(16)); /* Remove the UID */ status = SST_FUNCTION(s008_data[13].api, uid); - TEST_ASSERT_EQUAL(status, s008_data[13].status, TEST_CHECKPOINT_NUM(18)); + TEST_ASSERT_EQUAL(status, s008_data[13].status, TEST_CHECKPOINT_NUM(17)); return VAL_STATUS_SUCCESS; } diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h index 8bd31aa0..606f02e7 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,40 +29,40 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s009_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Call set API with NULL write buffer and 0 length */ + VAL_ITS_SET, PSA_SUCCESS /* Index1 - Call set API with NULL write buffer and 0 length */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Verify UID is created */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index2 - Verify UID is created */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with NULL write buffer and 0 length */ + VAL_ITS_GET, PSA_SUCCESS /* Index3 - Call get API with NULL write buffer and 0 length */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index4 - Remove the storage entity */ }, { - VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Verify UID is removed */ + VAL_ITS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index5 - Verify UID is removed */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Create storage of zero size and valid write buffer */ + VAL_ITS_SET, PSA_SUCCESS /* Index6 - Create storage of zero size and valid write buffer */ }, { - VAL_ITS_GET_INFO, PSA_SUCCESS /* Call get_info API to check data size */ + VAL_ITS_GET_INFO, PSA_SUCCESS /* Index7 - Call get_info API to check data size */ }, { - 0, 0 /* This is dummy for index8 */ + 0, 0 /* This is dummy for Index8 */ }, { - VAL_ITS_GET, PSA_SUCCESS /* Call get API with 0 length and NULL read buffer */ + VAL_ITS_GET, PSA_SUCCESS /* Index9 - Call get API with 0 length and NULL read buffer */ }, { - VAL_ITS_SET, PSA_SUCCESS /* Increase the asset size */ + VAL_ITS_SET, PSA_SUCCESS /* Index10 - Increase the asset size */ }, { - VAL_ITS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_ITS_REMOVE, PSA_SUCCESS /* Index11 - Remove the storage entity */ }, }; #endif /* _TEST_S009_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h index 45680dcc..efc8a2ce 100755 --- a/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s009/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,40 +29,40 @@ typedef struct { static struct psa_storage_info_t info; static const test_data s009_data[] = { { - 0, 0 /* This is dummy for index0 */ + 0, 0 /* This is dummy for Index0 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Call set API with NULL write buffer and 0 length */ + VAL_PS_SET, PSA_SUCCESS /* Index1 - Call set API with NULL write buffer and 0 length */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Verify UID is created */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index2 - Verify UID is created */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with NULL write buffer and 0 length */ + VAL_PS_GET, PSA_SUCCESS /* Index3 - Call get API with NULL write buffer and 0 length */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index4 - Remove the storage entity */ }, { - VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Verify UID is removed */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index5 - Verify UID is removed */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create storage of zero size and valid write buffer */ + VAL_PS_SET, PSA_SUCCESS /* Index6 - Create storage of zero size and valid write buffer */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Call get_info API to check data size */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index7 - Call get_info API to check data size */ }, { - 0, 0 /* This is dummy for index8 */ + 0, 0 /* This is dummy for Index8 */ }, { - VAL_PS_GET, PSA_SUCCESS /* Call get API with 0 length and NULL read buffer */ + VAL_PS_GET, PSA_SUCCESS /* Index9 - Call get API with 0 length and NULL read buffer */ }, { - VAL_PS_SET, PSA_SUCCESS /* Increase the asset size */ + VAL_PS_SET, PSA_SUCCESS /* Index10 - Increase the asset size */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the storage entity */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index11 - Remove the storage entity */ }, }; #endif /* _TEST_S009_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h index fde1c760..8dd4cb87 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_its_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,13 +28,15 @@ typedef struct { static const test_data s010_data[] = { { - VAL_ITS_SET, PSA_ERROR_INVALID_ARGUMENT /* Create with UID value zero should fail */ + VAL_ITS_SET, PSA_ERROR_INVALID_ARGUMENT /* Index0 - Create with UID value zero should fail */ }, { - VAL_ITS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Call to get_info API for UID 0 should fail */ + VAL_ITS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Index1 - Call to get_info API for UID 0 + should fail */ }, { - VAL_ITS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call to remove API UID value zero should fail */ + VAL_ITS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Index2 - Call to remove API UID value zero + should fail */ }, }; #endif /* _TEST_S010_ITS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h index 5d8f2d01..2c7f1493 100644 --- a/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h +++ b/api-tests/dev_apis/internal_trusted_storage/test_s010/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,13 +28,15 @@ typedef struct { static const test_data s010_data[] = { { - VAL_PS_SET, PSA_ERROR_INVALID_ARGUMENT /* Create with UID value zero should fail */ + VAL_PS_SET, PSA_ERROR_INVALID_ARGUMENT /* Index0 - Create with UID value zero should fail */ }, { - VAL_PS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Call to get_info API for UID 0 should fail */ + VAL_PS_GET_INFO, PSA_ERROR_INVALID_ARGUMENT /* Index1 - Call to get_info API for UID 0 + should fail */ }, { - VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call to remove API UID value zero should fail */ + VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Index2 - Call to remove API UID value zero + should fail */ }, }; #endif /* _TEST_S010_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h index b93309da..97ac2dc3 100644 --- a/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p011/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,49 +28,53 @@ typedef struct { static const test_data p011_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 - Check if optional PS API + supported */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Call set_extended call for non-existing UID */ + VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Index1 - Call set_extended call for + non-existing UID */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create valid storage using set API */ + VAL_PS_SET, PSA_SUCCESS /* Index2 - Create valid storage using set API */ }, { - VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Create API for present UID with different length */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Index3 - Create API for present UID with different + length */ }, { - VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Call create API for to set WRITE_ONCE flag */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Index4 - Call create API for to set WRITE_ONCE flag */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Validate existing UID attributes maintained */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index5 - Validate existing UID attributes maintained */ }, { - 0, 0 /* This is dummy for index6 */ + 0, 0 /* This is dummy for Index6 */ }, { - 0, 0 /* This is dummy for index7 */ + 0, 0 /* This is dummy for Index7 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index8 - Remove the UID */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Create valid storage using create API */ + VAL_PS_CREATE, PSA_SUCCESS /* Index9 - Create valid storage using create API */ }, { - VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Again call create API with different length */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Index10 - Again call create API with different + length */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the storage is empty */ + VAL_PS_GET, PSA_SUCCESS /* Index11 - Validate the storage is empty */ }, { - 0, 0 /* This is dummy for index12 */ + 0, 0 /* This is dummy for Index12 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index13 - Remove the UID */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Set_extended call for removed UID */ + VAL_PS_SET_EXTENDED, PSA_ERROR_DOES_NOT_EXIST /* Index14 - Set_extended call for removed UID */ } }; #endif /* _TEST_P011_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h index c73dbacd..1372ab79 100644 --- a/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p012/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,49 +28,53 @@ typedef struct { static const test_data p012_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 -Check if optional PS API + supported */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Create valid storage */ + VAL_PS_CREATE, PSA_SUCCESS /* Index1 - Create valid storage */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Set data using set_extended API */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index2 - Set data using set_extended API */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid offset + length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Index3 - Set_extended with invalid offset + + length */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended call with invalid offset */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Index4 - Set_extended call with invalid + offset */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Set_extended call with valid offset and zero length */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index5 - Set_extended call with valid offset and zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid offset + length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Index6 - Set_extended with invalid offset + + length */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Set_extended with invalid length */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Index7 - Set_extended with invalid length */ }, { - VAL_PS_SET, PSA_SUCCESS /* Write data using set API */ + VAL_PS_SET, PSA_SUCCESS /* Index8 - Write data using set API */ }, { - VAL_PS_GET, PSA_SUCCESS /* Check data validity using get API */ + VAL_PS_GET, PSA_SUCCESS /* Index9 - Check data validity using get API */ }, { - 0, 0 /* This is dummy for index10 */ + 0, 0 /* This is dummy for Index10 */ }, { - VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Create call with UID 0 */ + VAL_PS_CREATE, PSA_ERROR_INVALID_ARGUMENT /* Index11 - Create call with UID 0 */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Call set_extended with UID 0 */ + VAL_PS_SET_EXTENDED, PSA_ERROR_INVALID_ARGUMENT /* Index12 - Call set_extended with UID 0 */ }, { - VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Call remove with UID 0 */ + VAL_PS_REMOVE, PSA_ERROR_INVALID_ARGUMENT /* Index13 - Call remove with UID 0 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove with UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index14 - Remove with UID */ }, }; #endif /* _TEST_P012_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c index a5ca6127..d4d5026e 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_p013.c +++ b/api-tests/dev_apis/protected_storage/test_p013/test_p013.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -53,7 +53,7 @@ static int32_t psa_sst_set_extended_create_success() /* Call the get_info function to match attributes */ status = SST_FUNCTION(p013_data[3].api, p_uid, &info); TEST_ASSERT_EQUAL(status, p013_data[3].status, TEST_CHECKPOINT_NUM(3)); - TEST_ASSERT_EQUAL(info.flags, 0, TEST_CHECKPOINT_NUM(4)); + TEST_ASSERT_EQUAL(info.flags, PSA_STORAGE_FLAG_NONE, TEST_CHECKPOINT_NUM(4)); TEST_ASSERT_EQUAL(info.size, 0, TEST_CHECKPOINT_NUM(5)); /* Remove the storage */ diff --git a/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h index 68954e00..b2c58faf 100644 --- a/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p013/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,67 +28,70 @@ typedef struct { static const test_data p013_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 - Check if optional PS API + supported */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Create storage of zero length */ + VAL_PS_CREATE, PSA_SUCCESS /* Index1 - Create storage of zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended with zero length */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index2 - Call set_extended with zero length */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Validate the storage attributes */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index3 - Validate the storage attributes */ }, { - 0, 0 /* This is dummy for index4 */ + 0, 0 /* This is dummy for Index4 */ }, { - 0, 0 /* This is dummy for index5 */ + 0, 0 /* This is dummy for Index5 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index6 - Remove the UID */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Create storage of non-zero length */ + VAL_PS_CREATE, PSA_SUCCESS /* Index7 - Create storage of non-zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended to write data in first half of buffer */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index8 - Call set_extended to write data in first half of + buffer */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Call set_extended to write data in second half of buffer */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index9 - Call set_extended to write data in second half of + buffer */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data stored */ + VAL_PS_GET, PSA_SUCCESS /* Index10 - Validate the data stored */ }, { - 0, 0 /* This is dummy for index11 */ + 0, 0 /* This is dummy for Index11 */ }, { - 0, 0 /* This is dummy for index12 */ + 0, 0 /* This is dummy for Index12 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Overwrite data with set API */ + VAL_PS_SET, PSA_SUCCESS /* Index13 - Overwrite data with set API */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data written */ + VAL_PS_GET, PSA_SUCCESS /* Index14 - Validate the data written */ }, { - 0, 0 /* This is dummy for index15 */ + 0, 0 /* This is dummy for Index15 */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Call Create API for existing UID with same parameters */ + VAL_PS_CREATE, PSA_SUCCESS /* Index16 - Call Create API for existing UID with same parameters */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data */ + VAL_PS_GET, PSA_SUCCESS /* Index17 - Validate the data */ }, { - 0, 0 /* This is dummy for index18 */ + 0, 0 /* This is dummy for Index18 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index19 - Remove the UID */ }, { - VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Check no duplicate entry of UID present */ + VAL_PS_GET, PSA_ERROR_DOES_NOT_EXIST /* Index20 - Check no duplicate entry of UID present */ } }; #endif /* _TEST_P013_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h index 421e0cdc..0ee29e45 100644 --- a/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p014/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,28 +28,28 @@ typedef struct { static const test_data p014_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 -Check if Optional API supported */ }, { - VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Create API call should fail */ + VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Index1 - Create API call should fail */ }, { - VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* UID should not exist */ + VAL_PS_GET_INFO, PSA_ERROR_DOES_NOT_EXIST /* Index2 - UID should not exist */ }, { - VAL_PS_SET, PSA_SUCCESS /* Create storage of non-zero length */ + VAL_PS_SET, PSA_SUCCESS /* Index3 - Create storage of non-zero length */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_NOT_SUPPORTED /* Set_extended API call should fail */ + VAL_PS_SET_EXTENDED, PSA_ERROR_NOT_SUPPORTED /* Index4 - Set_extended API call should fail */ }, { - VAL_PS_GET, PSA_SUCCESS /* Validate the data should not changed */ + VAL_PS_GET, PSA_SUCCESS /* Index5 - Validate the data should not changed */ }, { - 0, 0 /* Unused Index */ + 0, 0 /* Unused Index6 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index7 - Remove the UID */ }, }; #endif /* _TEST_P014_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h index 3a044880..716e4d36 100644 --- a/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p015/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,10 +28,11 @@ typedef struct { static const test_data p015_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if optional PS API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 - Check if optional PS API + supported */ }, { - VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Call create API with write_once flag */ + VAL_PS_CREATE, PSA_ERROR_NOT_SUPPORTED /* Index1 - Call create API with write_once flag */ }, }; #endif /* _TEST_P015_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_p016.c b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c index 4b79931a..d9d953a3 100644 --- a/api-tests/dev_apis/protected_storage/test_p016/test_p016.c +++ b/api-tests/dev_apis/protected_storage/test_p016/test_p016.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -103,7 +103,7 @@ int32_t psa_sst_optional_api_sst_capacity_check(caller_security_t caller) if (status != p016_data[0].status) { - val->print(PRINT_INFO, "Test Case skipped as Optional PS APIs not are supported.\n", 0); + val->print(PRINT_TEST, "Test Case skipped as Optional PS APIs not are supported.\n", 0); return RESULT_SKIP(VAL_STATUS_UNSUPPORTED); } else { val->print(PRINT_TEST, "Optional PS APIs are supported.\n", 0); diff --git a/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h index 45bc101a..7f167875 100644 --- a/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p016/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,16 +28,17 @@ typedef struct { static const test_data p016_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 - Check if Optional API supported */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Storage creation */ + VAL_PS_CREATE, PSA_SUCCESS /* Index1 - Storage creation */ }, { - VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Calling create API for existing UID should fail */ + VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Index2 - Calling create API for existing UID should + fail */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Check the storage attributes are unchanged */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index3 - Check the storage attributes are unchanged */ }, { 0, 0 /* Unused Index4 */ @@ -46,10 +47,10 @@ static const test_data p016_data[] = { 0, 0 /* Unused Index5 */ }, { - VAL_PS_SET, PSA_SUCCESS /* Set API can change capacity of storage */ + VAL_PS_SET, PSA_SUCCESS /* Index6 - Set API can change capacity of storage */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Check the storage attributes are changed */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index7 - Check the storage attributes are changed */ }, { 0, 0 /* Unused Index8 */ @@ -58,19 +59,21 @@ static const test_data p016_data[] = { 0, 0 /* Unused Index9 */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Set_extended on old capacity should not work */ + VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Index10 - Set_extended on old capacity should + not work */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index11 - Remove the UID */ }, { - VAL_PS_SET, PSA_SUCCESS /* Storage creation */ + VAL_PS_SET, PSA_SUCCESS /* Index12 - Storage creation */ }, { - VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Calling create API for existing UID should fail */ + VAL_PS_CREATE, PSA_ERROR_ALREADY_EXISTS /* Index13 - Calling create API for existing UID should + fail */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index14 - Remove the UID */ }, }; #endif /* _TEST_P016_PS_DATA_TESTS_H_ */ diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_p017.c b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c index 54c7b6b2..e1643c19 100644 --- a/api-tests/dev_apis/protected_storage/test_p017/test_p017.c +++ b/api-tests/dev_apis/protected_storage/test_p017/test_p017.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -81,7 +81,7 @@ int32_t psa_sst_optional_api_partial_write_check(caller_security_t caller) if (status != p017_data[0].status) { - val->print(PRINT_INFO, "Test Case skipped as Optional PS APIs not are supported.\n", 0); + val->print(PRINT_TEST, "Test Case skipped as Optional PS APIs not are supported.\n", 0); return RESULT_SKIP(VAL_STATUS_UNSUPPORTED); } else { val->print(PRINT_TEST, "Optional PS APIs are supported.\n", 0); diff --git a/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h b/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h index ae35fd75..9677e909 100644 --- a/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h +++ b/api-tests/dev_apis/protected_storage/test_p017/test_ps_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or ps affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,31 +28,32 @@ typedef struct { static const test_data p017_data[] = { { - VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Check if Optional API supported */ + VAL_PS_GET_SUPPORT, PSA_STORAGE_SUPPORT_SET_EXTENDED /* Index0 - Check if Optional API supported */ }, { - VAL_PS_CREATE, PSA_SUCCESS /* Storage creation */ + VAL_PS_CREATE, PSA_SUCCESS /* Index1 - Storage creation */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Write data in created storage */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index2 - Write data in created storage */ }, { - VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Try to set data in noncontinous manner */ + VAL_PS_SET_EXTENDED, PSA_ERROR_STORAGE_FAILURE /* Index3 - Try to set data in noncontinous + manner */ }, { - VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Overwrite the existing data */ + VAL_PS_SET_EXTENDED, PSA_SUCCESS /* Index4 - Overwrite the existing data */ }, { - VAL_PS_GET_INFO, PSA_SUCCESS /* Check for valid storage attributes */ + VAL_PS_GET_INFO, PSA_SUCCESS /* Index5 - Check for valid storage attributes */ }, { - 0, 0 /* Unused index */ + 0, 0 /* Unused Index6 */ }, { - 0, 0 /* Unused index */ + 0, 0 /* Unused Index7 */ }, { - VAL_PS_REMOVE, PSA_SUCCESS /* Remove the UID */ + VAL_PS_REMOVE, PSA_SUCCESS /* Index8 - Remove the UID */ }, }; #endif /* _TEST_P017_PS_DATA_TESTS_H_ */ diff --git a/api-tests/docs/porting_guide_dev_apis.md b/api-tests/docs/porting_guide_dev_apis.md index 595038e3..64407561 100644 --- a/api-tests/docs/porting_guide_dev_apis.md +++ b/api-tests/docs/porting_guide_dev_apis.md @@ -42,9 +42,9 @@ An example input configuration file is as shown. **Note**: The test suite requires access to the following peripherals: - - One UART to print NSPE and SPE messages + - One UART to print Test NSPE messages - One Watchdog timer to help recover from any fatal error conditions - - Non-volatile memory support to preserve test status over watchdog timer reset + - Non-volatile memory support to preserve test status over watchdog timer reset. Each byte of this region must be initialised to FF at power on reset. ## List of PAL APIs @@ -63,10 +63,12 @@ Since the test suite is agnostic to various system targets, you must port the fo | 09 | uint32_t pal_its_function(int type, va_list valist); | Calls the requested Internal Trusted Storage function | type : Function code
    valist : Variable argument list
    | | 10 | uint32_t pal_ps_function(int type, va_list valist); | Calls the requested Protected Storage function | type : Function code
    valist : Variable argument list
    | | 11 | int32_t pal_attestation_function(int type, va_list valist); | Calls the requested Initial Attestation function | type : Function code
    valist : Variable argument list
    | +| 12 | uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload); | Computes hash for the requested data | cose_alg_id : Algorithm ID
    buffer_for_hash : Temp buffer for calculating hash

    hash : Pointer to store the hash
    buffer_for_hash : Temp buffer for calculating hash
    protected_headers : data to be hashed
    payload : Payload data
    | +| 13 | uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature); | Function call to verify the signature using the public key | cose_algorithm_id : Algorithm ID
    token_hash : Data that needs to be verified
    signature : Signature to be verified against
    | ## License Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/docs/porting_guide_ff.md b/api-tests/docs/porting_guide_ff.md index a224d5c3..207a7192 100644 --- a/api-tests/docs/porting_guide_ff.md +++ b/api-tests/docs/porting_guide_ff.md @@ -42,9 +42,9 @@ An example input configuration file is as shown. **Note**: - The test suite requires access to the peripherals mentioned below. For IPC suite, driver functionalities are implemented as RoT-services in driver partition. Other Secure partitions and Non-secure code calls to these RoT-services to get appropriate driver services. - - One UART to print NSPE or SPE messages and to cover secure partition interrupt handling scenarios + - One UART to print Test NSPE or SPE messages and to cover secure partition interrupt handling scenarios - One Watchdog timer to help recover from any fatal error conditions - - Non-volatile memory support to preserve test status over watchdog timer reset + - Non-volatile memory support to preserve test status over watchdog timer reset. Each byte of this region must be initialised to FF at power on reset. ## List of PAL APIs diff --git a/api-tests/docs/psa_its_testlist.md b/api-tests/docs/psa_its_testlist.md index 28aaead0..5d0d8988 100644 --- a/api-tests/docs/psa_its_testlist.md +++ b/api-tests/docs/psa_its_testlist.md @@ -12,11 +12,11 @@ Following are the requirements of the Storage Test Suite.
    |-----------|---------------------------------------|----------------|-------------------------|---------------------|------------------------| | test_s001 | Get,get_info and remove API's call for
    non-existent and removed assest | psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call get API with UID for which no UID/Data pair is created
    2. Call get_info API for which no UID/Data pair is created
    3. Call remove API for which no UID/Data pair is created
    4. Set valid UID/Data pair with uid1
    5. Set one more set of UID/Data pair, with different uid, than previous
    6. Remove the uid of step 4.
    7. Call get API for removed UID/data pair
    8. Call get_info API for removed UID/Data pair
    9. Call remove API for removed UID/Data pair
    10. Set valid UID/Data pair
    11. Call get API for different uid , then created
    12. Call get_info API for different uid, then created
    13. Call remove API for different uid, then created
    14. Remove the created UID/Data pair.
    15. Remove the stray uid.
    | UID value used are 5,6,7 | | test_s002 | Overwriting data for asset created with
    WRITE_ONCE flag | psa_its_set
    psa_its_remove
    | PSA_ERROR_NOT_PERMITTED | 1. Set valid UID/data value pair , with create flag value none.
    2. Call get and get_info API to validate the data, attributes associated with data
    3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
    4. Call get and get_info API to validate the data, attributes associated with data
    is not changed after second set operation
    5. try to remove the UID/data pair.
    6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
    7. Try to remove the created UID.
    8. Call get and get_info API to validate the data, attributes associated with data
    9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
    different data length
    10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
    11. Call get and get_info API to validate the data, attributes associated with data
    | UID value used are 1 and 2 | -| test_s003 | Exhaust storage space | psa_its_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | -| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , error should be returned and also
    the return buffer should be empty
    5. Call GET api with correct data_len and validate the data received.
    6. Check old data cannot be accessed.
    7. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | +| test_s003 | Exhaust storage space | psa_its_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len of PLATFORM_MAX_UID_SIZE bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | +| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , expect the success result and the read buffer to match for half of original length
    5. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | | test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
    2. Call GET api and validate the set data
    3. Call GET info api and validate the data attributes
    4. Call REMOVE api to delete the UID/data pair
    | UID value used are 4 | | test_s006 | Storage asset creation with supported create flag values | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET API with available create flag values
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | -| test_s007 | Get API call with length different than asset
    data length | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | +| test_s007 | Get API call with length different than asset
    data length | psa_its_set
    psa_its_get
    | PSA_SUCCESS | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | | test_s008 | Get API call with invalid offset | psa_its_get
    | PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
    2. Call GET api with valid offset and offset + data_len equal to stored data size.
    3. Call GET api with valid offset and offset + data_len less than stored data size.
    4. Call get api with invalid offset.
    5. Call get api with zero offset , but data len greater than data size.
    6. Remove the uid.
    | UID value used is 5 | | test_s009 | API call with NULL pointer and zero length | psa_its_get
    psa_its_set
    psa_its_get_info
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
    2. Validate using get_info api storage should be present.
    3. Call get API with NULL pointer.
    4. Remove the UID.
    5. Call get_info API to validate storage is removed.
    6. Set storage entity with valid write_buffer , but length zero.
    7. Call get_info API to validate storage attributes.
    8. Call get_info api with NULL pointer and valid uid.
    9. Remove the uid
    | UID value used is 5
    | | test_s010 | Storage assest creation with UID value 0 | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Call the SET API with UID value 0.
    2. Check that storage creation fails.
    | UID value used is 0
    @@ -27,4 +27,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/docs/psa_ps_testlist.md b/api-tests/docs/psa_ps_testlist.md index e12989b8..bf90b02f 100644 --- a/api-tests/docs/psa_ps_testlist.md +++ b/api-tests/docs/psa_ps_testlist.md @@ -10,22 +10,22 @@ Following are the requirements of the Storage Test Suite.
    | Test | Test Scenario | API Verified | Return Value | Test Algorithm | UID Usage | |-----------|---------------------------------------|----------------|-------------------------|---------------------|------------------------| -| test_s001 | Get,get_info and remove API's call for
    non-existent and removed assest | psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call get API with UID for which no UID/Data pair is created
    2. Call get_info API for which no UID/Data pair is created
    3. Call remove API for which no UID/Data pair is created
    4. Set valid UID/Data pair with uid1
    5. Set one more set of UID/Data pair, with different uid, than previous
    6. Remove the uid of step 4.
    7. Call get API for removed UID/data pair
    8. Call get_info API for removed UID/Data pair
    9. Call remove API for removed UID/Data pair
    10. Set valid UID/Data pair
    11. Call get API for different uid , then created
    12. Call get_info API for different uid, then created
    13. Call remove API for different uid, then created
    14. Remove the created UID/Data pair.
    15. Remove the stray uid.
    | UID value used are 5,6,7 | -| test_s002 | Overwriting data for asset created with
    WRITE_ONCE flag | psa_its_set
    psa_its_remove
    | PSA_ERROR_NOT_PERMITTED | 1. Set valid UID/data value pair , with create flag value none.
    2. Call get and get_info API to validate the data, attributes associated with data
    3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
    4. Call get and get_info API to validate the data, attributes associated with data
    is not changed after second set operation
    5. try to remove the UID/data pair.
    6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
    7. Try to remove the created UID.
    8. Call get and get_info API to validate the data, attributes associated with data
    9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
    different data length
    10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
    11. Call get and get_info API to validate the data, attributes associated with data
    | UID value used are 1 and 2 | -| test_s003 | Exhaust storage space | psa_its_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len 1024 bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | -| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , error should be returned and also
    the return buffer should be empty
    5. Call GET api with correct data_len and validate the data received.
    6. Check old data cannot be accessed.
    7. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | -| test_s005 | Get, get_info and remove API call for valid assest | psa_its_set
    psa_its_get
    psa_its_get_info
    psa_its_remove
    | PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
    2. Call GET api and validate the set data
    3. Call GET info api and validate the data attributes
    4. Call REMOVE api to delete the UID/data pair
    | UID value used are 4 | -| test_s006 | Storage asset creation with supported create flag values | psa_its_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET API with available create flag values
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | -| test_s007 | Get API call with length different than asset
    data length | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | -| test_s008 | Get API call with invalid offset | psa_its_get
    | PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
    2. Call GET api with valid offset and offset + data_len equal to stored data size.
    3. Call GET api with valid offset and offset + data_len less than stored data size.
    4. Call get api with invalid offset.
    5. Call get api with zero offset , but data len greater than data size.
    6. Remove the uid.
    | UID value used is 5 | -| test_s009 | API call with NULL pointer and zero length | psa_its_get
    psa_its_set
    psa_its_get_info
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
    2. Validate using get_info api storage should be present.
    3. Call get API with NULL pointer.
    4. Remove the UID.
    5. Call get_info API to validate storage is removed.
    6. Set storage entity with valid write_buffer , but length zero.
    7. Call get_info API to validate storage attributes.
    8. Call get_info api with NULL pointer and valid uid.
    9. Remove the uid
    | UID value used is 5
    | -| test_s010 | Storage assest creation with UID value 0 | psa_its_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Call the SET API with UID value 0.
    2. Check that storage creation fails.
    | UID value used is 0
    -| test_p011 | Set_extended API's call for
    non-existent and removed assest | psa_ps_set_extended
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET Extended API when no uid present.
    2. Create a valid storage using set.
    3. Call create api with different length for existing uid.
    4. Call create api to set WRITE_ONCE flag.
    5. Validate data attributes are maintained.
    6. Remove the uid.
    7. Create valid storage using create api.
    8. Try to change length using create api.
    9. Validate storage is empty.
    10. Again call create api with original parameters.
    11. Remove the uid.
    12. Check no duplicate entry present.
    | UID value used is 5
    | -| test_p012 | Set_extended API's call
    with invalid offset | psa_ps_set_extended
    | PSA_ERROR_INVALID_ARGUMENT | 1. Create a valid storage using set.
    2. Set data on first half of buffer.
    3. Try to set data at incorrect offset +length.
    4. Try to set data at incorrect offset.
    5. Try to set at correct offset but zero length buffer.
    6. Try to set data at incorrect length and valid offset.
    7. Overwrite the storage using set api.
    8. Validate data is correctly written.
    9. Call set_extended with NULL write buffer.
    10. Overwrite storage using set_extended api.
    11. Remove the uid.
    | UID value used is 6
    -| test_p013 | Create and set_extended API call for valid assest | psa_ps_set_extended
    psa_ps_create | PSA_SUCCESS | 1. Create Storage of zero length using create.
    2. Try to set some data in the storage created.
    3. Validate the storage attributes.
    4. Remove the storage.
    5. Create a valid storage with non-zero length.
    6. Set data in the buffer.
    7. Validate the data attributes.
    8. Overwrite data using set api.
    9. Validate the data.
    10. Call create api for existing uid with same parameters.
    11. Remove the uid.
    12. Check with set_extended no duplicate uid exists.
    | UID value used is 4 -| test_p014 | Create and set_extended API call
    when API's not supported | psa_ps_create
    psa_ps_set_extended
    | PSA_ERROR_NOT_SUPPORTED | Below Steps will be run only if optional API are not supported.
    1. Create API call should fail.
    2. Check the UID should not exist.
    3. Create storage using set API.
    4. Try to partially write using set_extended API.
    5. Validate data is not modified.
    6. Remove the uid.
    | UID value used is 5 -| test_p015 | Create API call with
    WRITE_ONCE flag | psa_ps_create
    | PSA_ERROR_NOT_SUPPORTED | Below Step will be run only if optional API are supported.
    1. Create API call with WRITE_ONCE flag should fail.
    | UID value used is 5
    -| test_p016 | Create API call for capacity check | psa_ps_create
    psa_ps_set
    psa_ps_get_info
    psa_ps_set_extended
    psa_ps_remove
    | PSA_ERROR_ALREADY_EXISTS
    PSA_ERROR_STORAGE_FAILURE | Below Steps will be run only if optional API are supported.
    1. Create storage with valid UID and capacity using create
    2. Check create for existing UID fails
    3. Check the attributes of storage are unchanged
    4. Override the storage using SET API
    5. Check the attributes of storage are changed
    6. Accessing old capacity with set_extended APU fails
    7. Remove the storage
    8. Create new storage with valid UID/data pair using set API
    9. Check create API for existing UID fails
    10. Remove the storage | UID value used is 5
    +| test_s001 | Get,get_info and remove API's call for
    non-existent and removed assest | psa_ps_get
    psa_ps_get_info
    psa_ps_remove
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call get API with UID for which no UID/Data pair is created
    2. Call get_info API for which no UID/Data pair is created
    3. Call remove API for which no UID/Data pair is created
    4. Set valid UID/Data pair with uid1
    5. Set one more set of UID/Data pair, with different uid, than previous
    6. Remove the uid of step 4.
    7. Call get API for removed UID/data pair
    8. Call get_info API for removed UID/Data pair
    9. Call remove API for removed UID/Data pair
    10. Set valid UID/Data pair
    11. Call get API for different uid , then created
    12. Call get_info API for different uid, then created
    13. Call remove API for different uid, then created
    14. Remove the created UID/Data pair.
    15. Remove the stray uid.
    | UID value used are 5,6,7 | +| test_s002 | Overwriting data for asset created with
    WRITE_ONCE flag | psa_ps_set
    psa_ps_remove
    | PSA_ERROR_NOT_PERMITTED | 1. Set valid UID/data value pair , with create flag value none.
    2. Call get and get_info API to validate the data, attributes associated with data
    3. Call set API again with same uid and create flag PSA_PS_WRITE_ONCE_FLAG
    4. Call get and get_info API to validate the data, attributes associated with data
    is not changed after second set operation
    5. try to remove the UID/data pair.
    6. Create new UID/data value pair, with create flag PSA_PS_WRITE_ONCE_FLAG
    7. Try to remove the created UID.
    8. Call get and get_info API to validate the data, attributes associated with data
    9. Again call SET with same UID , create flag PSA_PS_WRITE_ONCE_FLAG but
    different data length
    10. Try to remove the UID, PSA_ITS_ERROR_WRITE_ONCE error should be returned
    11. Call get and get_info API to validate the data, attributes associated with data
    | UID value used are 1 and 2 | +| test_s003 | Exhaust storage space | psa_ps_set
    | PSA_ERROR_INSUFFICIENT_STORAGE | 1. Create UID/data pairs, with data_len of PLATFORM_MAX_UID_SIZE bytes. Do this with incrementing
    uid values till we have INSUFFICENT_SPACE.
    2. Remove all the UID/data pairs created.
    3. Repeat the steps once more, to check all previous uid are removed successfully
    | UID value starts from 5 and keep on incrementing till all space is exhausted | +| test_s004 | Overwriting data for asset created without WRITE_ONCE flag | psa_ps_set
    psa_ps_get
    psa_ps_get_info
    psa_ps_remove
    | PSA_SUCCESS | 1. Set a valid uid/data pair
    2. Validate the data using get api
    3. Change the data length to half of previous.
    4. Call GET api with original data length , expect the success result and the read buffer to match for half of original length
    5. Call REMOVE api to delete the UID/data pair
    | UID value used is 5 | +| test_s005 | Get, get_info and remove API call for valid assest | psa_ps_set
    psa_ps_get
    psa_ps_get_info
    psa_ps_remove
    | PSA_SUCCESS | 1. Set valid UID/data pair with varying uid and data_len
    2. Call GET api and validate the set data
    3. Call GET info api and validate the data attributes
    4. Call REMOVE api to delete the UID/data pair
    | UID value used are 4 | +| test_s006 | Storage asset creation with supported create flag values | psa_ps_set
    | PSA_ERROR_NOT_SUPPORTED | 1. Call the SET API with available create flag values
    2. Call GET_INFO api and validate the flag value
    3. Remove the uid/data pair
    | UID value used is 5 | +| test_s007 | Get API call with length different than asset
    data length | psa_ps_set
    psa_ps_get
    | PSA_SUCCESS | 1. Create valid uid/data pair.
    2. Increase the length of storage.
    3. Try to access the old length using get api.
    4. Try to access with valid length less than stored size.
    5. Decrease the length of storage.
    6. Try to access the old length.
    7. Remove the uid
    | UID value used is 5 | +| test_s008 | Get API call with invalid offset | psa_ps_get
    | PSA_ERROR_INVALID_ARGUMENT | 1. Set valid UID/data pair
    2. Call GET api with valid offset and offset + data_len equal to stored data size.
    3. Call GET api with valid offset and offset + data_len less than stored data size.
    4. Call get api with invalid offset.
    5. Call get api with zero offset , but data len greater than data size.
    6. Remove the uid.
    | UID value used is 5 | +| test_s009 | API call with NULL pointer and zero length | psa_ps_get
    psa_ps_set
    psa_ps_get_info
    | PSA_ERROR_DOES_NOT_EXIST | 1. Call the SET API with NULL pointer and data_len zero
    2. Validate using get_info api storage should be present.
    3. Call get API with NULL pointer.
    4. Remove the UID.
    5. Call get_info API to validate storage is removed.
    6. Set storage entity with valid write_buffer , but length zero.
    7. Call get_info API to validate storage attributes.
    8. Call get_info api with NULL pointer and valid uid.
    9. Remove the uid
    | UID value used is 5
    | +| test_s010 | Storage assest creation with UID value 0 | psa_ps_set
    | PSA_ERROR_INVALID_ARGUMENT | 1. Call the SET API with UID value 0.
    2. Check that storage creation fails.
    | UID value used is 0
    +| test_p011 | Set_extended API's call for
    non-existent and removed assest | psa_ps_set_extended
    | PSA_ERROR_DOES_NOT_EXIST | Below Steps will be run only if optional API are not supported.
    1. Call the SET Extended API when no uid present.
    2. Create a valid storage using set.
    3. Call create api with different length for existing uid.
    4. Call create api to set WRITE_ONCE flag.
    5. Validate data attributes are maintained.
    6. Remove the uid.
    7. Create valid storage using create api.
    8. Try to change length using create api.
    9. Validate storage is empty.
    10. Again call create api with original parameters.
    11. Remove the uid.
    12. Check no duplicate entry present.
    | UID value used is 5
    | +| test_p012 | Set_extended API's call
    with invalid offset | psa_ps_set_extended
    | PSA_ERROR_INVALID_ARGUMENT | Below Steps will be run only if optional API are not supported.
    1. Create a valid storage using set.
    2. Set data on first half of buffer.
    3. Try to set data at incorrect offset +length.
    4. Try to set data at incorrect offset.
    5. Try to set at correct offset but zero length buffer.
    6. Try to set data at incorrect length and valid offset.
    7. Overwrite the storage using set api.
    8. Validate data is correctly written.
    9. Call set_extended with NULL write buffer.
    10. Overwrite storage using set_extended api.
    11. Remove the uid.
    | UID value used is 6
    +| test_p013 | Create and set_extended API call for valid assest | psa_ps_set_extended
    psa_ps_create | PSA_SUCCESS | Below Steps will be run only if optional API are not supported.
    1. Create Storage of zero length using create.
    2. Try to set some data in the storage created.
    3. Validate the storage attributes.
    4. Remove the storage.
    5. Create a valid storage with non-zero length.
    6. Set data in the buffer.
    7. Validate the data attributes.
    8. Overwrite data using set api.
    9. Validate the data.
    10. Call create api for existing uid with same parameters.
    11. Remove the uid.
    12. Check with set_extended no duplicate uid exists.
    | UID value used is 4 +| test_p014 | Create and set_extended API call
    when API's not supported | psa_ps_create
    psa_ps_set_extended
    | PSA_ERROR_NOT_SUPPORTED | Below Steps will be run only if optional API are not supported.
    1. Create API call should fail.
    2. Check the UID should not exist.
    3. Create storage using set API.
    4. Try to partially write using set_extended API.
    5. Validate data is not modified.
    6. Remove the uid.
    | UID value used is 5 +| test_p015 | Create API call with
    WRITE_ONCE flag | psa_ps_create
    | PSA_ERROR_NOT_SUPPORTED | Below Step will be run only if optional API are supported.
    1. Create API call with WRITE_ONCE flag should fail.
    | UID value used is 5
    +| test_p016 | Create API call for capacity check | psa_ps_create
    psa_ps_set
    psa_ps_get_info
    psa_ps_set_extended
    psa_ps_remove
    | PSA_ERROR_ALREADY_EXISTS
    PSA_ERROR_STORAGE_FAILURE | Below Steps will be run only if optional API are supported.
    1. Create storage with valid UID and capacity using create
    2. Check create for existing UID fails
    3. Check the attributes of storage are unchanged
    4. Override the storage using SET API
    5. Check the attributes of storage are changed
    6. Accessing old capacity with set_extended API fails
    7. Remove the storage
    8. Create new storage with valid UID/data pair using set API
    9. Check create API for existing UID fails
    10. Remove the storage | UID value used is 5
    | test_p017 | Partial write check with set extended API | psa_ps_create
    psa_ps_set_extended
    psa_ps_get_info
    psa_ps_remove
    | PSA_ERROR_STORAGE_FAILURE | Below Steps will be run only if optional API are supported.
    1. Create storage with valid UID and capacity using create
    2. Set partial data using set extended API
    3. Check set extended API fails for data with gaps
    4. Set full length data using set extended API
    5. Check the valid attributes of storage
    6. Remove the storage
    | UID value used is 5
    | NA | Fatal error
    | NA | PSA_ERROR_STORAGE_FAILURE | 1. The failure cause will depend on the underlying
    platform and vary for each implementation.
    It is skipped in current suite
    | NA
    | | NA | Data Corruption
    | NA | PSA_ERROR_DATA_CORRUPT | 1. The failure cause will depend on the underlying
    platform and vary for each implementation.
    It is skipped in current suite
    | NA
    | @@ -36,4 +36,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index 0dcf67a2..7e71f5e6 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -44,4 +44,4 @@ Arm PSA test suite is distributed under Apache v2.0 License. -------------- -*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.* +*Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/docs/test_failure_analysis.md b/api-tests/docs/test_failure_analysis.md new file mode 100644 index 00000000..405de94a --- /dev/null +++ b/api-tests/docs/test_failure_analysis.md @@ -0,0 +1,43 @@ + +# Test failure analysis document + +This file contains list of failures identified when running the PSA API tests +on tgt_dev_apis_tfm_an521, tgt_dev_apis_tfm_musca_a and tgt_dev_apis_tfm_musca_b1 +targets with TFM commit Hash - 6e7be077eabef00b4825e245604148d82b11f832. +The reason for each failing test is listed here in this file. + +## Known Failures + +| Test | Fail description | +|------|---------------------------------------------------------------------------------| +|test_c006 | psa_hash_compute is unimplemented in TFM | +|test_c007 | psa_hash_compare is unimplemented in TFM | +|test_c009 | psa_key_derivation_input_bytes returns incorrect error code | +|test_c016 | psa_generate_key generates incorrect key length for RSA | +|test_c020 | psa_key_derivation_output_bytes returns incorrect error code | +|test_c021 | psa_key_derivation_output_key returns incorrect error code | +|test_c039 | psa_asymmetric_encrypt does not have support for ECC keys | +|test_c046 | psa_mac_compute is unimplemented in TFM | +|test_c047 | psa_mac_verify is unimplemented in TFM | +|test_c048 | psa_cipher_encrypt is unimplemented in TFM | +|test_c049 | psa_cipher_decrypt is unimplemented in TFM | +|test_c050 | psa_open_key API not enabled in TFM | +|test_c051 | psa_close_key API not enabled in TFM | +|test_c052 | psa_aead_encrypt_setup is unimplemented in TFM | +|test_c053 | psa_aead_decrypt_setup is unimplemented in TFM | +|test_c054 | psa_aead_generate_nonce is unimplemented in TFM | +|test_c055 | psa_aead_set_nonce is unimplemented in TFM | +|test_c056 | psa_aead_set_lengths is unimplemented in TFM | +|test_c057 | psa_aead_update_ad is unimplemented in TFM | +|test_c058 | psa_aead_update is unimplemented in TFM | +|test_c059 | psa_aead_finish is unimplemented in TFM | +|test_c060 | psa_aead_abort is unimplemented in TFM | +|test_c061 | psa_aead_verify is unimplemented in TFM | + +## License + +Arm PSA test suite is distributed under Apache v2.0 License. + +-------------- + +*Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.* diff --git a/api-tests/ff/README.md b/api-tests/ff/README.md index 75d11971..a3a90145 100644 --- a/api-tests/ff/README.md +++ b/api-tests/ff/README.md @@ -60,16 +60,16 @@ To build the test suite for your target platform, perform the following steps.
    Options information:
    - -G"" : "Unix Makefiles" to generate Makefiles for Linux and Cygwin. "MinGW Makefiles" to generate Makefiles for cmd.exe on Windows
    -- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521** and **tgt_dev_apis_tfm_musca_a** platforms.
    +- -DTARGET= is the same as the name of the target-specific directory created in the **platform/targets/** directory. The current release has been tested on **tgt_dev_apis_tfm_an521**, **tgt_dev_apis_tfm_musca_b1** and **tgt_dev_apis_tfm_musca_a** platforms except for the tests written for PSA isolation level-3 and secure partition dynamic memory APIs as these features are unsupported by the mentioned platforms. However, it can still be possible to run them if the platform supports these features.
    - -DTOOLCHAIN= Compiler toolchain to be used for test suite compilation. Supported values are GNUARM (GNU Arm Embedded), ARMCLANG (ARM Compiler 6.x) and HOST_GCC. Default is GNUARM.
    - -DCPU_ARCH= is the Arm Architecture version name for which the tests should be compiled. Supported CPU arch are armv8m_ml, armv8m_bl and armv7m. Default is empty. This option is unused when TOOLCHAIN type is HOST_GCC.
    - -DSUITE= is the suite name which is the same as the suite name available in **ff/** directory.
    - -DVERBOSE=. Print verbosity level. Default is 3. Supported print levels are 1(INFO & above), 2(DEBUG & above), 3(TEST & above), 4(WARN & ERROR) and 5(ERROR). - -DBUILD= : To select the build directory to keep output files. Default is BUILD/ inside current directory. -- -DINCLUDE_PANIC_TESTS=<0|1> : The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite by setting this option to 1. +- -DINCLUDE_PANIC_TESTS=<0|1> : The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR(Panic) conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite by setting this option to 1. - -DPLATFORM_PSA_ISOLATION_LEVEL=<1|2|3> : PSA Firmware Framwork isolation level supported by the platform. Default is highest level of isolation which is three. -- -DSP_HEAP_MEM_SUPP=<0|1> : Are dynamic memory functions available to secure partition? 0 means no and 1 means yes. -- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, watchdog must be available for the tests which test the panic conditions. +- -DSP_HEAP_MEM_SUPP=<0|1> : Are dynamic memory functions available to secure partition? 0 means no and 1 means yes. This skips the secure partition dynamic memory functions related tests if this is marked as zero. +- -DWATCHDOG_AVAILABLE=<0|1>: Test harness may require to access watchdog timer to recover system hang. 0 means skip watchdog programming in the test suite and 1 means program the watchdog. Default is 1. Note, If the system under test doesn't support the reboot of the system when it encounters the panic situation, a watchdog must be available to the tests if INCLUDE_PANIC_TESTS set to 1. - -DPSA_INCLUDE_PATHS=";;...;" is an additional directory to be included into the compiler search path. To compile IPC tests, the include path must point to the path where **psa/client.h**, **psa/service.h**, **psa/lifecycle.h** and test partition manifest output files(**psa_manifest/sid.h**, **psa_manifest/pid.h** and **psa_manifest/.h**) are located in your build system. Bydefault, PSA_INCLUDE_PATHS accepts absolute path. However, relative path can be provided using below format:
    ``` -DPSA_INCLUDE_PATHS=`readlink -f ` @@ -80,7 +80,7 @@ To compile IPC tests for **tgt_ff_tfm_an521** platform, execute the following co cd api-tests mkdir BUILD cd BUILD - cmake ../ -G"Unix Makefiles" -DTARGET=tgt_ff_tfm_an521 -DCPU_ARCH=armv8m_ml -DSUITE=IPC -DPSA_INCLUDE_PATHS=";;...;" + cmake ../ -G"Unix Makefiles" -DTARGET=tgt_ff_tfm_an521 -DCPU_ARCH=armv8m_ml -DSUITE=IPC -DPLATFORM_PSA_ISOLATION_LEVEL=2 -DSP_HEAP_MEM_SUPP=0 -DPSA_INCLUDE_PATHS=";;...;" cmake --build . ``` **Note**: The default compilation flow includes the functional API tests to build the test suite. It does not include panic tests that check for the API's PROGRAMMER ERROR conditions as defined in the PSA-FF specification. You can include the panic tests for building the test suite just by passing **-DINCLUDE_PANIC_TESTS=1** to CMake. diff --git a/api-tests/ff/ipc/test_i003/test_entry_i003.c b/api-tests/ff/ipc/test_i003/test_entry_i003.c index e5131066..31b8aca6 100644 --- a/api-tests/ff/ipc/test_i003/test_entry_i003.c +++ b/api-tests/ff/ipc/test_i003/test_entry_i003.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,7 +34,7 @@ void test_entry(val_api_t *val_api, psa_api_t *psa_api) psa = psa_api; /* test init */ - val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_LOW_TIMEOUT)); + val->test_init(TEST_NUM, TEST_DESC, TEST_FIELD(TEST_ISOLATION_L1, WD_HIGH_TIMEOUT)); if (!IS_TEST_START(val->get_status())) { goto test_exit; diff --git a/api-tests/ff/ipc/test_i003/test_i003.c b/api-tests/ff/ipc/test_i003/test_i003.c index 0c0cb8da..d151442b 100644 --- a/api-tests/ff/ipc/test_i003/test_i003.c +++ b/api-tests/ff/ipc/test_i003/test_i003.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -159,7 +159,7 @@ int32_t client_test_call_read_and_skip(caller_security_t caller) uint64_t data3 = 0x1020304050607080; psa_handle_t handle = 0; - val->print(PRINT_TEST, "[Check 3] Test psa_write, psa_read and psa_skip\n", 0); + val->print(PRINT_TEST, "[Check 3] Test psa_call, psa_read and psa_skip\n", 0); if (val->ipc_connect(SERVER_UNSPECIFED_VERSION_SID, SERVER_UNSPECIFED_VERSION_VERSION, diff --git a/api-tests/platform/manifests/driver_partition_psa.json b/api-tests/platform/manifests/driver_partition_psa.json index 2fa4550f..2b8c70c0 100644 --- a/api-tests/platform/manifests/driver_partition_psa.json +++ b/api-tests/platform/manifests/driver_partition_psa.json @@ -38,19 +38,19 @@ ], "mmio_regions" : [ { - "name": "TEST_UART_REGION", + "name": "FF_TEST_UART_REGION", "permission": "READ-WRITE" }, { - "name": "TEST_WATCHDOG_REGION", + "name": "FF_TEST_WATCHDOG_REGION", "permission": "READ-WRITE" }, { - "name": "TEST_NVMEM_REGION", + "name": "FF_TEST_NVMEM_REGION", "permission": "READ-WRITE" }, { - "name": "TEST_DRIVER_PARTITION_MMIO", + "name": "FF_TEST_DRIVER_PARTITION_MMIO", "permission": "READ-WRITE" } ], @@ -58,7 +58,7 @@ { "description": "Using UART TX interrupt to test psa_wait and psa_eoi for irq_signal", "signal": "DRIVER_UART_INTR_SIG", - "source": "UARTTX_IRQ" + "source": "FF_TEST_UART_IRQ" } ] } diff --git a/api-tests/platform/manifests/server_partition_psa.json b/api-tests/platform/manifests/server_partition_psa.json index 0608200d..5acbd735 100644 --- a/api-tests/platform/manifests/server_partition_psa.json +++ b/api-tests/platform/manifests/server_partition_psa.json @@ -61,7 +61,7 @@ ], "mmio_regions" : [ { - "name": "TEST_SERVER_PARTITION_MMIO", + "name": "FF_TEST_SERVER_PARTITION_MMIO", "permission": "READ-WRITE" } ] diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h index 640f56f3..68d6739b 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -49,6 +49,9 @@ /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c index fd2e0557..9a051c95 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,8 +34,10 @@ int32_t pal_crypto_function(int type, va_list valist) const uint8_t *nonce, *additional_data, *salt, *peer; size_t *length, size, ciphertext_size, nonce_length; size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED size_t *tag_length, plaintext_size; psa_aead_operation_t *aead_operation; +#endif psa_key_attributes_t *attributes; psa_key_handle_t *handle, key_handle; psa_key_type_t *key_type_out, key_type; @@ -48,6 +50,7 @@ int32_t pal_crypto_function(int type, va_list valist) psa_cipher_operation_t *cipher_operation; psa_key_derivation_operation_t *derive_operation; psa_key_derivation_step_t step; + switch (type) { case PAL_CRYPTO_INIT: @@ -169,6 +172,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_HASH_COMPUTE: alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t*); @@ -184,6 +188,7 @@ int32_t pal_crypto_function(int type, va_list valist) buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif case PAL_CRYPTO_HASH_CLONE: hash_operation = va_arg(valist, psa_hash_operation_t*); target_operation = va_arg(valist, psa_hash_operation_t*); @@ -220,6 +225,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: aead_operation = va_arg(valist, psa_aead_operation_t *); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -281,6 +287,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_AEAD_ABORT: aead_operation = va_arg(valist, psa_aead_operation_t *); return psa_aead_abort(aead_operation); +#endif case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -310,6 +317,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_MAC_COMPUTE: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -329,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -392,6 +401,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_CIPHER_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -412,6 +422,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, length); +#endif case PAL_CRYPTO_ASYMMTERIC_SIGN: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c index fd2e0557..7bad480c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,8 +34,10 @@ int32_t pal_crypto_function(int type, va_list valist) const uint8_t *nonce, *additional_data, *salt, *peer; size_t *length, size, ciphertext_size, nonce_length; size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED size_t *tag_length, plaintext_size; psa_aead_operation_t *aead_operation; +#endif psa_key_attributes_t *attributes; psa_key_handle_t *handle, key_handle; psa_key_type_t *key_type_out, key_type; @@ -48,6 +50,7 @@ int32_t pal_crypto_function(int type, va_list valist) psa_cipher_operation_t *cipher_operation; psa_key_derivation_operation_t *derive_operation; psa_key_derivation_step_t step; + switch (type) { case PAL_CRYPTO_INIT: @@ -169,6 +172,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_HASH_COMPUTE: alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t*); @@ -184,6 +188,7 @@ int32_t pal_crypto_function(int type, va_list valist) buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif case PAL_CRYPTO_HASH_CLONE: hash_operation = va_arg(valist, psa_hash_operation_t*); target_operation = va_arg(valist, psa_hash_operation_t*); @@ -220,6 +225,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: aead_operation = va_arg(valist, psa_aead_operation_t *); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -281,6 +287,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_AEAD_ABORT: aead_operation = va_arg(valist, psa_aead_operation_t *); return psa_aead_abort(aead_operation); +#endif case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -310,6 +317,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_MAC_COMPUTE: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -329,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -392,6 +401,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_CIPHER_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -412,6 +422,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, length); +#endif case PAL_CRYPTO_ASYMMTERIC_SIGN: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c index eec26192..91be54df 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -121,15 +121,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } -/** - @brief - Computes hash for the requested data - @param - cose_alg_id : Algorithm ID - - buffer_for_hash : Temp buffer for calculating hash - - hash : Pointer to store the hash - - protected_headers : Buffer containing protected data - - payload : payload data - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -292,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, @@ -308,7 +300,6 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) return status; } - static uint32_t pal_destroy_attest_key(void) { psa_status_t status; @@ -325,13 +316,6 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } -/** - @brief - Verify the signature using the public key - @param - cose_algorithm_id : Algorithm ID - - token_hash : Data that needs to be verified - - signature : Signature to be verified against - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake index f95c52eb..d33dcc93 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c index fd2e0557..7bad480c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,8 +34,10 @@ int32_t pal_crypto_function(int type, va_list valist) const uint8_t *nonce, *additional_data, *salt, *peer; size_t *length, size, ciphertext_size, nonce_length; size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED size_t *tag_length, plaintext_size; psa_aead_operation_t *aead_operation; +#endif psa_key_attributes_t *attributes; psa_key_handle_t *handle, key_handle; psa_key_type_t *key_type_out, key_type; @@ -48,6 +50,7 @@ int32_t pal_crypto_function(int type, va_list valist) psa_cipher_operation_t *cipher_operation; psa_key_derivation_operation_t *derive_operation; psa_key_derivation_step_t step; + switch (type) { case PAL_CRYPTO_INIT: @@ -169,6 +172,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_HASH_COMPUTE: alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t*); @@ -184,6 +188,7 @@ int32_t pal_crypto_function(int type, va_list valist) buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif case PAL_CRYPTO_HASH_CLONE: hash_operation = va_arg(valist, psa_hash_operation_t*); target_operation = va_arg(valist, psa_hash_operation_t*); @@ -220,6 +225,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: aead_operation = va_arg(valist, psa_aead_operation_t *); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -281,6 +287,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_AEAD_ABORT: aead_operation = va_arg(valist, psa_aead_operation_t *); return psa_aead_abort(aead_operation); +#endif case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -310,6 +317,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_MAC_COMPUTE: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -329,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -392,6 +401,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_CIPHER_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -412,6 +422,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, length); +#endif case PAL_CRYPTO_ASYMMTERIC_SIGN: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c index 04fe5ef4..91be54df 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -121,15 +121,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } -/** - @brief - Computes hash for the requested data - @param - cose_alg_id : Algorithm ID - - buffer_for_hash : Temp buffer for calculating hash - - hash : Pointer to store the hash - - protected_headers : Buffer containing protected data - - payload : payload data - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -292,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, @@ -324,13 +316,6 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } -/** - @brief - Verify the signature using the public key - @param - cose_algorithm_id : Algorithm ID - - token_hash : Data that needs to be verified - - signature : Signature to be verified against - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake index f95c52eb..d33dcc93 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c index fd2e0557..f2145555 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,8 +34,10 @@ int32_t pal_crypto_function(int type, va_list valist) const uint8_t *nonce, *additional_data, *salt, *peer; size_t *length, size, ciphertext_size, nonce_length; size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED size_t *tag_length, plaintext_size; psa_aead_operation_t *aead_operation; +#endif psa_key_attributes_t *attributes; psa_key_handle_t *handle, key_handle; psa_key_type_t *key_type_out, key_type; @@ -48,6 +50,7 @@ int32_t pal_crypto_function(int type, va_list valist) psa_cipher_operation_t *cipher_operation; psa_key_derivation_operation_t *derive_operation; psa_key_derivation_step_t step; + switch (type) { case PAL_CRYPTO_INIT: @@ -169,6 +172,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_HASH_COMPUTE: alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t*); @@ -184,6 +188,7 @@ int32_t pal_crypto_function(int type, va_list valist) buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif case PAL_CRYPTO_HASH_CLONE: hash_operation = va_arg(valist, psa_hash_operation_t*); target_operation = va_arg(valist, psa_hash_operation_t*); @@ -220,6 +225,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: aead_operation = va_arg(valist, psa_aead_operation_t *); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -281,6 +287,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_AEAD_ABORT: aead_operation = va_arg(valist, psa_aead_operation_t *); return psa_aead_abort(aead_operation); +#endif case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -310,6 +317,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_MAC_COMPUTE: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -392,6 +400,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_CIPHER_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -412,6 +421,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, length); +#endif case PAL_CRYPTO_ASYMMTERIC_SIGN: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c index 04fe5ef4..91be54df 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -121,15 +121,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } -/** - @brief - Computes hash for the requested data - @param - cose_alg_id : Algorithm ID - - buffer_for_hash : Temp buffer for calculating hash - - hash : Pointer to store the hash - - protected_headers : Buffer containing protected data - - payload : payload data - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -292,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, @@ -324,13 +316,6 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } -/** - @brief - Verify the signature using the public key - @param - cose_algorithm_id : Algorithm ID - - token_hash : Data that needs to be verified - - signature : Signature to be verified against - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake index 64ef4bf2..5388ca1a 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c index fd2e0557..f2145555 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,8 +34,10 @@ int32_t pal_crypto_function(int type, va_list valist) const uint8_t *nonce, *additional_data, *salt, *peer; size_t *length, size, ciphertext_size, nonce_length; size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED size_t *tag_length, plaintext_size; psa_aead_operation_t *aead_operation; +#endif psa_key_attributes_t *attributes; psa_key_handle_t *handle, key_handle; psa_key_type_t *key_type_out, key_type; @@ -48,6 +50,7 @@ int32_t pal_crypto_function(int type, va_list valist) psa_cipher_operation_t *cipher_operation; psa_key_derivation_operation_t *derive_operation; psa_key_derivation_step_t step; + switch (type) { case PAL_CRYPTO_INIT: @@ -169,6 +172,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_HASH_ABORT: hash_operation = va_arg(valist, psa_hash_operation_t*); return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED case PAL_CRYPTO_HASH_COMPUTE: alg = va_arg(valist, psa_algorithm_t); plaintext = va_arg(valist, uint8_t*); @@ -184,6 +188,7 @@ int32_t pal_crypto_function(int type, va_list valist) buffer = va_arg(valist, uint8_t*); size = va_arg(valist, size_t); return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif case PAL_CRYPTO_HASH_CLONE: hash_operation = va_arg(valist, psa_hash_operation_t*); target_operation = va_arg(valist, psa_hash_operation_t*); @@ -220,6 +225,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: aead_operation = va_arg(valist, psa_aead_operation_t *); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -281,6 +287,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_AEAD_ABORT: aead_operation = va_arg(valist, psa_aead_operation_t *); return psa_aead_abort(aead_operation); +#endif case PAL_CRYPTO_MAC_SIGN_SETUP: mac_operation = va_arg(valist, psa_mac_operation_t*); key_handle = (psa_key_handle_t)va_arg(valist, int); @@ -310,6 +317,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_MAC_ABORT: mac_operation = va_arg(valist, psa_mac_operation_t*); return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_MAC_COMPUTE: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -392,6 +400,7 @@ int32_t pal_crypto_function(int type, va_list valist) case PAL_CRYPTO_CIPHER_ABORT: cipher_operation = va_arg(valist, psa_cipher_operation_t *); return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT case PAL_CRYPTO_CIPHER_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); @@ -412,6 +421,7 @@ int32_t pal_crypto_function(int type, va_list valist) length = va_arg(valist, size_t*); return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, length); +#endif case PAL_CRYPTO_ASYMMTERIC_SIGN: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c index 04fe5ef4..91be54df 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -121,15 +121,6 @@ int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf b return status; } -/** - @brief - Computes hash for the requested data - @param - cose_alg_id : Algorithm ID - - buffer_for_hash : Temp buffer for calculating hash - - hash : Pointer to store the hash - - protected_headers : Buffer containing protected data - - payload : payload data - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, struct q_useful_buf_c payload) @@ -292,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, @@ -324,13 +316,6 @@ static uint32_t pal_destroy_attest_key(void) return PAL_ATTEST_SUCCESS; } -/** - @brief - Verify the signature using the public key - @param - cose_algorithm_id : Algorithm ID - - token_hash : Data that needs to be verified - - signature : Signature to be verified against - @return - SUCCESS/ERROR CODE -**/ uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, struct q_useful_buf_c signature) diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake index 64ef4bf2..5388ca1a 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c index 488c96b1..91be54df 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -283,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg index 9e50489d..729388ea 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cfg @@ -1,5 +1,5 @@ ///** @file -// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. // * SPDX-License-Identifier : Apache-2.0 // * // * Licensed under the Apache License, Version 2.0 (the "License"); @@ -68,11 +68,11 @@ nspe_mmio.0.end = 0x00300F1F; nspe_mmio.0.permission = TYPE_READ_WRITE; server_partition_mmio.num=1; -server_partition_mmio.0.start = 0x10300F00; -server_partition_mmio.0.end = 0x10300F1F; +server_partition_mmio.0.start = 0x3801FC00; +server_partition_mmio.0.end = 0x3801FD00; server_partition_mmio.0.permission = TYPE_READ_WRITE; driver_partition_mmio.num=1; -driver_partition_mmio.0.start = 0x10300F20; -driver_partition_mmio.0.end = 0x10300F3F; +driver_partition_mmio.0.start = 0x3801FE00; +driver_partition_mmio.0.end = 0x3801FF00; driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake index f95c52eb..d33dcc93 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h index 640f56f3..b8ddc57d 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/common/pal_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,14 @@ #endif /* PSA_CMAKE_BUILD */ /* Version of crypto spec used in attestation */ -#define CRYPTO_VERSION_BETA2 +#define CRYPTO_VERSION_BETA3 /* Use hardcoded public key */ //#define PLATFORM_OVERRIDE_ATTEST_PK +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + /* * Include of PSA defined Header files */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c index 488c96b1..91be54df 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_crypto.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -283,6 +283,7 @@ static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) psa_set_key_bits(&attributes, public_key_size); psa_set_key_usage_flags(&attributes, usage); psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); /* Import the public key */ status = psa_import_key(&attributes, diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg index 3535eeec..fbf0022c 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cfg @@ -1,5 +1,5 @@ ///** @file -// * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +// * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. // * SPDX-License-Identifier : Apache-2.0 // * // * Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,8 +36,8 @@ watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 100 // Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH nvmem.num =1; -nvmem.0.start = 0x30017C00; // END_OF_MUSCA_SRAM_S -nvmem.0.end = 0x30017FFF; +nvmem.0.start = 0x30017800; +nvmem.0.end = 0x30017BFF; nvmem.0.permission = TYPE_READ_WRITE; // Miscellaneous - Test scatter info @@ -68,11 +68,11 @@ nspe_mmio.0.end = 0x00200F1F; nspe_mmio.0.permission = TYPE_READ_WRITE; server_partition_mmio.num=1; -server_partition_mmio.0.start = 0x10200F00; -server_partition_mmio.0.end = 0x10200F1F; +server_partition_mmio.0.start = 0x30017C00; +server_partition_mmio.0.end = 0x30017D00; server_partition_mmio.0.permission = TYPE_READ_WRITE; driver_partition_mmio.num=1; -driver_partition_mmio.0.start = 0x10200F20; -driver_partition_mmio.0.end = 0x10200F3F; +driver_partition_mmio.0.start = 0x30017E00; +driver_partition_mmio.0.end = 0x30017F00; driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake index 64ef4bf2..5388ca1a 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/target.cmake @@ -1,5 +1,5 @@ #/** @file -# * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. +# * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. # * SPDX-License-Identifier : Apache-2.0 # * # * Licensed under the Apache License, Version 2.0 (the "License"); @@ -72,8 +72,11 @@ if(${SUITE} STREQUAL "INITIAL_ATTESTATION") list(APPEND PAL_SRC_C_NSPE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c ) - set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) endif() # Create NSPE library diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c new file mode 100644 index 00000000..b11cae21 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_empty_intf.c @@ -0,0 +1,95 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return 0; +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return PSA_VERSION_NONE; +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return PSA_NULL_HANDLE; +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return (PSA_SUCCESS - 1); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param handle Handle for the connection. + * @return void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + return; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.c new file mode 100644 index 00000000..7f13ec72 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.c @@ -0,0 +1,99 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + * @brief - Retrieve the version of the PSA Framework API that is implemented. + * This is a wrapper API for psa_framework_version API. + * @param - void + * @return - The PSA Framework API version. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_framework_version(void) +{ + return psa_framework_version(); +} + +/** + * @brief - Retrieve the version of a Root of Trust Service by its SID. + * This is a wrapper API for the psa_version API. + * @param - sid The Root of Trust Service ID + * @return - Version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust + * Service not present on the system. + * Note - Return PAL_STATUS_ERROR if PSA IPC is not implemented. + */ + +uint32_t pal_ipc_version(uint32_t sid) +{ + return psa_version(sid); +} + +/** + * @brief - Connect to given sid. + * This is a wrapper API for the psa_connect API. + * @param - sid : RoT service id + * @param - version : version of RoT service + * @return - psa_handle_t : return connection handle + * Note - Return PSA_NULL_HANDLE if PSA IPC is not implemented. + */ + +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version) +{ + return psa_connect(sid, version); +} + +/** + * @brief Call a connected Root of Trust Service. + * This is a wrapper API for the psa_call API. + * The caller must provide an array of ::psa_invec_t structures as the input payload. + * + * @param -handle Handle for the connection. + * @param -type Request type. + * @param -in_vec Array of psa_invec structures. + * @param -in_len Number of psa_invec structures in in_vec. + * @param -out_vec Array of psa_outvec structures for optional Root of Trust Service response. + * @param -out_len Number of psa_outvec structures in out_vec. + * @return -psa_status_t + * Note - Return -1 if PSA IPC is not implemented. + */ + +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len) +{ + return psa_call(handle, type, in_vec, in_len, out_vec, out_len); +} + +/** + * @brief Close a connection to a Root of Trust Service. + * This is a wrapper API for the psa_close API. + * Sends the PSA_IPC_DISCONNECT message to the Root of Trust Service so it can clean up resources. + * + * @param - handle Handle for the connection. + * @return - void + */ + +void pal_ipc_close(psa_handle_t handle) +{ + psa_close(handle); +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.h new file mode 100644 index 00000000..0f8090ad --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_client_api_intf.h @@ -0,0 +1,33 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CLIENT_API_H_ +#define _PAL_CLIENT_API_H_ + +#include "pal_common.h" + +uint32_t pal_ipc_framework_version(void); +uint32_t pal_ipc_version(uint32_t sid); +psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t version); +psa_status_t pal_ipc_call(psa_handle_t handle, + int32_t type, + const psa_invec *in_vec, + size_t in_len, + psa_outvec *out_vec, + size_t out_len); +void pal_ipc_close(psa_handle_t handle); +#endif /* _PAL_CLIENT_API_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_common.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_common.h new file mode 100644 index 00000000..a628d4d7 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_common.h @@ -0,0 +1,115 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_COMMON_H_ +#define _PAL_COMMON_H_ + +#include +#include +#include +#include +#include + +#include "pal_config.h" +#include "pal_crypto_config.h" + +/* typedef's */ +typedef uint8_t bool_t; +typedef uint32_t addr_t; +typedef uint32_t test_id_t; +typedef uint32_t block_id_t; +typedef char char8_t; +typedef uint32_t cfg_id_t; + +#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF + +typedef enum { + PAL_STATUS_SUCCESS = 0x0, + PAL_STATUS_ERROR = 0x80 +} pal_status_t; + +typedef enum { + NVMEM_READ = 0x1, + NVMEM_WRITE = 0x2, +} nvmem_fn_type_t; + +typedef struct { + nvmem_fn_type_t nvmem_fn_type; + addr_t base; + uint32_t offset; + int size; +} nvmem_param_t; + +typedef enum { + WD_INIT_SEQ = 0x1, + WD_ENABLE_SEQ = 0x2, + WD_DISABLE_SEQ = 0x3, + WD_STATUS_SEQ = 0x4, +} wd_fn_type_t; + +typedef enum { + WD_LOW_TIMEOUT = 0x1, + WD_MEDIUM_TIMEOUT = 0x2, + WD_HIGH_TIMEOUT = 0x3, + WD_CRYPTO_TIMEOUT = 0x4, +} wd_timeout_type_t; + +typedef struct { + wd_fn_type_t wd_fn_type; + addr_t wd_base_addr; + uint32_t wd_time_us; + uint32_t wd_timer_tick_us; +} wd_param_t; + +typedef enum { + UART_INIT = 0x1, + UART_PRINT = 0x2, +} uart_fn_type_t; + +/* + * Redefining some of the client.h elements for compilation to go through + * when PSA IPC APIs are not implemented. + */ +#ifndef IPC + +#ifndef PSA_VERSION_NONE +#define PSA_VERSION_NONE (0) +#endif + +#ifndef PSA_SUCCESS +#define PSA_SUCCESS (0) +typedef int32_t psa_status_t; +#endif +typedef int32_t psa_handle_t; + +#ifndef PSA_NULL_HANDLE +#define PSA_NULL_HANDLE ((psa_handle_t)0) +#endif + +typedef struct psa_invec { + const void *base; + size_t len; +} psa_invec; + +typedef struct psa_outvec { + void *base; + size_t len; +} psa_outvec; + +#endif /* IPC */ + +#endif /* _PAL_COMMON_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_config.h new file mode 100644 index 00000000..3af5cdb6 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_config.h @@ -0,0 +1,97 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CONFIG_H_ +#define _PAL_CONFIG_H_ + +/* Define PSA test suite dependent macros for non-cmake build */ +#if !defined(PSA_CMAKE_BUILD) + +/* Print verbosity = TEST */ +#define VERBOSE 3 + +/* NSPE or SPE VAL build? */ +#define VAL_NSPE_BUILD + +/* NSPE or SPE TEST build? */ +#define NONSECURE_TEST_BUILD + +/* Combine test archive or binary? */ +#define TEST_COMBINE_ARCHIVE + +/* If not defined, skip watchdog programming */ +#define WATCHDOG_AVAILABLE + +/* Are Dynamic memory APIs available to secure partition? */ +#define SP_HEAP_MEM_SUPP + +/* PSA Isolation level supported by platform */ +#define PLATFORM_PSA_ISOLATION_LEVEL 3 +#endif /* PSA_CMAKE_BUILD */ + +/* Version of crypto spec used in attestation */ +#define CRYPTO_VERSION_BETA3 + +/* Use hardcoded public key */ +//#define PLATFORM_OVERRIDE_ATTEST_PK + +/* Platform specific max UID's size */ +#define PLATFORM_MAX_UID_SIZE 512 + +/* + * Include of PSA defined Header files + */ +#ifdef IPC +/* psa/client.h: Contains the PSA Client API elements */ +#include "psa/client.h" + +/* + * psa_manifest/sid.h: Macro definitions derived from manifest files that map from RoT Service + * names to Service IDs (SIDs). Partition manifest parse build tool must provide the implementation + * of this file. +*/ +#include "psa_manifest/sid.h" + +/* + * psa_manifest/pid.h: Secure Partition IDs + * Macro definitions that map from Secure Partition names to Secure Partition IDs. + * Partition manifest parse build tool must provide the implementation of this file. +*/ +#include "psa_manifest/pid.h" +#endif + +#ifdef CRYPTO +/* psa/crypto.h: Contains the PSA Crypto API elements */ +#include "psa/crypto.h" +#endif + +#ifdef INTERNAL_TRUSTED_STORAGE +/* psa/internal_trusted_storage.h: Contains the PSA ITS API elements */ +#include "psa/internal_trusted_storage.h" +#endif + +#ifdef PROTECTED_STORAGE +/* psa/protected_storage.h: Contains the PSA PS API elements */ +#include "psa/protected_storage.h" +#endif + +#ifdef INITIAL_ATTESTATION +/* psa/initial_attestation.h: Contains the PSA Initial Attestation API elements */ +#include "psa/initial_attestation.h" +#endif + +#endif /* _PAL_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c new file mode 100644 index 00000000..bfe1e982 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ipc_intf.c @@ -0,0 +1,293 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_client_api_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_INIT; + + psa_invec data[3] = {{&uart_fn, sizeof(uart_fn)}, + {&uart_base_addr, sizeof(uart_base_addr)}, + {NULL, 0} }; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + int string_len = 0; + char *p = str; + psa_handle_t print_handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + uart_fn_type_t uart_fn = UART_PRINT; + + while (*p != '\0') + { + string_len++; + p++; + } + + psa_invec data1[3] = {{&uart_fn, sizeof(uart_fn)}, + {str, string_len+1}, + {&data, sizeof(data)} }; + + print_handle = pal_ipc_connect(DRIVER_UART_SID, DRIVER_UART_VERSION); + if (PSA_HANDLE_IS_VALID(print_handle)) + { + status_of_call = pal_ipc_call(print_handle, 0, data1, 3, NULL, 0); + pal_ipc_close(print_handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_INIT_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = time_us; + wd_param.wd_timer_tick_us = timer_tick_us; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_ENABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + wd_param_t wd_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + wd_param.wd_fn_type = WD_DISABLE_SEQ; + wd_param.wd_base_addr = base_addr; + wd_param.wd_time_us = 0; + wd_param.wd_timer_tick_us = 0; + psa_invec invec[1] = {{&wd_param, sizeof(wd_param)} }; + + handle = pal_ipc_connect(DRIVER_WATCHDOG_SID, DRIVER_WATCHDOG_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_READ; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[1] = {{&nvmem_param, sizeof(nvmem_param)} }; + psa_outvec outvec[1] = {{buffer, size} }; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 1, outvec, 1); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + nvmem_param_t nvmem_param; + psa_handle_t handle = 0; + psa_status_t status_of_call = PSA_SUCCESS; + + nvmem_param.nvmem_fn_type = NVMEM_WRITE; + nvmem_param.base = base; + nvmem_param.offset = offset; + nvmem_param.size = size; + psa_invec invec[2] = {{&nvmem_param, sizeof(nvmem_param)}, {buffer, size} }; + + handle = pal_ipc_connect(DRIVER_NVMEM_SID, DRIVER_NVMEM_VERSION); + if (PSA_HANDLE_IS_VALID(handle)) + { + status_of_call = pal_ipc_call(handle, 0, invec, 2, NULL, 0); + pal_ipc_close(handle); + if (status_of_call != PSA_SUCCESS) + return PAL_STATUS_ERROR; + + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while (1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ns_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ns_intf.c new file mode 100644 index 00000000..7ad6ce85 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/common/pal_driver_ns_intf.c @@ -0,0 +1,145 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_common.h" +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - SUCCESS/FAILURE +**/ +int pal_uart_init_ns(uint32_t uart_base_addr) +{ + pal_uart_pl011_init(uart_base_addr); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier + @return - SUCCESS/FAILURE +**/ + +int pal_print_ns(char *str, int32_t data) +{ + pal_uart_pl011_print(str, data); + return PAL_STATUS_SUCCESS; +} + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init_ns(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return pal_wd_cmsdk_init(base_addr, time_us, timer_tick_us); +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable_ns(addr_t base_addr) +{ + return pal_wd_cmsdk_enable(base_addr); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable_ns(addr_t base_addr) +{ + return pal_wd_cmsdk_disable(base_addr); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_read_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_read(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - SUCCESS/FAILURE +**/ +int pal_nvmem_write_ns(addr_t base, uint32_t offset, void *buffer, int size) +{ + if (nvmem_write(base, offset, buffer, size)) + { + return PAL_STATUS_SUCCESS; + } + else + { + return PAL_STATUS_ERROR; + } +} + +/** + * @brief - This function will read peripherals using SPI commands + * @param - addr : address of the peripheral + * data : read buffer + * len : length of the read buffer in bytes + * @return - error status +**/ +int pal_spi_read(addr_t addr, uint8_t *data, uint32_t len) +{ + return 0xFF; +} + +/** + * @brief - Terminates the simulation at the end of all tests completion. + * By default, it put cpus into power down mode. + * @param - void + * @return - void +**/ +void pal_terminate_simulation(void) +{ + /* Add logic to terminate the simluation */ + + while (1) + { + asm volatile("WFI"); + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h new file mode 100644 index 00000000..1518e910 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -0,0 +1,323 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/* + * \file pal_crypto_config.h + * + * \brief Configuration options for crypto tests (set of defines) + * + * This set of compile-time options may be used to enable + * or disable features selectively for crypto test suite + */ + +#ifndef _PAL_CRYPTO_CONFIG_H_ +#define _PAL_CRYPTO_CONFIG_H_ +/** + * \def ARCH_TEST_RSA + * + * Enable the RSA public-key cryptosystem. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_RSA +#define ARCH_TEST_RSA_1024 +#define ARCH_TEST_RSA_2048 +#define ARCH_TEST_RSA_3072 + +/** + * \def ARCH_TEST_ECC + * \def ARCH_TEST_ECC_CURVE_SECPXXXR1 + * + * Enable the elliptic curve + * Enable specific curves within the Elliptic Curve + * module. By default all supported curves are enabled. + * + * Requires: ARCH_TEST_ECC + * Comment macros to disable the curve + */ +#define ARCH_TEST_ECC +#define ARCH_TEST_ECC_CURVE_SECP192R1 +#define ARCH_TEST_ECC_CURVE_SECP224R1 +#define ARCH_TEST_ECC_CURVE_SECP256R1 +#define ARCH_TEST_ECC_CURVE_SECP384R1 + +/** + * \def ARCH_TEST_AES + * + * Enable the AES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +#define ARCH_TEST_AES +#define ARCH_TEST_AES_128 +#define ARCH_TEST_AES_192 +#define ARCH_TEST_AES_256 +#define ARCH_TEST_AES_512 + +/** + * \def ARCH_TEST_DES + * + * Enable the DES block cipher. + * By default all supported keys are enabled. + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_DES +//#define ARCH_TEST_DES_1KEY +//#define ARCH_TEST_DES_2KEY +//#define ARCH_TEST_DES_3KEY + +/** + * \def ARCH_TEST_RAW + * + * A "key" of this type cannot be used for any cryptographic operation. + * Applications may use this type to store arbitrary data in the keystore. + */ +#define ARCH_TEST_RAW + +/** + * \def ARCH_TEST_CIPER + * + * Enable the generic cipher layer. + */ + +#define ARCH_TEST_CIPER + +/** + * \def ARCH_TEST_ARC4 + * + * Enable the ARC4 key type. + */ +//#define ARCH_TEST_ARC4 + +/** + * \def ARCH_TEST_CIPER_MODE_CTR + * + * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CTR + +/** + * \def ARCH_TEST_CIPER_MODE_CFB + * + * Enable Cipher Feedback mode (CFB) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CFB + +/** + * \def ARCH_TEST_CIPER_MODE_CBC + * + * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. + * + * Requires: ARCH_TEST_CIPER + */ +#define ARCH_TEST_CIPER_MODE_CBC + +/** + * \def ARCH_TEST_CTR_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CTR + */ +#define ARCH_TEST_CTR_AES + +/** + * \def ARCH_TEST_CBC_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_AES +#define ARCH_TEST_CBC_AES_NO_PADDING + +/** + * \def ARCH_TEST_CBC_NO_PADDING + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_NO_PADDING + +/** + * \def ARCH_TEST_CFB_AES + * + * Requires: ARCH_TEST_CIPER, ARCH_TEST_AES, ARCH_TEST_CIPER_MODE_CFB + */ +#define ARCH_TEST_CFB_AES + +/** + * \def ARCH_TEST_PKCS1V15_* + * + * Enable support for PKCS#1 v1.5 encoding. + * Enable support for PKCS#1 v1.5 operations. + * Enable support for RSA-OAEP + * + * Requires: ARCH_TEST_RSA, ARCH_TEST_PKCS1V15 + * + * Comment macros to disable the types + */ +#define ARCH_TEST_PKCS1V15 +#define ARCH_TEST_RSA_PKCS1V15_SIGN +#define ARCH_TEST_RSA_PKCS1V15_SIGN_RAW +#define ARCH_TEST_RSA_PKCS1V15_CRYPT +#define ARCH_TEST_RSA_OAEP + +/** + * \def ARCH_TEST_CBC_PKCS7 + * + * Requires: ARCH_TEST_CIPER_MODE_CBC + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CBC_PKCS7 + +/** + * \def ARCH_TEST_ASYMMETRIC_ENCRYPTION + * + * Enable support for Asymmetric encryption algorithms + */ +#define ARCH_TEST_ASYMMETRIC_ENCRYPTION + +/** + * \def ARCH_TEST_HASH + * + * Enable the hash algorithm. + */ +#define ARCH_TEST_HASH + +/** + * \def ARCH_TEST_HMAC + * + * The key policy determines which underlying hash algorithm the key can be + * used for. + * + * Requires: ARCH_TEST_HASH + */ +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_MDX + * \def ARCH_TEST_SHAXXX + * + * Enable the MDX algorithm. + * Enable the SHAXXX algorithm. + * + * Requires: ARCH_TEST_HASH + * + * Comment macros to disable the types + */ +//#define ARCH_TEST_MD2 +//#define ARCH_TEST_MD4 +//#define ARCH_TEST_MD5 +//#define ARCH_TEST_RIPEMD160 +//#define ARCH_TEST_SHA1 +#define ARCH_TEST_SHA224 +#define ARCH_TEST_SHA256 +#define ARCH_TEST_SHA384 +#define ARCH_TEST_SHA512 +//#define ARCH_TEST_SHA512_224 +//#define ARCH_TEST_SHA512_256 +//#define ARCH_TEST_SHA3_224 +//#define ARCH_TEST_SHA3_256 +//#define ARCH_TEST_SHA3_384 +//#define ARCH_TEST_SHA3_512 + +/** + * \def ARCH_TEST_HKDF + * + * Enable the HKDF algorithm (RFC 5869). + * + * Requires: ARCH_TEST_HASH +*/ +#define ARCH_TEST_HKDF + +/** + * \def ARCH_TEST_xMAC + * + * Enable the xMAC (Cipher/Hash/G-based Message Authentication Code) mode for block + * ciphers. + * Requires: ARCH_TEST_AES or ARCH_TEST_DES + * + * Comment macros to disable the types + */ +#define ARCH_TEST_CMAC +#define ARCH_TEST_GMAC +#define ARCH_TEST_HMAC + +/** + * \def ARCH_TEST_CCM + * + * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. + * + * Requires: ARCH_TEST_AES + */ +#define ARCH_TEST_CCM + +/** + * \def ARCH_TEST_GCM + * + * Enable the Galois/Counter Mode (GCM) for AES. + * + * Requires: ARCH_TEST_AES + * + */ +#define ARCH_TEST_GCM + +/** + * \def ARCH_TEST_TRUNCATED_MAC + * + * Enable support for RFC 6066 truncated HMAC in SSL. + * + * Comment this macro to disable support for truncated HMAC in SSL + */ +#define ARCH_TEST_TRUNCATED_MAC + + +/** + * \def ARCH_TEST_ECDH + * + * Enable the elliptic curve Diffie-Hellman library. + * + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDH + +/** + * \def ARCH_TEST_ECDSA + * + * Enable the elliptic curve DSA library. + * Requires: ARCH_TEST_ECC + */ +#define ARCH_TEST_ECDSA + +/** + * \def ARCH_TEST_DETERMINISTIC_ECDSA + * + * Enable deterministic ECDSA (RFC 6979). +*/ +#define ARCH_TEST_DETERMINISTIC_ECDSA + +#include "pal_crypto_config_check.h" + +#endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h new file mode 100644 index 00000000..f75cc1bc --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config_check.h @@ -0,0 +1,223 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +/** + * \file pal_crypto_config_check.h + * + * \brief Consistency checks for configuration options + * + */ + +#ifndef _PAL_CRYPTO_CONFIG_CHECK_H_ +#define _PAL_CRYPTO_CONFIG_CHECK_H_ + +#if defined(ARCH_TEST_RSA_1024) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_1024 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_2048) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_2048 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_3072) && !defined(ARCH_TEST_RSA) +#error "ARCH_TEST_RSA_3072 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP192R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP192R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP224R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP224R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP256R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP256R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECC_CURVE_SECP384R1) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECC_CURVE_SECP384R1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_128) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_128 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_256) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_AES_512) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_AES_512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_1KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_1KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_2KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_2KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_DES_3KEY) && !defined(ARCH_TEST_DES) +#error "ARCH_TEST_DES_3KEY defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CTR) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CTR defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CFB) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CFB defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CIPER_MODE_CBC) && !defined(ARCH_TEST_CIPER) +#error "ARCH_TEST_CIPER_MODE_CBC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CTR_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CTR)) +#error "ARCH_TEST_CTR_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_AES) || defined(ARCH_TEST_CBC_AES_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_AES defined, but not all prerequisites" +#endif + +#if (defined(ARCH_TEST_CBC_NO_PADDING)) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_CIPER_MODE_CBC)) +#error "ARCH_TEST_CBC_NO_PADDING defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CFB_AES) &&\ + (!defined(ARCH_TEST_CIPER) || !defined(ARCH_TEST_AES) || !defined(ARCH_TEST_CIPER_MODE_CFB)) +#error "ARCH_TEST_CFB_AES defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_SIGN_RAW) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_SIGN_RAW defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RSA_PKCS1V15_CRYPT) &&\ + (!defined(ARCH_TEST_RSA) || !defined(ARCH_TEST_PKCS1V15)) +#error "ARCH_TEST_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CBC_PKCS7) && !defined(ARCH_TEST_CIPER_MODE_CBC) +#error "ARCH_TEST_CBC_PKCS7 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD2) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD2 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD4) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD4 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_MD5) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_MD5 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_RIPEMD160) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_RIPEMD160 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA1) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA1 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA512_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA512_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_224) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_224 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_256) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_384) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_SHA3_512) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_SHA3_256 defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HKDF) && !defined(ARCH_TEST_HASH) +#error "ARCH_TEST_HKDF defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_HMAC) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_HMAC defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_CCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_CCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_GCM) && !defined(ARCH_TEST_AES) +#error "ARCH_TEST_GCM defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDH) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDH defined, but not all prerequisites" +#endif + +#if defined(ARCH_TEST_ECDSA) && !defined(ARCH_TEST_ECC) +#error "ARCH_TEST_ECDSA defined, but not all prerequisites" +#endif + +#endif /* _PAL_CRYPTO_CONFIG_CHECK_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_empty_intf.c new file mode 100644 index 00000000..6c1e9ab7 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c new file mode 100644 index 00000000..61beb444 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c @@ -0,0 +1,516 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_crypto_intf.h" + +#define PAL_KEY_SLOT_COUNT 32 + +/** + @brief - This API will call the requested crypto function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_crypto_function(int type, va_list valist) +{ + int i; + psa_status_t status; + uint8_t *buffer, *ciphertext, *plaintext; + const uint8_t *nonce, *additional_data, *salt, *peer; + size_t *length, size, ciphertext_size, nonce_length; + size_t salt_length, peer_length, additional_data_length; +#ifdef NOT_SUPPORTED + size_t *tag_length, plaintext_size; + psa_aead_operation_t *aead_operation; +#endif + psa_key_attributes_t *attributes; + psa_key_handle_t *handle, key_handle; + psa_key_type_t *key_type_out, key_type; + psa_key_usage_t *usage_out, usage; + psa_key_id_t *key_id_out, key_id; + psa_key_lifetime_t *key_lifetime_out, key_lifetime; + psa_algorithm_t *key_alg_out, key_alg, alg; + psa_hash_operation_t *hash_operation, *target_operation; + psa_mac_operation_t *mac_operation; + psa_cipher_operation_t *cipher_operation; + psa_key_derivation_operation_t *derive_operation; + psa_key_derivation_step_t step; + + switch (type) + { + case PAL_CRYPTO_INIT: + return psa_crypto_init(); + case PAL_CRYPTO_GENERATE_RANDOM: + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, int); + return psa_generate_random(buffer, size); + case PAL_CRYPTO_IMPORT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + buffer = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + status = psa_import_key(attributes, buffer, size, handle); + return status; + case PAL_CRYPTO_SET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type = va_arg(valist, psa_key_type_t); + psa_set_key_type(attributes, key_type); + return 0; + case PAL_CRYPTO_SET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + size = va_arg(valist, size_t); + psa_set_key_bits(attributes, size); + return 0; + case PAL_CRYPTO_GET_KEY_ATTRIBUTES: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + return psa_get_key_attributes(key_handle, attributes); + case PAL_CRYPTO_GET_KEY_TYPE: + attributes = va_arg(valist, psa_key_attributes_t *); + key_type_out = va_arg(valist, psa_key_type_t *); + *key_type_out = psa_get_key_type(attributes); + return 0; + case PAL_CRYPTO_EXPORT_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage = va_arg(valist, psa_key_usage_t); + psa_set_key_usage_flags(attributes, usage); + return 0; + case PAL_CRYPTO_RESET_KEY_ATTRIBUTES: + attributes = va_arg(valist, psa_key_attributes_t *); + psa_reset_key_attributes(attributes); + return 0; + case PAL_CRYPTO_EXPORT_PUBLIC_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + buffer = (uint8_t *)(va_arg(valist, uint8_t *)); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t *); + return psa_export_public_key(key_handle, buffer, size, length); + case PAL_CRYPTO_SET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id = va_arg(valist, psa_key_id_t); + psa_set_key_id(attributes, key_id); + return 0; + case PAL_CRYPTO_SET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime = va_arg(valist, psa_key_lifetime_t); + psa_set_key_lifetime(attributes, key_lifetime); + return 0; + case PAL_CRYPTO_SET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg = va_arg(valist, psa_algorithm_t); + psa_set_key_algorithm(attributes, key_alg); + return 0; + case PAL_CRYPTO_GET_KEY_ID: + attributes = va_arg(valist, psa_key_attributes_t *); + key_id_out = va_arg(valist, psa_key_id_t *); + *key_id_out = psa_get_key_id(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_LIFETIME: + attributes = va_arg(valist, psa_key_attributes_t *); + key_lifetime_out = va_arg(valist, psa_key_lifetime_t *); + *key_lifetime_out = psa_get_key_lifetime(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_USAGE_FLAGS: + attributes = va_arg(valist, psa_key_attributes_t *); + usage_out = va_arg(valist, psa_key_usage_t *); + *usage_out = psa_get_key_usage_flags(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_ALGORITHM: + attributes = va_arg(valist, psa_key_attributes_t *); + key_alg_out = va_arg(valist, psa_algorithm_t *); + *key_alg_out = psa_get_key_algorithm(attributes); + return 0; + case PAL_CRYPTO_GET_KEY_BITS: + attributes = va_arg(valist, psa_key_attributes_t *); + length = va_arg(valist, size_t *); + *length = psa_get_key_bits(attributes); + return 0; + case PAL_CRYPTO_DESTROY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_destroy_key(key_handle); + case PAL_CRYPTO_HASH_SETUP: + hash_operation = va_arg(valist, psa_hash_operation_t*); + alg = va_arg(valist, psa_algorithm_t); + return psa_hash_setup(hash_operation, alg); + case PAL_CRYPTO_HASH_UPDATE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_update(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_VERIFY: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_verify(hash_operation, buffer, size); + case PAL_CRYPTO_HASH_FINISH: + hash_operation = va_arg(valist, psa_hash_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_finish(hash_operation, buffer, size, length); + case PAL_CRYPTO_HASH_ABORT: + hash_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_abort(hash_operation); +#ifdef NOT_SUPPORTED + case PAL_CRYPTO_HASH_COMPUTE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_hash_compute(alg, plaintext, plaintext_size, buffer, size, length); + case PAL_CRYPTO_HASH_COMPARE: + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_hash_compare(alg, plaintext, plaintext_size, buffer, size); +#endif + case PAL_CRYPTO_HASH_CLONE: + hash_operation = va_arg(valist, psa_hash_operation_t*); + target_operation = va_arg(valist, psa_hash_operation_t*); + return psa_hash_clone(hash_operation, target_operation); + case PAL_CRYPTO_GENERATE_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_generate_key(attributes, handle); + case PAL_CRYPTO_AEAD_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_encrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, plaintext, size, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_AEAD_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + nonce = va_arg(valist, const uint8_t *); + nonce_length = va_arg(valist, size_t); + additional_data = va_arg(valist, const uint8_t *); + additional_data_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_decrypt(key_handle, alg, nonce, nonce_length, additional_data, + additional_data_length, ciphertext, ciphertext_size, plaintext, size, length); +#ifdef NO_SUPPORT + case PAL_CRYPTO_AEAD_ENCRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_encrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_DECRYPT_SETUP: + aead_operation = va_arg(valist, psa_aead_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_aead_decrypt_setup(aead_operation, key_handle, alg); + case PAL_CRYPTO_AEAD_GENERATE_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_aead_generate_nonce(aead_operation, buffer, size, length); + case PAL_CRYPTO_AEAD_SET_NONCE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_set_nonce(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_SET_LENGTHS: + aead_operation = va_arg(valist, psa_aead_operation_t *); + size = va_arg(valist, size_t); + plaintext_size = va_arg(valist, size_t); + return psa_aead_set_lengths(aead_operation, size, plaintext_size); + case PAL_CRYPTO_AEAD_UPDATE_AD: + aead_operation = va_arg(valist, psa_aead_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_update_ad(aead_operation, buffer, size); + case PAL_CRYPTO_AEAD_UPDATE: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_aead_update(aead_operation, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_AEAD_FINISH: + aead_operation = va_arg(valist, psa_aead_operation_t *); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + tag_length = (size_t *)va_arg(valist, size_t*); + return psa_aead_finish(aead_operation, ciphertext, ciphertext_size, length, buffer, + size, tag_length); + case PAL_CRYPTO_AEAD_VERIFY: + aead_operation = va_arg(valist, psa_aead_operation_t *); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_aead_verify(aead_operation, plaintext, plaintext_size, length, buffer, size); + case PAL_CRYPTO_AEAD_ABORT: + aead_operation = va_arg(valist, psa_aead_operation_t *); + return psa_aead_abort(aead_operation); +#endif + case PAL_CRYPTO_MAC_SIGN_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_sign_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_UPDATE: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_update(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_SIGN_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = (size_t *)va_arg(valist, size_t*); + return psa_mac_sign_finish(mac_operation, buffer, size, length); + case PAL_CRYPTO_MAC_VERIFY_SETUP: + mac_operation = va_arg(valist, psa_mac_operation_t*); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_mac_verify_setup(mac_operation, key_handle, alg); + case PAL_CRYPTO_MAC_VERIFY_FINISH: + mac_operation = va_arg(valist, psa_mac_operation_t*); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_mac_verify_finish(mac_operation, buffer, size); + case PAL_CRYPTO_MAC_ABORT: + mac_operation = va_arg(valist, psa_mac_operation_t*); + return psa_mac_abort(mac_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_MAC_COMPUTE: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_mac_compute(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size, length); + case PAL_CRYPTO_MAC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t*); + plaintext_size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t*); + ciphertext_size = va_arg(valist, size_t); + return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_encrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_ASYMMTERIC_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + salt = va_arg(valist, const uint8_t *); + salt_length = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_decrypt(key_handle, alg, plaintext, size, salt, salt_length, + ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ENCRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_encrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_DECRYPT_SETUP: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + return psa_cipher_decrypt_setup(cipher_operation, key_handle, alg); + case PAL_CRYPTO_CIPHER_GENERATE_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_generate_iv(cipher_operation, buffer, size, length); + case PAL_CRYPTO_CIPHER_SET_IV: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_cipher_set_iv(cipher_operation, buffer, size); + case PAL_CRYPTO_CIPHER_UPDATE: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_update(cipher_operation, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_FINISH: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_finish(cipher_operation, ciphertext, ciphertext_size, length); + case PAL_CRYPTO_CIPHER_ABORT: + cipher_operation = va_arg(valist, psa_cipher_operation_t *); + return psa_cipher_abort(cipher_operation); +#ifdef NO_SUPPORT + case PAL_CRYPTO_CIPHER_ENCRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_encrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_CIPHER_DECRYPT: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + plaintext = va_arg(valist, uint8_t *); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_cipher_decrypt(key_handle, alg, plaintext, size, ciphertext, ciphertext_size, + length); +#endif + case PAL_CRYPTO_ASYMMTERIC_SIGN: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_asymmetric_sign(key_handle, alg, buffer, size, ciphertext, ciphertext_size, + length); + case PAL_CRYPTO_ASYMMTERIC_VERIFY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + alg = va_arg(valist, psa_algorithm_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + ciphertext = va_arg(valist, uint8_t *); + ciphertext_size = va_arg(valist, size_t); + return psa_asymmetric_verify(key_handle, alg, buffer, size, ciphertext, + ciphertext_size); + case PAL_CRYPTO_RAW_KEY_AGREEMENT: + alg = va_arg(valist, psa_algorithm_t); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + length = va_arg(valist, size_t*); + return psa_raw_key_agreement(alg, key_handle, peer, peer_length, buffer, size, length); + case PAL_CRYPTO_COPY_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + attributes = va_arg(valist, psa_key_attributes_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_copy_key(key_handle, attributes, handle); + case PAL_CRYPTO_KEY_DERIVATION_SETUP: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + alg = va_arg(valist, psa_algorithm_t); + return psa_key_derivation_setup(derive_operation, alg); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_input_bytes(derive_operation, step, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_key_derivation_input_key(derive_operation, step, key_handle); + case PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + step = (psa_key_derivation_step_t)va_arg(valist, int); + key_handle = (psa_key_handle_t)va_arg(valist, int); + peer = va_arg(valist, uint8_t*); + peer_length = va_arg(valist, size_t); + return psa_key_derivation_key_agreement(derive_operation, step, key_handle, peer, + peer_length); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + buffer = va_arg(valist, uint8_t*); + size = va_arg(valist, size_t); + return psa_key_derivation_output_bytes(derive_operation, buffer, size); + case PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY: + attributes = va_arg(valist, psa_key_attributes_t *); + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_key_derivation_output_key(attributes, derive_operation, handle); + case PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + size = va_arg(valist, size_t); + return psa_key_derivation_set_capacity(derive_operation, size); + case PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + length = va_arg(valist, size_t *); + return psa_key_derivation_get_capacity(derive_operation, length); + case PAL_CRYPTO_KEY_DERIVATION_ABORT: + derive_operation = va_arg(valist, psa_key_derivation_operation_t *); + return psa_key_derivation_abort(derive_operation); + case PAL_CRYPTO_OPEN_KEY: + key_id = va_arg(valist, psa_key_id_t); + handle = (psa_key_handle_t *)va_arg(valist, int *); + return psa_open_key(key_id, handle); + case PAL_CRYPTO_CLOSE_KEY: + key_handle = (psa_key_handle_t)va_arg(valist, int); + return psa_close_key(key_handle); + case PAL_CRYPTO_FREE: + for (i = 0; i < PAL_KEY_SLOT_COUNT; i++) + psa_destroy_key(i); + return 0; + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h new file mode 100644 index 00000000..83071cea --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_intf.h @@ -0,0 +1,103 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_CRYPTO_INTF_H_ +#define _PAL_CRYPTO_INTF_H_ + +#include "pal_common.h" + +enum crypto_function_code { + PAL_CRYPTO_INIT = 0x1, + PAL_CRYPTO_GENERATE_RANDOM = 0x2, + PAL_CRYPTO_IMPORT_KEY = 0x3, + PAL_CRYPTO_EXPORT_KEY = 0x4, + PAL_CRYPTO_EXPORT_PUBLIC_KEY = 0x5, + PAL_CRYPTO_DESTROY_KEY = 0x6, + PAL_CRYPTO_HASH_SETUP = 0x7, + PAL_CRYPTO_HASH_UPDATE = 0x8, + PAL_CRYPTO_HASH_VERIFY = 0x9, + PAL_CRYPTO_HASH_FINISH = 0xA, + PAL_CRYPTO_HASH_ABORT = 0xB, + PAL_CRYPTO_GENERATE_KEY = 0xC, + PAL_CRYPTO_AEAD_ENCRYPT = 0xD, + PAL_CRYPTO_AEAD_DECRYPT = 0xE, + PAL_CRYPTO_MAC_SIGN_SETUP = 0xF, + PAL_CRYPTO_MAC_UPDATE = 0x10, + PAL_CRYPTO_MAC_SIGN_FINISH = 0x11, + PAL_CRYPTO_MAC_VERIFY_SETUP = 0x12, + PAL_CRYPTO_MAC_VERIFY_FINISH = 0x13, + PAL_CRYPTO_MAC_ABORT = 0x14, + PAL_CRYPTO_ASYMMTERIC_ENCRYPT = 0x15, + PAL_CRYPTO_ASYMMTERIC_DECRYPT = 0x16, + PAL_CRYPTO_CIPHER_ENCRYPT_SETUP = 0x17, + PAL_CRYPTO_CIPHER_DECRYPT_SETUP = 0x18, + PAL_CRYPTO_CIPHER_GENERATE_IV = 0x19, + PAL_CRYPTO_CIPHER_SET_IV = 0x1A, + PAL_CRYPTO_CIPHER_UPDATE = 0x1B, + PAL_CRYPTO_CIPHER_FINISH = 0x1C, + PAL_CRYPTO_CIPHER_ABORT = 0x1D, + PAL_CRYPTO_ASYMMTERIC_SIGN = 0x1E, + PAL_CRYPTO_ASYMMTERIC_VERIFY = 0x1F, + PAL_CRYPTO_COPY_KEY = 0x20, + PAL_CRYPTO_SET_KEY_TYPE = 0x21, + PAL_CRYPTO_SET_KEY_BITS = 0x22, + PAL_CRYPTO_GET_KEY_ATTRIBUTES = 0x23, + PAL_CRYPTO_GET_KEY_TYPE = 0x24, + PAL_CRYPTO_SET_KEY_USAGE_FLAGS = 0x25, + PAL_CRYPTO_RESET_KEY_ATTRIBUTES = 0x26, + PAL_CRYPTO_SET_KEY_ID = 0x27, + PAL_CRYPTO_SET_KEY_LIFETIME = 0x28, + PAL_CRYPTO_SET_KEY_ALGORITHM = 0x29, + PAL_CRYPTO_GET_KEY_ID = 0x2A, + PAL_CRYPTO_GET_KEY_LIFETIME = 0x2B, + PAL_CRYPTO_GET_KEY_USAGE_FLAGS = 0x2C, + PAL_CRYPTO_GET_KEY_ALGORITHM = 0x2D, + PAL_CRYPTO_GET_KEY_BITS = 0x2E, + PAL_CRYPTO_HASH_COMPUTE = 0x2F, + PAL_CRYPTO_HASH_COMPARE = 0x30, + PAL_CRYPTO_KEY_DERIVATION_SETUP = 0x31, + PAL_CRYPTO_KEY_DERIVATION_ABORT = 0x32, + PAL_CRYPTO_RAW_KEY_AGREEMENT = 0x33, + PAL_CRYPTO_KEY_DERIVATION_INPUT_BYTES = 0x34, + PAL_CRYPTO_KEY_DERIVATION_INPUT_KEY = 0x35, + PAL_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT = 0x36, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES = 0x37, + PAL_CRYPTO_KEY_DERIVATION_OUTPUT_KEY = 0x38, + PAL_CRYPTO_KEY_DERIVATION_SET_CAPACITY = 0x39, + PAL_CRYPTO_KEY_DERIVATION_GET_CAPACITY = 0x3A, + PAL_CRYPTO_HASH_CLONE = 0x3B, + PAL_CRYPTO_MAC_COMPUTE = 0x3C, + PAL_CRYPTO_MAC_VERIFY = 0x3D, + PAL_CRYPTO_CIPHER_ENCRYPT = 0x3F, + PAL_CRYPTO_CIPHER_DECRYPT = 0x40, + PAL_CRYPTO_OPEN_KEY = 0x41, + PAL_CRYPTO_CLOSE_KEY = 0x42, + PAL_CRYPTO_AEAD_ENCRYPT_SETUP = 0x43, + PAL_CRYPTO_AEAD_DECRYPT_SETUP = 0x44, + PAL_CRYPTO_AEAD_GENERATE_NONCE = 0x45, + PAL_CRYPTO_AEAD_SET_NONCE = 0x46, + PAL_CRYPTO_AEAD_SET_LENGTHS = 0X47, + PAL_CRYPTO_AEAD_UPDATE_AD = 0x48, + PAL_CRYPTO_AEAD_UPDATE = 0x49, + PAL_CRYPTO_AEAD_FINISH = 0x4A, + PAL_CRYPTO_AEAD_VERIFY = 0x4B, + PAL_CRYPTO_AEAD_ABORT = 0x4C, + PAL_CRYPTO_FREE = 0xFE, +}; + +int32_t pal_crypto_function(int type, va_list valist); +#endif /* _PAL_CRYPTO_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c new file mode 100644 index 00000000..e7ec66b4 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.c @@ -0,0 +1,344 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include "pal_attestation_crypto.h" + +static uint32_t public_key_registered; +static psa_key_handle_t public_key_handle; + +static inline struct q_useful_buf_c useful_buf_head(struct q_useful_buf_c buf, + size_t amount) +{ + return UsefulBuf_Head(buf, amount); +} + +static psa_algorithm_t cose_hash_alg_id_to_psa(int32_t cose_hash_alg_id) +{ + psa_algorithm_t status; + + switch (cose_hash_alg_id) + { + case COSE_ALG_SHA256_PROPRIETARY: + status = PSA_ALG_SHA_256; + break; + default: + status = PSA_ALG_MD4; + break; + } + + return status; +} + +static int32_t hash_alg_id_from_sig_alg_id(int32_t cose_sig_alg_id) +{ + switch (cose_sig_alg_id) + { + case COSE_ALGORITHM_ES256: + return COSE_ALG_SHA256_PROPRIETARY; + default: + return INT32_MAX; + } +} + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id) +{ + psa_algorithm_t psa_alg; + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Map the algorithm ID */ + psa_alg = cose_hash_alg_id_to_psa(cose_hash_alg_id); + + /* Actually do the hash set up */ + status = psa_hash_setup(psa_hash, psa_alg); + + return status; + +} + +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash) +{ + if (data_to_hash.ptr == NULL) { + /* No data was passed in to be hashed indicating the mode of use is + * the computation of the size of hash. This mode is hashing is used + * by t_cose when it is requested to compute the size of the signed + * data it might compute, which is in turn used to compute the + * size of a would be token. When computing the size, the size + * like this, there is nothing to do in update() + */ + return; + } + + /* Actually hash the data */ + psa_hash_update(psa_hash, data_to_hash.ptr, data_to_hash.len); +} + +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + + /* Actually finish up the hash */ + status = psa_hash_finish(psa_hash, buffer_to_hold_result.ptr, + buffer_to_hold_result.len, &(hash_result->len)); + hash_result->ptr = buffer_to_hold_result.ptr; + + return status; + +} + +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash) +{ + psa_status_t status = PSA_ERROR_GENERIC_ERROR; + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + status = pal_cose_crypto_hash_start(&psa_hash, COSE_ALG_SHA256_PROPRIETARY); + if (status != PSA_SUCCESS) + goto Done; + + pal_cose_crypto_hash_update(&psa_hash, bytes_to_hash); + + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + if (status != PSA_SUCCESS) + goto Done; +Done: + return status; +} + +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload) +{ + uint32_t status; + QCBOREncodeContext cbor_encode_ctx; + struct q_useful_buf_c tbs_first_part; + QCBORError qcbor_result; + int32_t hash_alg_id; + UsefulBuf_MAKE_STACK_UB (buffer_for_TBS_first_part, T_COSE_SIZE_OF_TBS); + psa_hash_operation_t psa_hash = PSA_HASH_OPERATION_INIT; + + /* This builds the CBOR-format to-be-signed bytes */ + QCBOREncode_Init(&cbor_encode_ctx, buffer_for_TBS_first_part); + QCBOREncode_OpenArray(&cbor_encode_ctx); + + /* context */ + QCBOREncode_AddSZString(&cbor_encode_ctx, COSE_SIG_CONTEXT_STRING_SIGNATURE1); + + /* body_protected */ + QCBOREncode_AddBytes(&cbor_encode_ctx, protected_headers); + + /* sign_protected is not used for Sign1 */ + /* external_aad */ + QCBOREncode_AddBytes(&cbor_encode_ctx, NULL_USEFUL_BUF_C); + + /* The short fake payload. */ + QCBOREncode_AddBytesLenOnly(&cbor_encode_ctx, payload); + QCBOREncode_CloseArray(&cbor_encode_ctx); + + /* Get the result and convert it to struct q_useful_buf_c representation */ + qcbor_result = QCBOREncode_Finish(&cbor_encode_ctx, &tbs_first_part); + if (qcbor_result) + { + /* Mainly means that the protected_headers were too big + * (which should never happen) + */ + status = PAL_ATTEST_ERR_SIGN_STRUCT; + goto Done; + } + + /* Start the hashing */ + hash_alg_id = hash_alg_id_from_sig_alg_id(cose_alg_id); + + /* Don't check hash_alg_id for failure. pal_cose_crypto_hash_start() + * will handle it properly + */ + status = pal_cose_crypto_hash_start(&psa_hash, hash_alg_id); + if (status) + goto Done; + + /* This is hashing of the first part, all the CBOR + * except the payload. + */ + pal_cose_crypto_hash_update(&psa_hash, useful_buf_head(tbs_first_part, tbs_first_part.len)); + + /* Hash the payload, the second part. */ + pal_cose_crypto_hash_update(&psa_hash, payload); + + /* Finish the hash and set up to return it */ + status = pal_cose_crypto_hash_finish(&psa_hash, buffer_for_hash, hash); + +Done: + return status; +} + +static int32_t pal_attest_get_public_key(uint8_t *public_key_buff, size_t public_key_buf_size, + size_t *public_key_len, psa_ecc_curve_t *elliptic_curve_type) +{ + int32_t status = PAL_ATTEST_ERROR; + +#ifdef PLATFORM_OVERRIDE_ATTEST_PK + if (public_key_buf_size < (attest_key.pubx_key_size + attest_key.puby_key_size + 1)) + return PAL_ATTEST_ERR_SMALL_BUFFER; + + *public_key_len = (attest_key.pubx_key_size + attest_key.puby_key_size + 1); + *elliptic_curve_type = PSA_ECC_CURVE_SECP256R1; + memcpy(public_key_buff, (void *)&attest_public_key, *public_key_len); + status = PSA_SUCCESS; +#else + status = tfm_initial_attest_get_public_key(public_key_buff, + public_key_buf_size, + public_key_len, + elliptic_curve_type); +#endif + + return status; +} + +static uint32_t pal_import_attest_key(psa_algorithm_t key_alg) +{ + psa_status_t status = PAL_ATTEST_ERROR; + psa_key_usage_t usage = PSA_KEY_USAGE_VERIFY; + psa_ecc_curve_t ecc_curve; + psa_key_type_t attest_key_type; + size_t public_key_size; + uint8_t public_key_buff[ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH] = {0}; + +#if defined(CRYPTO_VERSION_BETA1) || defined(CRYPTO_VERSION_BETA2) + psa_key_policy_t policy; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Setup the key policy for public key */ + policy = psa_key_policy_init(); + psa_key_policy_set_usage(&policy, usage, key_alg); + + status = psa_allocate_key(&public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_set_key_policy(public_key_handle, &policy); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + /* Import the public key */ + status = psa_import_key(public_key_handle, + attest_key_type, + public_key_buff, + public_key_size); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } + +#elif defined(CRYPTO_VERSION_BETA3) + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!public_key_registered) + { + status = pal_attest_get_public_key(public_key_buff, + sizeof(public_key_buff), + &public_key_size, + &ecc_curve); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + if (ecc_curve == USHRT_MAX) + return PAL_ATTEST_ERROR; + + /* Set key type for public key */ + attest_key_type = PSA_KEY_TYPE_ECC_PUBLIC_KEY(ecc_curve); + + /* Set the attributes for the public key */ + psa_set_key_type(&attributes, attest_key_type); + psa_set_key_bits(&attributes, public_key_size); + psa_set_key_usage_flags(&attributes, usage); + psa_set_key_algorithm(&attributes, key_alg); + psa_set_key_bits(&attributes, 0); + + /* Import the public key */ + status = psa_import_key(&attributes, + public_key_buff, + public_key_size, + &public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 1; + } +#endif + + return status; +} + +static uint32_t pal_destroy_attest_key(void) +{ + psa_status_t status; + + if (!public_key_registered) + return PAL_ATTEST_ERR_KEY_FAIL; + + status = psa_destroy_key(public_key_handle); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + public_key_registered = 0; + + return PAL_ATTEST_SUCCESS; +} + +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, + struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature) +{ + int32_t status = PAL_ATTEST_ERROR; + psa_algorithm_t key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); + + /* Register the attestation public key */ + status = pal_import_attest_key(key_alg); + if (status != PAL_ATTEST_SUCCESS) + return status; + + /* Verify the signature */ + status = psa_asymmetric_verify(public_key_handle, + key_alg, token_hash.ptr, token_hash.len, + signature.ptr, signature.len); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_SIGNATURE_FAIL; + + /* Unregister the attestation public key */ + status = pal_destroy_attest_key(); + if (status != PSA_SUCCESS) + return PAL_ATTEST_ERR_KEY_FAIL; + + return PAL_ATTEST_SUCCESS; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h new file mode 100644 index 00000000..9ca96375 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_crypto.h @@ -0,0 +1,88 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_CRYPTO_H_ +#define _PAL_ATTESTATION_CRYPTO_H_ + +#include "pal_attestation_eat.h" + +#define ATTEST_PUBLIC_KEY_SLOT 4 +#define ECC_CURVE_SECP256R1_PULBIC_KEY_LENGTH (1 + 2 * PSA_BITS_TO_BYTES(256)) + +typedef struct { + uint8_t *pubx_key; + size_t pubx_key_size; + uint8_t *puby_key; + size_t puby_key_size; +} ecc_key_t; + +struct ecc_public_key_t { + const uint8_t a; + uint8_t public_key[]; /* X-coordinate || Y-coordinate */ +}; + +static const struct ecc_public_key_t attest_public_key = { + /* Constant byte */ + 0x04, + /* X-coordinate */ + {0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F, + /* Y-coordinate */ + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64}, +}; + +static const uint8_t initial_attestation_public_x_key[] = { + 0x79, 0xEB, 0xA9, 0x0E, 0x8B, 0xF4, 0x50, 0xA6, + 0x75, 0x15, 0x76, 0xAD, 0x45, 0x99, 0xB0, 0x7A, + 0xDF, 0x93, 0x8D, 0xA3, 0xBB, 0x0B, 0xD1, 0x7D, + 0x00, 0x36, 0xED, 0x49, 0xA2, 0xD0, 0xFC, 0x3F +}; + +static const uint8_t initial_attestation_public_y_key[] = { + 0xBF, 0xCD, 0xFA, 0x89, 0x56, 0xB5, 0x68, 0xBF, + 0xDB, 0x86, 0x73, 0xE6, 0x48, 0xD8, 0xB5, 0x8D, + 0x92, 0x99, 0x55, 0xB1, 0x4A, 0x26, 0xC3, 0x08, + 0x0F, 0x34, 0x11, 0x7D, 0x97, 0x1D, 0x68, 0x64 +}; + +/* Initialize the structure with given public key */ +static const ecc_key_t attest_key = { + (uint8_t *)initial_attestation_public_x_key, + sizeof(initial_attestation_public_x_key), + (uint8_t *)initial_attestation_public_y_key, + sizeof(initial_attestation_public_y_key) +}; + +int32_t pal_cose_crypto_hash_start(psa_hash_operation_t *psa_hash, int32_t cose_hash_alg_id); +void pal_cose_crypto_hash_update(psa_hash_operation_t *psa_hash, + struct q_useful_buf_c data_to_hash); +int32_t pal_cose_crypto_hash_finish(psa_hash_operation_t *psa_hash, + struct q_useful_buf buffer_to_hold_result, + struct q_useful_buf_c *hash_result); +int pal_create_sha256(struct q_useful_buf_c bytes_to_hash, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash); +uint32_t pal_compute_hash(int32_t cose_alg_id, struct q_useful_buf buffer_for_hash, + struct q_useful_buf_c *hash, struct q_useful_buf_c protected_headers, + struct q_useful_buf_c payload); +uint32_t pal_crypto_pub_key_verify(int32_t cose_algorithm_id, struct q_useful_buf_c token_hash, + struct q_useful_buf_c signature); +#endif /* _PAL_ATTESTATION_CRYPTO_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h new file mode 100644 index 00000000..fa61d6a3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_eat.h @@ -0,0 +1,80 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_EAT_H_ +#define _PAL_ATTESTATION_EAT_H_ + +#include "qcbor.h" +#include "pal_common.h" + +#define PAL_ATTEST_MIN_ERROR 30 + +#define COSE_ALGORITHM_ES256 -7 +#define COSE_ALG_SHA256_PROPRIETARY -72000 + +#define USEFUL_BUF_MAKE_STACK_UB UsefulBuf_MAKE_STACK_UB + +#define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" + +/* Private value. Intentionally not documented for Doxygen. + * This is the size allocated for the encoded protected headers. It + * needs to be big enough for make_protected_header() to succeed. It + * currently sized for one header with an algorithm ID up to 32 bits + * long -- one byte for the wrapping map, one byte for the label, 5 + * bytes for the ID. If this is made accidentially too small, QCBOR will + * only return an error, and not overrun any buffers. + * + * 9 extra bytes are added, rounding it up to 16 total, in case some + * other protected header is to be added. + */ +#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9) + +/** + * This is the size of the first part of the CBOR encoded TBS + * bytes. It is around 20 bytes. See create_tbs_hash(). + */ +#define T_COSE_SIZE_OF_TBS \ + 1 + /* For opening the array */ \ + sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ + 2 + /* Overhead for encoding string */ \ + T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ + 1 /* size of a NULL bstr */ \ + ) +#define NULL_USEFUL_BUF_C NULLUsefulBufC + +enum attestation_error_code { + PAL_ATTEST_SUCCESS = 0, + PAL_ATTEST_TOKEN_ERR_CBOR_FORMATTING = PAL_ATTEST_MIN_ERROR, + PAL_ATTEST_TOKEN_CHALLENGE_MISMATCH, + PAL_ATTEST_TOKEN_NOT_SUPPORTED, + PAL_ATTEST_TOKEN_NOT_ALL_MANDATORY_CLAIMS, + PAL_ATTEST_HASH_LENGTH_MISMATCH, + PAL_ATTEST_HASH_MISMATCH, + PAL_ATTEST_HASH_FAIL, + PAL_ATTEST_HASH_UNSUPPORTED, + PAL_ATTEST_HASH_BUFFER_SIZE, + PAL_ATTEST_ERR_PROTECTED_HEADERS, + PAL_ATTEST_ERR_SIGN_STRUCT, + PAL_ATTEST_ERR_KEY_FAIL, + PAL_ATTEST_ERR_SIGNATURE_FAIL, + PAL_ATTEST_ERR_CBOR_STRUCTURE, + PAL_ATTEST_ERR_SMALL_BUFFER, + PAL_ATTEST_ERROR, +}; + +#endif /* _PAL_ATTESTATION_EAT_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_empty_intf.c new file mode 100644 index 00000000..99c94667 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c new file mode 100644 index 00000000..00bff8b5 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c @@ -0,0 +1,56 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_attestation_intf.h" + +/** + @brief - This API will call the requested attestation function + @param - type : function code + valist : variable argument list + @return - error status +**/ +int32_t pal_attestation_function(int type, va_list valist) +{ + uint8_t *challenge, *token; + size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + + switch (type) + { + case PAL_INITIAL_ATTEST_GET_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + token_buffer_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token(challenge, challenge_size, token, token_buffer_size, + token_size); + case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE: + challenge_size = va_arg(valist, size_t); + token_size = va_arg(valist, size_t*); + return psa_initial_attest_get_token_size(challenge_size, token_size); + case PAL_INITIAL_ATTEST_VERIFY_TOKEN: + challenge = va_arg(valist, uint8_t*); + challenge_size = va_arg(valist, size_t); + token = va_arg(valist, uint8_t*); + verify_token_size = va_arg(valist, size_t); + return pal_initial_attest_verify_token(challenge, challenge_size, + token, verify_token_size); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h new file mode 100644 index 00000000..235d578d --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.h @@ -0,0 +1,32 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_ATTESTATION_INTF_H_ +#define _PAL_ATTESTATION_INTF_H_ + +#include "pal_attestation_crypto.h" + +enum attestation_function_code { + PAL_INITIAL_ATTEST_GET_TOKEN = 0x1, + PAL_INITIAL_ATTEST_GET_TOKEN_SIZE = 0x2, + PAL_INITIAL_ATTEST_VERIFY_TOKEN = 0x3, + PAL_INITIAL_ATTEST_COMPUTE_HASH = 0x4, + PAL_INITIAL_ATTEST_VERIFY_WITH_PK = 0x5, +}; + +int32_t pal_attestation_function(int type, va_list valist); +#endif /* _PAL_ATTESTATION_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c new file mode 100644 index 00000000..fa0ceb3b --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c new file mode 100644 index 00000000..31269ee3 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c @@ -0,0 +1,62 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_internal_trusted_storage_intf.h" + +/** + @brief - This API will call the requested internal trusted storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_its_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t its_create_flags; + struct psa_storage_info_t *its_p_info; + + switch (type) + { + case PAL_ITS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + its_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_its_set(uid, data_size, p_write_data, its_create_flags); + case PAL_ITS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_its_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_ITS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + its_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_its_get_info(uid, its_p_info); + case PAL_ITS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_its_remove(uid); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h new file mode 100644 index 00000000..82d0ccf4 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.h @@ -0,0 +1,31 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ +#define _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum its_function_code { + PAL_ITS_SET = 0x1, + PAL_ITS_GET = 0x2, + PAL_ITS_GET_INFO = 0x3, + PAL_ITS_REMOVE = 0x4, +}; + +uint32_t pal_its_function(int type, va_list valist); +#endif /* _PAL_INTERNAL_TRUSTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_empty_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_empty_intf.c new file mode 100644 index 00000000..bfd4b470 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_empty_intf.c @@ -0,0 +1,30 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#include +#include "pal_common.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + return PAL_STATUS_ERROR; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c new file mode 100644 index 00000000..cc010272 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.c @@ -0,0 +1,77 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + + +#include "pal_protected_storage_intf.h" + +/** + @brief - This API will call the requested protected storage function + @param - type : function code + valist : variable argument list + @return - error status +**/ +uint32_t pal_ps_function(int type, va_list valist) +{ + psa_storage_uid_t uid; + uint32_t data_size, size, offset; + const void *p_write_data; + void *p_read_data; + size_t *p_data_length; + psa_storage_create_flags_t ps_create_flags; + struct psa_storage_info_t *ps_p_info; + + switch (type) + { + case PAL_PS_SET: + uid = va_arg(valist, psa_storage_uid_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_set(uid, data_size, p_write_data, ps_create_flags); + case PAL_PS_GET: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_read_data = va_arg(valist, void*); + p_data_length = va_arg(valist, size_t*); + return psa_ps_get(uid, offset, data_size, p_read_data, p_data_length); + case PAL_PS_GET_INFO: + uid = va_arg(valist, psa_storage_uid_t); + ps_p_info = va_arg(valist, struct psa_storage_info_t*); + return psa_ps_get_info(uid, ps_p_info); + case PAL_PS_REMOVE: + uid = va_arg(valist, psa_storage_uid_t); + return psa_ps_remove(uid); + case PAL_PS_CREATE: + uid = va_arg(valist, psa_storage_uid_t); + size = va_arg(valist, uint32_t); + ps_create_flags = va_arg(valist, psa_storage_create_flags_t); + return psa_ps_create(uid, size, ps_create_flags); + case PAL_PS_SET_EXTENDED: + uid = va_arg(valist, psa_storage_uid_t); + offset = va_arg(valist, uint32_t); + data_size = va_arg(valist, uint32_t); + p_write_data = va_arg(valist, const void*); + return psa_ps_set_extended(uid, offset, data_size, p_write_data); + case PAL_PS_GET_SUPPORT: + return psa_ps_get_support(); + default: + return PAL_STATUS_UNSUPPORTED_FUNC; + } + + return PAL_STATUS_UNSUPPORTED_FUNC; +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.h new file mode 100644 index 00000000..53d7c6cd --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/protected_storage/pal_protected_storage_intf.h @@ -0,0 +1,34 @@ +/** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +**/ + +#ifndef _PAL_PROTECTED_STORAGE_INTF_H_ +#define _PAL_PROTECTED_STORAGE_INTF_H_ + +#include "pal_common.h" + +enum ps_function_code { + PAL_PS_SET = 0x1, + PAL_PS_GET = 0x2, + PAL_PS_GET_INFO = 0x3, + PAL_PS_REMOVE = 0x4, + PAL_PS_CREATE = 0x5, + PAL_PS_SET_EXTENDED = 0x6, + PAL_PS_GET_SUPPORT = 0x7, +}; + +uint32_t pal_ps_function(int type, va_list valist); +#endif /* _PAL_PROTECTED_STORAGE_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.c new file mode 100644 index 00000000..5c6b4874 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.c @@ -0,0 +1,131 @@ + /** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#include "pal_driver_intf.h" + +/** + @brief - This function initializes the UART + @param - uart base addr + @return - void +**/ +void pal_uart_init(uint32_t uart_base_addr) +{ + pal_uart_pl011_init(uart_base_addr); +} + +/** + @brief - This function parses the input string and writes bytes into UART TX FIFO + @param - str : Input String + - data : Value for format specifier +**/ + +void pal_print(char *str, int32_t data) +{ + pal_uart_pl011_print(str, data); +} + + +/** + @brief - Writes into given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_write(base, offset, buffer, size); +} + +/** + @brief - Reads from given non-volatile address. + @param - base : Base address of nvmem + offset : Offset + buffer : Pointer to source address + size : Number of bytes + @return - 1/0 +**/ +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size) +{ + return nvmem_read(base, offset, buffer, size); +} + + +/** + @brief - Initializes an hardware watchdog timer + @param - base_addr : Base address of the watchdog module + - time_us : Time in micro seconds + - timer_tick_us : Number of ticks per micro second + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us) +{ + return pal_wd_cmsdk_init(base_addr, time_us, timer_tick_us); + +} + +/** + @brief - Enables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_enable(addr_t base_addr) +{ + return pal_wd_cmsdk_enable(base_addr); +} + +/** + @brief - Disables a hardware watchdog timer + @param - base_addr : Base address of the watchdog module + @return - SUCCESS/FAILURE +**/ +int pal_wd_timer_disable(addr_t base_addr) +{ + return pal_wd_cmsdk_disable(base_addr); +} + +/** + @brief - Checks whether hardware watchdog timer is enabled + @param - base_addr : Base address of the watchdog module + @return - Enabled : 1, Disabled : 0 +**/ +int pal_wd_timer_is_enabled(addr_t base_addr) +{ + return pal_wd_cmsdk_is_enabled(base_addr); +} + +/** + @brief - Trigger interrupt for irq signal assigned to driver partition + before return to caller. + @param - void + @return - void +**/ +void pal_generate_interrupt(void) +{ + pal_uart_pl011_generate_irq(); +} + +/** + @brief - Disable interrupt that was generated using pal_generate_interrupt API. + @param - void + @return - void +**/ +void pal_disable_interrupt(void) +{ + pal_uart_pl011_disable_irq(); +} diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.h new file mode 100644 index 00000000..5153aaf0 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/spe/pal_driver_intf.h @@ -0,0 +1,35 @@ + /** @file + * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. + * SPDX-License-Identifier : Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +#ifndef _PAL_DRIVER_INTF_H_ +#define _PAL_DRIVER_INTF_H_ + +#include "pal_uart.h" +#include "pal_nvmem.h" +#include "pal_wd_cmsdk.h" + +void pal_uart_init(uint32_t uart_base_addr); +void pal_print(char *str, int32_t data); +int pal_nvmem_write(addr_t base, uint32_t offset, void *buffer, int size); +int pal_nvmem_read(addr_t base, uint32_t offset, void *buffer, int size); +int pal_wd_timer_init(addr_t base_addr, uint32_t time_us, uint32_t timer_tick_us); +int pal_wd_timer_enable(addr_t base_addr); +int pal_wd_timer_disable(addr_t base_addr); +int pal_wd_timer_is_enabled(addr_t base_addr); +void pal_generate_interrupt(void); +void pal_disable_interrupt(void); +#endif /* _PAL_DRIVER_INTF_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cfg b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cfg new file mode 100644 index 00000000..ef21df18 --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cfg @@ -0,0 +1,78 @@ +///** @file +// * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. +// * SPDX-License-Identifier : Apache-2.0 +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +//**/ + +// UART device info +uart.num=1; +uart.0.base = 0x40106000; // MUSCA_B1_UART1_NS_BASE +uart.0.size = 0xFFF; +uart.0.intr_id = 0xFF; +uart.0.permission = TYPE_READ_WRITE; + +// Watchdog device info +watchdog.num = 1; +watchdog.0.base = 0x50081000; // MUSCA_B1_CMSDK_WATCHDOG_S_BASE +watchdog.0.size = 0xFFF; +watchdog.0.intr_id = 0xFF; +watchdog.0.permission = TYPE_READ_WRITE; +watchdog.0.num_of_tick_per_micro_sec = 0x3; //(sys_feq/1000000) +watchdog.0.timeout_in_micro_sec_low = 0xF4240; //1.0 sec : 1 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_medium = 0x1E8480; //2.0 sec : 2 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_high = 0x4C4B40; //5.0 sec : 5 * 1000 * 1000 +watchdog.0.timeout_in_micro_sec_crypto = 0x1312D00; //18.0 sec : 18 * 1000 * 1000 + +// Range of 1KB Non-volatile memory to preserve data over reset. Ex, NVRAM and FLASH +nvmem.num =1; +nvmem.0.start = 0x3003F800; +nvmem.0.end = 0x3003FBFF; +nvmem.0.permission = TYPE_READ_WRITE; + +// Miscellaneous - Test scatter info +dut.num = 1; + +// Start address of 12KB NS memory for test ELF +dut.0.ns_test_addr = 0x281E0000; + +// Start address of combine_test_binary in memory. Memory can be main memory or secondary memory. +// Size of combine_test_binary = Summation of size of each test ELF file +dut.0.ns_start_addr_of_combine_test_binary = 0x281F0000; + +// Is combine_test_binary available in RAM? +dut.0.combine_test_binary_in_ram = AVAILABLE; + + +// ################################################################### +// Following Target configuration parameters are required for IPC tests +// only. Avoid updating them if you are running dev_apis tests. +// ################################################################### + +// Assign free memory range for isolation testing. Choose the addresses +// for these memory regions such that it follows below condition: +// nspe_mmio.0.start < server_partition_mmio.0.start < driver_partition_mmio.0.start. +nspe_mmio.num=1; +nspe_mmio.0.start = 0x00200F00; +nspe_mmio.0.end = 0x00200F1F; +nspe_mmio.0.permission = TYPE_READ_WRITE; + +server_partition_mmio.num=1; +server_partition_mmio.0.start = 0x3003FC00; +server_partition_mmio.0.end = 0x3003FD00; +server_partition_mmio.0.permission = TYPE_READ_WRITE; + +driver_partition_mmio.num=1; +driver_partition_mmio.0.start = 0x3003FE00; +driver_partition_mmio.0.end = 0x3003FF00; +driver_partition_mmio.0.permission = TYPE_READ_WRITE; diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cmake b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cmake new file mode 100644 index 00000000..745ef75a --- /dev/null +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/target.cmake @@ -0,0 +1,109 @@ +#/** @file +# * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +# PAL C source files part of NSPE library +list(APPEND PAL_SRC_C_NSPE ) + +# PAL ASM source files part of NSPE library +list(APPEND PAL_SRC_ASM_NSPE ) + +# PAL C source files part of SPE library - driver partition +list(APPEND PAL_SRC_C_DRIVER_SP ) + +# PAL ASM source files part of SPE library - driver partition +list(APPEND PAL_SRC_ASM_DRIVER_SP ) + + +# Listing all the sources required for given target +if(${SUITE} STREQUAL "IPC") + list(APPEND PAL_SRC_C_NSPE + # driver functionalities are implemented as RoT-services + # and secure and non-secure clients will call to these RoT-services to get appropriate driver services. + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ipc_intf.c + ) + list(APPEND PAL_SRC_C_DRIVER_SP + # Driver files will be compiled as part of driver partition + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/spe/pal_driver_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +else() + list(APPEND PAL_SRC_C_NSPE + # driver files will be compiled as part of NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_client_api_empty_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common/pal_driver_ns_intf.c + ${PSA_ROOT_DIR}/platform/drivers/nvmem/pal_nvmem.c + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011/pal_uart.c + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.c + ) +endif() +if(${SUITE} STREQUAL "CRYPTO") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto/pal_crypto_intf.c + ) +endif() +if(${SUITE} STREQUAL "PROTECTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage/pal_protected_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage/pal_internal_trusted_storage_intf.c + ) +endif() +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") + list(APPEND PAL_SRC_C_NSPE + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_intf.c + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation/pal_attestation_crypto.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/UsefulBuf.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/ieee754.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_decode.c + ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/src/qcbor_encode.c + ) +endif() + +# Create NSPE library +add_library(${PSA_TARGET_PAL_NSPE_LIB} STATIC ${PAL_SRC_C_NSPE} ${PAL_SRC_ASM_NSPE}) + +# PSA Include directories +foreach(psa_inc_path ${PSA_INCLUDE_PATHS}) + target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE ${psa_inc_path}) +endforeach() + +list(APPEND PAL_DRIVER_INCLUDE_PATHS + ${PSA_ROOT_DIR}/platform/drivers/nvmem + ${PSA_ROOT_DIR}/platform/drivers/uart/pl011 + ${PSA_ROOT_DIR}/platform/drivers/watchdog/cmsdk +) + +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PAL_DRIVER_INCLUDE_PATHS} + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/common + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/crypto + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/protected_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/internal_trusted_storage + ${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe/initial_attestation +) + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +target_include_directories(${PSA_TARGET_PAL_NSPE_LIB} PRIVATE + ${PSA_QCBOR_INCLUDE_PATH} +) +endif() diff --git a/api-tests/tools/cmake/common/CMakeExternal.cmake b/api-tests/tools/cmake/common/CMakeExternal.cmake new file mode 100644 index 00000000..77d776b0 --- /dev/null +++ b/api-tests/tools/cmake/common/CMakeExternal.cmake @@ -0,0 +1,21 @@ +#/** @file +# * Copyright (c) 2020, Arm Limited or its affiliates. All rights reserved. +# * SPDX-License-Identifier : Apache-2.0 +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); +# * you may not use this file except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +#**/ + +if(${SUITE} STREQUAL "INITIAL_ATTESTATION") +set(PSA_QCBOR_GIT_REPO_LINK https://github.com/laurencelundblade/QCBOR.git) +set(PSA_QCBOR_GIT_REPO_TAG 42272e466a8472948bf8fca076d113b81b99f0e0) +endif() diff --git a/api-tests/val/nspe/val_entry.h b/api-tests/val/nspe/val_entry.h index f594cc4f..8011c70c 100644 --- a/api-tests/val/nspe/val_entry.h +++ b/api-tests/val/nspe/val_entry.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,8 +20,8 @@ #include "val_framework.h" -#define PSA_ACS_MAJOR_VER 0 -#define PSA_ACS_MINOR_VER 9 +#define PSA_ACS_MAJOR_VER 1 +#define PSA_ACS_MINOR_VER 0 /** @brief - PSA Test Suite C main function, does VAL init and calls test dispatcher From ff488365b396e40f9936f98c5c03471ec76894e1 Mon Sep 17 00:00:00 2001 From: Vinay Kumar Kotegowder Date: Fri, 28 Feb 2020 15:19:57 +0530 Subject: [PATCH 53/54] Platform changes : Alignment to TF-M for GMAC support. README updates. Signed-off-by: Vinay Kumar Kotegowder --- api-tests/docs/sw_requirements.md | 7 +++-- .../nspe/crypto/pal_crypto_config.h | 2 +- .../nspe/crypto/pal_crypto_config.h | 2 +- .../pal_attestation_intf.c | 29 ++++++++++++------- .../nspe/crypto/pal_crypto_config.h | 2 +- .../nspe/crypto/pal_crypto_intf.c | 1 + .../pal_attestation_intf.c | 29 ++++++++++++------- .../nspe/crypto/pal_crypto_config.h | 2 +- .../nspe/crypto/pal_crypto_intf.c | 1 + .../pal_attestation_intf.c | 29 ++++++++++++------- .../initial_attestation/pal_attestation_eat.h | 4 +-- .../pal_attestation_intf.c | 29 ++++++++++++------- .../nspe/crypto/pal_crypto_config.h | 2 +- .../nspe/crypto/pal_crypto_intf.c | 3 +- .../initial_attestation/pal_attestation_eat.h | 4 +-- .../pal_attestation_intf.c | 29 ++++++++++++------- .../nspe/crypto/pal_crypto_config.h | 2 +- .../pal_attestation_intf.c | 27 +++++++++++------ 18 files changed, 131 insertions(+), 73 deletions(-) diff --git a/api-tests/docs/sw_requirements.md b/api-tests/docs/sw_requirements.md index 7e71f5e6..e05e2532 100644 --- a/api-tests/docs/sw_requirements.md +++ b/api-tests/docs/sw_requirements.md @@ -1,11 +1,12 @@ # Architecture Test Suite Software Requirements -Before starting the test suite build, ensure that the following requirements are met:
    +Current release has been tested againt the below tools versions:
    - Host Operating System : Ubuntu 16.04, Windows 10 -- Scripting tools : Python 3.1.7 -- Compiler toolchain : GNU Arm Embedded Toolchain 6.3.1, Arm Compiler v6.7, GCC 5.4.0 32-Bit (Linux Host), MinGW 6.3.0 32-Bit (Windows Host) +- Scripting tools : Python 3.7.1 +- Host Compiler toolchain : GCC 5.4.0 32-Bit (Linux Host) or MinGW 6.3.0 32-Bit (Windows Host) +- Cross Compiler toolchain : GNU Arm Embedded Toolchain 6.3.1, 7.3.1 or Arm Compiler 6.11 - Build tools : CMake 3.10 **Note**: To compile the test suite code, at least one of the above supported compiler toolchains diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h index 4c398143..b55309b7 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h index 4c398143..b55309b7 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..dd41690e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/initial_attestation/pal_attestation_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h index 4c398143..b55309b7 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c index f2145555..7bad480c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_intf.c @@ -337,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..dd41690e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h index 4c398143..b55309b7 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c index f2145555..7bad480c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_intf.c @@ -337,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..dd41690e 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h index 56d624e3..ea2cf93a 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_eat.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -52,7 +52,7 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..dd41690e 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/initial_attestation/pal_attestation_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h index 4c398143..b55309b7 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c index 1e61e8c3..7bad480c 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -337,6 +337,7 @@ int32_t pal_crypto_function(int type, va_list valist) ciphertext_size = va_arg(valist, size_t); return psa_mac_verify(key_handle, alg, plaintext, plaintext_size, ciphertext, ciphertext_size); +#endif case PAL_CRYPTO_ASYMMTERIC_ENCRYPT: key_handle = (psa_key_handle_t)va_arg(valist, int); alg = va_arg(valist, psa_algorithm_t); diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h index 56d624e3..ea2cf93a 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_eat.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -52,7 +52,7 @@ sizeof(COSE_SIG_CONTEXT_STRING_SIGNATURE1) + /* "Signature1" */ \ 2 + /* Overhead for encoding string */ \ T_COSE_SIGN1_MAX_PROT_HEADER + /* entire protected headers */ \ - 3 * ( /* 3 NULL bstrs for fields not used */ \ + 3 * (/* 3 NULL bstrs for fields not used */ \ 1 /* size of a NULL bstr */ \ ) #define NULL_USEFUL_BUF_C NULLUsefulBufC diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c index 83c1ebda..dd41690e 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/initial_attestation/pal_attestation_intf.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h index 1518e910..c80bc664 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -262,7 +262,7 @@ * Comment macros to disable the types */ #define ARCH_TEST_CMAC -#define ARCH_TEST_GMAC +//#define ARCH_TEST_GMAC #define ARCH_TEST_HMAC /** diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c index 00bff8b5..009b79f1 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/initial_attestation/pal_attestation_intf.c @@ -26,8 +26,11 @@ **/ int32_t pal_attestation_function(int type, va_list valist) { - uint8_t *challenge, *token; - size_t challenge_size, *token_size, verify_token_size, token_buffer_size; + uint8_t *challenge, *token; + size_t challenge_size, *token_size, token_buffer_size; + int32_t cose_algorithm_id; + struct q_useful_buf buffer_for_hash; + struct q_useful_buf_c *hash, payload, protected_headers, token_hash, signature; switch (type) { @@ -43,13 +46,19 @@ int32_t pal_attestation_function(int type, va_list valist) challenge_size = va_arg(valist, size_t); token_size = va_arg(valist, size_t*); return psa_initial_attest_get_token_size(challenge_size, token_size); - case PAL_INITIAL_ATTEST_VERIFY_TOKEN: - challenge = va_arg(valist, uint8_t*); - challenge_size = va_arg(valist, size_t); - token = va_arg(valist, uint8_t*); - verify_token_size = va_arg(valist, size_t); - return pal_initial_attest_verify_token(challenge, challenge_size, - token, verify_token_size); + case PAL_INITIAL_ATTEST_COMPUTE_HASH: + cose_algorithm_id = va_arg(valist, int32_t); + buffer_for_hash = va_arg(valist, struct q_useful_buf); + hash = va_arg(valist, struct q_useful_buf_c*); + protected_headers = va_arg(valist, struct q_useful_buf_c); + payload = va_arg(valist, struct q_useful_buf_c); + return pal_compute_hash(cose_algorithm_id, buffer_for_hash, hash, + protected_headers, payload); + case PAL_INITIAL_ATTEST_VERIFY_WITH_PK: + cose_algorithm_id = va_arg(valist, int32_t); + token_hash = va_arg(valist, struct q_useful_buf_c); + signature = va_arg(valist, struct q_useful_buf_c); + return pal_crypto_pub_key_verify(cose_algorithm_id, token_hash, signature); default: return PAL_STATUS_UNSUPPORTED_FUNC; } From 0a4740bf0bb2560d02c94cb9fc89480fe2cb2913 Mon Sep 17 00:00:00 2001 From: Jaykumar Pitambarbhai Patel Date: Tue, 3 Mar 2020 16:57:20 +0530 Subject: [PATCH 54/54] Crypto: Test fixes and documentation update - Supporting key size ranges for RSA key generation - Optional suppport for ECC key for psa_asymmetric_encrypt - Passing actual buffer size for negative tests - Update failure analysis doc with github issue links --- .../dev_apis/crypto/test_c016/test_c016.c | 4 +- .../dev_apis/crypto/test_c016/test_data.h | 26 +++++----- .../dev_apis/crypto/test_c039/test_data.h | 2 + .../dev_apis/crypto/test_c043/test_data.h | 6 +-- api-tests/docs/test_failure_analysis.md | 50 +++++++++---------- .../nspe/crypto/pal_crypto_config.h | 8 ++- .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ .../nspe/crypto/pal_crypto_config.h | 6 +++ api-tests/val/common/val.h | 14 +++++- 14 files changed, 106 insertions(+), 46 deletions(-) diff --git a/api-tests/dev_apis/crypto/test_c016/test_c016.c b/api-tests/dev_apis/crypto/test_c016/test_c016.c index e7483d3e..58f847f7 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_c016.c +++ b/api-tests/dev_apis/crypto/test_c016/test_c016.c @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -98,7 +98,7 @@ int32_t psa_generate_key_test(caller_security_t caller) TEST_ASSERT_EQUAL(status, PSA_SUCCESS, TEST_CHECKPOINT_NUM(9)); /* Check the attributes of the exported key */ - TEST_ASSERT_EQUAL(length, check1[i].expected_key_length, TEST_CHECKPOINT_NUM(10)); + TEST_ASSERT_RANGE(length, check1[i].expected_range[0], check1[i].expected_range[1], TEST_CHECKPOINT_NUM(10)); /* Reset the attributes */ val->crypto_function(VAL_CRYPTO_RESET_KEY_ATTRIBUTES, &attributes); diff --git a/api-tests/dev_apis/crypto/test_c016/test_data.h b/api-tests/dev_apis/crypto/test_c016/test_data.h index c184c901..2043fff6 100644 --- a/api-tests/dev_apis/crypto/test_c016/test_data.h +++ b/api-tests/dev_apis/crypto/test_c016/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,7 +25,7 @@ typedef struct { psa_algorithm_t key_alg; size_t attr_bits; uint32_t expected_bit_length; - uint32_t expected_key_length; + uint32_t expected_range[2]; psa_status_t expected_status; } test_data; @@ -34,42 +34,42 @@ static test_data check1[] = { #ifdef ARCH_TEST_AES_128 {"Test psa_generate_key 16 Byte AES\n", 1, PSA_KEY_TYPE_AES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(AES_16B_KEY_SIZE), {AES_16B_KEY_SIZE, AES_16B_KEY_SIZE}, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_AES_192 {"Test psa_generate_key 24 Byte AES\n", 2, PSA_KEY_TYPE_AES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_24B_KEY_SIZE), - BYTES_TO_BITS(AES_24B_KEY_SIZE), AES_24B_KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(AES_24B_KEY_SIZE), {AES_24B_KEY_SIZE, AES_24B_KEY_SIZE}, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_AES_256 {"Test psa_generate_key 32 Byte AES\n", 3, PSA_KEY_TYPE_AES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_32B_KEY_SIZE), - BYTES_TO_BITS(AES_32B_KEY_SIZE), AES_32B_KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(AES_32B_KEY_SIZE), {AES_32B_KEY_SIZE, AES_32B_KEY_SIZE}, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_1KEY {"Test psa_generate_key with DES 64 bit key\n", 4, PSA_KEY_TYPE_DES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES_8B_KEY_SIZE), - BYTES_TO_BITS(DES_8B_KEY_SIZE), DES_8B_KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(DES_8B_KEY_SIZE), {DES_8B_KEY_SIZE, DES_8B_KEY_SIZE}, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_2KEY {"Test psa_generate_key with Triple DES 2-Key\n", 5, PSA_KEY_TYPE_DES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_2KEY_SIZE), - BYTES_TO_BITS(DES3_2KEY_SIZE), DES3_2KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(DES3_2KEY_SIZE), {DES3_2KEY_SIZE, DES3_2KEY_SIZE}, PSA_SUCCESS }, #endif #ifdef ARCH_TEST_DES_3KEY {"Test psa_generate_key with Triple DES 3-Key\n", 6, PSA_KEY_TYPE_DES, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(DES3_3KEY_SIZE), - BYTES_TO_BITS(DES3_3KEY_SIZE), DES3_3KEY_SIZE, PSA_SUCCESS + BYTES_TO_BITS(DES3_3KEY_SIZE), {DES3_3KEY_SIZE, DES3_3KEY_SIZE}, PSA_SUCCESS }, #endif @@ -77,7 +77,7 @@ static test_data check1[] = { {"Test psa_generate_key with RSA 2048 Keypair\n", 7, PSA_KEY_TYPE_RSA_KEY_PAIR, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 2048, 1192, PSA_SUCCESS + 2048, 2048, {1190, 1194}, PSA_SUCCESS }, #ifdef ARCH_TEST_ECC_CURVE_SECP224R1 @@ -85,7 +85,7 @@ static test_data check1[] = { {"Test psa_generate_key with ECC KeyPair\n", 8, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP224R1), PSA_KEY_USAGE_EXPORT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, 224, - 224, 28, PSA_SUCCESS + 224, {28, 28}, PSA_SUCCESS }, #endif #endif @@ -94,18 +94,18 @@ static test_data check1[] = { #ifdef ARCH_TEST_RSA_2048 {"Test psa_generate_key with RSA 2048 Public key\n", 9, PSA_KEY_TYPE_RSA_PUBLIC_KEY, PSA_KEY_USAGE_EXPORT | PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, PSA_ALG_RSA_PKCS1V15_SIGN_RAW, - 2048, 2048, 1192, PSA_ERROR_NOT_SUPPORTED + 2048, 2048, {1190, 1194}, PSA_ERROR_NOT_SUPPORTED }, #endif #endif {"Test psa_generate_key with invalid key type\n", 10, 0, PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_NOT_SUPPORTED + BYTES_TO_BITS(AES_16B_KEY_SIZE), {AES_16B_KEY_SIZE, AES_16B_KEY_SIZE}, PSA_ERROR_NOT_SUPPORTED }, {"Test psa_generate_key with invalid usage flags\n", 11, PSA_KEY_TYPE_AES, PSA_KEY_USAGE_INVALID, PSA_ALG_CTR, BYTES_TO_BITS(AES_16B_KEY_SIZE), - BYTES_TO_BITS(AES_16B_KEY_SIZE), AES_16B_KEY_SIZE, PSA_ERROR_INVALID_ARGUMENT + BYTES_TO_BITS(AES_16B_KEY_SIZE), {AES_16B_KEY_SIZE, AES_16B_KEY_SIZE}, PSA_ERROR_INVALID_ARGUMENT }, }; diff --git a/api-tests/dev_apis/crypto/test_c039/test_data.h b/api-tests/dev_apis/crypto/test_c039/test_data.h index b90831b7..e947fd06 100644 --- a/api-tests/dev_apis/crypto/test_c039/test_data.h +++ b/api-tests/dev_apis/crypto/test_c039/test_data.h @@ -216,6 +216,7 @@ static test_data check1[] = { #ifdef ARCH_TEST_ECDSA #ifdef ARCH_TEST_ECC_CURVE_SECP256R1 +#ifdef ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT {"Test psa_asymmetric_encrypt - ECC public key\n", 9, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_CURVE_SECP256R1), {0}, 65, PSA_KEY_USAGE_ENCRYPT, PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION, @@ -237,6 +238,7 @@ static test_data check1[] = { } #endif #endif +#endif }; static test_data check2[] = { diff --git a/api-tests/dev_apis/crypto/test_c043/test_data.h b/api-tests/dev_apis/crypto/test_c043/test_data.h index b319e22d..15cf38f0 100644 --- a/api-tests/dev_apis/crypto/test_c043/test_data.h +++ b/api-tests/dev_apis/crypto/test_c043/test_data.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -167,7 +167,7 @@ static test_data check1[] = { 0x3c, 0x6e, 0x70, 0xc4, 0x16, 0xdd, 0x5f, 0x0c, 0x68, 0x75, 0x9d, 0xd1, 0xff, 0xf8, 0x3f, 0xa4, 0x01, 0x42, 0x20, 0x9d, 0xff, 0x5e, 0xaa, 0xd9, 0x6d, 0xb9, 0xe6, 0x38, 0x6c}, 97, -{0}, 0, 0, PSA_ERROR_INVALID_ARGUMENT +{0}, 0, SIZE_50B, PSA_ERROR_INVALID_ARGUMENT }, {"Test psa_raw_key_agreement - Public key instead of private key\n", 7, @@ -183,7 +183,7 @@ static test_data check1[] = { 0x6f, 0xc7, 0x55, 0x44, 0x94, 0xbf, 0x63, 0x56, 0xfb, 0xf3, 0xca, 0x36, 0x6c, 0xc2, 0x3e, 0x81, 0x57, 0x85, 0x4c, 0x13, 0xc5, 0x8d, 0x6a, 0xac, 0x23, 0xf0, 0x46, 0xad, 0xa3, 0x0f, 0x83, 0x53, 0xe7, 0x4f, 0x33, 0x03, 0x98, 0x72, 0xab}, - 65, {0}, 0, 0, PSA_ERROR_INVALID_ARGUMENT + 65, {0}, 0, SIZE_50B, PSA_ERROR_INVALID_ARGUMENT }, #endif #endif diff --git a/api-tests/docs/test_failure_analysis.md b/api-tests/docs/test_failure_analysis.md index 405de94a..ab03126d 100644 --- a/api-tests/docs/test_failure_analysis.md +++ b/api-tests/docs/test_failure_analysis.md @@ -1,38 +1,36 @@ # Test failure analysis document -This file contains list of failures identified when running the PSA API tests +This file contains list of failures identified when testing the release on tgt_dev_apis_tfm_an521, tgt_dev_apis_tfm_musca_a and tgt_dev_apis_tfm_musca_b1 targets with TFM commit Hash - 6e7be077eabef00b4825e245604148d82b11f832. The reason for each failing test is listed here in this file. ## Known Failures -| Test | Fail description | -|------|---------------------------------------------------------------------------------| -|test_c006 | psa_hash_compute is unimplemented in TFM | -|test_c007 | psa_hash_compare is unimplemented in TFM | -|test_c009 | psa_key_derivation_input_bytes returns incorrect error code | -|test_c016 | psa_generate_key generates incorrect key length for RSA | -|test_c020 | psa_key_derivation_output_bytes returns incorrect error code | -|test_c021 | psa_key_derivation_output_key returns incorrect error code | -|test_c039 | psa_asymmetric_encrypt does not have support for ECC keys | -|test_c046 | psa_mac_compute is unimplemented in TFM | -|test_c047 | psa_mac_verify is unimplemented in TFM | -|test_c048 | psa_cipher_encrypt is unimplemented in TFM | -|test_c049 | psa_cipher_decrypt is unimplemented in TFM | -|test_c050 | psa_open_key API not enabled in TFM | -|test_c051 | psa_close_key API not enabled in TFM | -|test_c052 | psa_aead_encrypt_setup is unimplemented in TFM | -|test_c053 | psa_aead_decrypt_setup is unimplemented in TFM | -|test_c054 | psa_aead_generate_nonce is unimplemented in TFM | -|test_c055 | psa_aead_set_nonce is unimplemented in TFM | -|test_c056 | psa_aead_set_lengths is unimplemented in TFM | -|test_c057 | psa_aead_update_ad is unimplemented in TFM | -|test_c058 | psa_aead_update is unimplemented in TFM | -|test_c059 | psa_aead_finish is unimplemented in TFM | -|test_c060 | psa_aead_abort is unimplemented in TFM | -|test_c061 | psa_aead_verify is unimplemented in TFM | +| Test | Fail description | Github issue | +|------|---------------------------------------------------------------------------------| ------------ | +|test_c006 | psa_hash_compute is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c007 | psa_hash_compare is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c009 | psa_key_derivation_input_bytes returns incorrect error code | https://github.com/ARMmbed/mbed-crypto/issues/175 | +|test_c020 | psa_key_derivation_output_bytes returns incorrect error code | https://github.com/ARMmbed/mbed-crypto/issues/175 | +|test_c021 | psa_key_derivation_output_key returns incorrect error code | https://github.com/ARMmbed/mbed-crypto/issues/175 | +|test_c046 | psa_mac_compute is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c047 | psa_mac_verify is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c048 | psa_cipher_encrypt is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c049 | psa_cipher_decrypt is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c050 | Persistent key storage is unavailable in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/382 | +|test_c051 | Persistent key storage is unavailable in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/382 | +|test_c052 | psa_aead_encrypt_setup is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c053 | psa_aead_decrypt_setup is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c054 | psa_aead_generate_nonce is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c055 | psa_aead_set_nonce is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c056 | psa_aead_set_lengths is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c057 | psa_aead_update_ad is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c058 | psa_aead_update is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c059 | psa_aead_finish is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c060 | psa_aead_abort is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | +|test_c061 | psa_aead_verify is unimplemented in TFM/mbed-crypto. So the test has not been verified. | https://github.com/ARMmbed/mbed-crypto/issues/381 | ## License diff --git a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h index 47bb881c..2ce1d331 100644 --- a/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_stdc/nspe/crypto/pal_crypto_config.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2019-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -317,6 +317,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h index b55309b7..6f3eca7c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h index b55309b7..6f3eca7c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_an524/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h index b55309b7..6f3eca7c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h index b55309b7..6f3eca7c 100644 --- a/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_dev_apis_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h index 4c398143..0e95f723 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_an521/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h index b55309b7..6f3eca7c 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_a/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h index c80bc664..aaa1bc56 100644 --- a/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h +++ b/api-tests/platform/targets/tgt_ff_tfm_musca_b1/nspe/crypto/pal_crypto_config.h @@ -318,6 +318,12 @@ */ #define ARCH_TEST_DETERMINISTIC_ECDSA +/** + * \def ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT + * + * Enable ECC support for asymmetric API. +*/ +//#define ARCH_TEST_ECC_ASYMMETRIC_API_SUPPORT #include "pal_crypto_config_check.h" #endif /* _PAL_CRYPTO_CONFIG_H_ */ diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h index c9bcc337..f7ba5f05 100644 --- a/api-tests/val/common/val.h +++ b/api-tests/val/common/val.h @@ -1,5 +1,5 @@ /** @file - * Copyright (c) 2018-2019, Arm Limited or its affiliates. All rights reserved. + * Copyright (c) 2018-2020, Arm Limited or its affiliates. All rights reserved. * SPDX-License-Identifier : Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -165,6 +165,18 @@ } \ } while (0) +#define TEST_ASSERT_RANGE(arg1, range1, range2, checkpoint) \ + do { \ + if ((arg1) < range1 || (arg1) > range2) \ + { \ + val->print(PRINT_ERROR, "\tFailed at Checkpoint: %d\n", checkpoint); \ + val->print(PRINT_ERROR, "\tActual: %d\n", arg1); \ + val->print(PRINT_ERROR, "\tExpected range: %d to ", range1); \ + val->print(PRINT_ERROR, "%d", range2); \ + return 1; \ + } \ + } while (0) + /* enums */ typedef enum { CALLER_NONSECURE = 0x0,

    ac(hy4NMtwKKu&grr8oHFwczNO^zrLcv((a5)i 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 LNniJhe1tU}W3JDMDm0nYtuw@k2 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 YyvC9x)=E=Q-uYN<30hfKFx1wLG*I z6{==ack;}RKQ2qm3xUCdjAV5@Rhf>0Tt@*8t0K!C8*9gGggQ!ba&;EUtss-@lbL57 zUJ9$_5GR~na_ycVY*nR&CC*svDIU23aqG)6nrhmRy}H_2?Xl)Jlq$I*Mzxj?B%T=EPhsfw$F`XgDl=)8wV7S{~Ua7sR6_+EzzaI|fx_ z37(AI!|YacK>@ZZxg$BOt}e90g+>@9UAf4JBZkDuh&%;kX=cUOP7aD|^0EHSiRZ|{ zR<0;nw%e1bqgeAv8W+cVjE(~lC@U|r^W1u!vdQ34XkHgam0hNGc#Mf|)jd}FQ8KAr zcNiywkF|%W`BfVymSy_yP5GWqW3ngN(Xa_bDGuWfN-%0Dhmwsuv9s;AuABU>6$llS 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

    cMtNxdt)f|Ju{997qOSf;X_x zKO;#PSV4Id7eOB&JHTH;d~Ox=!FGv?KuG@*^Z}r}frb8wp8!ov0SNOveuC*Y=Ib`+ ztu9Tr|M1XtmnQQK)N^j)0+~QSLnhA0WHJ5*dpmg7#80qY;vP^9uZ*7ns&@n7T%ZFO z2V_yWh@be4^;&d)eDGWoKf!j1aX{$KJ!b!85L`7U3xIk9`&>W;&JEz8y+|Nn{0;nC zsG$GjzsKg9L0RmVxaWUR|B^oeAiaTlF7hWB&!L_NQ2ZU~?IvZhUt%5*)SFNE4a9R% zQXnG-AoBC51W*VKE912l{evK{@xroSqMiR$^qpkum&+e{F$5o9o}LaE;-d{XevH4)`X+Iq<1=8?1l{6-dkaXE*#t zemk(&n2y;m(bNBS!!1n5ztaH!@u*z!F?vy3z=8_c(=QD248PG|i}#OD{Oc}-|M1m$ zasN6LiIJY=R_q0OV*veDJ~y5-{6>B|tk*c?*{@`;zd7W8XYSotR1UzS1RC>q0rWTQ zYk~f;W3REub6m+?f3wK{{^$VJhygJ(D?0X^2sqa@d zKO6J8I`;f@Jt2oDIi>4i>L!jxm!O2|e2OBX$IjYjZ# zclO;p7Z2{?lckBBD#M6bGb1{(RyFcb9OfDR!kQx?C*H8t79`gTQ(K7o1cf1{N33I5 z4mBPRoyno!9SM>r4!OQYE8?`GlD( z8{3LHeCSdRt$@C3M!^Izk&f#|G`i*??cZD3l#bW$J)4HAJN{70FxK-!pmjAL{A@m@ z^>M>G+nx#52@E!l=utPZBW#FWo~WN(I_nFIB0+->R&SvOWcf!C(oZWjVx3S#$H8~$ z)jmPwPW_k<3LDuw4*$BoN8aYUu~o>*KBKwa`nDfOLN3W*=Fn_f`^R?DCJq;`JLRH@ z*Xi!rG7KhxJME%_nNnAX8xOL!i2?Q!Q3P=$0n01@Xv{6H0FJ!PW0KF5wa_PyNPHAq zHc)(o(~B`v*&aI9dy{)G+8&;Sds>85cTT^(zF%GE88YT#pw8w{WYNMAY?(7>b$@4l z@Kai+)(fv!E%GB%T92uGisSDcKA0k6TIoB(SHPAuvoWckn<9Yo?Cbq#5*?Y1`!TAI zC(c8Rgq6Z21JNJl1itTmy!7+|qU*fI`xJUzmIKEgRA{_IG+yogRP2Yu;t{%9vfIye zw)HWpCbzH$413w}2|qwdyr!F(vr=Uz?|#Kv#n%cxz`5<^R5gp-N9R7GIbym6!&Dv2 z_eIWEt5H^KXzK*U8~eCbHA#s=TINjx<-Yhg%6b9VrX`X5qFHv#-V4eqt6km z;=9A(m%7`ZwIxm-jKFlXD)=E4Ca%f)-(sqqr*L4*3RChgiK}V zDN^AEhhj>Ag;;x|cFzuC8^Vb~9eh~1qzSGJvE672oc}PtSqg2BlsO;VO<@?pRXYe_ zr)8^;TMW%vEJ25;KUM1>887)&FVYFU5a#2-(g*K4>A!z8I5EoigUdjQ4b{c3G|)*9 z?{D&8BfO_Z6$w8Zcki_?!B>;qz}!Rr8P+ZzF;u4%CsBwd*@Xb*#(4f6zLYe!!6Yf$ zl`pMrXH*9x?Hu*xk6($OMB51mKgKb8O*5a6_9pb>0hDv1xRY4a{g9Zafdbps&GnM5 z13bm0nGZL0IgXa-?!|FffzLeiz|J-qcTj&R5}2Au9M53h?syEw#h8*qKOX_f{akgl zci4}tZ`^1pxJlw{(A8z6wqDdPu{Oz@yL|l{SYQW_o)WZ!mw&uJ<(HE$(2j!W0gpLW zk#;LGp?jT#zg41qL?$cqU6ZQ8Pxvx5WsK0|Yvs2l0+(hToVb*=rB*1})WZg6D)n>|4HNDog9MU@+`55Xqh^@o5FC*-Uq@bqxg<1h`X`G> z%Bmdx5+K=P!b2gqoq)ojBz0#SRm8^`UQ^hFh8`}GEI`JsXv~7K^y%Gs?drVa-f(cG z1Owzn*!#*tU%BU-a1?Dfvy%~;ihChEAfAxQM6nmXNFLGw8l9<`lPXi|7i->6jK3EN z?ml^6qe`;Hm67gUFE4{qQrm4ApNp0C?jG@%fU}i_79t%6!v9-;A*d_Qg z@(2FOQ)%*EUbP4u?bbMPs5?nHnRruS!Cz!(!(ej&RL!Zihv}5qdShIL~o&2R2 zx1YQNrqr?IF^FO?F*5vPUb$jZ;(F7)V(NzPm}N=x ze&d}I|K>Gfy!CLyXisjYyxvfIfDoUB1ayDGQMY&4^3WWI=~t-qnH+Q&qhXArsZeWd z(H~Kkp#{nZ=%dfScYdc-Cc|lIC#HFt{{(G1=^Jz05PumNFl~p-qxvyayo@`7qZjvG zOy%xq)km}S60}e6lfO3aD^P56{X`_}FW6GBNbz&e70o2cxfW;Q1(x^Liq}Ydf(=$v zaesw{N}}$26GVGPSW6in@zCO5>Ptka-XEVZReuh1Qew%0+$?Lv&sJZG!&5@sfJoqk zS!;h8t|(||Raiz5yBj_-^^i<{nWu{jLo`FqtppQ?ifpQkc5|Fb^WIUI9TTO5-b4Yh zdNelr7hEPBFWT=FRPr`>vLg#K;|Kx5u(>a+T|!w=_t(*97z2}bo@D*>ehv3gR!`5T z{LP20S@6CFeH(k1+(QekJF!ubb0;!O*0BRs&Gk7*$}(IBbp~`f^Iakt8PPbh<4mZL z>Z&NK(MZ&v$P?I$zc|@4__7KuZR|zoL=sv*9oVO0s4J0WehC{wy6zZ;L$Rt;#>tK?1)ZfHE?t#UrmeK3UiMt z+-#-#6+FBm*SK1x6osWMAV2oHvqhR^puzab$M}AAEFqfyJljZ38JSlrjVv^6Hk#{m^yX=CV;;@+*Ro7!4K`fp8 zNO`my!;$L9N`Y$fv(dmHmEr_)Vav#@g=?11t2gyN5TzXnbBC#5+~wW6u%_FpmME?G zTkhb}><~l?-d~%9y@hs2|RwKZ=i}s+6Is8mG&9h#4 zxhtNkExs84nCss1R~hS{HpCHBs;nzriqy`^o_8yd#W0-BwjO0Hd|%xuhaAD3A9r}x zANf;&wyps8GZx>zT$E2b(T?1j4{lW-iI(^*?u%fu9hIroxP)c={({KwKa@FUarauD z5jVHzAc_>nNBkOfGDoK*(Z$!u%q5xiXnAx>KOBLt>S`csQ1sYLoTn5)id#=aHJv;} z8(&1PR>*QvL_XTxJ(j`}OCOiK5;2ueED>q~PBOTHjvZEDNTu&Z3W|#r=2jrCggMRh z>u#?+ji^zUB-RKX$;qcW_7&m}`}?gq?~fbf4F2G3;TN_|YzPphJb9Y$}V; zp4dlBM+&o3@Yl3I`Xam#)~t$o`d{HY&F>2yG5*-rZK`!vgq1NTqk)dY;x2clZRWR+Je)O-P7rs} z3LllcKcz>~gBIhlq1g(x<$s{95KxX?PG7%NTHw^0!mG>?i#k()Uj@}tvaM_oO!<)G z$Ig1sO7-*dz&O6P<2wNoI6`=2QIXF|i_?rgyz4GK5Y{Ec?|l5d+;;kf+;|m}_%p-r z3TxR;>G86vT!uJHNH9-#=*E?vGGYz~p=GXe_jQXaxv1w=cow^9a#^MOesy`O7KC%s zJ(T^##4MlzoSO1bKTaXfyq#oaN|nfNm;G^5u7n@lYc#r?O`Lqc1>z5Pm**?xrCWJA zb=QwfIPE!;!C1G`CL7;wySg~JFa$SA-Dim5C!`y-9qBP=$Z9-*W^hn4;aDuAzcX+` zI_9u~Cy5jKaSZMbMl;<=XDhA#Hw)bth5TDiYg?#QXcB>1bu{7#;D<*}PV#LhIjVjgN3kGp-D)+sSn7`S37)Ih)-uZ!O0gaGo zCdM!SLvVeJt30By#j~5u%i;@a&TF#KJfc^69_mihh2rjaGUh*Mh|lF}M7FI@zLG9$ zZc)rW*$=Q-Ay0?omNwC-UCqib=vOSWJQ~fHCe0Dmt09(0Hz748BPP~qh*0;Aa156Y z@O7++SgtiX`@*0%7w=_Co*g5Mx=JWb0)v9uXOI7HSUzKGR(bDz|a zp=0Rgva-#ht@q3;+wbvha1ZSt0dn8ru~&?c22Ddvbd}Ppj>8{o^k*1YDXqRz?XnXOR@>{l*sGV&(LPrJlqj zDN2=F4ZZGqww&}xcji;Ov9Yg+-6)4_)Mst?Y~;KKdWY_e8kQbIScqMH|Cx=Zw*q7% zENP{0EX+l@LTDBuZOjrw%4LR(UbL{em>H&3AbTugCpeZ4zB(c?n__h?3;r}Qhxg!n zCcFYmnQL-^dltg(F{ce)&UCNyX2&`G2h%6|sBu{te*=94j~R z6yEO@gJ0hrx0&Z4ADys0w^* zD-^zS3aDXKVmfepUs@2nDH1kJ{c;eO0`EJml3k+3Xo>T$2rYC;GH}+$-s64w+_IGk zo(zKlu(4tSGT)fUzJO&GX57|GdWl@j1x)C7|6sACTzd{w3yR|E5MqO>%|y~7uUjz-|ND(XCoZkxrB7T5Si%0-8Y-%pQz>#7kaA%oQ`30+TQ#4}Yw~L$ z?|X+f9Vlryj3@MXX652-DQ-5h&b$?qr3?w6pM1HvO{am>Yls+c5KI^M%U;!t%w{HT zEz1-u+;vPtae~Y9^RrI-QBA}xVuM=kDWB1jXV1ruAB?S%ErS=`>BmFX`*?WtWKM3A zMdxgU;oI(=&YdWwAfDLp_2wF%=Y~EG!TL_h&GwXBW7{3Rr1kbJ!C0ocMhs^qd`!Fg zbi^AC1z0m+A3d8}qgAv$sNdrMPrG${U2G^QesrloweW=asz{cf<#Sxpl5S_iV7);?Vg%-` z0P?~GR3@NDpA9hn-2n9uq2rpae2)L9NVn=92c)6D)|G*tl@>4>fc$kpC# zCcn#k-O}IAdBt%_M!HnkzdEl#u^4|-=NLd15q2ULAVUDa%EAshQ|HL9#|ql{|LSv$ zplA=^-~Pu%$#F?Sx`fr(&;m64$x!E+{eL}TfdA{SNErdY9pIxqN6G{!h`?=j6Vg9V z6p$=(71B!r(j}yTkL@auH~1cyfC>U4BMT4!1SsFkzz{9Kjq@Aw|EF@Y(_a#gE`j`8 zIdAYi{Ig4e{19L~4Rzto#32 zbkHgN3nN{iWColBfRg_Y%HNo;E$Htp|1Zj`Pd+>SCEvp(ltzGI)yCxipuB;R7=gGV zAfb#I@Yn+JYoOE+AiU-`|@2*()|1#6F7bb?*I(qt+*8j(3`P+#7mt|)J91Vc`^a3OkV08jU za{d1T@@j6n5+vIVti-?yoNi#%0lghK>x>}5__xvWT0_pQZh3b4OPqAuMF+BK{(g*r zegj~Gf;^VMU@JyoQWA#}{619NQARzlM zV1r>~0CwmF(`XI{-kS1+0DL8)|r#}>Gin1F9jde-Y8-p0Sk zPX8Ycy3W4{Y`4Ex5I_VF_yxWT)A!%;G5r4A{&$^$;$L;R8LsA^ixGrZo4$V=kN$SZ z&rRPKU@uJHH-Y`be0BBQNp^;-8R&m0JOAfC0!aF=b-gfEGXgP$z|OodeV+rrZryKV z`etYN4+~vq`UdWoTj2wyBm#cN3)A;G+H3KFu8e<|{c6)UJHvkn=r5*kfK&bo@xt^C znu-bZAzhfh8G)fxf64Z{)nZ>wJAYg38-5pEn7%+%8`AX|aJMmi zvol=cAP~~On!bNe-~0>83)43P@R0-x^*uLzpJTpmbKdIGWcUyFTz6^SZk#a4iUxEh zU6{Vl!QKwu)uwOu|4tLW#`JyD5aA1pAK*U&PS}O%`yA`F=>GWCbG7N4{qhLm|5+0M z@%>(H`u<~(@b!K)pl^raPd{3hmbuLsE9%e0x2G_!=v)la;I1{Rwk>vj0}j&fq{b)4 zN!jkJXPRjnj*>0gj=S6b+OfwX5|Q+vR`YO9P!ALL4T$+}taFDTX~3N2Q6|mF@#<_u z8BHeJJjRLb>AKd~#P^>kho{@M+-^FWPXbckZ(z0(64Gi^?|uKSr7<+=+F1MYWrv%~ z5%CtpDP3n@C=_+~Q=J#lBIC%!Dlx#!uH8qVnO$SMF?7M75!AZ7jp=lBJ3U@g2T!>t ziLIStT6{i>EnWpIX$8xQnY=YGk7oMk)?79zrjGC$ zdV{OHg3zB`p`~E8w3sQs{)TZi9hI*mNf^iC?Q_%<3CCDNU|^CTV!BMVu>Z+>Ea?&C z33+fYI=<=8=1#90dccSjMuU}U#!Xc{35}RGeH9xkDV8R^KBStt`p72caXo(Ej}0#Q z3Vm60G*Y{5e)n_TaHt9A_WN!@Qbs;WB=A)fu%I?1L8=8m!dTJ$#GxhJ%t|0c$NP@G z0?%~HfVV53U6Ckj_sdn>2wZY2-w^*h6=>10d{Bls1|z&%Y0N!L#|>+boIeH~K?Lu; zGBdxIf*ew6Dr%KPL2hkd>6JxqmE$=OLNw|?35@MxE*VD_gy=f6UB}JgW=6L3Z^&%H zk~JEPiU}W|&Klx^7xD|S$>RZHv;0POz6omlSor?%X)EDo08|yxrc94^$<*N+eXB0= z`I)7~kO`)QyFvKrUMHy$M)Y69@wNLY4fgj}qL5LCb?@^vOv0UN)lK3Zo=g$UZxNG& zY$bQF+|m(Tqz|9JX_PzEKj2Mr&~l!1P<=cx{hGdng@2x%@?4%$&B3py+f($Pz_RKRA2$l-4wDhN&N}6J; zdtQ0Rg;;g{g9UjdLZWDj_vU)nuscOC80Jw-)fN+r2g1k<&G*udG2))HQyc<{7Pt3@ z2OlFu*Y;iX*C=8H*!7ph=YCQ(R2VG5z9T1hE^&H5Gi9(NsWy-=7;NEZTF5;>*!Jyi zrStUbusJ)YllvAib<6wjceuhXwQ_^-eEOO&DC)p?v3znj&+HT z4?~0zDScqRb3E*mC`jV@bq~uJ3Cqca#UQyu-VbfyD5oCO>uAnSQUm?;OKzxolaC+l zD;*@FK}2B^5bm>CCXuuyrEZ%+5`LHaXjM2V;dssYadD~xLEqP3n)_Dbx^5^wCHyRG zmL<0NY~f=^QR@alc6bCh1|yafH9zQ6X&~Y~!(k-EI(y+_H5XaL$^4E57!?UTaOGe@ zr^Rl$yJ8&2N%a{&cVMw9=Q)O#GM;ldvfj@n6ccJI$R=;Gq!(q-U24tYRos5LK?0@F z8%OZS%xJ_V_E8?gk@`ka%Le9tlmx{~hYc+{bn&DQoDX6e>A3vgq58CRnQjL?L8e!F z8Kg_FDv5*(2l;ZE!)`m4-dM5<(_B95A=88kGIR1+*M9B{UdvpxEsx{=P#9p82|Oe zs2Qc#*O^^=j#9VrEqX|05(Nj8*GP)N2PU#MY-7KfX0o z;ZBU>Jw}qgPF43Ybn0a)@@FNRr6~Q5s4OfPC!!d-L7_%$9&2hzs^_Mh4N;T!Q05AG zNZ-Oe3sWks=j~G|o+&0JJaCIx>t*Qp@R*0B6OG3Tt;{axS?p`dO^1Y_jkIZ{@RnbU zE3DhlsGEAhTdH_2)>M5AbNAGKL0DiOyuU9e(Z=4!Tl)h#-1R6eBxC(YZ?LuJD~mgW z1!7%{FLM2lSbdHdZR^=5GZh_e7IeCV5*g~^^sx+V-asALavt%&^ovthYUF)V^IH5# zxOI=BI<`$CpLYER%%nGs^!_cGo|M=y(8wB`hM>GD3>|-GnUYB4A5bEms^-|p9*;oL zqs5^qwaNEnG>hs*)3kkc5J)vP^_Pgua8l%(jclzYsFuH)`WA#9{8nL(W#gA+_G;j9 zH(6e?E@W%|S}nGp<%g?|UxU8lLp~dyk7dHu!rU$lja?DA}2!9KrcWKlCq zDd&}+9(!SFi!fBZ8A~N-_2I#Qn_j4*A1CmCGl`DXcd%7k0~r7jl!>VzX3j0e{rWlL z*DwxLuh2UTRC!&U&)Vybc+gwFltX-w-#1nI#y~4Wa<@9%ue1)uR4+wUQHeCfY_YGF zsR-ABP1RRoM>;m_XNsdBCcG6clDy0Y>Re+X#EPv7%kV@f)8jih`gTR>(g8AcFMO~} zBc^l+?!5FPe&7Noz@_*#pC%giNb#{>1=u|>C}qDgv+O{0TX1YxcnE0-{{f~sS_*|F zWCJ#rmdYZg8vg9$5gW~WQ~Hk?){dE>XGbjMc=6oGqRb~SJ__>O*Mjck`?65N1!X@E zyF&Bz1?79ecZ@kcAUM4s)5j_)57&GsE7#q@H{%P$Mi;r25@2J}sfKl9S?0`9%BA!{ zf>RzZC=qy8Uj34Hs?e_RD!=C|ZcC-1twhpkiE% zJb^CF+&+uB@;DnxgmERBPYn459sXNAeE2pC;w| z?tjCIc+1(juo}$#)iupggAr+XMb}LxikX>kAtpJi?>k?|`l{;`da7z=ZO!w^e0%6P zE>*WQR|!`s@}D|SYJ_5RNCM|7m|OF+uriV$Df(q}(fll9!)>11E%sSR@1 zY}O^MoQ3*5E!f7zn4aP34f-Jhqi05}lFX8pjF=*zHDFeY?wKH|073jnXi0iue23{k zNw!Lzjr=o)6Lz$If=N1kUM`IhK0Wq6Ji7&VuEUoY?vE#754@sT>oCEvFc=bOJGx9% zU=3C7#Jc-)ltLL0O^}%SjP=+l50mrD$ps>I#+cm|Ph99H!CtR6dyJr(J}~rc{jr^G zLR_DjmJBNb;oEzD99&+n3Uq^&{N0LcZ9{wZmKD;Tjw+BP2y|A&&sF7(7_)Bm%aLH% z%^YgI+2U)&nyVGWc&Uo%lOwMcV_nj3FsgUoBa1c38+8W;3BgbUPDkrgi^Pse+ov#s zX&4ebcphb@EiX~!a=Ci;UYfA{xCtXrd|rIiM>T}U1sx@*!7h}_LN%|sF&}+*Q>7_T zo~W+(OED&aoP;lVK9KmHdI~y^lYH@n^K%6C_u6{VCmyAWJiGQztoqZMR3Bd_q@~5U z&)3E%771~Z7%dVe%MZryC>$?BPf^o9R4ypz<37YdLHNkkiTn}n4T$qm-MVg6_?QBs z&=WK>8Ogy?Nu-YymM{{}dXW=adCgxN`o^HAkQ?IecCs@vJz%sJ78sn4P^%-eRI=>c zT1BXGlSIzM3wo`s68=@{w60G2DO+;f=-@2vd}t08())9#TO_3 zyE@C#n8)xQ6t{4;mNYu0ilV&W%LXvJr+RE?{4~(%D^T8l^Q*S0yCT$rtwlSeW^NoUanErWV=Vk}(Y63-Gw_2=B ztzfD{Q?`svC&klD{xx(CX2s>G|vd4dGLD81?ePmWIN;7l+W$~4`aWzm9iPbe0T zJR$q7u|22MD84Qcq*2FX9LKbNMgI3J{<-PsBiS^$6i>o6T?O!?83oX$MIudC8lv=E ziNWdhzVR~`qF93#lwb>DeZcnsKw0mByBp{=c=@m-y)jO+2H9Jx(!4hgRsW^zU3oM0%PgN-@&UCg(v|5vz z>LH0!WB{4gPq*gfhasiP^LDN&4+3}gYHJJ^B}TZ%Hl!hOswkcA8qGFW7=6~r(a(Z~ zyoBom@Z$OTV(aaL}OT$#cb=}8_Nahz86>lJE74_mL2R=-hkU7 zYPSL%8G%|(CQZ{Yv>$`KOLS(SAKV9Mg6;C?{jyqenxzi4aft6|V&)Cqxp>r^I}oPi z$Mn*@rb{GQ5Lnp(iImU!HTtwu?(!$}L3GLC5Ds7_S$(hHq^h_35%73;X_sz*+$IKj zF2TyTrVb$@uDxO~7Nw{}Hc;&sEm2CnY6Aqva8EF40W;5*pI!hvdME0!5X`)X z@i^LAtAd>i?8oWW_5+8hU(@eh_sB{b5yaY~VRb(&h0-u~AkMsz7dbI`O=&aZMSL&Z zDWFLQKd-b?$albsxc(cn_k6oVYpVn(`{(2C4A-LX&aPxr*hYEFLWi@^>4p6QwZWB< zQco3hk|f;W%u*61Xw!?fGIbBZF~#I|6-|@9!3#6eEv*I_8lw;oA3rc*=hYP{F#xkB znXCM;YV1l#we-gEy=ykiBNh02oA)h4y}^gK6H^3WSWUCb46Syn$_e``Y4OOu^dD%M zy%l6W8jYNDid(FgTb#{_|FLU*H+h8R&?9A#g48J{ioDWK6lXE^g1!p+b~yq*xVIfTiKi( zQHOjB(UqO?{>cx`RWrQc~lJ?ew@Ld^#qkBiz$TQmxg7Cw4mrpZqnQM@J&{VefdVf&cR({ye5W;VpBPIB!yE zqc#`LQHf>xl3*E7MjQFAwWmw>(Sx}|jYV4H4HG9%1;Ry58IBV#wR_dyJl0UP&)!|}^NTW<>Mw~6ZGvDJUPDU6znHTkll zte!jzb=1mf9ucjVGaACrk^ge3s?W-DySdKpMOAJ~em#K@tFiI(udKpRbY0P0pb&^| zKb1mCz2jr`ufb#fY%F~x z2tB`(RrR&7a}@(}iNg=)ITridV_&+k#cY$^*rU^dZnOSZE4eAGB9qprG0~waehge0W%fAD9%rdpEFcf z?sooR68!x@Gb{ZiALHLE`p<6XRVfFoH&_}MT2B)=PPb;yZvVORE5-g{SN=WafR+A| zqw%lUYf}yYcl=uOL*#8xKi+lsXtG&SnJX3$A-qRQ1|MXt&t#dKP~0=#0+^9{~rUn%sDMez5016GDhuKT|i^}2imwi|}l`C9;J zf1?53#1}a7x$G;2-U9SxW%$p`x&cQ9EY;iGcfiR$efZCt|IRi4zp4D|$hs0o2I|tT zRe6phGo7ovz>#lI`G<}8cO03O;nJ)+gO#qvk%2IcYZad3$czBn2M{S2I5H!{|05m1 zaA`taf~l^i13+{)jHU|~`9kLfi+rulKi)`Ja8wNc8BVtWkwHL4*|k^nA9xa=m4N7- z3lRBS_*F~ub~F&frQvkxs$NF}orh*!LkV1nWjM`@0uZ%x9`!WU6?8RqaYnfR?`039 z3jGaTVz@M%E{Xjs-+TVidkd8S1_pd`U#MgNxKH}4iHloNvzHr+FRA=1H4F4--Rj0O z0QH$brrbX&&op0o<8MXHGF}=+msI{0_XFM3oqR#fG5|lHfR%hs&7MoXQsk{zwaewn zmqcE_I&T<77t|~R2&m0H{nkIDX3v#hDfU*>?B(L*OJe`VCW6k;oog271vPsi@`9TE z|BJ{=v*<>VHw>Z+YL*`ONP_!VI+ahvDwpw z3Y5}bV6*hV(Ss|))$Q{UjG6^b51sL8r@uE&pCRDf(UrO4w*tT}mm{AlyaE6N-PDSF5tV$Qj~*x~ zq(A+&ah*O8@D{lAJLB(%U|9c8G4eSQfAy&i&`tfwr{Vwz_(CcJK%fJk@HZ&^~@qU8*U5xpTDA<7p6Cv5?+kE#B z$;3nw7nJWKvZrcf1{Bo2=2nwG^gTnVo@*z5Nyb`Xd~b+^zrEk_lJy&pvSN`Dcg8Tj z^D4f)0(S)^&2YqV#E^pZ@iEWgOjWe@Z#gHn=d%N=4h7B*uhpkhhK7a|3XZm=_I?Zy z9&T(KxZ+Pa8+~|*nNRNbhC&$^p6AX;q20+U{-=V*Z3EiouK2Z2^He%BOWOv+^qMh( zghv~GLGL~_tg)oQRZ&g*tOlQm?rNCF@f^~#JFTpFBA`Z;%!FH!WbsJl?m%WVyiomg z-<%eAd^#|tj7*3jkSs~;XdB*He$`o>U7Ki1@sLD!*1#u0BSTGAYf8wHtcd!fiZ1Rz zoStmAgHn>{8zbDXd@;)JPWre5HqTPUDEAsxpHM%dl6&`vXTD0MlobHac$e$^!pfb0 z*57-*u+~Vhzf5~nMoA;Rk3;S)P@+==zaB=_%#$i-E+q}1U`vxRR)R7Ii1D05wvmJ6 zg*noq$-*qYg`4HlUBAIK_!C=O%GePS#E1nYdOD4K^=xQV%Z}^Tz>jMI9 zp#*lnWUo{?HIu4I8Wy{5QhS*hC_@X+;*C6%FNc1?4jNtf6W=vR9`Qn|6k2iTB%#qr zo+)7-VUD*`+?<0n{;0Ly60@t89>SX6Q6V!>2u6m^P_VvslycX3o6=H#%9;6T3F+aT z{lp$Cn`sha+kK_EHH+MxnK9!);yN-M74_$aZ2=Sb^rg-YA++7l_Re-kzR-soKN?By zWBAp4lB`K%!*SaJgErwuN2NGQmU3?Gp@$v*^@&+7Hlfel4 zS|?!9QTOiAlRv(LVv?;%L{txYhci~}>L^QqC-Nl5wWylynHw&=QM;3}h5;|Qk;%u^ zpmC%f^$CceXi3*9=fo75nDs49dAg&jO1?WePGl`*Qz zQ%H)B=T?ii5^>N<(>T)@D0rk=OzXsF|0D(SzbxAP^fhgkd`Cjs7se-&^nZiLGwg?c zn?CTMoU9EHljDK&e_+vkc)TNNP}lP*C`;vSVJaePRwZTWsu=7{BcXQnL_oO$3lSWM zIKPTQ3N>B~t>)EK&T}cscMSX-O`S5aWA6)}#6obN?89Tg^FD_#9InpBK5>xrWVv5Z z%{SUUpPc@qF!8RN8X==md?vr?qNh#Br3 zr7j#wGK?EPh#B^zo4>x0WDaP%p>poEUH1hCI71b~q!*^TKQU zKJ?f^(=TX6(i{oj-%Z>WR%P$rlHBL}yg-4AZ(9z@`EVpGD-nm)?Hxvz0ulrnr<-^k z8nhVL1O#eesGvIy*eta|gkl!=orIvvCw31@GsPJpn=#Oj%JH)6Yk%hWD7A7C|3AY^Y-zRYV#wiLJFZ7%> zYX49peF3GU*VBHqmHBwZ)Y0NEp*%pb&v;&wNjo*vbnqRU77uC4 z>@ndt?sa6jmmdZ_KOwBIr`bYD3KblUgOAW{^|kELNxaY_2_9O|@eIu)GNqNb?Bd() zJ$w|@+QySZi|Ru5c^t7IA`bDGfWGIxjlQ4z)fX)gEzV5qcd# zXOL7MU$ti&dhHh~7e-G3Ez3PB5h@c}9}zRvMmeIFSbR%}jYrV&Lpy}svXcYk^GPS7 z?`9`w8s9nyEslfv>oiEMHL_+9+%xa$q~Vq1sd+Z>b%d6dk3x9N3@Qz^Oz1VojNKzv zG%HeVgFfWRJMa2xYwxKh4r(cI{Tzx^RvpA~s5mxMK;4f@cu{csJ4W5Am}Pj*f`==p>{;XmoLW)i&@(DigP z8S7z6RJ=!(PU~F(u%g|=C5k&nBjtCA#@o)CHX`So#$bLp|Z$(H%Sx3}WN zs?hGqcPyBO=If2ppMxc|2$%=IeF+Vp68pGK*4$IUx?jVd6rLmF7^3%8k)Wx|OChkH zvBJ8I-%43uM+(d941d{&6nZfuBt-Al$)USW62WvDZ5UViB6@tpcp&H*U>z=w_VY~+ z_#jBc*Gy)i*I&skVS4Cr5b`&Zrf*DRP$3kW&yc<`?EY7JuD)!x);7K-Uo?$!@D;Cv z`a@jL-zoO#TG@~t(#@4~uqkd#C=VAoHW(LqaIjO*b0Hvzgg4t)zJ;#2HLRY|mbP^M zEgKe}wal%v(BMrPJe-SZ@CNqY#720d>^6APh3MG6G_|q$EPlpw`n=$6K9U{7bx3@! zIh58oWB)m+YDdqdi8JH*$8U%IkPWUUiQK2wT;mlg{sP?3x1^94UQnM>`F6E6wS@ z?-eEl`Ypy!aP@@mdVI3IKA zrCK2}@|tlO>u$(S57$AVAMwMb_M`;jxDvt*H-p2afy3vo#Alk+BJ=_l4wk;uDX4!B zFw0~hTAs0PbQ`Cl$lvEzSf6IMa3hM^<}eoT`KrRywxHa<5Yb#vhs^Qm{$0FK$(TfG zQJzt^T~NGLVRcnTZkM66ZfT^#PFubN>e5#)Z#y?36~wlcq8Veq?I9aBI^=?2rG=w9 zTk9sFfO)}JnMKO-6{1Y}vehYRQbv|i@ufLay=CLApsWU76gfKIXl)DEW@~aZb)PXQ zjHPByj_{C}-UQb-p0Xa_OXYj3*f)?(;L3#8d8t+;UT`|eg_iB-7+2wv9t%|vr|Mug z&3|81Ufu3)kwTDX&YF>|JGOghT#-B$n$m}+Mh~CwrfM*>fQvywUFZkNpHS{qTEnP` z(sl62u@8H5Ms3 zUC2HnLtF8Z4`o*@B=vgNLu&ZyZZLZ6 z*J;j^BRAaiYG#L28cEr-H`*Ak`QSv6#r)K`)oznAY?fl|0m4zHzwpq0hE2pU8zp9f z&mARq%RxaVXQ)M`OFwne{vZH5f)cE0#8dG)fVZ$ZnQG)dm4~~iBF^?4RkP~zSZBjY z7*1yoN-D* za-i)qux=a4({7V*UWW^0eHv?qy>vHBo5V&x@;BqAUYSyfP=N}Hx8&{sw5zc3_OGt$ zIBxbG??P)C@mFA!*0{`{BegAjuyTisr>pfHcR_7~ALhW4Rt>DBcON$dsp-B?wo7g1 z?TYL_c^#O)Tj&vj%SWH^Ca6TxJSsT#O^&S){zNzJ40xCbAKAS!I-l+idMa-k2|f?n zZy2C-Ns%f>xLjn__AReW2_m&nQXen`n5K!^mq`IKO1t4C1%b4vJl=;C5IWEhNZ9!y zYqMjFKkPLLs7LRN+QD{B|D9SEbN7=;aqz9;@U)Qrs{Rr#d_hAFWnfL{~4wf5C<%bTL5&;u1J z#%glRI7&5TH45oo$_}sz=qhRoa;7h->=ZtYpCd$Pb_tQ-f+p=UpK0Wp_N1h(=u=nQ z>?)Q^FCiFMz4s5X^efH_178u=oA!ia=YL#P{F!N)un<0G<^ILj*krP>EagxxstT)9?ABe)>a`) zWywzUht;x@?MwTb*?7_5{I4+J5YZMZe3bCMgrfRDzeL=D_ign`BEgt*eAit0&5X-4 ztkh!@M&%v^3)R8cvW>u<73N0e9-}%pwpN+%;Oy)xX$72k&^OC3D69832hTXffmy`+>Ypit;PI$jaI0|N`I9eWtLX&YY87esZYE;O@FocUE zRhBEm!cOv@`Y6op6&uE~T8#dtV+y$!XOp$Z^)hGr(s1XQ5GI4+kwJ$;S+o zYeBhDKb-WN4qzx{&*LW-%MpX+=y+emK-SGT8tD`v$$;_*od>dpaLy#B+&+4jRj0_7m8c+Qm{U>!1S-RdTVw(*L$6SD zzv$4rr)|_1W)?vd<%2Cs6)~HZuik z@-kmZZ8r12RBg=@HchE|3(gr;ESR9%`wT)dr9&wl-}!S zQC$p>Ig?iMTa^!t8LJmjb%JbOdu}k%?V4n9t`i4;+kqk?j>S#Qe0V(n+S7~a31n(C zIYQ|Oj7AjIGpU4VDdS|0gYjpXUW{c+RV&md6XsDNybO5{rEm`u9|nl7*LD$* zNvc<8B3XWrHM94E)a?@bwEDF$$gt?Oh7fLjY#cT%Bi8E;M%$bPSl56x{MO`q`lbbx z;~}HZ`mqkQzfE}8VSXAoCYjvyf;6pTcrzYh1ea|D+4xhmaBx^%MDf*gk-=wv;kw88 z0{lDtf2YnsfLHhL&e~s6x-P1oPLY_?swZII7dU~-41|t=uJNG$*aZB0DHSWze;oV^ z6H-J`LtIc&NM86qu_&O^@Ch(tL9QV3Yr}`{lgt>0InpJLiAOyW-$4(D&}~%G0dY*g;psE<>69*DyVA5hi?H~gXA1xcfAega zE*T`3L@GReDk!TVFD0cRC-FpF{J-mw{s!xwfra(dwPiXN%Lpt>`qT6M*Qo{Y7~tRk zKe<;uIG3!FQ@J-iIP^EzB^OUPBO8Dep2kf8mN<|pbte0&dk%L0qpM6AE3B6?6|GNNgCJTWol-sOVM!+}$ z0$eWolg`!OPVW_PA=6)pvfIFgz*+uVDP}xNz&d}z&gEYz_)ohOa4!Fn*2H|t$^Z8P z-@q4wfc%DAybVrSqtkl7bIz3UO!@7^UcnbK|7S4$gKo;oDoD$VNJ(l42+9lc%L@wp zpVfQAggSr6GJ=5WNx((}>L`I!q%-kX%KhUhy8(Vtq; z7u4RF@Y_kff-YqK&#XGXve(dspqomh&vi1evYrNb{iE|t^_4>ZSg%*mh0K2)Ti4Kq zAi%@D#aabsI1t-)F<#GAU#aspSre5h&X{Xo$0FwiMoL2S%$z8zQV!ayNyVXc#zH(Ci{af^=QfYv-Ka24J zUPb^lMi1~jr=h2(!8upPwE;}5a~mIuJe?JJ0(x9)d{*42KV1yX`OQx;qMsSP36+3cOCdLp$AZo(;&IiYYSvZ zo@xGndU`H*OaJ@kyz=AprdnwLl%oNlKze}M0>0dVJS7@{uQ(TdmCW0H@LjHzKGk{C z2j5Ml(x>l9AZrTvygX&HPuIXH1A8X>N};z(ko<3}^u=AjEQ^WN68~(Jz5y%FuO%>B;z!C89umPDx7cqSR26WBC{^u{dzjw2< z{tZ?l^egPa^=%c3xj^zMX@>+ejd&n=>N}s-ru6@XFtds`6r7t92B+A_+ z@sHn1SCB@R`=l>PyoNOTqg47D(g^q(`ja#ofA9hzjefj#J%M#9_I-L!gzM)&pb@DN zme)Fw^aBzQO-WIBjNn1wy2eDicQ8q``0R%rYO?|hQ{O>Eq3t-r8fUsZ(uiN>+C0Cj zouw6i?N^p-YV2vWXBzLV1s)e2j%xqbabk*^AJAnU=TUo;^Kx;(L=j_K!%2%){b3oN8obzm5D|4xa=+5B!ewDQF~p3L5dYVo2k8Q@DfoPb0=p=9FQ*Ti?=K zUu*68GSj*U&!avg)_5|L@`x0|41<>N5sw(6U5d>U4_ExwSn20=#Vy5|Tx}mU_i`1( z_IrydwXo#B9Jd!|t`)blrw^kP36=QgBLXr1ksI>`jXwB7Fw(HGW%;$7W@m+ehtKbHj0?N9&c9Ytf@Y6{sgm#j=Acl5Nal~Ic9B`?g97IhZ} z48_gz^bKcN4gQY+Xe8<(o$7?WA&}$s(NMP%P5Qm}ab0m{;EsQ;OS=cw2n?bzSr6p8 zC=ymL%`o|P&U5h(*g|;b7_Q#~RH%-j{PlvqAJw6RP>C%eM070m=7uw^dcJwy^`V=Vm-zrb1Q#ySUcUB8yw+v}h+m(&_su~lrM z26G(A+rN$(I@oHWe2O{-U`9@*bP*3~ICM>ZKWf6?Kn~O>+_z_pDLnjyEPfWN!-n?&Q6f;O3n@GKO@YAKMylrbdBC z+BCW<0cV`+&9RqSHp!+&B(_M6hlMbKS-L&<-Ii^i_+&$@ezArv$lM`%{-GC9OA@@> zr0kPqRYlYOm~g1#mHiQI^Ozmhm4eP+^VCSX(KNN5xIoWnFqs_BH z#ZS_SQhUGakG8MCfL*#f4Nmu-j~t5ZwoG9JA@bmM6%pJ!zO< za9Ss9V7y-8Z4iZ|gqG3~6z2#PAWOaU4x>k_erv&0@wl!`QwRR385bg*3&ATGPJWoE zMMx?r=JF5ZXw*U{;gJx=iFwYvFPeIp)r>dL1&VhiLwNV;SIg6~YBK_;`ISuIXf%?M zz?bi6S{lUS*KtVcKx>K*2$xr#|!819i?=>8M!XmuEFKh-T2D6@X{Jx5!9N^{8m$=>moDJMI3 zDs*_bs{7zJdu;u;RPMW|qH3sNt?n~CqS4g=eXiyurvd{FO$B!l`mF;wKolh@cY!Sr?# ze4X=3S&zsZJ)EA;FX)9S`TeMNc!QMjDDlh6IOrz^a$78wXa#J5%PXp?;U1X8NUO+QIF2P1`ahB;&;s@q>pnBEr@*I z#0{%wKlSm!=Fjga#bsqzMnAWX7OH1Do9Fdssr}G1xs_vW6mEQm1-PMOJGOu zEt`-lKy7QKiU(>Q5gZ2uFZV^gyY4{gOhi^Yn>-S{h;Gps4u$We26S zeD62hXO7aXkSL-E8w%>KbYR*coy@u#2zbb9rMN=Grl2bGl{R}RtqEC8wr}~ZmBfrX3 z4F^u_0*VrN1#%u+g7?3WJmaxk#-uXYzyt%J-a{ej(cn3z>;~=6p$E)IQf83KucS?H zL8a^shN$7trq292rdCfc4Z`u;qi=r`XGEXhhCcHZ?R9|bzQ)J6AhXsxGZx)k`BsPQ zLcaZ7{;bG%yvwuNC5S8V$t3aGbnLbto^bb>VB5VI>4QrAVYQ8cXUo+A>9O?!esy+H zZOyd4?ez~Xd}pAP9_v{d1ICx3@wv77jsAug@<5B_x?nn1FmtqCSvii76Va}6xrC}8 zabjs*Y!8RXahCzGsZ3|k4(8AX zGpw_g6Ly1Oe%g3GEh4UB7o@!J`23A_ykjQ4a_%eFci@DeDXuU5%B?2L;t~YicPbf~ zOdZxSfQ6|e+LwVNWIU*{&6Kh#vqEdWp9fA{_?~rO`Hgq246HRp2|}znR-BJkL z^NCyRNsaY}OEYx?gG`441gm&*yr87r(Yp`Ud`=+5qd^?j%qWrEO;kiDV>4#=sF*qZ z7i1Mev1)W7YIdZV70Zh71u~-&Ow;)cFJ+5-lJkae;bFMRkF9g->AvR|HKF2XW(ZmB zS~OXPX~>0_3uUO$g`fS!ucYo;i)m)6)v3fg2~idw6Zewzn<`6^4iOn`JL~s}U3d2= ziV&U_B6JBbDHZUMLu!b!ikEIUHB8T z5MjRL^sg9f-ATh6?2NRHGE^|$%E86czc z_arcTO+y6De{oDZ7u_dtiA}! zQ^|=epJqrCo3ZAy**lF80;abPR?D?Rewe@42&XV*(h&RY%rt%tu)oY$KG_LM0xf+~ zwjS3_DkN}C5j9A=;~Q2w)73Rn%+$Cu=T_oT%(3|bHAon^jRw&9e67b%n5MDgjE|(INJ0? z#-yTgEU@cs6lIZMN+D~~x6lICqFu1N=IC6iRL4CA*RqmNXtLS80*e(Ac^OS1+bS8X z!L1ysdFi~(o2{$n-#Ibh9SDOd(b~US4tv&~Mj%Ck`@I=IA&jx{ThkBXrjzoAGAx$b zJaG?W@MB}%5H#=39yNY$`xeE;#lf1y!vCGyuu$$7Frzv#}o zakT%c!_Pc$;uH6422B-7R5T**?lgK%k4d4;&EIPSqZ}L2$?}5ube=NJ;+#L1AAv0K z>c&5o!&xzj7NdTFvYYh>SAh*MrOb~rb@@3oJMZaeYU|RgE-gF%r39H>LeGDEtwAww zjz9_L;a#2gp2G!3qGhv&>*Vu|)oqan)^BCHT%Vb$KTKNt{z6Uun+IF#$IVE3q?$0K z*3t1`gasZD^_2JM(cd)sFQxZ=p z3j2NI;wDa9wO{Hl^uTP!I=PddU=FMqL85g^EfP_BOq0wNH82=_^V5mgefRx|mfr`T zP-Hf)<)f=EQhq=niR~#Yg2k_wkNYqs^FfiREmJ})oh`X_#d@m28w!7^awzXr?%Jpa zVhbwvdu*b6$TPI}L^v7rs88Iy7jeUgV1Dn%G-Y9eYu^>$$slk?1#_`vdEfLEo_pGJ ze?eRiNl7YBWxPd>7i!YyM68;mQR>yDJhU9+dcqpr$T(u{eP|x0Ap;<1EUAOd*yUtzct*Om0Dc27U4O z13EwL2|Pah;w8GbsQT?^B&mWyK#uH6Ga(J9X3gF%>+8a^Ivu_DX06-)f)uDbZaM-JTo*J62B(^A4~lbq(RCcH zt|_sW*qNRefB198uEo2Q6nisW!pbQ@az&P-7jy2*i+~bUcAL8-g9=a;^JZKIeiUnI zd^R*p>yzPpZF16OE5={sXGw@qm)TzEw~r#4KOe*^tL;W=(51uP_EjCV-y)0qOdo~y zl_asM`1#t<3(@EKBB9!e-T8I9zFW+Qt;a#p1Rbw-G-u6G@kQ!F&*j5#`i!Zan0&U;>@&rjdS!XvGIj zqKKayh%rzRx_j`jOQU|5NaOe+;I)MPRzU1dlpyBL0N7clYMQEb_*QheanD9mEC}Q2 zX)6SntvhiAxAi&EIVeM10OjMA({ja_EzXAR;={AOID zE)hHV2zn)1`Kc(a3~mV(2uc9jet=Y)cHtMs15cM45{zN$RAe5PjZC@_%372dm(A{_ zlu{OJH>OS^G?5(?Ak@t+6uT34;iJlzshQ7@$Xw&u@$mxR!Iz1A43A@fR@OspJzkXa zl(Vx<@|$bLY-HdvwfUoae>wi(}jP1eKypwAQuk?aE2pKMMnTBcd0Nh9xi%+}NTb zA3~E)HE$Kl-Ur1j)OtXXlRB4s<~w0BA?D&erS^gsTTPB6(p%g%{FrZo;*YEY0(+gB z8CGNl*Z0z$WsrF-5h$j_l_|1Q=7xPQEbtoJX(K}3Q-Y8|R>~-_eWN1-rC4Jkg$>Pl zTLg(ux7c53p)3NQgU#6pe@1#M?-@!rigR!ZvtKB#Lkm@tq^RImDt({$C5Yn=XJ(z@ zy5E~WsdmI3l*y)2Nu|)KFw(OsyfrG@1~cG%u^Foz-bv7aT7^6*$!z3Mm2Q#+EgeV% z`r*!$BfafRt;MyMN0MEmDyD4iDN_Hv*8RyCVK@Y)CkjGjh=iwTU9Ui%_HPtu@lXBD z&UE^jcwT~QbcTVil$3HG4D;R7_G#aV$p=r(LW2*|dtt@xJz#(>Xj?l*#SXm-#Q zcnYvjdF|%b1@*xUxYmIC@DKF?oLghQnh7}F6#t)TanU2$+I#~}JYTEteEX6a zaMOWUmka9STD_LV|!H46SSsLrqGm7@R%jJsCl1)*@R@&Zw~LFH`_ z1-45A>&zy)8c_hevuhPznAN}nqXCitF3jrFo++j)n-2ek6oI$e-zNV5w_4lt^0#Z= z{QsEMKq3ZEk9T2KpNqcge&5clX8X^qy2-3Q3t72N=($;a%21rns0*|DO!k#RZ)H}q zU7Avttifx|>a!e%Ys4}Dra#bcdLi~K_!6L1ZV>y&^L|C%$p0zgJ?AN|%^NubHLekR zKK$t!P6_FMoOOEO8<6qJoQ&H!>sK`L{?%E(sf!l`^x2*QDs*RGsKBQ58TtVbbZl3P zyj57n*z!c3?MIu3DO&`>yjgLVbLk zX<)S(f21u$XYX*^KqO|$S@8X<@cd$N9SY?Hff#b;EFeIn+1BLXXrwJ`p$l2VLa{Jw z>ojsiD<%d0B+x@!DSmoSDuS&lssU{T$&s=>4LDNsnuqm}ja~XJLpX7d^YDN(m$MDL z)DiGM;MgPZY7+c}B@km+2>B*oS1IY|TcT~z5^0MM!x^>sbf1z7SrxQ|Tba%xM_@B% zI8;9!E)qQ8oNA+D4|>b~{nr!>kK|^G)^9WnNK(}G5)Hmoizto*g?*BgVAinLQKsM> zvP0>}oIv^1A+Ewhv7vN#4Oxmn;7^-A`sn0Bv@p^4PSj8SB2PBI7 z9WDq1-4=@kke`R*Hz!jopH3TmB(NM07(g0}E+TZo4orf4f@J3lYob7 zIwvlVW|D`op#rB1oU}r{1?PztA|4AMqeXBCA43E?dIj_BiWQO1xN{h;>%U+T4jbdD zz6T$Tqrr|nG$bQw=@tKB(dAVRzIn}_FvOeSjD-@9($$>~kdD{FqH{GHH;0yw1!ZtK zlnxwYp}(dj4fJuGR|CTFYb;9gbx))#Ve4VdE%`lR>487Z#?K z5X5@KJeTU5>9SAs6f=z0G#$tX?6Bl{BXsv3+;_{Q87#j`?YTHkrcnEBcEctd%aiN5 zBo=39VGf&`=d2as6U3VQ%AtXIdcTS)TdBJgpT;R&)n-}RpWW>#`KfKD`%@}e)!On! zrR9(hx$g@pn}Vp#KCi64UX>nf`8iI8I?7anK2M;^ep4Imzkg2GPY|In)_X zPOK7x^$dNJ1l)Vna@j_Lu}luFV{OIMU))-XFzO)nshXE?Y4QG^V3wos>*r$TpBjBP zbGi1I%=)@Ppdi8pyL4JYpY(pvvriU~ug zm$WP^mkJJ+c9M|oQ+OkG^6xqybxd`wm3{`is-D;oSCNhx>q$^k8!g7#dp5SAum;FHgDS)YyuL+B{%x6 z7%N-9S{FX$ryB5*6}~h_g^4C(nTdBu?sQX^aBKQnE)ghk)o3tID6!FgS7r0|(skgd ziSQFfYSNk7l4+Z5(do#K(@w{Ji-&Efi}dt~Fs^cF8GJEb`@%gb7=B+tdSAS*DSj9v zzjgsN0J@;|B$B=aW2W;r}-{R!mEOpLt1{0r)^~h7h zD6r?=O$@)H2|18tGTP94lkbXtTwwtk!SwY&WWro^3fYGMK%*xexZ21#=xxZjH=9Xz@+J8CW28-z^CYf@6IVrdFy@8;| zX_g-wnl>lShbg_rKiIkeX2S-l&UkrQnH967?+~H=L(ZdVrnlr6o)LR2YkHViV}f1U zL)_eqm34$qCpV4xdb^ltno?iM!~53y&_y9_^hC#u8+o_MP#|hOD3R2hNoUl=wkQP~ zZy05YJ2Y65PcLs#eOvR6b;rJ6x}pi$w;`S`SrBs}S|xRQ4G9=F_TaCc^$KEy{({0p zKEBT!qpow@NcJ5{nU9Zc@~!I~7Y5XT8Vf69KTT9DZmZIF(dc4Ds38MRjf~FjgxNbz z!n!9vgf_+q><~9WEqB$%B9dtwgiLZ};Gb2?ynASq#Xh*zQhmbkJ*tN&J+8Ks=!tB! zEJi_a7G%A$5nNuycN3c;r#U{M7X{+Gs4&*LKVX|TZDE`j3>Td}S<*Ibdnzk776b5N zx>=^`!;D-t97jvb>2r2o^WELFG>SViKlnPdAmR~8=D|cRsd8Wn=6KkjD)2B-{p5E7 zR+(dgSY|V2DBn;Xl-1)^$dOG2D2ff>0J+>^yxD9p`> zDt%16&^=dK|=`vk8=IT`!I7?38_i{R&9 zhMQ>p-7yr*gzqlo$HVb&$mXI5V^C<`Ea5NvTtZ03+!2IeRN_iCcT8bH&&x$z`rrI~ zm+(W1e+ku`6WSSu0x?MMq2E|Zj0=whNgZldlxi<(77j5Mb{0jpD;)7N8wV28#{9mw zGH;!Z-14>Ts=x+VzeEQ7|5*F#s4llHT0}w`C8ec1esp(9my{sgA>Bv_NC_e-ozmT% z0#ee_ozkgN??buwqEFB_#{1`-!x$c&V}E<^wOw*4D#gEf)Hvf)%ww3Vc4jM$nkmkR7AtG? zSJa=wQH4`>RuqS*h#nc|-sx6I2z4rcJ1rvNo9!-}9`KEbZBW$6L031o_p6F{!;9`O z`-%Bbe9IeR^c!nQ$M&#ZAS@+CNro3qnbdg-=!1}uI1|r7kCqD zr(YzK^WiP#2#*{+sMGw!yT@h&4T30fac%((HftxU zlrc~Xw|$PDy?a8o=_9eAhFd0gN)tzV|6|um_N#B}JI75^_Rh+v?WpEO#mo>b%X&(_ zUGGqzpzLTVaL__*@}4|M=2eL0TRC3#027Ib|3a~a$O|u8P5)g&9rwEcM&r;b5)+Co zyglMOwMX^=i0^bC_qw<34Lc1ZZ7kd+~iz6%g^+%G|O0MFC~q&yOV>6 z@?Gz3pCdP)`J2WLj}q?*%x(ftJVg%w<^>f23S9WP+7#XahE0uB+iB5_?KpHM?E*u7vnkqu;VhL_-Dc+VjKxt3VkF;8fRP-YDw z-i&JQ`JyLX7u^fPT$~nJZri+vB$wS`@3Tq&$mE8Q*aWpm4V;;y3tXg@hN+r9i5P(h z3C`3sS%8}*LmyoT4^CqIg{w3Fn+~Ld?^~yftLuu-98b0arsEoF23YC(&hsqK%I_zX zy`JcjhEjJYZj1Ly7;DSnctaA>X29S}F?{lUsFMJ4LSWI+cjWO(IitIKL@;XRal+?d zyp?rcxyfs8FKo;@jB;f zFjMJyW`BeDV9rwp2E?t$bl#8e+Y?D{%2SVkWgH+?%r1 z0^xa-&DQ!S7I0k31Md^Dp~06<>coLDZO^_pB`ZUXB*=w!l(I4B<&PKC8S`()PT##K zYeR*EBl5%s_tnwQI0B>K9<=FE%d8Ai)T0)lA1SKZ$vEVieu%e@nIjdH7!%oGOA=K8 z@58vKP?}>`q)#sD3%m4+xcy%9$M8+>meT>?elQP^()ErHeP28 z=?UimB~3yeCZq}97;u+Hs*(~UgFT5pX4B-bfiR59CZ@FNY9sYhW-c|snBw?n-8Rx{ zh&3jgvsR_Kd+cLgMFLe)dAJ*WLp+#WblmN^S+eR+i<;H534(?*h^EVFcBpuT>zoUv zOhx;~dMC4FY2n)`H_BqhpozYvue>Xh6~nEVbamn0@G4W|>91TW|F%JsESi zcsnm`E3h`zNF3+PcOF(u-VU4WywehI5 z({YdH`hbrS(#+G(-Ju(^LxUGqu&?9&?zR&U@ibPwp^eh0o3`86QF8q5)^R-iN;Eee z)T8p|C>4W-0t$NU;LXMH&5hyksXlUyGvSLuu&6Gn%>4=Ix)oIKKsyB_h9(`BRLznQ zB=whLiqVR2l_E=6TegnX2_roy1LTw{SUxL`zNv0)I`$)l!BY({q*x$d z^b?P9!4#cOCY;!*+ZmE84t|I$URly}n&=e&M&ver=;(CPDK5UA;wQ{9?8aP|p*t8! zmUhO_Z*?NhtSdOcqqxVJE0>Weru-!>V+yj@gKGCFOgIPfN0v>=wz_>t_na6;lJB#QEoReD76fV;Kiu znJ})_dP|=@Dsy03DSsZyq71c3LWn_YEb&oCRoS$0jyA!Li@Q8U?)A>D4F&rI;2g_n8@P7qA`%fSPb^Bu@i3K=~GnZ zP?5IHJ;U!L1uI9JWM~9yj^_eoj(_4r5ACfQ8|4=iCGopZ9G$`(5LDs*E}7fV?c@+zBos*b6&kT;OzOGP zp$l@A)H{of5$8O(kt4?_UMa&H-qWFMkhp;t;7`x!N2A`gac|8FHC97Dm8yf_H!BX9 zVBJ4sc-goan;tkllFnrunh1~V^W1Lz5MOn$ zbsrGdlPLO%+UEyt#s-O(E!<&?PM1LLmNe&D_nYvkn09#5bA;$3qbcmH`ge0Cn) z&ijz8&mWt8VB0&X+wM*tedq^ub*7B3nFm`I6ZkuDIR@GwQIDlep!XOhDZCg%?A2?^ z_GlWPm6=vyejkRsD!Z!ynmm5P!TnnhgMfi#fRknhri6f)Ax40;1SlD1Mu5J!x#4>0g#SN51rYS~N5p^T1%5?* zlP|!JKj9YCS1J%DU~=(NX2A^ni;;kd?Q#(BCX(P^y07f?zi|XNc3=OEw!YjAK&$0)Mgo0Q@m-T~J1Vr2?)7rXN_D znSmi-;D=km{${9g)2aWBp8n@k4|w0-3K#_NlYmy_a@ZRfLuR7?IcR$c|E3-ABmUy= zhyFL3`j3EbI`ltI=q-o-=eA`8mKPume#$EV_KcS8W}fvI@yegIHth7*$b$bd>;Is& z`N87;9WE2FsKB)CPp!=l@HZ{-uhO7DYi-yWt})mDgZocfn;*ab-vNUFgZlqyZ5V%` zzY*{+b>Poh8+L}@D%Vdzz~8hsfc4a^8~AE30Hix`+5KlT{6PM1VE?SOVQ2WQX#E8H z4_ccascU~-+e!AkiWzX*xM?AO3S<6zj+ieU zGJs$E+w+>?THU(F7~iT5ximkyO=}4P{J<`KihhD+0uDRiY4JC(zwFOHYeU!>u2rmS zU~koiTxyJN1q(#C0j>uOj6iM<;Q9xs76D3}feE;-ZoHuWDWrt`dfMzYu(#+gfPBMS zp)vw4FhD80g31Iq69P||zd`+Vqy90)*^2JE(W>#yL#xy*Jf(zH~$#T9|=mNo5 zd$#EuPr!w?q&hLzFhWg6GLyYB87whPzV)NCTrY3An_b*1e>jd@2B9UXlS1RLaQ z(wZAX7Bwq>MyYsSMyWjeHA=-o%^+5B!*9%6O++OFOVqvln9M`LrSncW zmksD`0$-nk^X3^PtKh&(ivvYYmi$@GPU}-$wgW^6<~YYN_mwoNfC0m=%l`E(r6O-~ zVAF*HY*WeMLf{V1`*tuNNIBOl(Y^#7wm8z6a6^%T1aI6!EfBm; zcGPO2A(hN=;|zfgif&35`Iak@~Gf!onx z%`NY36T9Y&3ameB{iNn6L%}D(p{69*w4ov1u(HOoHV-!+dqQPiP8~i?hn6(>mOo!M zC5VVVG})yQB@0(a%$H}8r0l3_$&)zOxRRR-7O^s%;`$+!aX3@!xhJMA96aSRdvQ=f zVJ=uzT$r(_XS_E_BFIec6Q^KdvsS=v-41ubPWsMcBN$f%m(j0KNf$7m>l*#DFw1KM zf;Kgkn#ME0}*uIB*NY;LPVi6r{_15ag75H{k;BZA;Tf_ z&JikI&|zw-UpwkLLvW6F$+_}t@lq-3*)={)-}2bUW+Z;SHU4i2mI^=l!4;Q3Qq!TY z(p8jXbThVr`MfFz+x(%1A<0~a&|#Sg>J+xV*WkT$dn1hE*@E>;#5)hcPF?651ffzU zl@_wd%2K*Z@eD`Xv|f{Xm9FQtw+tJwD{K)}n(N2Rpz6KMqjJCR`)UuKh-fq41%x>x zP+@e|-S5o2U{v8(ZWkIJgHM+6y1c7RmVl~@% zF0dl+vW`jxvS86PouMYQ2F{V|fd?u|eKSD@#$>@|O9HSSLm}uO*u6~5K0id$NcE1y-ZzQLXh>XAN0qS`NaEsGokeh^QI@S4R>|am(*v zpbd8EVL;Lt*QH=6s^DHLUV?6Yz5>_NHp1DXkpr&zW%{Uy_K60O5NZ~Si_%p4()vp{ zxL{5T=A)!1<;r@Y-{kZXa9pV5{Zqn@n8k+%rYDu>>qlCNxB7i6;XWGLq91=wuY{Xx zH?RDDAvZbEu4ZC&k;B4>U&>d4#Y;`%Dm-brA@#_2S#`p?kMS9ni-p2ggyg%W`l^e2 zRWdA#JYY!A@*Op_9UEpjcO^}lR=}U$sj#+GLUn|n4CFjK*;ad&r&065DQ~`3*xWKQ zQpo$O_*rg17+ceqy!dv!B#GTvKklzl`X9Ad;f&+tTueEW(jp(~PunzTR)DIZ^;!C` z<(9c=o^agxnCuxtRjvIEaX9JDJ1TQ`rkckrgfIf8wLM<-Oid5XC{V!+Nsb4m$>86i z!=h%)lbtNc*J>DOR$^0KX#q-shdM?-GcM|9>wn- z;hHZJed4q2A0}ShSrLt%y?S1$D83hSXwgM~BwWnP(n)`aLKI7myM4#(y8z6Ym5*80 zJKMhez+xIYe27Xsnvj{&4{;DER>7V%38gs~BS}pI=_a!&hw{j>d~dRJw<4c$)=5Yb zockQU%%!l$(s2*|D7_(Yz}70CGxEA})R_>jpZ_!dL+jq~)O!bLTh zIu#oErtlp(g42U0P42KK)_v4v11Geho%`E)1^7*FmsvIuKeKE&b<&$Dj4+^dPlgt{ zk%ET;jfXw8WZ-LKAkdKOfB8hVLbP1!?mKEiowSng~+_CW- zIYx73_e`v?!(3LJag%D81LyhvF+UkriDEw0&#Uf*x0^Hcv+qn0Sq-Dc-z28ao*6$y zl8J~2NXgsP?kSOTk#(DE=NPwJ$y?OedJ?y6SOc+ZmIRX?*32YW#Fzq8NWh66P(~Ga z4-QMszeY~lKM@P+r2bf6v3t|I43%}4yLCFGZ3=oaW4&=J19fKt!;b{%IRoaZrzQzk z5aL?=xC(`GoIH3pK8)kkBiR10t;J7ZLAgPz1Up9>{EsNu>kB&X2?s^kA4@~=Ykl>Y z6PdVIl&uTn$i|}%^ zdKjUj6CDSdV9pC!EqK8;NZ)^9wmHWAKq+`{nyE1hO73~lGhUbctkV<keM}J3Cn}zWkr~%wu;Dk#r8%%nhMO|140!R6K3?FYI-4~kq=|?l z(PVPe+OwbEY4Sp5LZ2yzTZIuewW1zB3YXaqPc5zVc_f#XHr-_#EU7|4+peKPJyS@| zB`;}}flNbW|9nk*;@cT zEcQpIPcy`K1-z;P&luR?)BA!^IOxdh7P3;_vs;{c>T?SAls|weN_gAqm}oVynNECP zMOU_3Ts(unku!}rJ=m-&If($C57*oeaymcaKK1e|(cMZv%Pi;RIXA~AVVSYmyCCu5 zN2VI?ipeMDF)zreCe0?&7d6H^Cjr^C%Uyu)EhOlT)wW(<&V{`-vLe>oPf=(p*mET@+RvcOiH+ z-&!8-?Aa`h?JItAR>7U-83Aq;9-kwKWccPYB_28PF{niyWSBF!6V>^9GT9(o$z+}l zA8V^1!)>vWAW^urKtEilci>fox(t(`hxl-eM zsaD5@V?y}e7f4)mZsWPhi`u^NOFkBS_D0CaGf7ne4dShVFEswc@$d+@L1J(!X!lAr zogE>#moXSGlHOqV1wLpGJ*p2f0+F&YJnnw)oM-&PUnpjnVek>6^oTCi9Aw{TG-u^u z=Lk%9)&iY_PAxQyO2UkXWu!GbOMW#0VK)|^ zeb#d$g6>TeL&;S$-o$7!c*J(c5E{~u5GC3gw37yR&;9|DFu|SpDHsS|Sg{T}D);1> zeSwQOio1yTbex5)N||rTV3tEi*-DV$rlmu&(?4XY<%{2kUq0dt6=Ul6MVuV=bsjvL zejzVxZey1erV~<|K5I-9?=w8EV8+7tmY%;Qh_a4c)x2ZRG;cYUC@f(!`fVwPKRAw$ ztqavdk<_);vIsR>E?9{e6Zz>;Mvk{Hp*TofWOKGXIfNvO%09LmtwtkygqWr}#6B}M zU=Fg9W1}L*Q`N)N$KYP3%%vL8a`N)m;68E{mSB#cb#p5!zzOj~VzIWv!$oR}SHnNY z3y<*B+_W&N`}BJ3P}{tVavST8Gz@FM$=3}Zs)4gSo{wmrGxq&P3TH7$L+-EpC=;SQ zO_IX)7zpD{UK(yTnfBt~>_>jeHd^VF$)%=eZu=l8qQW4Q>lj?$$t$Se29qFHIJTL5 zM9v~%CPhCDWAd2(rP-<$v^h%k_%vZNJPJ&HDS`--^qOC|gqyNyEbGCmsc1=vuLrxS z+1^Pjl*Flzrjc+-KaAaRr~F>b66TiKV((nWVKz{aBdmmI|0wN2NnT#ORRbJ9@Yh%t z7u`CD5gVc}1sj7cwW@k46_dNN7=)`roK&$O2##?Z1(|YMBr=K+`lL3aig>6@ygp0 z173D%kn55au2UO#IfhYtJJ4i%yC+`Dg>@)}L%in*`$9e8{ZciqZ!G5r8{yBJMJ4!~=EK%I zO7@#Z!S0(+ftO7SrxMu>Etk3X!8t2y9KV>)S}&^4*h%r$VyD7Wh;$5AI6Nw(3&0%#9OKn!6w4(mdZVP^pU8R8wZ8l%!kfr> z_P=!FuSTP;@Li2Y-Hz{{g16a0*ZT3-mhjKP+kkH2e{H!xko1?MQCASJMx*`$@n1%x z*g?NHc%ioCjCh{9# z3T{PxrFgki8UQ9A|53aEaqOTQ&;36gD#mMk@~wyJFJ1X7LKa{)fl>Y|#mi5yH*JGo z;oYEkVZ7Fpzg*KB6fc10>ekh}LI=pQesD0Cru>XQpxy}X7wNza>?`9R+2X%him+er z$N%BrUtt9%i!TY8E2vHztS{anyX|9C(Q2mFzj83HVq**75@GB zDJHsf#AmztiSo;haD$kL@wcM&Q{(V=F%gLVFGcGoUIsQGtLZXo;D>P!@M!?_H!bo% zsfieWD_Q^1yGThXNs9~e|46?P;TM-wlK(xr2}J*wf^~%$2yggLa@SAvH{$)}QE-Ep zi0N9j`ro1Ziz_88`t(1ea;QljOmZn>~<{?i2k3784&A33%E2~NpyZ9|2M2RXo;Bq zSj~P&bgsl&zm+n;@Z_KN00WRba;ez>gr>kV<_GK>f&Q`yZqO1j{jrqYq9p>(_BEil z(DjTUreEp$9w3ikfo0Fd;}jbFxJ}axbvJob!>X}J?Q=SwwyeC=P^KrW z$*|1&cGR-lKiWSQvVg+Op{vby9vpwM@O2e8=xg6X>Rkr0B%A8s%RGV&2VSEmXQksRR<#j_DTsS@f?KOJvpgDmqwlP}-A{j%|7G}C0hf{rnN z;wK(Mo5?0SmMSm8=8GlD-<@bUHc$MD2rg53LB;a8rUYAq8Y(+9bDMK=A^3 z1mw>jLy`>gwe=B>pxwiY;epE(YvnhJ9TrtfH6^fNc>VM)RMFdmyVKLmPb-yr<-#F* znMv(}h+Yc{6IAM=cM;stf0*%^7hVxy>(8{ld->Y)^Uih=l+mGeT5|$mHR6e+8L_I)^Ob|w&u`^A2tVLXAKzl14RbMhS`$c{ASj7VOG?5 zra9WgyuJ|=wVT4Zjny1mVsf6i0Lb*)V;EKoF-?=&l?T_kd zX3rRHWCgYDKc8DWZT>B73G34?W36V>7jVt(*+XO3u%=iXw5nwGIpr(;#d zTdW<7CeRA%KTo4>|&(BLlXX@eKy@Furi!lRSE^@ls$DySE@HbYw* zdkNgq4s+f!;oSfEqEm`pEt|!0(RPJ9iuj z8X}X=r=^7OmH358QwXv6?@Af#gv;bJ0ImR|tn;W4F zJF=6PRd{Djq+nb?f|7e+&eJ5scj2v(#A>0&hT}pC&;emQW{&rq+kE@M^fA84!+R*e z=fBffSm`PPM*fs8hzktKErVJiM{!q02BJ%yr6!!hW~Ni-@#zab`#o4;Fs>PC^~HS6 z))nA|I{rK^I;rgeO%pcAl+TvAoX|Z+p}_mdwB0|H!MFTKq+Td)t6fcE1R*S<2@Cs4 zkD@zn{|T52@ouXK-hnih;B`b?wSeqLMM+q2+Fr5c_!CLY0xW6dWNWFu=x# z>20dYi?@M??j071o0dT};6U)9Bk1*-O=EAFYA5L{N^HGqniqK%w3#3 z6sTPZltK`!-5CX~9ip3fpJWOap~`c7OKc;0raSZ_H=mjc;Z$L~C0R-pe9tbhoxuDC)pQ_bF0pcYzHwYen6r@z?yW!jp z55&GORtp6{2SzG!$Sxi=y~RP=q1o}JE~(hT-Z9BE8nZ9_Zmkd+`uWNE;P7}!V@Gc! z`6GmEJCY*`Ifzf1y2B=3@N^LggpfoXv9auSlh9C0%&7hQpK9P zb&ZMm7*r>dtqKt#gi|M1Pb`Uv@7lAZQ*4F4a_EV4|4y%>Z9*sUQMdn2LiUF~r(l^5 zJGV7qA>oG`Gx?u{n87;I)YLcfTgrXBNu}hTjH9)GOG2lZ{L;ym{z;0rTE7Z$I!cJW z(MKTkC8>^3W^$pvgOS^PVG5QS_6JEa-hq6Sa@yUMCVR;J86qxeuKA#PC|^ZHJJY!_=-s{ETpo7L7tW4lRP<@^mFAj${sZpM z<&fd9xk~LJs*B0F(eTPdlUU^%>2|d4OxUw}!Nm5?uF)n6k$qDSCh6OR zQtsPr&odH_B;A=&Jy)QX)cwx_4);(`^p(si~AD z-4TYS^iEZf9Q~$@Eeg#{$NbxFp$pF9&$&M6AFMN}(WNH?d!6o#!qlI2fraf_)z(Hc z3%m?RaK${no6h>4z7lbHHk~P_)TmT{Fq$>i=U~-~i{kwXW0;|5_fh<4WR*R`OQpDI zJ=`H-k;vsFTo-!!EZG!wkGjTTZG(%|Lq-uPqQ&wNnUtf*)CP7DdWn8XTSgD%!_@&$a1g$X!--rsk5IOfA^F!6;_ zkkLGfK2eR+RmsbNrM)?-0g*ErSz3DC;Vya%@!FJt)AlPxrIo{MES(K8jA`Wpy}S0W zbg|cB#q|8=+n6QbitXzi?Hnmv&`aUprci6YqT8YOI&0 zZp8fnnpnM>#!9W+Pve~!-4-4QDVla3dASHfsFnd?dkqqyq0ujK&Q8P(3ZWV#!0MXh z7c6>O=jkEiPI$y53pFGwMn-FtNQi*Kg<|$*gB`U(-H|2RY4^dK76Jd^_dIMHqJwbQ z(>g6tdA<%(vN=5xt$qfDkGdC$17@&y(z({r?Gn6WCYwv-dZN(iioh(tHjOB>4!_TU z{umcx3ImCNA9Py%9Gi1i?m?Q)MOK}8^dxGO@syhd={I{Y%M%XJtg4stgHnS7_}Wd( zgkTft?nRzyX`!UkdmlwjP^OAYQXmTI3>o<_sh-6IRdW^l?Ah#?^49WdJEiT-*Q|c; z;C|Sq;g+_yR22;_-nDlg152zgln(zQ8&(`ndipUj%?@7n8`}gmRGV&-5-lC7_HaBC zVhpx~nQY-K!h@9a&}?BiGlz3-5n9NZnFeLrQx}O+S=cc{^s_hVf#~7BMug9LxgSsl zd6iNXRt!F6@!uo8f8e=+js$t{eqjMxpRsszby9W2=~3j8QkjSqs4Es#JQOmxk>C+1 z`I&K(2k$u&>BaiuiE~A?N6h!u)e!L}xEL>>vzcCu z28D(BrP0J$P7>waI(V%~S(4UGCN2Esw^HWfR7mBO&Q0}vBa6LYe>fCc5Yy2ql z8cGu}vTT<(6RR{j)$iK5KMQVN!#}u@-caCWr6={gw3>{f+*&EGcw`)=48h<2 z_z=VuiayB)oo|P)q-ESDeIIW#(iBCjnj(1&G%!9kx>)C8HNlAeo$sTNLKtk812gZ| zRxRjVLo_3(V4{<}5L^*9Tsb$ZiJG!F;Nw_&eFI9}@R(~y8(DpR1PWza^n1D(R_X#P zEpUg$&DT{bvr>>WYGyulTxQsm3x$o?&4|FMyNA>o-na>%|NE2MsnnMoRLODhH_{vw}nFXx^@Xg%)d$q{mCve z#M@bO5f;a9r5Sp>V@kLL-ksYP>tbt|^I;a)Dx;ADJ`idbNqo~!d-yRB?jcXA7iG>eF8Iy9i{EIEIdSx@poJa&t!4YQB@Thc|%x-c{YJfvW_Rt|EeD9-e$Sh#S%P|i3h%yGVqs&hnl6pWXgU_+AGWTe!=&+YWPwD5{KBuwuo!nZq)! zWXxq}ot_&QIR+w7?T5!Ov*9*!X<95O3CyztiWJ-@J~p{6ukmwXU!=i_J54PmXYcfo zBPsgu4rK9@x2CK?%efc&jYxc6;C~s*fY*H7#AB)_2FU_Bm(3}*Uz>GryP@d(VmHN( zhe=+D~XZkY%aKrQ!2+JyW$eRYNMYWnIg zD1RMlxtvD=dR4zoHZfi6qW|EeZ*)2a0o}w~5ngu1fLVVQz?2o35xSfR1iXA%fccx- zW`us}Jl-&U#dNJ}evLQ3ZTbpyX_N5Zsg^&mXjjg>S75K4dH)9XmyX^I(^pK_TIScl z-Zp&&V)#q1oBQRtn6H(a{}FWmVow0*ux|g} zKM^ys1Hs?`mGpzg{|Wy_z`tJSK+^pm>Lc^D+Velae`6E@ZPu-O^9n1FRB|~1eC1W~ z1Npy!y@66>zE*qw2lnsw1R#K!{};T#<$0;z`6=XJ{DJ;PyuWB9ZV+;?Tq{5S!+VpE z15gs&j`AuD;wQ?hC(>U~{>u}I<@fS)^Aib>Hr%?7jEsO&Jz!tY#!d^Q#W1ll&@vD( z(gVBT#w+RH=F?ezD?nGt>$kp;0Aa(eSby$O5WsT-g!7dw<_GSZJ~_ZK1Ha>cYvm2^ zBbGlGqg&rcpuZHQE2w~=6d=5>d>)tq%blAghW}KPSpJ`D67b-;bxj$7`yF`bg8(NI zK!yeSX;%Qc#C_wU{?iMI<+qx2_5J_&LSp<&U1GW%?g!rQKQS@`_5{Ff_WuLpwZe3* z!v7iLU#b&O#n~=}E`W0ukOl#$Z)q6;(bf;dH!tL6{rKV;T4)CWMYGaZYKcmNxGcO$ll<7*88n6+s1ou5hLhP!J)?0Yzc5&9Etzo$E+~*C|~cKON2$2 zcw{MlBh>SUKjSL~%}jkeb}*~1*TTj>mlzw|i1*1-=S{8pd#6WR=l+lHI=C3Xf+KKoaP%3DYVOBTpAPK8xnWJ1pXI2M06(&C^ zV_r8d*<~v(TrZh81WMM;ezQkZAFmy#!z+(2@28m-b&^LWx=~hv-_$%hvtt?mYm++7d_b zAN4yfaz=Qe`qQQ6W!k|6h!CqkN^kB!GOOcAW~c^dSV^#!!W@z|Bdx79am1`4$&sI_ zYD@EdGyjzwGJsR(&5ka8B)`|@-De++-+e+No#{{2=s+?^!zYfHevXg#Wh5B(jK27d z4JTDICIp7M*cm*Pi!arS^+I0bsdMWs zbFa1f_y+7)oV;BZa2x1i6%E3T>n)-1C9r(``dQ)ZtQ||8PO5A5#n#YCF#(YtS0iM3 zIjYY6??vJ-{N-XiC!7M$jb9&Sp2Tx5fwR%=9>B#^stQ2hxk6yLscBi=`b4GPm&cj6}i&J5-h%N zqkQ^mnEtzbn|s`6k&DTF*0|?7G13 zqp&YjgPI>dqM`8Too&HPmO725Ce;yZ7zxyo}pZKu=&r$cC4exc5e>x{d)xaE)wI z#M0O512YGo>p>^CdExWq2z$9D9?lwCN*og?T10k(vFKU`EPHNN(81u2d(5cAQh4!$ zHFCO8%l5bYK%jVACqWZ(0F5*hOq324cN}~#36@t$k+3>p3&hYSIteA)ca8}VseIZh zqdS5wVZ_0vW)oN#i2_DVbd;5my}Q%{j3S&Lm0C4J?p^BzAJwdk?Q z!MqOcy7y-kwqnoESs$<7-7+3dg#E6urAhU{-!f_;BgXV@-OH1#;K>;R%DRn*M@J~s z?%~bICg?aM3HF$csta*X;dix-NMhz%`%6kU&mc0Odj&wu!#dMz6pi_OOEz(#s-}UB z6Y=4Wmdj;h9qNgbljYr$%rw@MA3VUIe8lA8qs7s6*!nGu$i~{)(W*3t zek2QA7(O64d?w^|-I=W|xZnXwt!DEV8qG?h`cwDN3RGpCXAuaKJCtKicf zf!jL>4Rccpj<_vfkeo-}K9Iro$2dIS9gD)w$(KVCXx5FcX&9Sl9`ydoSk}*ppFC3E zBjyw}PMY0cwUU7F5IG@Pxgr>wnby9TdR&TPuHD29tNKHWgUB-zjjOk%Wa#1-?$@RZlw zp5Wy&@9*zSWO|-Kk?mId$*>wJtZpT)_yHBy@fZTjc}sWNkBcw<_|u7*6=%51_Er!;pv1)(4{;}OU_h@8kO_n`d}M{UkC6omWlN!8xxRq&^&RUV*Le-jQ?^DTuU z@qL13v>)E)_WjW0?K7Hn4vQz66GV7K0m&7S_75aJm)erkCtGN=!Ji+>GOZy~&qG-j zf6&2CcLk$5sIi|ijiaHps(e0(nJ}@mq`^9#Y{A?dRO&Uz?B{c5ci*L0+c~90IK}Pz zO0iYeCSxtPiWyBu*ORyBWobIwc-`!XFFo!!VFfG@s};sj4iY=$tUH#%ZFwe_?O=v7jErsoJ=z2q}5dXe19 zK?Ya1Uf;u|mGS8Pkbr6s4AIV;b)H(q_TpTN!E~G8p`h4Ws*ER8b@+uHg*tC@Y3Y&c zJMV8c^7KoqOBus)N)8njU{OrIWw3W!-BhQKq;z^|i)l@`g=Zg4J{jh~)sQ&{yCLi4 zjTWG;=Y|EP0tZK0PAjVdsfZXu z8^(#f4ae&LKtlN zcY)Wvs)lh-K!GXZ)U@dYwmL=P?A0@Q^U;fN=9379Bi#qmaL>_sU99uC$c4#is518L zF9K=62wx$Kq1VveC3n(7wN23dhUuD%?6pd_Tl7>bz)a4TuPn|jn{^VyQtTtQiV9|~ zN~=IY$o%s#H)cy+xaW;;EuiK?l^hD6kfJCOE)XV;1m-OqYRqSU-Pj#LiRs>nz9WD> zSDpRIB~8rosict%N5jik^beP8Pw&w*3|48-qn2 zoS(P4FrM_Ptf6U_%}!26~?FchmcGA4P_AC5c#{^`(iGsrDhkB z=hgOHY(+IDIS$Xm_0=#{S!J<&`&t{SGqQThSMFIvG^!Cuq5M?4`^d9H0~E)@VBn?M zkIfHUGpN)8)lmsOk;Ng@90xgC=M_a5fW?CZweTHvbuj8W!j z1uj5%SNRzVzomATUs9`w7XN(_m5Ba3`Cb^_n)17f~GKI8|ORBATzms`vCGRos9J$52*Tn|*_#!o7>|yf0{SbG#qd-cgo^ zZDY2ZVvZhCcJ#0(#9dL9t zh>IJ_5PMFay^Qy;-8eYzm1E>g5|)h*(&f<&B%D8Xle1)fhKS~ z&tf&AHZgsU&o$M3b|g7bWQL!J*Tasq`@_zuJu9roffyh2I23$^4KM0qrY27U-DJZ| zqC~~@!ka`X7R!MB71^{RhbmMYAD!=bx(IO&vUf(|oSL9++$b%Ku)YwBH0~(vBXnvh z^C2AY?}7>6*ZT+3+towYlh8xZXlW95#ij-p%+(A^Ba3yu;cp$&sfU>;q3kg=mQ1;r zHuEF129qut53%!n9aEAR=&YiN%ud%wyeJ5aOqh71Z4#N#)rS5!a*@E!Nvbo<*o#x? zIhQyFmS9WRVzsh{CqL>uxRH!z5&90244VUyeny z0^Jt&8z;4X__F@DaRqeZ{?xc){jEu@ZDwd`ZTx>oJL{+}w{C6IAl)GyBHdjQ(%s$N zAtllv-JQ}QASp<9BQ4TMNH@|U--FwIUiW@QJ>U5Y7y}sdx1KehHO6(Xd)|&_*1C@W zMS^||F4?wM}YqjCD`svfIlho2S9x%N_;n#3(E*8sLLt+!dcD) z_;G*v=mB~T_#cT_fl;r(#P9DFf2;q#ioZ?j|DSbbyF<4>DfpYw=Lf>}8wkw;OoIS~ zio2}`JU3QAWd>$S+yztLZ_5Sdl>UhNfJp;CE#wCZeYbMovE*M1`0wY-@*51z3={-- z6q%U-)O(kk4UBOG-1vZg!t{$-zW+eH-%OJ~S+1XR=ur9W@-dsp{IhW(SvMc*6!&d>_H3cq*yUmxPWvj3>lIliR}|EJSges|XV)kAle z3+~REzj}xf=&1keQ|9>BY4cCL@xOZL#{=hnPFIFKlN;P;WnZw{(D=MXF7) zoV7iAfDWnEBke9W!{Y2_z0xjc)JJYGz!z*Wd?9j1Yir{C`mt(uwsrxQQsvW9j;hFu zU7mNMJvl{qjxR8-PG@sgindN|t|oUnM$eFxPwZ}cM!UuhZ#S&Z^6{LDkMvy~`7YF! z@(2kCioR|%>`$H1%S^SLodGi_y`I0a2f~xZfbitfyYS?#{r#J5T(-GSS6>ah_BWu1 zV4WGKK6NBKSfNoq(4|3ds12N@A7*xD4tQLNdzmn6OMiC8=QyMz99ZU!0AZg*+^fMKWStB5N6jZ_zvho>s~1IHAYAH_Xd`{D=V({yqZ;PIgSIbvsE| z+kgtFBg|`l0KQ{1=)ay95IWD`{?baLbHPQ*qEIm+QUbJ=b)0EPuS&|{E;^YyB+ZlI zJOGGJzSa}&7H=MVK+s`$QzTDO4i#`LmGR=qLfZGtd16an>gndC z&)3{in~k(?+LAFAI51@Vw(b+j2t*bWd97uP^K5?V=4%d0tz!)ukWE9PPAUV_2fbb$ zd~gmPh-HSZ+HKnqI;Nxg0_=ci5?yEi0BpfSpFVBzrOUw*yQ}^{XnmLLftxJW0hE?| zq%GFz=K8VY^hNrsDtnqZ{Lo4+o`&=G3S{ZnI2aZvJfX_jnlUNauIEeHF4F?S$IY`H zPe}bbH$z6w^@OsDMk;5ezeEQJ$)|7Dsx56UWAd{=hZ9I$?|Dfmz1{rc|G|A;f8~hz zEd_idqT0(G7hL<1hd5UH91&A*-O?6Cy7L?6GKEc@V8}4Fy0g_bc2)SVIrel;`g>-- z_Ga!lwXnNo%SI}5XAXi5X8B7BZzc7Bs~}E`%B^MC!4~l~N4h}h5>a7tiYemdn;@n< zzTS0IbKpi5*YXxXXc?yt7&OE*Gyc*X?%LZQ#Qd(92z z$k-3KGBKdp-#=s-eC(Q4S!J(!>uKiY%WiWBrZ?H|FkkHl8>aV28^5vfSPG$Bn={{D z6#R)~UKiPi71sBuV`j7KYi~qyG0z^1zxVJnheH?kFib$y;r+D7=V)vZ_<>QRpOzDKcl=^dH3FaWG>(%cc(JX~q&s#vV3ttD zUebf?sO3m9_lwZ6N`$hlk%5?@8=Y`-vyPb~Tv6o&bE)=8;X4el{>16Kp?94JpX zXeQoq#Ps=V9UL=@v%VUFc-~`^N?G(vu#QxCuJQ)vFTo;E()(LAnv4unu|rAGhTztR zFVKph{fi~uLhWCotm6Z|Gdk*hd?h<^(^ABkRBxw!hVG{_KJw~qtOI$r(nQN(*RASkVsGi-87< zMR!9e-cw&!ThH}pi$R3JM|A5cQRNfCrh;a`W{mUPd0W~A4_Q{<1RbZBh~MHst{)jK z)18n$e}2Xab}9K{X>xPmEU1qqvf8~FCnlwb$7%E`7O%(!t<&i!B;s+CW>}RbG!=?dPJT0BHkn?}$VRq8 z<`ix114$BOiGDV&)O9c(|6Ie4QDR#^?Ta)vQqBqQf*T=2!~);aGTmIltkixZ1nudw zT$;2=0lJNA>x}r09xh}N7fGpYJwo}WG9gA#HX?reR>R?ys-o*Wb3yK}QWuh_3xc<3 zd`yUVr_NLYAu3s`^S<%CIBk2}$F?RwdNbN%Bx|zi(2Td7?^At?bV@|lTc^@mm+|4{ zie4CdsY(0Q4;;?gUvMs0&oH^RqRR!CkkcJA7Nr>Zp7w(Zhu&yzf>mMG6_bAMx$>V@ zlqFw+COddt<2I^eGQZ?xWJ9yjspm#z_`KUlF9X4(9{a{7rz;%lG>FA^TI5T&2ciuU zX{=3o$=>snJ^!A~qD}U#GXe%pEa`pX=Yk&NL(Gbvqf!~(N0;6o!*P-~QQdYT>NzAn zk_I%0f(n^K6>~EohC0ApnUEuQwmhHmIOh> zg!V6kQT?nKJuKs2=qF%Lv37G!^InIlbBlC~l6Er3u3ACLuikQAy3%8@bFW?G|nk`<$8yTB>kEXHl~!^#Yrm49*d^QNG?? zMYYA_pe4;D0)mKct4UDDP|%3Sm~*pX0+THPqx;K)Y&JY7WE1ix=I=v=Keo_JMjzpd zswQoV5oRz^) ziG1axT{Q*qWhO7}&j{%2jF)NayN!|E2Oaa(h3vc7Pg;l&t}BpIE7<7Z=7bQUMw)9u z$dt_O{ft{AD|l{Elaskpx@`z(@`*@QdB>z4&vSqFq|}|}GUL}TX9&9N#6ygEDZenK z1}lSiHT9Sb50^J}?)?1o*WR?C5?9hmbp<@JiA zgQ4T$!tAyYUg^cn(^{6OMKls-5er5=ERcouqcJsoCT`Y6HjS=jxcxR{6z~qu$e66A z2XQ4gCpQMhUgg0k2a!H~&pb&4NzsV{o4$eQHmn+y6RVa-+c3{T466MW)kvIu4ZPZE zRHoWxYC`;iP?2PWhDU$*kPROp208RZZKUhvD^GKrA=af`K^z&&38jF_ff4D#TuUmX zsn%K(wM6vS1v6e1YQn}%#2e2ThETSlTk9ae!EfD3EDbNOW+Hw2BklE~W<+HUpWDK6 z74${HWqJ3rw1o^~K)!98Exo}a){n_a4VG3GQ=liWm5lDusww4*5kMug4rqvTgb3e1 zBE=y?8b~0dJ-BA4c{20d5HY(hq=X->hjA$mc}#B6Fwltc+NK!PMtUab42&>YLW$6EpC)0}geS4bhML0}yt0ia2 z^R~MCIWdnoJ~Is&&AJg{kdfwz2r;l8u_ia}Zh6Ed8Y1DH@WIi1)t$VunvZ2T;nS=- zgg@b<5|dATb7rpf*)tk(dug09j5baAL#cQ;+=x+#Bb+tOwN!?J-_&XN8g{>l*gG)C z@!8q9+d}UO8qg;i6T&SrC$h}+)|pIV`nVA?`G#4yr57&|_k35exHddiuiGc82&9~| z)<@L`>Cm5JTJCa557zV*W?JtCTZU6}>2+m*bk%0{?pX$u;nP&3+{mHu;8DD`_f22g zMou=b4d&R03CfyWonBrAbw7NF76kKH0x`dacW}hzV<)ADSB3-o(BJidNQwQcBEl1k*%;1MoDV59% z?AfAOVhOV0vsP-C%)bLy!s?Cnt7Z!fgXAfeCo_|AgT*Z%9=1qZXL0=CI*{{lyw#MI zO;({i=V5AJb@Hv8C~Nk3PMc0>%>$eqw2QYgPT z$MJE}($i^K(-uA037V*|8U6HUGBZZ_CZA{2A(&nI{dg0j3da2&Fy9gjM6VVib92>G zk|oi-gs77{Jnk)a|61bLEsVxQ(rfGsopKcclTS?Q3&#T;1T$neNkD5CVhiPJY&nO3 z_7Qv>uYNU&6?WUBsKDI$^I#gSH~Yh(n`d|nlOGuIbG`9p*Uh`JkIKMC=Zk(Te z)|xQmsU;0tf_O1cHc7yT)&Jpm%DLcU)kQ7xbAeCpiM{9r^oJYG<;^4ueb zQm9rk1zEb;t#|gg=E3Oa2vWbV&{ry};`dPQy9t-S;!EGL*d5pgco-8a;JRQV`n6r{ zU*P5*I?M6@O=kgDz%NVwj=kA{>*D}q`i{NXfSjgZOwI+U$`3an?-`uM@$+lM-)}ts z7cBV=z5R~F*zPiI|3*uH)qEdX0&YbASS9dGe#RR){snKp6S1elzs26HzahEbX&4)D z+Zjm3`cA{X)qh{be+I+Y?qJb>U>M*`_~rBcj=fm{+XC?azhiG!PQadcKTG^0?9K5n zQu|Bn{SBi2owoH8bod>6vjE}?FkSOIvSR_pQQq%b0<29xKHvLx;m^VBJ-d+gH(>UA zf8QBw0NLd`_P$$T)_cdz{%acofBMsH_;WD(uWfiAnEkdAzgS&h?&BTyW(L+1P`3V} z-hht^_zd@L#XnnI&L4~{KTz-c7WX&U_Iryn-(9|D`I~w(1M~cTb#MG1J$}#Pa{hpA zf6x^Eba8*gxIfvt-}{^y5a#Z}7r*U{zdpl#i~C1?&iU;g_z!*lo1^D@2i*-E1#+3c zcMvc`^#A^le>i&n;35C!xcS~ejDSrVNHqL@LIUB3k?|>itTU;ryFInzahW~l?0H5|}P0#uBvqxM-S4vn$R7vdL zXC&KiP8_DYQyZ`X{Z;7Q+w;!C^vgp3Y%Bij$N}MO?Jw$Pzy71`v~9Vn^l=Gg0PpEFlUZV8l1t4rp! zVpP*cOAhTA60{`G_Z^DMudO&LRqnSu;iDXIbWEHtA6OwYHRf!%U2#1>A?D_jwf$nQ zu~xNt*tJ~WDfwj3#8~C}0Q~B3Lh^KS$!Fc|To+F??KzDYm?|vhRr`s%icui+?PY{C z5|Sq#0Ri4^r+Rz9N(Z>rCgTto;a8WJ!vSY@S0}=qHtRrkqU0xoo86P8w$;U*@MoWq zhLYAfy~>xKAR);tg|`q8?DPsigs&)nvoeUD8}tR_3<%(9v7H z+zheWV{-rU^pn0uPOtJyCeaW_(o|DKtgV}jB}TG`2wKHCivv?99ZiK!gy`X6XM$A7 zS=-5OPBPCN;X2YdeXQFvowJ?WixoPA4HB)QYCqDFv%-T%l)>`b2hzmZKy;6VRy3_& z%Expbx1MvmRfiw?VQjkD=b+8KoSbpW@uwC<<7_Ave9B-4ggy=vO*6+`zt&E%Uv``0 zf5xskOB8SS>`a8hs@|(jFYOZtN*}%_bvo&{aGH&8uKoM~lNZH)lYDUc22BK1beZ~EYjk9BJqP02wXtHBY6Y*Xj44Kp z9bLr4S(#MY&DYN_E@>mZ{9@8VdoHI(F8dhcqIYT0`dVD(W$dDB>m({!G~Z}1!@0^r z-Xn1D6(3S&K`av}LANq~a&UxU(yJJw(`tq`5B_pU%x!4D(A_$py#+)~F^i?H#nw)QXZ2ot4z= zrRFzD*9yzFx9A<%I8ydcOkMi#D#(N4_*LcB6qXb1k1c9ql9 zwpOohp*y6E@Vl`G6uVQiLbcnUJ+u2rSVFHw;5QvZ?pYmB6&YQ{ATxy!BweV7D7lg|Z9ezK`W=j)Y+83zLhyrxtgA7Bhj5121lA@WT^5psD z+b|FX3E?YKvB=gmmL>6`8zk!SFe1c4kNG-?g*>7$ET+c5+UisM@N$euPg11G5IcDL z_;r}v3$?s6{XZT$N7Z)I%_gEfIi8nG+Nj&{uNONEcB4>Y5rk~duT`_BV7!V{wPU(O zp^Tv1GAUtx6oRV=rU=NvROCCyM`1>@#HWdf&O=;5KU;@` z_EtC2JAT=g_+^^|W`R25zNMKcI#3e4quM`i$IXu*c2kJt2UFbEX zulScP*R&4ioU{ebH*a>e)D12hbA1+DK5z$FAR|PO9D-BV*Q^`W5S9;)c}HfE%3H>~ zae8&tKMsLvrR1XRDn8>Ov!obLgFOmGnf|J2ylxhZUTbrTN+)R<(n*w8Lj|k!7^-*} z`z8M3gv`Sa5=4!Imf;MN&1_UnTzzg=7TitrF4J-HVK42-X0+|Ri;ex*$&GCYDZtIb zz|mwI_IS**uq0IN(3<*F`EB_`dz`zP$d|H%uprY_pX6^{JB){Ypi2 z8~Y}NRfJF1Hcl)i&RGiBvd0muW5p)Xa7%2`P1-+liruv815+!t@(PQ^n0Eb{|siO3)dBd>$LXa ztA6LSwqe^3sC13vksc*)$Iz;pF6U-^Q~D~9LVYAkB+R&(}-~MmSblH z6KKdGA791cP;S-;1bqOJ^xVg=?$|1Zx*!UzjBKPmel0N zZMu@J_$`nb%!xQc&JD568ikb(>z2FsmmV7Xhk@{m`qfz*5#MxTM4J=M6s)_~QTL9I zFVzKSEc)q-6$HBD=t)e-jz}&aT9j5fxyaMMfF_l>a(B;Y$PUK%x+E6g|I7|7{+W71 z2L8vqjjoBcav9^sp=Vewny;l6JvGxQ1&qfG54LlfEAxiXfgC-QS~zm1L7l`0TgE*> z$e>46ClL6v(y%a_SBxSvLs`6P}hv8o?CD$rhCDPyaAM3#Ec15dwK>(W#QPAiaM zv~9B!MEB6j?$b%m?li*|QoI`fTUacGf%jmD60aCf(9*GcqaGU}PPW@ab8dAFB-Uot z7rWZN+a!n0WfKk}z2;x85S_8DdLEajiN<7B6wG9nYJH#-q4peZ-d!apgm`o1qAw(C z>dSe8bR0@PIqR^cH4FENCY5uItrGK7@(gT^cjptDMOViOC**4ga@jrMe6^!7?896< zXb5oB6n)+SlWNtz0iRxtWn}0geR3QS32GjbdWeK;lEcnpl{smg|As#XlZR#n;*m8w z&o!v$L3eRKKHe6lf1uYWZ9x45bR$Q}D{VJVZiGvdNsdCI5x0OnCp*TxNh}&!l1U_~ zv=fklSO^y^oDE_ctQP{SnPH?W{*Kdn3xTKAEz>VQ!w1mVA?eyxEg0WrjVD~VE$}c)#ND| z<3}_GsqB+;$SFjWbQv%Q)NRFOU0lEAeZhRIVw7 zrVPT@3ED9w$H|pDec>lxdpgg*Z42KTP!={0%?#M-N=5UDe4&BxtoSHp8(NbU`L-yF zYr!=O1dmu!olyFD7O`omUcH4(NX5gZKC1ebiCzMs=uG;JaObl)H`FhB`K6wf(zMKnEzTT%ctNHj@)o&|| zU8x{QyCRz_V1v5*i#3i9Oo(W4r_||FBTNMLV5H>rfjT#XIM^mJxHkxcUank|1l0tN< z?SXbHRRm8l8j9bzuTQ0ak~DyH@g$RPNSju!A!+Yz4Iw|lt=~N)mtd8TRW_a-@jlU1 zIo?PJw+IkJQR%O_h}m+^vqUIz_8_p%MD9>A3u_Cc6+gFC@aSxn!t$7x#Dwh@B`c@7 zr8^OYe}AmK*-e2IZrgey=bC%qTEgoNKz}HWSbJrDEr1#pKh+gZE z7}kUIQLPWZequ1I;$J!!Q!wC$HYAMk`T1-5!rH_L3n$9ZF-acTNnvwc(kq(KO8TtU zB8uI&U&)2#pKj<|`*>gpGe+%ZgSkD(%&rT_w>Gt4_0$RAtu~_Vc%|gYKB_OfEy}{7 z?7?6+nIUak;Nr6$n{YwLv})*-#$kAYzI$^NhLZkJe{y5A*f8Y_0cIS;DuUb8(K*Y! zB(WhE)fctHnU5zHhA;d;4OVoz*Y;+bRA$UgvqJICYHu|_(1TLr6>55q$EI)XZgy@f zHxO$p{W&X85%HTkEI1BhyX-dPGMDroFKd>pDAWlZ&&7IU9a`%XQXgR}(geuArEhOu zG=qmf)_7O*E-R?sDr{z5qqHMmcVw zu(F@W0hb+MlsgwQgM78lpdsRr(Tq^?n0hmy30Cb#L2 zBWIjEDRhcQDk2$EsC#Mk3XxHr{?l>~-a*@fNnfN8ix-p|?*>FUeO9!N69rV{I7J(^ z(gbN*#48{Tvpl7n{Bf~p)yWXpV7vS{2 zqreYVp4jNLP#zT4Z0Q0=_9`r!DO+0Zz|M&=C;Wi8Cp2O>?HJKOnWE(}KtczVP!F#Z z$-PyculV7qy;3AyM~>CBNw8m@SI%7GM``De#7fxuMpLb{)*C`=-9&CPfg_NnFp!40FsZsUxHuCN|6lsc7vAhL=HWk!*%cBq!Q-1Npdxh>#6R}lC28Q?_#B|4= zFuLmO;xwp)UDdXjNY>CPyETjue|QxHDb3 zOz-GCOGAY7avY+!#w#)%ETmL(D3zN`rRPhqgosUSZ4eJ~4G#N2MQL zC_M8@E_ARSUOHp-@kfri&DO!dFRI5&MuisXx;Mb3N*Tf@@MR0?e3-B>yg@a_Umfy{ z+E2NS{T8;2Aczy#*-FL;h9Du2=_zqGs%d*~L5t}<+3r!EfYEaQVJ<(Rkl!&s8xS-E z{OWhi&(6U9tN6A*!u*^+0QBG9ZvQs5fw?Mo{0yiS2zvtJu7KG^_Yqx2AjahfMeN%+ zKHzu%;RFFfu6~ZoO^t1g9rPWIb6EL2R6)3s6Q+92Y<~E z;P+Rh{syJrWlVmrlbMs14j6m->pK4cq5>=W?UMI@c>cF3GQU`_|B;#i{R2=#{(7{3 zRdxTP{f8RzQ|b&9@^esrKXv{M9{*ch0tV>-mMvxmKw|>F0A0iMi{QvRlKnqc5JnE* z$Dg#z4|x2CrvCYqPWIoh@xR3--~|M@yY8m`+zDdeYQBFt|IsNdce7Q0Qsoc6njf~G zvK)|RB>XGe6tGIae53!ZD*?U*U{>CBmxB3M%32>$`0mIq=TO%W|q%8L*XuhzdVP`j=SU%k*Yh~i&=8~iO<3q+S@YWjSfB0ODCI*$<2q%cDS zNY zM{cDz^1>#8R_2)7vOtTV?K3{R4 zC^v#xcH~o^`{!nCOQg#!H8CO}Dr_0sOJi`;M5oVjejA{%<7p zSV-m{6jFrUw6YbUY2?5qt+j^&!CE!3Nuca52v|1Cz7+lL>!`6@-6%b(!mU8C7Tgn1 zeVp8>CkMtruof@FO@z*_!B=mR8=_r!->U^ zB@^1gz27zZmaNr*yJ9lF0wilWEI)d?e^7LU$f0^|zlKf@tXbc+2#YB}I#wSizJX{1eYSm$&4j zER0&RQtJ448NBueg58`8w$Zq<*9?_|!_M53@bp4QHLX`Xg6dxJk%z;AC@)wpcj`n* zL*!)l*{#Oi{OMpOys^iqLLmGwyAs|JnG`6_Ew5B2slFdTXRZ~d-CDy0TovM1V3V%4 zT(p=343IStLe$td!3rr{QhnH($JhmSj6;Z#aAX#tZ+v{`(M=E1#fC7kwq5u>FzE(g zry6_m(b>|4c3sexH`zHd_fcQUyYEGXnyWcvuEJHJV|Wap@)>d*X2Msw@7V_jFl@Xz zp^{O5Ihi<>onZd_1^CfU_c)K2{1O!=+9^iKXWtStS2FpsHk~fi1<3tZnN%V#3L6jQ zFaq*Vx}1fI?a6OSn1|e*LrGxZMW&a8O7&S*opAbz9_QoQ+}e(6aTZZ~ zUv@XEO(U2%&M4?9QrbAePh-^(ACDZ-P{NkqVwRU3S6QRLBWxK^7i}NVp_~(ca?g}_ zFaqvTgc*g{9*(y8xLw4WB8FMoFk~R=tvnoZJjD~B*3;#OJUGd? zr-jjSVbLiw?(!`L6EbCHE*I19{h6iPPdG@TULh=8F>J5OghAr&hl|%>HzG=a>mQT_ zejEzqN1^GY&=#sdg5&Z>xWKoO&d=+{*xl$RZ_aM9Gc0v+(AhtUi9@bf`8X}sK#xff0|&ULeO_gW^kG-%z8qLnGH_Yl0FS?;DMBC zZhgc@S|+1vDBTilS_cNi(ve2$n(7qpOaZaZEDZNNZ!lQN^(gs?K-O~py^i2?HFqc^ zOFUo5Q72+Y408Rk#Ki!GB&}JKG`JK7X6HTYwkT0PJ5jjCaa60;7iWHKE^TUW=-^a_ zM#b{Pvp=FXCGQO2kJu|m;q2H3+x9r1`^FM%Iy=Wj66#DH90sE2sdHZ7&WSrMV!vW{ zcJ;1)+EI}}A$b$zlK=TpDR#`RL*oHQKbIq?l1{#-cE^}a0ZtNo6aPnRf!D+NE(YnT zyoB=oqtwk26Nhoc()0sQ;Eo#Q<(`E^_sleq+M$s}a_k-WY$EgFBKGHmSxqHMCah#v zsz>M0i|Z?Eldx-6sz(TEXo1vsF;^>7KQyX)+JoNE>hn3&eXq-H9TP1neC~qiY1(D7 zF>-mZZ&XiiuBwNb5wc4VNK=BTHGIa}5?R^W^7W}n%=mCoL0~NRAqFxILk9Eh730tVQj#o5^dyfq(zBL z__WaU7TRMWK!o|BHxrgC+MeF}!W2i&4m~rfhqD12(Ypw+Sa?p_IKi0V1d0hMbOZRW z@XOD8A=F7}mDrbY9v6tN(?`fIG+*+kEnlznNnYAJig@Xy-yR?C_}hGf z2BP9!VaO9XM(xn3ocwSHlzPjyLPwa!GLj^Z?wxj$Z3l&T z>d}YCiXERjcMDb^de18dw!^=UNMOW}zv+Mu9_l#pP3!`O@i_Z{C+dXicT{~ zT|+NyL~*yOCyZhs#U@@A$FWW~&sQkkV3YMpi<)aveAN{-XD8@mke>-3of3#sfk)LI zlh+`PZZLMjCLJU&aYAyD4M--af zdbCY)d#2&!hq-V^Nfd>pFG8zUA|^~?=LpH-L?e;al&WZMiK+y*Numrr(j zRSfv{nzoK$U7?=ggCi3e`eRf$=`wxw2!y{0Z$2E@T1oTsQ9%x!e-jnNIo)mI`YCE) zl^IrX%Qx~c4~ta+@`#VviZLiq99AYRC-|~^sW8XIb|_Ld{_OCjp)(?s3bIYer^gQa z6fM!Ec;_RA0nmqm!sQ-l)D7Oe;(2@O~AY1M<@^d#!7I+7z7y0bWSuW*L z4|dvaqs@6$uFWhB2OjiTIIML77?z#R(ml6*hea=&i7>v z8us)LSzjKEE6qaldQ^%=6ok{TyYHcZKO)A}7YGU2$SI7Q9rdxVkyou4ItQU)2$C<= zSRCZVn8qg(hv}0bBWKo=4|`2_;ycFCCDtYIcsNLJi>NR^J=HyW#n((15{iIHtvXMm z<|Wg9KW8ID1-92Pi01p(gwlC8t;T4VT;+@HI zikalLI`V?X%3EmoO0)+_He(p?(WESRxrIae0oqyZM(rv^D*9aN| z<1^c%;+oR=49e)WbGvV4T6AL%_-?0MW=%zeI5%V)>l|5rls{xm3Z#Vc&;y^c+A6|m zm_Z&m=|ud~-G!aiLVk?^pBTZ!3F=6tm!|!%->~Q~zQri+aLVuZf0WNMpllKplZ`eQ z5&DQ#VZxJi{4L!`**+cBUT}s8pQe-}V z7ntd8D^Kmc75!mLUKyn8Mt*{9L1IsN^Jtc zp*GKesRWGWAa0a1!etL#x~L5cP_EC}!)^$u&xE+84nCe=a$rQ!(m5fc@TwUa&~k~` zzXr#Ko9D1r`JiYHxzMU(^yQ4JrBl2;SzbYe=f{%Xy-8qT6IP9-#R zD^99zY+qmgb56tB$B*4!ARtQ#)I|BaR_d7IqL6|-fOBJc<>$&RoLYt#OZ=H{F)sv~ zruMyRc6pzFFE)|Kains*Tqs%=0XV+L+_7omO9j}ds_^1jcacFJb7k;Ts^~Ft;pbWN zGpwJl(4MKxIPs-Er}ltYL$T6N8s%0YR2B2RO&#l)#&&B+m_tDt9jbb7NeIQRck(bl z35TjBLk)=-`oZ#sTM%ZE=7dlq-&c7I-olx{cW>N+&WeA(ekm)CaBZ14Dnkk`AfCZU(6@f3 zB##cSl$a$;^EQ)bD)=R)YXe_J`KR)5IHt^ohnA}FqGUI#PB^0s1qBo#W(aQYfbZpM zib@B{OH999w{trtobbFG$*EtR$!KrReq(w>y?cEwi0I5e#tYK!(Z!Wdmd|F#tYqrq zq>&97C>kjlw@YJ(NE)Il>XbL=M;!*iE#?z91h&q&%27w>8w}O=?1L}^ZQ8AjFhc~A zWSE@&oNKuzVH`GsLG(r}D(&&dz+5PvTjC0trm z9>LgjxKy-`gR>EYtSEr<=#hDV%~Ls#zh?2qMdKYli-)rNLYW6OO7vPxA%Ej^TXZ_r zIP0w>f-9JJiZR5Q>Fbj%fyzKPmTmZtkye^bIr0MK>KPAlHv0F63oKXPA8#wbNiJ}7 zl}?BnR=G)r53Qv?gy}l5cc$%gzfGvMf2BRM|KatN_?sMIq*&BjQ|yR2`9p>R8!8ti zxQV4X`N0*=169IeB7!YBx80`7k}yr&i^YC`r+R8{~ihb<{J0k<`%%=^nW;(I|hCP3$ zeyr>qbif$)@6?YKh`{;9W%55k&y4>Y^n6FJ|G*T+3S7hn%sNZ}lf0Wh1>DZ&`~@KY z6ZFjZ|BIf#jaK^``29poyo+E0^f?wlnPcDpJYj%?=`Q;S7~S>@t>z9R{|`+4Y0dx> z1LF^#p&uIO=Q#tw{HtHC>)(nJJM&#M(|4r*SIzfrLdJi>RN#^P6sG);iHOUH zD~kOJ>EFc`{AwqB@0vR`=??$?{8!ij$8Rw7-=oj~3=RD1-=olg ziFZu*+nD|c=`;NcL;unf2JER{t`;-!61+290M0c)cwhmhN&&E(2@vFdAv}DO$$z&C znSKyAf4>WVbI5#0`gcwnK+*Y*^qKC`SpM|=4gBfPb|KRbhs+P}?|<&X`;h)!s?)D_ z;`a_`1bl!%%FOo;zstK~|37v((+{W4@7MM>r_A>bXJiEqaA0l!IvW{*mp#Y*!|?vu z;rFfW&o$6LT-)CqN=)o`dJd2m^{r|aV7eR-fcNXF|ESBESpO;9asJu40|bq}~hg4dv?0#Zx>pX9+S2X_!l%PfkBO z`s}C^COTcN_sPS>K?8mIfUZS9Lq=yX#K8IXs&8Uk$n%J}0bjPtfG72p7M~~O!N(`2 zRU{c+x4bV-F2iot&ne&quM^1_O^L@}Bj)M_qY4yG@jT(XT*YPM<#Tg#a(6tE9a3;+ z<>G69MZ6+KeNG6|Rl1jTam{4%4h}ndeyl9_+R4-X__fPn%@esMILv^XPty}E5s?e6 zK~D$?t2>DThWfZLA=30JK@n-DCk_M~XwEI6&MQ8lFF zc&R!9kDu=XJ!>&XRH^!dmP{5Tg~^f`@no(-3b{=kN>U!7a7X0BL}E>J=xAqeu3b@+ zhEHe8kxko3Bva>WSYK(6aObY!A)Z=YR@j4D!zC<5jut*a{$M|rc+5_!9!(DxKq}jh zsUm@1M<<5~$V^AV3+wG+x6pvhw4$@HD_gc zln~k(A(K~&AAkg$Sc(MmKc%zttP|`kx2pjE5LsSjTKlEIQ=i-%*#Y{!bA1gI)#~0R zf_+u|m+_|2^L)bb<_=w9uhzQgNVGC+afXcCQz^}jfrZ8=hC83ZFA4XD>2#{f9jV%h zAdMd|WCy+ftOnARECK2MEULWNS^?4iB1$?j=OET)8n`8Vw7K{x@y7I$lJzT;q7Q>O z=(`z`YjDgPC_YYik-V6cQ)tThDGg%W{%p87&huLIFwpXmVzQs-Vx)t#e95a^WIGHLYP6q_bEYyo@B7D5IE}$^T*A6 zR7Te1XF^6ILWw1-=#pjP%0WwbJZ&vIBJaN3nI4udJSD8fsf5J z<8|X_%tmC~dfwu8RgHp5Kdm_BnYMvGEsO$LCGSKeb9t-Uk1{haMwj72QkT>75OsAU z71otiun|wMs%KbcA%y23K@ab&t7aNE5Iwk(gSwJ^`0~N|D{$c#S%q|Kp(?2}0We6) znf`FeP+O#X24`(YPsRQ7eY*0P2r#;zYope z#o@VOm;_?9oTeYNWJ&1%xQiS|3qzJ%CzynJmyrcR?p1q})lrcCK$_2?bj`V0u@`th zxwf22_R2%sA=efH^_;5?l7_D-Pqe{r+LDo*uIs0s#DC~fqB&M1dGI#WJ>yD1G6EFY zfZ7$!4{1B~N%$uu1^d;r0(<1gmJwd4zLs_9h554W^6aH2=0vj3r_%YuNz4^L60&!0 ztl%~7zxLuxAp;Fkz(PcD#ywj`({M#s6%iI2vMwpzb3moiW#Hlj7iYZgw+qKyY2n|B z62lo}K;`NwBpbjENemy7x8>+&L#Gsx@Q@^p=}mt3`D==7+oLsFyjXKw-Kq!c5X`WM zuJ{z-C{V%9ZMgC_upi?Bo5E;eb0J3`4Ig0Qz*&juo8>Tb*xm5xsk&|t1zoR_9YQ2IW)_xsfq)yygNA9nJH@wOiqQ-fjudm;WmaN}Lqkm3w>|(CAO=1IC2gy5VMAYx~3?ya^WdP~AcEnELe568hjy zS5cnj#2S;WCl8o(MEMB@`NQ=HGm3_$vw~4rr|#>{8m5%MH)wBX?5ck4E*VrZtItXD#gy|Z2nN!hv!Q*K z5C;-b;^91YHKAdU>yzTTWitRPDQ<7%S=rABlr97gjBk&-tWSPkPuKRaVt`g{%pY`? zCw?Tb8&}Eo{0+M)1c8dSj@EqJ0vYB|6iUDs9OM~>oj6$dTCJjfAC~lH)OW}OSbBS2 z!dF9`NNf|YD=zXq2;v(+&xG0VND>F#W#l$EU=%0O2`L5Pn`hp2;|WX~b`I9IRu&Vx z8!L`k=DAWO=maN&NAO4bEGa1Arq6%oh$hiZX?+`J(!9p0g}7u;k8~#-?%h*rG#qYpgn$&~G=%>#r2$r2AC0et9H8^RjMG}Pea9&E6 z%vd;PxQ4Q+Hmecgrd*=4y<#d-OkVq9rNC~VD)ZW8USi5ggI%j3B>(Zi)~xFOa8L%t zO86HP()5><{d*wGl`$G_q}CM=&~Pxkvb701o|5oTSB#@SX1 z?MS$nj@lzhIJ!-Tw4tw*Ic3pMoK39gwbfILh9UkbCd6#l#3C5Zt=#k?lJ*EH1q!CD zTRvrCt%~C&@VZrJbYID$*4J4MVY?IOFUbg^O!;<2$uF6j-o!3nERJ)C#iO~SRWHHH zvOewaE}KZ{#0w8K2{EK?)Vp>xl))f-Bwj4XkyQw97b^CguO06#Jto}@%Fr!;vbFD` zxJ3-~yQYAbxr{XV6>|w8@ zF*kyzPSY{QWh9^##aDT73kmSp+)nlistEgAN4o;wIUcT&-Y{CP9o=jKg748X`*=ZH zNz;eaX?Q8f#-w_)4@{r*UnWBFIJa2}dJ#^@mve4E25bF*=@ch5QN~ldfn}pdx!<#D zXxD*$Q=>6v-C2hzu+{DX-gKtCc~tgDBJojk3y#)VnLCEcLoC10;`Q~EEgqC^&>e~% zvKeEr-2;UZE9ce@*Vv7DQ=_$EX$i^6Wm&!vIizFdFT}oHJ=ErpMbQY7Hp@(C;N9n!^@*$-$;N|IXs*e?)ZgHfLEYa_6 z2AC@5MxxSAE}`SV@%U|C*@f(U=9hlXWemRF(z6+NmWO#=U2k6q7M+f_j-vP2k8+8~ z0gcP~nLE^}aywE%4rdq`T)#v@BRv`^T1UzOpz-a#eIJu#)kl=Kr=12hidq!~E!%Zw zj*QT(;l}Zhy?MA>%n=7k#PE>`6uDImS0t0z0667ZYYk_FAPtBv!vCY~t%JHw-|u0% zk?wA!;Z28hcXyXamw?jUAuS=@4Fb{)N=kzW2uOEG?r4V!%evI()vl<_NNcuYe%bOJG&QBiR2|`&}eAv!4hf5>0cH; z4u29&)tI>gJ09_MGnB+8YhL|k`C}T%*2>K`;}xC56eSN+YkI1qBr2iWHiQ4NZ^Nij z;@jF=4f9p`2Wb|%Eci9lpJj24=wIsu^g!?^6dx`jd<^K<3kVTcw{tIy>D7M(?N*!> z-k2R`Cd&}~wy=Afh(=MZR`JaqYu{YqZhIc`VE?{Wy>CSX-d#s{nxn=ZE~VV3NgIER{CPv#7wBfHL4JDRTrW5c3QMXo8qhCbCa|!aT%VbdE-!2aR*=7 z{Hy9WkKKgG=U^T@;n7fl(mA=Mu1Zk-G6=ql>2WpuP~r0Rd(n=J`0Wg4kkRrRV^@X~ z|IdxNMdVrrG3I}O)tJ&>>8)8ovRG)jI`l+^rz%4QPIvN2%{@~1U$l_I8zM1sU zcrP06gi2I^UkQe0JrazGcw&WOu`P>|>#;~E8*ZcDNv*%%9+V{w69%jgN0{E}q33)| zKN+z^Erjk#*CQ_8x-4FgTd<@su`351L53wARV*D%$2{HmPg26jxWN*+Hx=Qe1`|=Y z@q24x-j_~fut&nW;4jEXFK9duEBgqVZv0*)(b(@KMm;PL+`U0tnFBYAVX-Ne-02iM zgjd^rj-j<;Es`fp{;iwl{sUDIy3dbz|LTIu{mu?XBQVJxaOxS*>MPOfLs;4?WT z+uT}0bH)WXqx)UBoqqIM{aW~lV`^%UvO{CVDv)`@Wlm;l3wJ#Fi2R6}2? zT!H%7ku;|7p`HIuV0MsKutRH%=(%<@kIQFso{rYKK=8ookZ;X5TF7bGI znA-cV3s&iRlON2obg@vHoHiVlle5v<6zw~gohF&~c6v(X_C+V|k5{kw!=7;q>9)(b zZE2S0?)I1SN~t{E(wHlLAEjv?;98}c-|SNIfXb!+5%AT8HL7iXvQ(SQXElV4XKPy* zpJgL*yYqWMg3al{0{T)_FPVTpOwsZIpJmVmI@oF)e5kt=dETVWvz%ms{F0cMN+$v^+wu(!WG=KX1QETCHbz(0$~DT>Pe70B_&CqEw$0}OEc zJ?r z=-1Dn|DFcJ@w3!=z$5V;{d`Y8TAOIVh!-> z9ss}raJ}rmW*)yyV*4NW%nm%-|A}1y^d0wn&+6VYiibpy?+6aWB^?E z+#;}$0PV?fpKS6={f+fMy>>B;-~RlyJCOYGTabTQSng^2KiEfhK=SzY8nga= zv$5Z2r2tIj4=yUucMS7=1%Glne#MI4k74>9EB+_n3<6Mo3$OqTU;sJJ4d`CK_NV5bo`hjfzN$Gxi8G?YD<-aU88xUH<1EiI6ax(#=`PhKFh~qcH&EIW)_X^fe zHt2UE=l_nlsQeE{9CRPU^xMq{+>XHX&_D70*f6SAsIU1W_5IQWOS_yl{231|f=#V- z6OOI@yv=B*xC#SiOtPAx6+`+V_sI>~TDleg1Cb#Jfv@D=zT zSo}wY8>1s@q<(!?X^7+s>~qkMw5mRAT}$Kh<-e3@LmEDVNHKgNLFc$Zl@czG!Gmy4!vjock6*zy?vG! zYx!;6>^Y&FSvIlcA89#*`bE!fmOfcZv8P@rNRpu!lk^%wO;dp3$9bcvumL8U>Cy&v zNoU;kuJ{Td3Wn06%eMT}3cucFTw?0Mf{9AEmXl`!)N-^o!wpoVd92BGN6ZTb*)7=G z%FXvoeJGUUDB}h+jVLj$I}$jb7EfCGh%0)za3Ds5y*d z1C1kc;ZX2k@8oTqG(qXWurB4ztDfAH8=MyI7AOOxL;0t3tWnG}tIb7Bc6Nf!o}zs` z1_w=dVXw48F8RS&#$_P|hipzC$&H!24;7-yC&-wutp#kPN5smWl7^hkvlC?_I&!fD zqsIj2+qc`1AOr`T9D~bo2HvbG_!(lZuw+IvA%7fHGQ$SwrpJO{gVC+K+DqNvBDOqRkRM#e!c2 z(jdOYkoyF)0h(cpQw2lBStr(^1E-eV5)Q&4Iowm`Dvv(rAj+*IkM!)cRYgfsmtKD* z6RIqhXpdgU40RR+Vsw1ftaefC+?f{~hKVm9fND#pC(Wv*Y7ai-6IIy#l9YOf8X@8Q zgV7;geWr-=CrgfTq~3?;6At}j56=^!v#NC@|bbs30sHjo(zLvCs%YbbR&_AVHa#LacT4c7*&ZA zUpe+>CdbUIi74g%d#r~R5m*)m`*^oRMoe$w!3Nh50v?d#*TY)C;ot2pKu=a*y-jbC zNIs;Jb;zUQ33^LOz>?#chbBH0g^^a2vE_}w1x{w1%OzGX5oxhPds0iR`gK5dh-`yi zsTAQ%MliK9NMTWb5@0U3P$*JZ-!9y<`SY%&-pScS{N=Xq1!%*C~ zqEc>gZ6Jx;WWmAEy;kPu+nOc0WZ)j_emhJNj>_vc*tM!Btyx{-bfd!fG;0KGWotc& zl$h#Ct(Sq>+uW;Mt+ zBF!E`vsy@m(Je8>D) zSg5E`zb(e{VwpH0q2?Aol}+wC`Qan53h+kGw>Z$66uoGjQ*!pWjl7D~eT^mNt6{#L zFXL4eWM>o;i1f+?pieKI;N7zc;h-*xq7L8~kf1hNwlP2*om5t)&!Egk$w^}SL=GsT zrE%t0(JW*_;XoqT)CEvGo7HGpJ0bzSgt$7(@3h;@XeHZC(^~Y5CWDm>qrfD{VJe5K zRpzP&#HRqsXWp2I7K4qcr3@B_&*Tg13aeIUUn#5Gz5o1b zox9B)qYu;{YiO-)ph7GpaN4d+7;YsV)9ls?B$u~fl!iWlmq<4gM#jQIpEUfU&8wsA zhhs2BZ!~kYB6!q=?Ab_^o72^`?IuPD*FLf1(75si#0riR)=v^PNA#+}^{hV)-1@px z>NU1;Y*xSdR^qiz1nL4-Sv<$YhbbMsz*THru@_mEN)1sMY#IgFufcQW7FV}n-%-mA z_N7B6QC>~-Gp;iwKf6u)3?-mhS;3;{QLYl7QkTG1O?Y0ll*#1#CY zRSMl*LtsUi3SDHYnG|##tR5Ue5^pkU^99o1TvJvYu8zHnyv}3YhX(7Z8EfteL=V`s z(^MP5P~~~I(w6l)q}Rp|Zy_g7?gX}jQ?GD#MTWgpbO4WUf{~*<&v!mo)@UE5d@UA@ zfZRx7+wU0xN!&)>;IiY%dnd|F&P$@muT7^+q;x?2S_qUh=+nh=3fP~~IfnG$#81%5 zdp5tYtDk^Xtf$L7-fkg^@tr$))^AD)DWgX;fBcy6TA6%X$5?br@^~%uN+|fG;K3WW z_pcuWSHcd=ad$erye!`RGKGr7rM|hL@i@&lNcH2(An0=^CU<{VYV2nb$ffUWk2+6A z^A-k^;fwv}g>TtqI%w0lls*d|_&<_O%)EJny=1<}U3n^==-|*+hXuDlZ*TmB|JtTN z5`M;{Hmi4X#bC<4?>R>%K4$fyj`mUc3?|mHk$QyHq7Lrlj&kG^q}hJOWxSH0lHoTZ zmfBH?6_OKRpIEFN3A*@-BOp=t$z6?(`k}SPiVP92o%<1&lC<1c7LgTIN%$QJP(&xa zdJ=8vaCa@Iw`~z7Bv!@-j2cbv}<`*71} z@Tpt<%+|RRBl&zV5Fr`u2@7Z6SfTl<*H<)$7%&Y4G>kzinrcSmZX*^=`r397+qfz? zXtuD5^ukO*>NKjtgrPsKJEi@SOnk0Z$;3kU5ixR^tRjpM16OH-uWlsqd9ql~LNfLP z2}fnq5*>b0ZtFlRD)tgy$2SfKJVw$niHP%-eHPaIb;Xn7w$K9=Oi^7TxDaT5q$1>$ zuiFNV3i;)*yRW z2m6QD_oLrC#ePc3Eho>xd#Q|x+{86m)O|| zi~FZRXAlZ=ka!e-pe*l-%^(1&BS=Pt538zDHEqzm3CT+^b&WC)e4rEh%-x{q9d?jT zf{03fIm;VUArZJtxACP}<$eo#tOVB*;}0Ow>o3P8tw-2k_O-Li-d)tAy!6XoNX+O5 zr~8CTPy!$C<9ihq`tN$W1s6@~O}H4I5}Q&_vVrkw*B~56*omc`>X{eFBrDHvWadde zL9yV>eK~8@ODnUe2+Q|!9;(6Xe6+(!f$nT|QiRb^p<(PSA7Qtfy6V90I?wqHw&JtM zDoVbwim6w#U9JP2s=QYdLr16%M2>}av=rTale}xYQw`$Rk~@^;7YaptZ@Aw*vA1i} z=NubHo74|unj#y&L;j*{d!98%Td=c~c$ag6-1hEi?O~4eZ75j)rwk+hm9O4YiM_n3 z$cBT8{fagpXE*Uuyvohn?fG&`;-G{QzNr55a$dIgj1)D4iP0L>cDF}b@`TsC6%@HeuFumW=VXn(&al_Oe=IZ%NW7ZzAT2(Quali) zAa0!?I3eXxCZVTT37}<)(8$hVm6t4GYzEb71e@cEuQ%!i=H|Mk9kt!^h`0l+NB6rzMgyD0K%E zKl&6@=q+7VE%{bTmvpl2fo!`3x2=lQLa=#u;ZvcZ`nm(IE|3nD3?-37muVAc*Hbut zaF8@iw4bAsgr58Ia%#b?sM+RCFM0!*BBBf#N1SnVsuEE}c0iJ*xEDF%GoKU-axwn<9^r zxmTX@a4Z|!G~Ld}+fQlIYl{}>#L(Va=Wv=(#WT)LsUa7oNA2v%k#aSf6BU8~4$C zVyQ<@r5u^1PZ}+vQ_z#~jvx=onu z@g6hltQ;h9WbCum)=$(Gr4qjku@F631<}_t#>C>}@)Xymr=H=Vca~X00oSRVN5yZG)-oTDd@17p zOn;~SwdeJ?INr3uTu)ExNSwqZ9nM~%(suLfKJmVrx9#9U;ijWMm)U^O@c%?Iassca z0Y}JvbT^2Hl#7M+cL7CzXSjbcGl%^Z72QB+D8_{GLzs02*^UHFWbk6m0GoOzj-0I;9+9}G#Wrjx_3}<|3+N6FT?-zLyr5Djem*@>_5mM_xho* zxUiU^rnH)rp{kUkiki5BxR{}uu;h6~L7yNT)h?zUP z=mI{)?;-y}!D0XVz%kH$0@CkP1$Gv|A$LE44_I|T9R@UOKwiJMQT*C3_ur1te-}RP zN4@ZZnF9hs|-vIxrRIGnDPytC-KV9CRC?C?Q-&Xh^%lR+r z2Z$4}L4H%>?iFmnat69jtm62cf(=+XzuSSF>^~J}IKGoV{<=2*ZwHErO9-pWsr{K? z^V4nky(aP#^C1vK2WU3;%MFZ11JaCu06QQ7h>7Qy!uz+;aQ}C1?zj0r&ke_Sy8He8 z>Fi?c;_Cd5hXEkgf9pm7BH)?DpZM-=RQJl)@8Gfiy&18w{T$zS&FI_xZf5+hH`F|z+oiNAq?eh9RC(=iO4^AJrYYvLv z2`($Ahg+d9yN*t(@kGZT*{!(STH2>F;!sR*(ubENZoYND+r0U_We0{y1^$2toVPhG z+zdW&Rw(!2G5a~nx~;Q*l+LRE6fC!UX*I>^ zHgS7$t;opP+SY8nbEzm;om}}~u02yQq6_XTmN;>3Xudfmkt)KiW z!RH=FH*ue=C}z7pQ|2A3DTi7#!t=mCS+~M zs$r48@kO`JG7+NQz*Y)zYxJ%)VkQz;{=h$rkxLzV@*df{wYMSZ)?O(RH^!uJb%h*x zaDlC&i?N6jLA4sg#(6Vo-s1HJF6QatRN1l8tVQoff0@;)y5T2$4{PD+5aW;2RD$_} zU*;QQA6U%Q@DHgV76p*T@7_^KN$lEIC4;XH+Fvx3SH@oA!G-F5F_lN0!7l4!o|)++ zE{u*B8e0lC6K{pXTlC1OV4+eLGt6Q@CD$*)aYc3Z_-gpc5{{iDNTE75lw7VRBlHXk zDvI_g1l?zC+&K$Z8EY5F#}xsS97d>oZ}1#mS(}h8_{$HDz3Iz~*2Z5gS3zCC8x%_k zsEI__B?*!?NP@myzJhIfjd%kt9;{r=8pa*?p@}2ceE>wj-JsU#ETm@#?h29a6_PIK zidakAOhnsLi#JU^3ua;8HBYVA{i(^JUE1V@AB4+M^@lcB~QYd`Y+2~K5Ym)U(%Q$ z;4CS8PBId3;G)I}M`#0$kD#>=LkZVyUAfSfZOv|g_Mv7P=I98nocV+SN9OkKK_xz{ zOV~SIWV2vo43&|Z8B7A5Z90ke;>_e4oR+CcXpWE;C&Wq|I~ocxyuN(bxAn2BJSi71 z_$e0SXhIK7qIi|#4;Nk0k4p9LY%HKF1~i<(V!9a!hQPaMU>(4BtyKC|2tYR*PswDX zpdi;`zRpEjWR83Fiw+R77Jw4Hm&4-u-dthc(qocm8JdFu+nH~!c(m~vO1egJy)6tf4!t%WpHeC z+4jtWxDN3Gb~?2&&xc%r?{a6byI4>+{|;%*x}umQ;3iqLIy2j@21mqLxVX0a#dX*=nJup?xX%|^F#E5oDd*$l46=Ol z8Arr5!JK=Cj1V+R&iz$PFFSd^nzzQRt$fxGjcPAdwHJEx0>{hFV3EQwJiJ@5u zD4`ZxfYaq}Qd(?kBc8@+MI}i+5}j|R|CdM0Wu(>ish{hWbLHLn6}rpnI{DfVRJ1zl z-$+zzj^Zhi1nE?0M;PNggcRoXE^uJ;e3qrI<%)5TI8RKNbT?xv zjPDULb7h?nF(tm~zAWc4xg1HDs9HRMJ;Wf?d|?M$cXOk7YL_IeB&=|HltK2a5%->$ zOt?pYQ$g!3#BmW#ejnwG%0r8>WD(_wY05#Nq#HITo6_ts1{-H?S0tof%_or4IPe$e z)%`G9)5zsY6*RAw?n5%_{UeKSg4DQX_ zJ>w#p8F>$Wr15;e(K8En zTlDq1cwV&HpU4SF$qB#zoyfOGb^o}_pwnmwc%F{1rt^$_B?6LKn z^(v^sFP9LPcex>&iPZ?-)g}sodEVqvpibGq)HryD2<8}dwGn9lLp$IZ; z!;2L4Gn#kUcFsQ7Vjoo6s4zt$!ed-c`+{8{xd|75Tj2g4+U&88CVThJwzt35p=nG) zu`Lki)|QiElpe9}hD5`f_!+5)#N?6toIaWdb~p#W&j+=A*3GTUPAcxyN}u0*78L~H&6k+!MvlK<6XWdkpR7a$zAhwwy&==zhEVGK#PaFmb zayFd@lBle8(lrSYN z*@i?5(LB$JR&lUAh%NQ}=sURJ5Sm+X5G4n|EiHjkoCc+?}wg zfYbdWT^%x>W8e)uMM49X9mMMf^}#lBKCWY5$d>}Ip42UBxh|o{D1NZedu=wRU#*Bc zZk^ha#wn$W-8CP78PJhUscoiqV2piLoV*rY4cLObrYx7DI5^X3aS10@hm3C|xjHagwGh$>Nn>>OaE1t~=9r{PE>WFqBT3F& zFd%w}&GM7_q}v2bUZ;35!b$ATSg;wt;@z*CB^5uD;_Q zEx;?QrBcAmF>u1dq(?C!k>2)nCSD|kyc06ixxZSSjP~^izn*=bwO@lMl^LP1BK$D5 zI>>fsX+ak8RJe2FBhkA-C@%v<{$h_u0*$WEm-!TbcMdJOwd^ zF{9cJ-I?_a>X>+%A}5E;PcTMYfsyFBPF3BX+BBF6l=W|QZG0&oa;x<5hinm%i=ZQn z)W0;v&Dw)LZYm?1XH)4Bo#bfl2Xz_*ss;AbG3I(lQK(Ty>T(}l5i4-&3^WGk?Rk`+ zXj|LljrF?U`JNaUE`?JYDv#)Ls9Tq^k~TDYvess`iXncY%du@rRcv-t4rVIt@Xr|3 z6CiZ*lJ{tzEp0QI@@G7h5hz_Z(+0<4u05KbaXx}L|EjUxQWuiQ7^ye5;5xe-lc&8D z)Oa=JF4b#4K&us;I{*KE+?GAMr0hqLhEax^Nvuf@XRvk zOa&qBYW+Hac|OR5m^;$fuboZgP2`%0f*<4_JG_W`^3GH$Wx%=Y(Zgvli|K>=^sF~DbRxUE&gpr-o;dAF@7;?esp|Iud~$7EVbWFBMclKhhzQsTid zS*9>9#;gyGp@LOy4qeq;Zh~3ZT9{tc6eN>5C;CnEi5z(I#gsH?QLmU@vvecLAhuN2 zIZNFIpCqskUr`Si_#7=ZyN%|T38cynI3h!X18k?R7_~PcQ!9aRT#x0cHYz8Tk<} z_V%MU0tkpFp<2vn=S!4bejbo%3LHeN#opE|H4_?k#<1AzlrOJIKq^FVi zD|MR8amz~!P%!y)7DksFKWi3gY^N5PnLdC!J5;AxF)YLMfK6IR+@P*qm3-(pp_GeY z-2LiIB*L$@ey5zZ9iNVpk`%vL!CG7bH!<~gPY6wWIU_d}F+7xfS-0@BtrXh=Rk-s^ z{Ko{d7O8Hh@>3l)u@@fjh!lG!87;Q&Du|#ZKO;?-Tc$h* z^F(kUD@f>;*gvy9qrdvVX6Hq(DEvSuAEywFB;-Z^hl#1^a20BW=+KmOMCIU}o6j?; zpD6o>4=ZRABTvk8akiyRBD=U5Cs( z%0{uhw%&yBL%qwb>nQu`Nb%tE8Wq(3#ZYIm5x&tuVMjl7FA@RbMtCr8h$ zV(3hM?qv#|(FdyG@2mO!$4VJ>Un3KLNLSiCpdWyp@e@$$)AMwG?}Z83S3>jI^mM)U z6z(Fgi^p`XC!lg!N>63(HX~(yLxwvOhE7t}%_rPypD~?W{shbOA}LF&)btRG#n{;kY2qt^(tmB%6lwcY58OsM<>4xCFvUb zAkQtwGpS*TdSg;|SC*HY-uX*~k$lHASDOAza41WA7uzt|#zj#=i1T{V+0L!ek`}A~ zs-r$4znotyMe8W`l@;Hh#pHvo?yL928PU+<&BOC zId0)Adc~tYo6nW0m!F}(a?Eb&eRLF8_jaF__n|bi&hi#UphBYA_DM03qsS=X^Y9!O zdRh-mi=&BsM>F?a&ftjyW2KA3a6-(;s=3PV% z^w)H;M4(9ScgFX;MAm*n(1S{~%SZ=Z<999noLdd~pw96|n8!cE%{>dMyL#JWJb$-c z12r1*a=8Qr|DA6_;H2hqxFip8o}us@(}GyTp^erFwom9d%Q?pRq%^%{UVPT4%GO{C z+k?t+^!M3KbEqcA*v?7{IwX9}q}1QO9Lt$@bqwVp(HH!Yx~lP{q3SQ^ij!UjR##19 z*?!&2(w%2RX$Q=r+5-H0zD4OG6S&ucqebkyztH&D{zWeNlTYUaao_vGKx}{l0Vq^} zOAPdDKhrn=#Q#y2KZ{srW8wHgE|C@2HdI#?mJ~M>R}fXvR#N+sRljFv{{!>S31}1m z(flX#&&dW@gnm8D?>{mB96xc5{DS!h)UV%S1Ocu!z#zxL348!_6kvWDFyo5@koees z$)U3XX1DLDe}Itv83FvAg7S^}zZaeq6ct3pf1X$m0)mu&kCYu?&VdEz0!%|Z08*ZN z#Rmk89b{$u6%)+*caee}u)+Nd>5n?fJ<>my{5KQ)KtR;eZvnG`zKLTXV3s2=IS<6c z4mj?<#R#$e+9CFB7TfMz7-&L35kp8)=atqlaoW4{Fr%)?{>R1`K~f*z2l#R^D4 zfPw)6vfCeCZD^M$YfFlzVXEDk_R9 zhSCZe!gA7LhEl=`VshgDK>9Db%AZI9<^5hy0rHxFrxk4XxPOWCez*T`X95P?pCbKE zRrx=p3W{omO5!T=(rRkrV*dd8y}I%fi4O#bXdqyX|3J#l{!OU-9Z=T)blG!$H?{R1 z>Azm~pnqvge-@MlI55E4a|0i~1=oRodDVYQQu@Dwasc1|CrkfBPx|}P3#&+~%Zn@g zqcH&k5Py5f|G>%$sO5lc``6-sL;lOvzrURS2bT3d2ka+ce`rg8fW2RRRdpq$`_~5l zSbfmHw5LCj-VX}~L_i*3w*nu&;r=Dk`wQ-WNPiJo$oWHa`m3y}>Jk#tqS8P~4dun< z6;-r<+^v8v{$DD4@2>u97XZcjogn?UV+ABf{6%AG8h2`Y_ zf%X1d|7LP82xzE)c+2_+Sa!ft|LrRH9oqlaP`Um?fBMPDM-cEz;xqT;DaP`^(_l6NMjs0{B%!1*V1n7WAJx7#NrfJQTT~ zn#u|6U^Z^Rg#Rndf4>-jNv1#B5?ntttUtDdsG_{Qx`MQ*u$r`@f}w=4w4A!iKUxEz zqyGoQz*z%^WB+-Rv3`U9OTd4tF))hvr+|Oj#H55(#59Ff#D9tPKeaKybKk!jY$J&TWZ^c*>P0U5(<){^475eM9f7+r!gm21IR4 zqlL9KnFb>dmJGa#s<$pbo9i>Sea#f`_>ypYeUwWZdDzZB${nGlLYW<^&9ut$!bVxZ z`!vRWcK0ZkrZ9$t=+Q=*QQ>NTOqFF1w=CriN#BbMZ~sB&MT=cectx{~Q~H^91AgyQ zJBMRY2U1uXhH(F-xveE)LEd1RyPJ#m(G&w&&Wl8UMC6e$%x)ciBvs5188%N5vnV=% z0V49)v$+=MjtU78tdG6AeC5P`Y)*!JZ7q%Kr z;sV7j@HF?a6C%6BcFkX#ZYIrI08vrEQ-PVX8sMn_Rx@4J5B^4)r=fZ5G z50Q&@X&^-9h%ZsE-C7{P8)9DJ-@{>K#FvWako=@E)~=IUd{fUvrJw!NMG+LP+dCCB z3sQz$!fVOwp>Xm-g1)7(T>UZV@xU;t)|s=&0=B&cdEd$mcasz&%WS{wJAQ;xs-=$?5LTrv-#x2+=Ek3Z*)htgQn`Nu+~c6a1mt@wqdmRFi;kL)IlU^75 zxL}az!cX)@)c&G=nC~`lmQ7Mn7Rxv42wvdLR2kEeq=2i5JzigeC0C@CX6_&u3Q{F) zbteIt@o?!JoW3OJl=7kfHNPKK7|dCoPSuMdmq?t!hvS&&A4J~UA&W^P_JYxWLRTh2 zrHa*OE80|!c;XS{Hsy;{)ghE26kFCOi*f47s15DXrlq%Xf(_S8LLtMWv{HYzMW{!Z z-7td`ofI)GaLS^*`6Of0PJvhnLsKD>k|M@v=kuJ)5iTPWjfR6w?7E{L^~}0UTut(t zraD_QB^d++ZhNH5DjWgb1)EqN^${epyLIctdJpv$qQCD4iDm+(luq#ReoprTSg|S1 zHH)}Se`()maU#rdLe;jaO^vv!#MuNzOZd2P1IZtw-7(*?jMjT~Hqv%vj(1k+tmH5% z3$fs;g{7mqua#v!2ospbGLT#_p|B|uvMW6i_KQGluquWi!XF8nDG`6;=)r~ZCct95-M?Ulxcp5EgccBOdI$ z8A;-R<*YKl&^j_VHW}=@e8x(k9MUmia>5D5*XpIGFw|7;_|V)`ayKOLPU={>oSj3C zk6_$#u2oCXQ6sBoGvt;Ja*(P-QNoBQV%OC5wp_OZ;=-v*fAj^fMc5b;U$~z%cGesC z{F?GDTY(CUZp|62Zo?hljR?mLZ{CY$(-;d>nUb-5*X$gU_XdTMWk5h7c^5)d?66o( zO0-YHn#ggZvQw`?v;+RzMDTg|?s~*-64dn(WZT@M@J$Le6Poaps8m;+HG?6fcB6|P z4uzBxTaX<_yHVYk7#aPovOWZbvQh<)PQxGE z(ZajV_~l#V8YFx1mTht}7mL>%r{) zy0CBlzRVx|xcMuxvs16rkSadyUC(Tq8DLRJdxm0o_G>|;UmQ|aZhH%;hNU9Tvmo%4`(o;FdS2DKpjxj1NINIh>Qi&elO@arLf zf-pIH@IuU8fHw3pAc?XM`p86zGtW#XHkyp5#ihI>jB>539_>8AUQ~SW>f$LnZIFGo zJ%z!c_*Vz{Vt8$RjTR@#;_&d@oU&GLSmk;vPjT@94M}tdh?-I;my0*8aUH7UP;VyJDv76oG~l&}h;KYOITL#Ah0MMlVFt|d#2@0XMT zb3Zq>F0&YI0U`>F5^SVce~8rnQg)P~MH7-@6L`<&0w-G6*sZm=QYvv-&|_Rx;e6;t zyzY#Yo!%&}+6qocDLigdmjCGUuPfwA6Sy=BkAL_k%ceT&E37-p*}F=q@I0?d783(xwD0f)0Cw5%fcvly9n9oCG1p zdIGVuLohTH-_5&*K{01zyhIY~)YO^q>hUdc1>?UBvg5Yu5pq7`9&<&%N)S0jmyPO; zJT~*Hu)f60=>F(ze%UBN=ohycWDB=1Eq;i^_yDnG>%~+=>9*H0*{B*NgokQ-D!yY! z#0f%P+5jaCukPIET_?`6^h(&i8Yx7FnB!rH11z{=4IW~RvSQ+TBbs)$cXs^_u#-(6 zEz<(f7;RRM^~2?^cb9}I7}(EI-@P=HlVy02UAO5NkJ)Pb zmAMo#Pzl+(#OaC@Ap-7U75bhAC$bhga(~7&MhY>bWM~lUtkn)$wpG;Q;8m5xfvf^N z&hl#eMvuATB4KlTPT5l2xy0mLu(*78xHp`ad^jXf6FaGF+6K3$+Yh~X9z8F<^Ez8O z4Iz#{d11ro%>I;tAc6w}$)m=#N=C6lO-dZYZc}qf4&4Ps7iK4h4^b<}HvixxPlwyG zn~jRo#=mjjM4+4ej+omq-0?{g-gB)_{E{>|(8P47#HTdG78ZGYS>TU-!J9=0Wa5tB338F3Lm0aoF@7u zxkY+uu_H0U2dUd5VNeT2S-$w72uIK96FnB4fTkX2gkuupux1q6x30#`$Kh(wbkw3W zI5IRjCTt`XNb|zOMRGL?^gSY=>XO*^iyPp|7)CfjSoC^nx^3HneL>au^9oXoys&$` zdLCGoTZF6XQ;LK9E!i#5nY}E|We8&g?2#0k#0HTP6GTC4PodGBoIb*MZ1YPIC&b7t z1eW4N!8BzSuIO?1@?(1X3{aamG3hKTdnigI`FFydWn=av4ZDpVw5;usw-2(d%@^c# zouN7nCC`S>IghlAnJ3S~e2(!*{q%n8l{SlJ)P+V@YP^dCGnCY36MprJZHtvsu(mrSQk_{}BR{@03M=SX7n79W2Xlkv?L|`fh=)~3wJ{VL z6^dN^B0E21yI35%uRboa&K}{TUzIU8xsLpJ5sMk+e!^1j0A@I(@n;BqjVM7FJ6y%; z8)I>*8?85!cZD8rXt(sVE=vk(d3N!Mz?s`Wk|nHtF<0bnE3$B|=awBue9MZ1ssD=L zfn}&})<#4wla-3Rn8J=`_g=S0eZ9WqUf}TBo?Y~Zvk5Yex63Cb)-zPIVOM0RpVd3! z3lwsmt+~8LTTGHSbB}Hzt9&21`VfA1zBMn>)Cw91B&S)+T`!d>s0G_I<+}=J?|eM( z{#;6+cSK{e4bEXdBq9w)e0JHHgjyj>(g-)5FQr$R0ga<-$lS5Qv*1Xg zW^)qTgh#Z0`+_`Db&#|*yAUs3Ij51tKLI!Jbpu`iT!ig%i#T*jhwIXeBX~(Yj>p3s z2n_2lubUuVq7yuFO(AH_jxm8;lktWCL83iDfD>9>3#hS^HA|sGTCS-UocHy$>0rSl zonj8!#K%JEz+K0aMA_8{*K$=xPUAAoiV*s6WnJ)y=fR8Do}o5}I9QUqo*4P_VkZvI zwP1_;!>{(9h<#ameqK+CV!Ce`ZUIs@Dlf{Kp!uFSf*|_#Ml7{-;pqga zS4tV-$&7r5C)7=-T5PbhYF9+VV-om!RJQcnyfdoES z;VyVdSMhf*?g%ItcwM)vnMXODpCzVjZ{9EwDj*&KS!UMd@Pfp{E_S7 zcB6EVelZrTI1MuP6vAWo|3}$X22{B*d?$y7z&+gjXhu;M$i)@(}SnZOe1`#ZzILWylrWZh{q>`7gD=emP^q z@f)#p(U?_Kl2rgt5?s-e1zb=61}mT>1ono3C1hYP-gD$vwmHFV>3^}F>nJa2b6!f= zJP=e8)c(=y{GC$({S{xs4zysIFQj;2py#l!1o}(!nEi4Fl;cvq<{an`8uWjF{uNQf z4s?#ej1r(A1e{PWU|$LJ7p4Ya_%3Z6U(VD30|kmof=d6>iU-p@*PT%iFhT%`nJ-YX zu>dSBAZ9)f?v*HiA(WZHTL%9(@0>poG+^=D6B{QhJ4Ja{w0+aJ6j^#XtW`>qF#&$;L|0@y&i;J&I^S=^nfY1aCjW0&R zK;XfFs}M4u+tvR2KC*#5zAw2azrE%E4GBCDzH}lCToV2QDA;ltxXJ%$!I=P~>#L`& z{%RtO^S3#HAImhsMCR}3@!Wd+I$HQ*B8(MK+yZy?$3z$_FbKqa<(>Y!i7?LJs?9me zdfh}AK%rk7O)!BC6m4dpl7n}Co)3h9izCz3Y5$cDW&?JGUY7RXs?9mj9~r-HAPoFg zT$}xifiPy^9S4fekAbjrli@45;NSRbmdlsWa{g9zE(3fOe+{@~{0I7K#uBi2-~_Lf z{ExBh)?BukV@LnCNmCEy7L<)CrOEqFA$#CcBCerp9=Rp^s(2+Qi+Kr|BwkQri&Ls= z*E+1=Dw(JaG!qY7xHy^~RCj?a$gZy|c#R(yYyM;t)miu@67e99jqR3&!tIDmZ4_9> z!M$k~r;ax9m(p!;XN$cs?6pZ!L7?w5a621IFI+~acC*92zoF7=p`=k!vO*V^aTVXO zbKlI|>~M77oYZmOoaVd3j61QpsVker^ycnqre=5}hUT|E)Xrw4L@}a0HN77GwarO8 z8GdK2Q7+QD&9nQk0vnrz%^2S+>&xeE-d`f15512u0usk2rt8pg91OhiR_TuTD{a}Y z8A5B}2wCA4Vu6?nNYR~6P}$A!b@kaJ$_dz~?`!jy^oS67P#up0v|)}4u?~CVo>ab}9FR%nJYnWU+hxD%m*{SJKM#MCpb ze4bF=lUqFzBO}mYnH3fPrc@|3K(Vd-Xh5=iK@e$)uBpyYiRxwS+NBWEn94fysh2#n-^qY8I zMSFMFHWhK(tkWzjzRL)V!G4E$ITZGhqLGUCV?KT>HEL|fs4xtwr?oCrw(W~Gc!_VH z7`mx4_)U{528}G;vQl>$g_}?*|)2Y=-c^!Ko z1)hNL+(m2*$QcMozaQTdKCbric5lh} z$!z+oRlGu~^4Cx~xe)UM(H z#Wz8+6DjlY$1cXlwJDnMeh%4hz#MCw3OHnuRrjdYcSe>%)FP#tU26Z%c5@}p4>com zgRP;!bT^rP`gWz4;_U%BI@T;?&f!6P-VA7=&${d|qVu;NMtt$bwjY?1Pr`bHw7o5L zfb&c$YC}hGOMM54<8~O%Vn&~Nh=nx!g!1=~Qunf6w0&T2#{2BNCP8!~5G4rFiIW4_ zJ7;F6ta>S48J(3W=?OhmoU1f`k2U=%l!trihcNbOZP@~^?*$&yN|`~Ogkn3kV)-5$? z!Ll5M%q%xZqoWA50yM`N*;S6Fw6=#hyeJwnhUquRsrI{kWI2HCbTV z^E>#xO*wAxVB5PvrIejg^x0S!ZA&Mw6y}rZNzGY$de~+J@>oBaL0L7j3|BLZfy9#Q z55*tnKv-39Pfl6+hQ;wwO`)Np2yx9SzskgjE9$j`ZDsTV$8A;mO3YfeXNk_9A63(B zQxbA3=O8UQTIz1HX1i{TZ7<+Zg=u@kVcZR~mag#6Yp=a?vZM|tn{)dd}Sjc-=1+gTGo^`=d>3sf6ak;UhU^Le(EV;nQ|1rP%w)o z=^4d2ECONq`Vq#6=7PJ@U2CmDn8MGvJZiI@$qVl%*t3upeL1w{xM}BZV9>`~6qzm3 z;Vbz;NKROri<$<~=NpBFo3&$}vArM2tg()Tse{+V`bKD*HEf#Tr0>~J%uTJMm7_y- z%eLiE-8m(HK~L5lZKHOoJZ1 z>R+wRfb{8{jIo~|@WCl?)^XNUaxm6$*;tiuRWgBEA9N3)IUZ`HO{$@fUZC5>X0_u~ z_b!AM2=1hCP7l)`C9tN%&6Ys*Wt`W0Lh<)se2g(i9GmHnns$DFeDI!9trnNPD$6PyYpe3kN5DO~s8 zmmZzD#zv@RNY{Gz<{MR4dbj@@(*lZsoF`r!>8fd(<+Ub+_^( z!EH2FQHG}aFo#wM)00A!^*pHjsF>2T@0}s1IXh?;(k|ToC0H=5N#|ik>TV=LfD*CLHjX%71=gl6#U3_cZt<%5h(v09~6*We+t0x(60`<@V z{67Xr%jFA>LRW@w& zCOgrX(>sHv(=oBZ8mSHpSe7ww^Sb-2RdjDz;lXs(7(sEL|6yf0GH;w+*gQeQN6k+n z2WtEbS?wn1tzP%3%?soA6-gEZn&zLnWOHT=Ytiq1z%WPL&utlu5_unkPk-lqROS?{ z`pUAha_t>Wfkpz!#QCkWS>K1vZ&z=UmD~$cEt+Q`j4%#eh+ZDC>EdMdh2d@mIrk^n zqf^rs>-ki7e&52`SffbNemAP~r3K^l{l3GzWR1}pjt|-yt(+tBKa5 z>gq+=`N*%IYy83~I|)H6-G?@j#IYg{mJN}LNREDmO_1+d+bt~pR!$=lIqnCB<<=!A zVuA=&biMZakqllonP!zuNla>z-(=-T`SKQs`22o5-aA8o*npdW&RKlI_i-`W5DcDuZV!1b3c1n^IQ>pt3lvX$EIG52%uF7LN-{nR`7Z;tGO0>W92d@xFaQ)U% zxabaFE08$f#dY29^$URn`vuesfyDJl|E~GL^;=8fkIfIT3E`h_5Lb|y&{DVn$_8l5fKKm^`DgZX*jFO`C8}5GBe;HRDEt%EKk6gcf9@t+ zqUQO57ie+*Wbn$Nu+}DiGXT->gOO!BM}H+=@SXTWiC|{>t&m-u zhCeW}=QPkCV+#U%Azzq!0$-sQ$o~%O<%}#~{Ce5Ry^fIuOY#0(bwPl>8_?SQppGwK zUkUV=6MH!$%gl6XExV49J^w8Jb3{SFhap(ibQkpWdDHjmk;jC8Cl?W#eXQlWY{%~?D-4$PaLmq*n>FPes9=oncL2> zhkxT&-X-2zmXI0+LDo$zC@gGqR@aT)Eh$nw(Jf{ZmW=FvPG>CaT-+m2EkK4XVz-UqkGIrMZMU>D#~Tf$0x0mUEKAD zk$ktia%oh$g2xw65ExzS)s>IFRBwLr4^v%B+MIIA_x~;#9?cr&YrJ&qMeb=;>tVig zu=#BtS)n$GYBuz>S$cA^&4Bxd9 zl9m0s>oZD@S*go}LhT-Q8%`HNm&CrT>8l3M;>-!eI6>oUyEVJ39wBiEKtbK=vd+z# ze$>fw%96yh=mpC_kn}C#WnPEm>zN4b6%<9RR!jUybn1cUH6I8W=6CCxdS4jvTIWfS zZeef)$UOcC#RPJ*L03o#(Ch`hl`R!PCHXP|Z;k<5g0Tu;{uKFOoqLfYXR7M)I`qN^0k z5+u74;NarC!{la#(Gu@&af5h!8ltF~Jf`HUH5N~KZ{oqTPZ>+-7){T~FpAh@SiDCq znA);*^l^I*(Z6d7JrE@3XQ^~T=i>E$e!qG9DW*l-FnWEI11>gy^x4om?xAWpH;4{} zyL31CUPGDf_wjo{Zfkgtwytw)uvdp@pOS0v7mC;MeqZ=FYEd~tJS5dG^nEx{A36fs z5Z88t;tgw8edmH_wB<6%p11x(emetxA2+-%*W}E4N`3vO4nAbC2r%VP3@=5f_1IO1`Zs_w7 zubSCM5yh0eB5*K&6z9IABavSRtU8sanPO4bYFC&{&Maz8w0C3;yg_XrNpe7soEZ`_ zVxUa~YmH*0*|OEbi_vCQBgc20av{p0p)p7@U!!NDCEOsn_n?nelE+27s1}3R>Ri1& zgY^72a+5l1p@Q$-S{qSi(Fnfr(ZtU)OgUy)JTMT!(@|ONw@qEGQ)fSLo$h*JyCpPaYA1|P z5`^f8aQb}oWTFq4Y+aNO;-9>?D&O{*`oWht0(0lDQdoRRU;BLf-Z3N_3Jcl9GssO- z&9%vvzt*;Jcd9<+MiQL3Irq7zZ}^q4fev~9UTsXw>iGBwHXEMc6by;c6vwg-hwflp z)JUU&_(Xqls+D6o?|k5RFk;JhC^-*c6lbM&dD1C`#m$>JmbHmkJA zOSlK#>xR+e$)S0Y9SHCHsr3)lGB9u59v;lewIHFh3RnWgvEB5+r=(CX6=fEq%Fy{h zwd0+fuRux)ZT=;|BBX(C&o1WfO&(=X1u=(28;O-qv;(6J0YrwK41F^9OV37rSc{OY zY^*rOiL^MVLw)hldYCSz9Q{#eWHJq%EjUxH7s3I3EI z@qOua`!m1{=wb8R!&AOkMqC%~u1_LUkrC1w{pDee9DdWT_nN6@Zk|S;P@EMZ;Wee* z5u3zfq$$3CJItFVLxZ=U_V%LpTol8LfQ~7mOvr?Xrz;C?TjyT?^iM`i|awi;%MuP`(y~#q?;$}IiCW24kICfVl*$79h zeDyfVJUlvcU(*_T+om`Nm3cz<7yd83GC+o zVq^4f z`)mpORy!$}>jP?aJ*#}u_EGC{)%|`AtsLSvfrFk5@g}NLe&5ICh25F3xcwV5^=uXO z?`ZA&Dp+B=9~6rIYBzYYgH0Sg9Upvn)fRAOZi)8Tvm_RIjy+gDzj zU(&}mHq4}|v6>hiMRh>0<0;bB5jhxhkHpkog@;T~2u(BQsaCe-lc6(8uO75NJ`V6| zo zXNHSo=3)j_;^3^b|MXeOppy=SW<|-Iw-usp7uFETO6>aK*L^EvoXA@Z=3!Cd@O5nUwh!2u5&TK_1_yR-=SBP6#75R(Ba z)3(k%25nPXGEX7o!NRp~Z+t@QmyD?!;NJTu>S3SIPK#1 z-{iXXZ0`=fjSd1M*MXR-}tPkb~5pzI)vn&OrYi+uXe7_-^ldBjb+B z4YR>hh>;t#(P7>B>2f}9DxZc^Nv5NHSUNCcILG~NF|vrJ^@(jy``Bsa47ol>E_oJ0 zX?v)q_nt;=(4RzFv%u67o@&@W-OH<&i%v#;F-9T>=b!DxZD5?= z6NH^uC@#o9Eol3ylK$kG{l`cN!nn1>T!q27>ao%70eGokLLp^_M|uRsPwsS??DCRp zAjm|cze5p+2Wg zv+CoC82PwyG7|o^=$5EiZ_)5m-_^il_ETevLAxRI*q$D(=~ou`iCR`sF^))N7KkUX1%&IU$ z7%MOvpC-HYsddEiqdFgp{bPcsp>m32h|#D52vzb82@;H?ZpLWu*(pJr&_4RUOAj7L z6V{xfwlL^Tzk&*n5tN7$81DDZ-(t73xgpzflmU;zN0CF@0I#VHReJ})>cqIg=2OvO z{_b|8kAF&_V(op4Uf&=&>g2@?G?6CM)PT=Pv!dDf9*LP~@4W`91#LcY#~urX#%eAu zu{u)DlcN+pO%3kS!|@4@n?N{Ebl!Ht;W&$1x4 zibA>FXE}?aPIwFGX?X&&>9jbGpz85rsR&MI2B?E4!!@KiLq_)?rnHEU{kTxSMpJ`&OL#yP-Wem+(|U=PHY`)>)CaB5{|n)FM~^a7 z)+x)IM+jUGj)Tsa58tEqJ0sKv&q;fm_>puvNn8Kt4ouN9R2N9Eldb@x?wX?s)ATHh&IGUq6G*$%(vN;=Q-afy-u9H zx$?>x&VaMBTbWJD+?2+rKchV%R`%`K!;Uu)cqHRUJDhDwah`%FkPNcCdz`S&oCj}; z>*pNtZdLIO(=pq4sSH**C@&CX3;vH4SLb#nk6-nNDHk zsy{Z1!0vi{-D28wQ&>$&=NxjjL(zLSxvch#xosSyVhriJxr`PFFhA zJp|;K2lC0$(F8Jz1VQXK?B$?QqUEQvSCa{S;hvN2;oo1m>rZ7rMtoPOfBlKN;NeSe zlTaqZ@TKN0H=%i=WKxX`Hu=MSX1M!bRbkl(`lDF=R>n`-eOK7SyA2j;NkUhN8gU1Y zR;WYaCXx3n^d3wGW{kTgvAASrbk=4p3S$&KQPPkbS9zxcjl?0{>&-oOCPgn0ZBpT0 zBp?mhPpXc72FjLXPGTtT-q*6BVTCZGSl4OgHsoKzk(G|`%*aw0MlM>er^$G}#IfdC zH8IR>6?v!GAuHkI%a7Rt@vqiij61Yp#lpV)%>VHXENtRNpI-lPLpScQ#`v&&PPzjb zf+q8cJWP9b660@?n z-k#eqhG5aXzG^5gm}l8{hz>2nOOqddLg*`7Wii+Yc%t#O-f16%lSwRPAo~=W z$zgx!UasN(Z4Arr>w6|Ch;7TB2(GF=?W-Rs=j+aPS|n?%@)%swf~{sK4?POhTJQx1 zrK`Jn4yP2i!WO@wI8{Tsy{IQ1MzUBcsp@a92t}7Wk`ICVjBKJ$i2ByYdx1U`vV|AD zK(|ZP??w76A(Y2m>rYU0x>R9-K%UX?zb|!gD2qO=Opp@)W_(dr1b+(Zst?9D90K^+mPzaF7ldJn~>B=*gNFtC;m5w zj@mNtB?&)lEXXuj4$kESL{|U8ESof19=od8F>OvH!8&7>eO-E_quB1?DDoww^y#==7E5{bCn5oL z4<^!E?-umczgmwAR$vb#V8qJOx4s+`bO=bGOD@8v^Ef$Z*=FUU$Utac6XWXk8ex8w z`02Z;XplbSkm;fOFca?C6@v-qYMy`kXqQk`0Pn*Dkmc-v-y~q732bI!04qemeDGEM z$n)Obf9+_%`R@|Knwj}0KILESfP=n`v4PX?quS@~_-i1tumCHi02ciMBG|JLAmOja z_&37|%*?;>Cszz70LuWc?Ue${n!tE~<$*vPnSq&iK)iAe_38kE8G?WN`7D>JR{$@n zUwfsx;PqGbR(iU2`u`KaKd}7FTx<-0S>6wbEEg7Nf571WT*o5~3CWr~p0sWKpt3vsAdH#(VxgyW!a*k`@o!<=r z9t)tM0|73QoD8ghXbG@AWxYl*@C#vn)m8b44f!{UmtPg|7P9O5_N>6D0qZ{yK}>+r zCGcO@Lj1c3{zijb6~RBy_&-)avVz46fKxCBz}Rt~d)r=3g#Nlt5d@xSxa1gefoJyh zE%eT_$HEF0tz8!-7J$zJBnCfluma0J0WJpYv3oTR=3nCk0%*}ofUx|=Z=By*ODlaF zz#zlY;(rxCz--X9KmiL#fCm9zSU{1;47|#K7c(m}Sg~@|h4@RHKaunQp1A99{(+Qd zX1P#J0aq3fF|h!1W5BI)}EWg!~^Kl1Rzz+7pqflH%{D16A&;6yZ!FrK=X21~^Y_fTg z{0rb$L;dBsx$2N!R#>i!=^v^K3qWXthXyZzvI1WafWzgVfc{lXf2uD3j$~XPQ?5U7 z?<~L+89-q(GhcXX0>flLUA#bkbx{8b>rXZ2k{flI<`nG7c->k3k$>P32fjf5$^SX< ztD*i?{x2&x*W@2C`uz{*HB2lA^Z63vpQKa&nLRSuYPZNpV?Z>D7L4GISPy9KT0L1D zlN#G*V$okE>&h2Pk2n!MV6=P+FOl{@EE2|u0b?8;-WogDb@K){f6S{nd3L(dgDK*q zNPYI2?t;+c3~Ax2BQVuX>rKLbY^w;-EzdW;;$@47R$Fi6?n3(&9&OUoDpxJ*4tH@~~y zD(>Q`IGZIi;DF(MIoVhJp#ItRUT1q_S5i%?)mAu+=K);xDe#vKw_3Cl`A0FpEUYx$ zP0mI=(LNvNA< zKiycRiGiy1YzXxBtn>qSRtM@}p1R0GKRjxIS%0;6RQq@IA?#;`UsX&w&3M%Agp#41 zt`L5s-!;AM28%$J-&SM|e}E7*6W8CtgATHq6+e!9ncsn!G!sF2j53HP%#JDHiMA~A zXr2grc(=Zx9nFY$D^GzmGLTpVPJWe?3NMBLIuiXQakPQG46qeauZK?`pD8P$0^dr} zq#|V9OF7$e^6@}}n6*pfjaI@Uv14YOE|SJ=PvSP?*giNB!0OSw50!HOHM~sRikQfB zfYkJwjcO(c&v`6A-on8r85g3+FPbz0)BbP~HCHa2^*` zXVG}oW9!G5ci=Z7l%htk+KNj?GD8THo}6wU?=7%mEhUp}DKbStKuyfw)MLUboTUqC zG?u}E!>o?PI135(H>+|)5^#GZZTX2LiKw=IiwHL>7oF5s7K4VGq+G=JS@JQ|>HHS! z9Yk_#J_U7@8ZKcdU+iy!jOw7(SZ^z4IHHU?Gg-)*VJhD#>yFVigRk#-VhLn&?@d^% zs5(11xz4C-=ZZmKFZYDsEEa^Suuf-`T4vOwD#sA2BJqPbqjfy+3b)S=>Du(3s;%E7 zm!XEb*&l=;c}l{@Jot!$!fz=xoB)NL&X1W_aP^J*u+88czxX42?chhI(CXs-ju0^g zgrY+aJzNlrAiIzcOwS+=ICLrGMw-ZMV+7Y5pOczEcP8!fA)uQ)}bS+ zQtn8J!ek#SR(BjUnGWkS10TZ0hzTHv=#)@9&!TO@O&=(dLDV>GbvS)xPm02=qi$Ep zJ>YiWy)kLnVxf)k84{J3Oh*KYS1I<$CXk z*%!}&nr?|x$iD$eqpB63A zvTq8MZa{VKJm&WletVN!#4zM}X2%-Ny!s+tzKg~Eh3Utbw0gEs>Y~M_(oj&vX zMqTHa!C2RdxM(Me^0}X?!U~@8(SR2GcILjd_CVaq=E9>P%!H40`>7qE*JpOxlr^09 zD0?6_4y6w`Ow4epAuUl;1=$Ja`21 zFeJ-$ia}kB6R7 z_ezJu%0_mivJ>rZ%VVN8!&o#FGW+b zzzqFqIQm=zw9dE&=Rqf>a)wIWM=djYb%lyUbobif{W5dYPCQFW|A@6%wD;KA#_%V( z;c>jLk(heRc4-Kq1nUL8Sh}sA+Iv~P;o8oZfs(O*V;QsM9egmHP}|}r?Y+~7Iybpk zoatQ~DzegL_Y^cnmJ9#dbTnga3tL+F?zRi{bOk!PiXIQ5S|?>5etwIpE7ytqvP54? zv{qQ!z30V=ORLsNASe5Jg#|*jx`jn)rv~XeCU+Y&eV&`?p=}ZR4~f9}(aD>K_E*p) z7B}cG3L^U`*lyTZKg*mTe~S4g`@xa*816eP^?U4*q|^7SZwm?gJ=ecksqR~d{Ra2T zEZqavhC$LXBbnAFG{nH^kg$IGx{=qKKBk&SDJ$aMGFY}a1=&VAf2hE3;F_eJBcpz7y2X$6hA)I8dMaRg27+d~mK8mQ*{vLhfO%$d27j zYaQcpWi0Voxc8t*^E#HW@t)%Fl%$<+pNn5vHBZyOeep!ad_*FH4|(9u#B4Uk2)+-W z%oy}1@j{;nD%g_7?I*8&qXaS72j{i(5uGBt$*LcfEmS?U--iCwx_3)4#)Lxsfe~R_ zx-DP)1EWvx?jw67nB8C(3~zVRCPk=!@lgkEUZ+0%pbC!q{s-8Dxe-@hvGluDU*h6R z=!L{Om4(>347)PTta{!d<=hH?5dWOhl1PEp0H^rYVyhziOpTKq6e$ywNSKY2JLPMI zPXQkqF$5bmOAdIO0`o?n!&$d6N=Yg+=x{B>Mo$4@6ZH^&=%<+WKGW$AoMN>ue!_TqS+0HsWf<}+w}c71 zUq4#VfM4fSt%CjyVQW1{a6;oHe69QGA zD(;o?T=1ENmm|~?(h-)5o_eT1uI>wM)|~N|X}wzrd9uT1gM^>#+g;y1;SKafvxx0@ zha;QY;z-K-d?X(l)s>vR&9O;81ly|%XNT``P19f=;5B)K#q+?bNgA4x%U*>&vpgay z+=7e~zUdI>4HVzFib7m93N3tnlz{?!?p?lS3mny9J%_~J0l5g=sX82srgAyma&J%3 zh6aoFF6nehm{R;%>o>+lFKc8sD zR96s5vGXgIJzvN|t*`3YFC~=AN&{4sgHK-Nm>>gd-}Ho)Au*wbd2(OKoNlNq z2SN}E;pgN`!DQ0hwL?c7qDd3a5v_K@sIf|&jEn)+n9j`7f2$f4dbSkN7g+Ed6QQ%) zMYodR1`D}#gZjLU!gG0&fTHzE2V=}F6w|!NRCmpA6_$}J?X0VUv4G>AWoCw3dM}_f za@1I3V(Lq2S>;DveW8pYgMMoeRDin5A|f^$N>0)Sw$W3AeQz|Lmq;CZ{f}ktv!%%r z*vIq|#l179Bq(~x03y>9XbeQ=Oin=FVz9Jbsn9llJ2jEwHI7xdkiIv&0!wSdn3F#` zB@BH_;db0s(kjf}Xcv0dt+yn5i?A6Nq&yMdE$Zh!*VkJI2IczJ}_la=NWAyJ|Nd5lW$Pz~$#Vqz?26=}g+i z!QQBr*06PyS|5BzN%Um3DfFSMW~T{moT}YXVF98ZdC=xq%PlM3mF5P4{RJMRw4@da z$5O+1=hRF)M@{k}C7Vw9vt)}Lhw+}^i7AZguk;k+L83SIQiT_3xZv0N6KC4;mD}?O z{nfRzsZuJkF-j%7hLJbPEhbx=CXA$5^a-oNqhna_CDC)#hDAM_$-ZTmZdDBm-@R{H z5(anY@fTb-g$Bz0wc^%Fepps1ihQ*r`W)%~A)DAK-2-FxwpyR(8$;Ige7n@^rEyFX ztG#ex?4}N?DnSea*1i07431u@hyAwq+{zxRj6v^Z@M4H!?jkyhO-}DHE*m4q1H5%sG2I`zU-->4FW9+?8$zno zVR75Q*dLnMKehbMc0-Y(oB=!NsPiqh>fOHjv;8>NFjS70gci$ko5D@d1(naerL35V zKfe*EWLk0j&{GFDQ5IHa6_GPcfUr?5;SeBGB~$C@+t`6b#O`Z0cCRzR z%uH@JpZt2|yDGAIb=cu=+cc!US(8+pV%}RgCsjyWZ7{TkyQfbrr_i!?aj?Zrnm43I zcJGiqFM4hF#4RnNl^{b|INo9X>12tnW~CX9WlD|hKpItv&7(bIRMnobW>3O59S@HA z=j{ikJtoj#+`g-v+7Aa6Or^?j`(kIRM}(WyE-}-p(svR-%ana_fDp~WpMZ&-nR&sR z{H8Fm=a$3~?>pXM6k)8?)VgXSTlBA_<4t{9LFI4FG!p6{HG@R0YQE;Aa%O#<6Xna{ zE^M}FMoDbLT@T@zbzNqYLEu^?Rm&$+;6)BB&#=1LxdJ`%wns5Cm^H`lHVXsQ(-hl+ z=*i<*wq1#-<upuMJ42@4&MhuMVwQo(maRt@P@s*^(# zh9m!T$j=odJdaj&U31-2KSK9UQ3lLXaP8kdg&Avh@MeuRB`weQ37#df=$7PQ_C$;K z;OUH_<=t#$!H(AZsQg|m>CScsg(quu{B6oTOh%sBy&_9!+Z47hTxUzR`cuod4AY*J z)5;oBr_neXbx&6AtljwXP|tK>SuYVE@UySMTu}Q!T$8o^3cd?k&E917jW(8mDvaX3 zGG04!1FQ=z=BVRNBAKtg zBV{AsKWn&cb{G@l+qnn@erd#TU3~S#Y_?XT@MW|7oV`Eh#12vgSbB z9FD5#!YaD0(0I~{Ez`LswMo38FXXdAXNCM9=4mukM3baf2)ts}npow#)ns5e^f`xA z9J-)1k8KPir-rFM*14yXs@AE_s&&u2E+gchq-P08NLMZ;w2(SMb1}z^4>ZVcQlIFV z^UGVU^Dh4yP^R8gm7Tu$>6K58X4NX_WXaGF(t_YgL*IiV2s1NmP3e;Fkhg-4m9Jnv z0X5KneXC2DPi7DYcv%exGZ)wzkp&N$6dXG%;6TR#C~(eKEdp9mhAa1O{T&g&`u`*>zy@O1;rzkyfVG(b!2%|30S50J z^wmAfziF?s{zO>(Z7cW>oCO#hz~lXZ3T7JtuIYNL=SsByvJc*s2K=*r<3w3mekG%T zd|ex|3u{4EAeDf^3NR%DcnP*^HfR17ZNmB!8*#}A{2%*6@S3}8(+c1Ml=o~GC;`FT zxk~gplz)}f>xqaFIy^et1_gv5p+?s!3Uwr`orfJUl6BqFp5e1IZ^$|VK zItZXlzy_iKDFJ{60p@ep$i#m^dAXq^GwW|Ggsq*foxSb<@QxsWeZ4;403zV|{DF@J zcqmzbU8L9I`|WAGTyf3JdKveiZ*i^z)3(*Ov$y(fXaID+=J1-A5eyD^m485G1-K}d zKO+4llvl81tUpoSf0gh*RGWWrf_I_;Yf_nk2^#?D`2o1qB6e3fMvmo(y99k#f-0r2XIQ z@?-}6#D#-v;D1gPmoIJxom*;NcXa^AVt}e;0Yv`*+8;KZfMS<{`RduPzp?3L2K`ii z&a1VQsP^THn?Zm{%C$NF@u0H+wyXffe6gqZ0`OI*^4E-C@lb+(D?L{}lz*r<7g}!c zMp^Jw0Wg^Xd_$aL{X2A*yXG*1ekwNL_+37317iL|jrjo%tlR(B{P_avmFRvc+gC`9 zK|d84FuDt&`BhS55ZJfqx^IggC;`F#f8IVU=a{cV2~NttpJ8m5diww$_y4_%|DpWH zG3C;2!XRMy>~Ej~i_XE`K0mezp98-V>MsGk+%1P0^i!$%59)PpIUwM7%e6@VSton} z^~XBlYmxrdK4E6iPt^tt^^b25^B>C2MfSnpy+9f-j3$`5fNON+i~g%K#^rW7fUN$y zTzbG|qI&nK0c4VZ5FC;Jz`ugv~09~zh2^jXeqo_$a^jdi_8QE|uVsU$Ds&^Ev!00fR&EZ-B3`M`8P^DE;>i z{J|dO+%N3Urxq})X9ruk0IvGL4FaaK0px!N_6mCxw%=;hKhgcu?pWa4=x<`n3CwAM z*B)OithhjbC0_7#_&2y$Jqedqt?TVkK)|@=f9K%p(I>!d=C{$OVZel9oHP7eV$La? zOJoLFEX1KR2b*%@U7pp+(aH~FwyGL2^w{+B?;P|xB^AV-zV)AVty*}XlS8tTLsm^H z-IcuC0^7KesoiI!sj1R!rXGU7zg~|0T3RuL_&xlI%l28Zaa5RleT9=74I@A1L5Xnx zhp6D-)nP4f|8Iqw?D}6PpRS#tZjK5})xmqCeb-leuhucki;||JcGrvPvGUP=_ji|O zEXyeu_uc*OR$|Vs(eAxE65vBH7`vDt1! zOyz0eB%!A-!gl zvV*fjQL>(;Jnaorz=E2H#=VkH4yt$B(~`edZqOj7t>^n_C@`bijB6$Mv77*Z{=K#^ z?o6}^Ivl(}?-R)Zl0f=22LC|xgLYkzjsS`%{LQ*!KleBruclrI5{2Q=Zahxak{k6> znawYg{dQB*>S1(+)!>i{ct;GQMQ)G6MB-5o1Qs*+Yi6ywdnS?g+o5q1`idC{M#jT@ zyaRz3li;gF7fw<-IZWv+a=`RqfyqG{M~9LPV?zS@b*Ani(I_Wsys4B)bPE9^CX^K= z-Ah4)_beX@U2z^5CmQZ~FLT%#W6!}6;QEYymfnJ3Sp67+?kQ$AKVjo5raP^Gn4NU5 z_%+oLVmYXU_hzN<7vn02Fr}XLat;yQ!2@j6jFL_!^2%n*ZmX8cruND~B5|f9y|u&9 z`x^V(jGMUC6>c$!$=lwhz6vkVo~vae;`NFIMFT>glZkNZqR`-l_yek-j! z)>dAe09+gX4D|Nhz=hp`KkFssH>8*8U_e|qWOtk%fpj^xKRhX0W~Bw0 zPfwE(2e(KU(*oK1AyU9JJFm+1~nC7)@E2dIxbjI{M)G)!Z;0!s)jh2QVmcE z^W*?`tf$~qY+?RAvz*aVLXV^PJzL&G_3!P*wZ0pH=FNgF)A6y@W8NB-5k|hcNQy?( z9@b5~)0LivcL3X)9VhieZsr#~5dCIpt~lFHM)kwJ-d$Y02S@0mIEOIicC7=5NUQaC zNo{QLx=-AbT?H(}SlwKspA%E5BzTj2SX>MB8aeXd!?f3u!5Jk7;d)935XvHF;kH13 zFsjh)a_v=1J$tg+!*b1e2=4-4_^4_GOVz7AZ_;hzjJ)v)(p{r+tKApC*_oR`$VP zm#;LCXDn*lPthlPaSDNrMXW5%`i90rNsj7CG{7k+iY5;rMB|VXVm_`%d5!-mJ&H z<~8!E=6M?Zp31=kwNRlG!b*)e61R-eS{I+7Ln=H!ax!opyIqjr z^*D7bL6frMwk55Da^1nRc0yjN;R&6vJG&+|vl6{^`E&8esRR`B9Cn9R=nhWz2?q8d zYMqVy;t$HdJ*^m8AEHFvCE+U-P3m@=9lH@@6ydiPUi@TE3MCc|vyQKIL+d1xEYUWc zjFk^TM8^3|CS?JrC9=`Ga{AShr=kd^HBP|c7JuD`=rgDO*Kl+@MwV;UgS#UO+zoz? z?)m#f@#a?OupgyLm#X?iE!#>O-92lS*wi=T{l&Eu zVaJVbp1u)kA`iq(9N&umfVrqY4&6Huo!#E3Er?ER{|u#Av-6W&AbQ!ec7McMV)(8j zZ9$9zbzh%35(G>RrQ}axoa{c6N^?EtGjKMK4?HE>OR@Iyp04o!#Ir4Nu*M#9%g+Af z+3h;?($Ak?BOZGUvd?csmItSEgBaY`VJrtm^xlba(g*Tl(+1palA=T8n@f9P%^QE{ zaT2T=esA8N|7k>a27U5#NL09$j~=FWC9Te0qV1%pEU{@AjPG$&f~?t(%;-oJ`wAyS zWUCuVgrbED6Z{p6@Jdi(Ejr}&5ud8|~rt_O(4FCSS=vGt_?=t5Fp`Cn!JLvXQ@KV1t%lkQ*L}m?ENy!eQx5$ex zJ0?J}KAmd6c?Q24J<+e(j8q-irS*TTy=7FD+xPx0ohmI#gMc(_*mMX8f|Amm(%m2+ z(kUPAn{DUFJBmmnb>f|MZ7y@jtw{jtF@{?8j7!*d4XVy>9$Uh}iAd2<1rr;qZW zm4QUT6)iSS0u9}%)k{TTD0cKalLrDOXwMx(M&yJ!$4LU^evrKsqM%y9OdZocXW#*9 z1Tx>q*iBqe@lJP134E#DZDQJ8-HG?&9 zf)m!k(T0KvL}Mx4Ox=t{JNjSKLx#cCgXSFhRs;RvC7f^FuBb_LXYNExYjngdZC_~H)xBdGfL zzoo}b!MOBEBR^PqXR(n$DWEbacjEM9j*hg|RuGrHs}+&Zoy>-yPEQ_7GT!S1(-9~9 zHlO!?>8^}}9p=Hf%i4^EO~p=0ph|M~E6W7I3a=4bi#60c_`11@=?3$6=Cm~g=G~Wl zUO9^CZdOy!@%5>lV7c4~^2P_9L--}w7lNpt|E~+ho7oA~|Cg0*XtA?NdAECF7{6 zQp@Ek$;|56N4=-5Q#!(a1XGhDwQOe4GM1HMQ<|NMqsXLO9l9w-ORl$s%~Is6)Q6>! zzQz)!nTiYx=f0FOQDXXivrO;E4D{k1Ms+_I`ru|yphQU#vS$k{b>D6R?_2YP>48`u z&E8_LwB3-Xy>9s8M#SjdTvd*CvehU+J0UQa{Yks0Io zy>aq3%Ijm5smVi&*hH&TvKl3a+uec~`Fx9H?@O3su-Yl#m&m^%dwdU7(8-<4UW?{_ zE+$Ja;uE2`=46i*T$=?a38ZD0Y7@gxp%vVE0>ota`n==yuYP1__galp4wMX}DMo)* zsT@7Zd7I-8w^5{rz0-eO!ql#y4@)GD)=($x1b@d><)AVuc7%c|Gk+jrc8pbc@i4Xj zJI%0Gi2+hliO9DqMjDmuM~p579_*rWdd~=a-V;B_PTBbY&w!x@{TGk>h-Veqe%W|h#a#UuGrh#1^(kn z9!QOIWL^F|3(Oy~DWy`c=r(llFtUm7)_lsN8cx>;W*G_(`Qi{_T4R@Hp~kji7pQde zw()V33Tt&WSAADLi(<6u#y*=EbAOO^K&lUMmum{cgZitCjs88jfk@hX%P+E>jFeId z?a&U`qxt+A_dQ$-vIQL?xrR_atqt0bnlaq{QDDy>$<#*^sgyh@mB~G-$^3GiItJdM zw@+?QJb*CY&En=wpZ5Wt^G$q9w_A}t<`wC_?kbl&GQ}Kk5z3wC+LGx;o{cIgV69PM zissHWxbe~6Oya>ymDhHI^t!LuzfzWq`3PQn&UeHtZj>eYOk_vJdwXyi7QQ68P`lS6 zE!Ksm-@~UlhYrbtwlq&>nY~!fu1whNE=qe#XgfKVwQEs`TJYr8Qo<|hZtk7QE8ilS z@~hPItewUetw&{NSHN*=UgVS~hhk1~9nBiN%@eyGcXR5en3xp7(TFIaF85xpY2~;t z^B&R&-wmVSRbeefv(J)!X=0y0pa`#_L*N!Dd)BhP9(w#TOjAxWQg__ki$Eo?OJQ+NHe~Et zI9|pNGdfwf@LjfJhnm)I1D{0Sm(Rw(!${-MvlnC=dj-Vc*e^d0chAdio~VuTXRBrF zPO{T>>v39`H?0jM$cYIk#H*jCi<-yZ5vYnN)yb+5x^5&@NBa+nH{J!cP0&fIj(AWp z-L#F*tJUtT>&xy>VN+GJ4WA)59w=WRXGOQz&Tmiba=JwZ+Td@K?hsYzZDX__3p$iZ ztcd(n+kTTF=e1qtbzf)eX)D*yBk4RG7Llt?vMwwEUsDsh7avE0%$C9`-H;e|#^$1K z*b-Jc2HmQRXLO(BvAkbW zwlwQ?YI>aC?#E;&POVRd|-^BM>))Sd8hM4cJG$B^?G_Z=&I{SkZDs$f#EPvKCf4W!A{3KvS+Zmp@xKi|UvVN-c za7^XXAN!T#T7^tclj&1KD@pjP?US={rcyMHc%1~~31W}UvmM!1O75#Hn7=7VCQ1n* zyq`t`pS86UF3Ygjw(%JJ^=W2ZGw1oZ8yir<{qL^w9Ng{n&ia3ifC1VKD9l|boM_}n_%1y;^%kb2$a7uKikbb)uo|I!8ckK1)9R?gtRN>`^B))!bgvw{ApcEtfu z2>=~)X61ZI7vMk2fl%tJ?B^D*pw?FbcJab+o?1DdsXViCzC`68^;IZV&g{RHtsu+< zbSq~zpa^xL!qbP&VBo4BDDj`Za|Z+N=$z1bi9c)nPzWCO-|AKWLUjPGkuQ`9f|U2! zNKbXL0#FA4LtduykMV|ri?aV!r@Gua0KjrCmI|1`LmVT(z~TY$LlEFt0&odGg+r^M z{2RW-{#%9WS4c0!w}6##VNhAXz(50JA@CQ_LJ0&IG62=WQ{B*|LVo*S^&X%^bY8WR z{kQtmFR1`wre*fn!qCph_HWJ%0&`xpE1gYJ2(b0bjp0-^be(^!BPbR+?7!8ee(8i} zp#!Yti&cVvf197a`34TPFG?)bOzd#3tskmW8E--ro*SY=G0yg|ia`02EwYz}xYkT3I3fHULI^ ziPk@Y3LFK_)5`H%GWw+z64di$UXqI-?pQ#x83?})c=WKc00uEYNPmikKK6ekcPJs{ z_$wRzG~T%+q?cr+vptlJ1L)WWKwSVA2@F5bZh(=E1-jOMS@9g_!ume4@AYHa0x}i$_=`-~!nqY|XbE0`(CeqQh zwE6qF0DzNSEb%7+3HWP4wxLsA7x?r44~6F?q4O19l7mM#hJddrxq9M0~%lgKl9ge1|omna^^fQ&FDYA z;Hd?~)9#|3=j@5Vnbgy#7MCgggMftcp~iV$rh#rq#Rj0(|D+RW5DKK5v!@oPs-exv zKQkf=WDWh_4U+S(bOY_F1z>^qFZx&j!$IIK*e%1Njl#X5q_j1^S7NJ8}QlnpHk?oAR8y>=L11oJDbNk z=2uaj5X=-RtO#)x;VN#mpM&E6OVytb$KKpbwv_&s!8OVbe! zhbEwy22Dniwt~`McQ&K?()nJt#+kP z#6h#t2WxgoO8tHZTk~Htn^Ip96X)t~HD6zChghYJbLe1vZeWw-M2qXx$3Tg0BS+S& zxHDCM(Ee%UXf2+kXsVv;M?h(?hU8RzBb{(tT=2|OQe6l8>m&^g5+mj)j{225jNpx_ z2Dk0UR$F^Bvbm;@G^{#>Skh9w0W#hl{QRZ3&>lIMzg z+4c;*Cd2(Eb7iVLsh&V;>Qz}nZaL(j?0zJ|hW43oLf2-kpcz@V*lW(9s@6)!{XE?h z4hbX)?+N3&d$+ylO9trd>1eOP-6Tq{L{O(PFW|PJM=j)+&wD}oy8J;EE~RtWsA~DE zs8PHOPtGU3?~&UdMWN#ebQb5_mgys3*3aItYanTZ+tqPO*Z#cXxL--z#(8iP-~XOg zdnT@{;%mZB5>(9;f;YN+F^@mKQ^a}vcC(9h8-*2*(gbK(McIcWqJsXWXYZ+JQA&?K z2Ira&=L0WgqL%!2ZKKp3($sVrK_k;a>RV}QiwnAUG|&)BBka&Dx^EFbwrG7%Z?(>{ zBt*$I^}usRQ9?uzwhJV&b;#@=LH}?GEux{fKx2o*NFO6pEo2&IVu%4?1!dT+Ey{&% z_gDvr4BU?$z0SG)#o}?M3WiNk=dtTrbawD~JV(p{tfOJ-yBvUz=CsnL@$GC2-RQ%qh&)RXkdvn2n&l zsX>Ghxl)m@f`0EYDGm9^^OMZR0~@AM*Khz-0xA$HmLSS;$2!BU!iO)B2l9>tPHYffT{N#oh6z^#ANd{c`n$#0^a zHy<~$xrI5z+X&@B6KMdK+Jr^4>ktOqEhiKK>P=hoAF%$Nh#QiP2pU%qzGZ#cxq;d> z^duuMqv_$pMy+(4f{c$=O$mbNLD{&uPH0T-B;3Q<{_W2?>A_Y-Z!x7|7kwL4xyh*Aos?VHIA?F45(4#AkzUxT-S}UboGJ7aPH5_gbD|j||WXF(JP9yp=t7;%D z16#c^<6GTM7Wl(!vuQD3gjRJK{X^b_iL}@k4DQbxe**1>K6ckobS|ea%8MB%<+JBT z5|Md7w8h7*sfGCHqjIIY?{q zs{0iLftPt*%dkgdQ8cwpp4&0FJlh!~)~Fpe1>gK+RxOHkPHlh4J#mnriw$@Ir{$ zAyCJZU&uKH@r@6XH%2>3wM9FhMf1mcSY_OH!DyE_M&wrlP2Eq2vk$x)2l5WK9c^EQ zW^M|1bG0OTV`@a)!4#w&;+e-N?I_??D{@8=m+^zgcW0vA>BUhWM0lkbbKmQgDP;{v z;7htFlW8d0(L@d(Ey@eK0-kFryosMp(2kIldp+?)NAVdL;y$I`8y^FeIv(^hgNI71 z={ivN7R9Km>VxpSH`emxPsCASZhe)O+sxAwrMb!ink;|m{j}uyMo5#UDZgL?SAij{ z;vsgM$ z?6wSZrdh>!qhFCY$-Z1;_EeU0F)_^I6+Gad{F+JWJTP`Uq$i-T!0PT5JGf_^=o4n# z`=}8^TVlzxIK4p>GkW5*fu*ERq)@!4Z%?4fp?$I{T&v((391M~*&!7`_pfKeTfsiQ zE9iE>NIFIknj*NP`qYU-Q=^GjI&RF#+4u`x>gBIx5Fe6dn^^3369*Me`IBuj#^Q{x=fJh>KA#_T z`FMlnHf2jkUyyF%OV3xPbH{nTDN(wK_&(LlO6~)62ck&Qozx`3Oh*$DE;#ia6qroGUc9n{ZNmVHOnJ$=|+A_#xqejQXROmb0iIKyw0idM5HiK?kW8%gDu( zJbp4%m0!*37DA*j2x<6UEiBu*iG(zi`+)F|(%y8d6zC|GlkiSnO+>RC@Z9oROXBv{ zeG_H40=8__$YwTv@25NXu%}@_$;|r0_|)_D{{Bg4v~4WpZFZLhjKDd?q>N#5Eit|> zr!X#9c`3LhwyXMwfrkZ4Uq_i$Qz|0H8j~ubzS{=9S!^s8ooa%i3`5g0U56kx76Oe=IowzMELU}#XBzUkf8Yg_1I;_wSJSA-Bv3L4b~*$Gta1T0Bl{7LUVgTEp)K69prA>ToEf;;q?<(0IZ8K|m=71;n`fe9;0y)%#S zle`>tJS@+0Bvto-@u$RRL|?C{c=u6Vr@p_X+}U0wXEc?r;X0TjG^kOc&86at;vOq) zO*{*)W%NY0*YnwvuZc)QwBM%>^*U`Ta>VtTs_qd`NpcUS-ia9@ijtCiw(_hA?B>>@TuzH8qG&sQa<7>=#WP(*aI#FYgKwrUvzhj1xHy70)E@^Ia*t!$+CEbVOQ?2N^g!n~BC01>Jluvc}zSuy&+ zJTV@o!P?=qtICX4@m@dXq(&Lmh}K3`(mMmOM=eXy*HZKkUPvw*bZ>f~noSOW&R8XBJpIc)9C!8dy2y{T6XL10~C@$3*z- zX1d=@=+vGzydG&5nfC3D>dHp9WbhCwf78y1U;=+%&7Jxw$!~btcMiD|KaN~Yd>ejs zL{BriH5PL@1zw`odnY`yc+037FM?8qCHv)+ZwZ#h>(R3OV&rwiw=f$rs~qx^qv808TiwT7XpHb<0A9NZC#L}jd4-XDu#RyEXEY|`?jQY)K!TK@TdJbL`$ z1bT$MORr@d)vidAsHft0dc6f=yJ@Ka&XRYw=DP`-Vcj0r7HgeYbuGP~caSVDVy$7@ z*?r*oXjr<|{Dr%{3B|4YF-J4baL2I8upxIEA5%!HC4EE5TKPOld=n;~3En5~*79}H6s$E@WoZ+^wu+i!dHs`hI46^DRb z<101u8WQ-hKXjuGw1Piz6~VTfKU}twT!<~TjN*6?PVAk%OUfk9PuOiHK5SaKEu^hE zr&ourjJK0jorJrscKo#v9$Sjei!Zopr_~G@7gL^ZARA4D>K%EvZi{3x4@Cv)p>&g) zXdWf@UZ&jR*yX3i*8+OptIX?^W^K2pXlAvS)A=NpHEvUSU?!JFQxRy3^eX{u|5WgE zwYGE*zcumlqT?9;S@-bXg*`XHVbQ8OAz3|J1f9IpZ&56GJ8jB+wq-R#Xqq85ZPqTT zbMwS=Iiw|J(gboMLw5Y@vnad>+hmW1{S;e%RDYo}xuH@!xash|<8g_*%)8hw7GvA6 z_|cmTcuswWyvO?co9MP9j)dKe-I{n&yX!^v%Tq7h;3@4%I!!w6+*>pX=OC*a@iTWo zDi+E0G-rAk_L4AHDvoCIzP`FY>1%(-wNN*NBPwESl*CBm(Dw97r+m4xcBfAAA^|eW z#FjQZA(H}!F610=^^!}rQi$TtNr&s$I3JDH0g^%5LZdva^%ZHeuZx7?h!GrLTzbcN z5Exzf+@q>rYnOp4t6h1RGOgo@@yUa~SFKEyE_r;hcP1-cDw(@1qwO}B79 zW_a-xt6&f>M}x-@&)67$%Q_^9&UVnAKx(g2EUEH2i3Fud&;Y~6CovfM4)0pE#`SOT z@Nf0Ct=5(NJdFso3a%OU->G+P-{}?SC7ydMezRg<8RY>OF{q-$a*0q`Bv?2R0W_LA zRZg-Mo+bN~rjk`oS%LeXkzu(L z4aHTs_1H7HV$#NN4i=@p7esqHDKBBBk0dJCZJ_!1dqt|Xym9c6;tVuY*SWpPre8xR zarCB%v6o*%r?QqvJq3HAWdU`(e0u{m+@a&}jeynxDlc}+4Wb8EIbDVI*`155pSFZa zZ!BHuA6pWc+wK{ei5WglLXsz@_@Hl$h04+La`by?oS2bN0On02b#O8{D&0{X&dV6$*b%R5j&m|F3H#xZ`EXsQkty>dJW;20V&&l7PGX7;@33)h zR2o$MTG?(sP}SFXKOfE6HOCjipXqwqy-d>!zVq$#h!{V^b0$vZc3UqKnZms)$f^b` z_-lQOcW@?d0f$!h=N`2x3IldHO1s_bjCnmScmIy^VByuU$|RR73&+zN&?T(SJ#XnVzs zpa6#*&V#z)?$E@T+MxLl2VFJS= zHwi7@v}~#Hsn~cX8~MK9bqQOhb{XJ-8#iCJj0+Y~4JDqmQ15)Ct~_4uGJ7j_y|&#z zX>pmZ3fIZKxNPy3pi=QwzPcH{Ohu+|{?^!XDf3RC9GA$-Eb!~cx70#SQ?s}fC276* z`x;W@IG%Gd$Dz3gzd-iNh9io#eem*j(1P~!B|;?{d*$!x!?gCIWl8yYS=jm6Q|dfd zko`uNr@ag12os7#pS4Snt6}f)YNpF2q2g4&ThV#(=*DdyeU-2rMhlklv4xKd!ZV*k%!MjR# zOoinj(ziaYR~CqxXLJf~h7v_F4(6{HoFD}pOTUJ~sDUpjcYsbENjLz~24WuuKtO=s z2nSH_xS++(KRJ?c{#NgR+~x^FcO(H{Qtvo(Bw^fPu)!u}nI#GP zPo<}hBo_;1`KNn&uHT9t5T*Y)l0dnqXTPNMamvYpfpRra`8@S@UWXp#K|sXpSU+6W2csJ{Twx0~7RY^iP#T9sNIQA5bhwxc;hroT9Q9T9QB- zb6r$BJc}y8rTphYajF}t(m#rvP%7?Rzg66S59_6#B79 zk^r5t&NHXE%#s9X*7z?{0sM>emp=^{BK+U9p6^HkV*V>b{V%qcI+C#eQ_cbdoHr{Z z8vvXLz}Ec~4^=PZC;lqep1&o4n9t2wmpGC@nr&Xb&LEf?q-oSCJb$YE-?W}j`Gc6x z&0H5z{y!V{U0^WPKplB{(~`Lms>Jfr+CQTfM-<$TH?#Qa;@fDEniX(%1Dr+w*UJzH=LJXmKhMqQ(<1;k@!uBpi&MOSC;(1$7p|Z)%>PX2 z8RyS>iO@er{Cv(IK(qf73dvRf!1@0Szy)*j4E|&V{j}#jFHNUp<=(6wQW8F{m*2cf&Qn#g(~w;$mx90A9QZt z=JT=N%lbB-f&OP2PeK1nBtlTO%SZgTWb`YN7mfHOpHOG32n2wFzd&ywIv1ERLjc_0 zbe_-71Eye5X6Cu<{LhBV7tG85sRZ0_SpgRGlt=%m8R~%l{E@%b543stTO#@uO{nwo z=N$S6mB48ZV&{2^dV|;i+j^*nJC=W&mw#m<=?e_Lcd1)!i^o$ zo&2H`C(uA1vK$~pHRR8qIQpqHhVr_;3eNfXEZts@DvJw5g{}>3#5-X)EkF?%i*B&63)d#eaVLq#O)OL3$E1@i$-#>sZz${r=!H_--|6!K%M5dPG zoL`@K93i=v1&U&d@a^HDr5jg#OevD=8?Q0F{_Jx{KuKX@`5fMoK=o5+R^bQHW*}>m zKIQ4au@agG!q>j=2_J46X@=f!EjAE1adna(Zr!Y?HF$MRt8>|9cV58n#-8K+jNfMi zUWVl@GZ&}&s@#&L;n94?FAYacnzg(JPuDjP+&xZS)6dguTN8gL*H^(g6l__T|1q`E zJ!1ECqqX(N)J##r{HktQgC8GUn+jp$Q-R=-)*Dqv%e;>{a3QT|D<#~XlsD`dTOE$^ z_#CTP%?8vSX8;MSbE|z>fr-Z$z3SZ z;+}M?Eou}27r~w0!E+6xx;0aUNEs2K&Jmn9a3fR2$3d`lqFb_bOzM5U*Mp-wPvzfx zN2gGgyxN?kS9@_NZg$0fj`GE1gHx|Z-PScMZP$aVCqwgKkN_M^_i6|PYla>Ehr+h`UL>JXumxhT14zocPTM{OX~25Z<=v(fl-7|*o&`}TlAOcdr<_spElQV`z=D1Y{ob~I6fd0ig1mRV^6b(pFVc_h zqlkI|h~%-8aVVdM2phR79B1Ym;aCX?OLSP`k{R=#>H2#p`X;NPTj;Rt(}K4!?DR)S z?u>MbU)wNl89g#6pU)59do=M$q4lvW-f&E^^W7A{kPhs&&%3|M$Dh^HmcX`u-D|+F zPHGPY=c|gVWJMUx=j}@DyH`Vsf{tNHKWFIo1(i+&3No&rr*@>1^P+ z=X^ySZs?omzm`6>bKDx zAYL5mdp6Q_hdT|9L2@FP`t~=}@5Rnx$*VomPc)Myt=G21a)X$(l}l(^t!~q8UD*o1 zCOW`wSS*Ur_sA{CLXoSWUAX1ePPGB0i_WD#0?BMe~SevnW2&BJIr~Sh!kSeI;WI|;9k5-Tr!d4n>-igoZpAFS-aFoU`9hlBW(Mm|MMH9fT+ z7?l=A1m#M^Pkj}}EYp*TQG$H8GaooTei*{!x1E2Jgyv3J4}jSrr@|f=R5SP&Gt@$Eb33{bgHCoU^i#bp|{&= z(btu5y2gG=;H1CW;KNdNaI(RDKh)b#C4~his#?}yr+AH4uA$(mU7GwL1H0?)bpI!M zR~{WEDiNT}Xbi zso`^|q6Xs~hh>)gkSU`_nM2RxIJL2==~^P&4sMyDm*uu~i23}$r>QHwoveYnpExBy zjP~`2?>v8yA@{22`cuBvoZ#&GN^JqR+xjK(4l?Uv3fDJW(c$-r0>a9{Ac{`f!OHQ> zwV_p&n(3Q-afdkb7dWVg=>$MVyK8W?k4$777Hxr5f^FL)RsL|Hmr`|pmFO~ z8M*Kf%5CwXQQm2HGeUF8bZe1`D-X)DSs30?-R=oQZ4EUS*Uqrg4f%mX;Srkfm0BOf z|F)%j#y*{w`sj(L4Xi+|e8@)e44)f@*K8(|rn9h?e5lgq46J4m2eV@0JzIo*JeCcL zlo$gnFM+Xv(K_m}I}2{6A0F-BtByh7deP%?Z7%xpb?#~$?XmPX#$~&26z2k%f=3P< z)Vj>kTJK2oX0hBo63)r^Atdv@)5jzbt8--oeH_z3CD@j!IC5dkU77NIkK%yvT6T)A zjhZ$NdmEbPoJ2v@-QHZR#jt_|{u1HgjF*C~%#U`Is)F&*8x{Hft+G9#oXx zc};_)jXMa!+|e$WZC4ho?3J$dZahSshtGQ)U3mj6wNCIXj_IT2qpW!_&6rE(j+H{6 zxtTRJoxl=iElc>@m>nlrPm&aFVQhL0DmEAd+ni9Z5|75{o9(Z~Yg-=-#uf6Ce+hq98#8>?Rf{+J$giQ;2X14 zq=@oCFUl-D%%|Hg^eASH{lBLQh7~+qDb*}K_s(Y5jkkTxDL5@r-#VP|+xex< zr4=b2%@WQ=OXKAINiV><3%PgRgJ%@i@Q`oMK2wnNB3Gay-qewVH?*@ljSCz);x7N zLOjd{y`DWdLQ#4}Ak4BkkSvzty+XJJ!Y(J5%TkkvxOIak%uORXAFr7sVit188#|a= zvnhN*Xz%1E%D=%oE^^%p`Sez}<=X>$HRfyT@Q`R z##9P(BJb|?v!mSNZ(31u3HLB9qz%~9oa{3?t^}E&Sz6v<{?4hI-=b~*l^HF(@X5&N zv%73>P2qLHKh|51nZqLP$xz8`m?F*cV&3)~ke;2?(X>K!;$v2MBfDn8^7=YYFv}~w zSi1QnTGjpPQBhwte3fq*S8%~`MyU@}sjRW)8)bOAU(pJ1&uz~fExuUhw~E-Fui4vJ zY-Xu@rC!hFycfu?SvzG0S62K;IX|Rt0bgt6reGUyOR5&|FI}74jJXKVJ!nUa|^RE`;o`0DK^Ht`Q3ifxyWcd$-vi8GAy|&Z- znB!%~t|rD1@FuX%Kl1ww`y1O*uw$-MK}gq8u0)NT?%l!Jd*7;!ES`+xyIb;HKN?2# z!{rQ`oueUU8g3q7q~`&;A}ZVB;$vESD%%Pwx9857&t7qrXB)s83MbE&8{AHeTn$7F z9RQ%nNzQTRXskE9AWA&9$TiO5$VQ#rs)<)5FT7CZ! zVb~L#1J*d4lgLkAC`I9`+4ZUEA4lLD_c3gGnTJz_ERI?g8EYtc9p?#&D%mJYFjG{k z1dc;*_Gi7pZ{CIcQp$zAd7`+EEahlTuhF`_!PNY?Sa>&_FnrLOOderv#1lJxptBDW zoawV=AE+wirAq<~`G%T18Ij*H@?sCEbD`--WmQ*`rpF{16;z~&)(|<;tVpPsJ~HET z=Z$7{Bt>DV?r(0rCe{vu{O@nz@X5M31m>+w`-~I1pRx%pg_um-b!+Xi$qclst{OpD z8i5F>;~|kAxHc(9L`Snb5_eOQW_Jo$NenJdlA^|*-?NKfTWU@tD(AkdW1y92H=z6e z;5|)Eyj=E19`8~@-kKN=d%}dAA?nrVD~bTRVR&T<74j>J6A7 zLDBBY>f3)1GH&JmRH>Vh<~vK$^H(;gW~=llO^r?OB^LKajU{t(8}8Bw;rC+_PDhTZ}=|k!IO=oK4lb zv~-OTUC&{Y?@!n;zv{MHwN+_beenLh7K8GKl1`aNSYsNIC--OIiq{mDdb>OCU4OM$ zge%I&#a6xVkNYW)T@&@T~a=rt^ps@ z$Ip6kN1(XfXeQ?c9hOHxK6Op_mx=ey&%6X_-UOkp;m=3eGGd(&HWPOevw zlU{<7?H)1jHs3%c`eq#5dP~eRHxn?X?o6VE=Ms|<4K^H;BP~%j8lf^bCdb8hC^M() zH5+&7`ti0OZM|d_o&(EqFBM$=qRilf1#@HH?whv#2vMO}s&bSd6_iwbnZ&stE>jsL z#b^`hq7Fze$ArmKlBIR>TC;cJ5navqURr1dL}1%)-g7M8t;YTy-W)xDu)C~3x^PeB z&Bup{3v_PR>=jMc7_NKK#ryi`-WfZn4M0gy4sbRye*-Ulr>Cd_ZY}At@<|$!qYqE% z14;q0U~(n6lHO3AFl>kZQ3CO{9;2Cn$Ir~a1lxQU_>7^`@0;CMn35NE)rJlqywZ5m zkC|r~E{G}ZU!MX;5{*Q&fbxw(`GGeV5uFy(f?RPw9c?1agq^txy?Zxe74|ZhT=bI~ zg6`y;&AD5T%5D72eL~YqPnP1sANA*E*K0;=J32Uju~T+0GO8bhQ_5yZKg{lhYtMQ& z*`!)M;Q_DS`l{+my~~3|n>4L8QcTDBcWVWA1{d*5KKewLCP!fKZ*;$ztr*X;vcm;o z^G?1#xn6GJQwN2=0~|~)yvsX#%MX~W0A;zexBM4-!~u>jzu$zPZ!G}=op%#{{#Dr} z6w%Me{Ol0u?tgFj*@1uJf_jzrX9@BAxBMW`UsvGJ&^xY6im(uO0id{fDh~t{yZ{He zi{<^3VGsy(-re`b?l!>v+=U|zQ3q7MPo@6669pQzUKmN>^6&SNhEk0Mop%L(K{b}^ zvU~7TA{0_Q0t$Dmz{75!G6n{2M_DeotN)`o!wxA^0oRj%nlOPtzg>j?s>Vu5O9_i; zNr*_@mlyk+zX1mJ!ib)6p=|7cpA~R{d&-5faROJmQ15a7j3~6p`PV%-)XDizd=Lb@ z0}2XfT zrKPpxBn2fT{?By${T}=r444(@>Ij%$oN9$wYypJe#bSZ-((el#%DVZzweY{Kn@e)e z8S~8wa8*FXkQH!+0*Z2{x}lBzUrJdao5(qF{VnPIrBqT-SxZh__5Uz-fQ8z>OaP$B z1z3We_0l>O4o&KxaOn9IBk1?$!vD>H%R8$9VAntC1=bTV_0A|p)}QMCP4D>>Bha1k zzdGlCdjF-f8u+r#!)Hqj@ErjX{LjW}5cGx(YVr6_!#yYzR3#R$Hv^YEEe zASD53rTf0_$G?Hj_eol=aDdL&_5;t6pHcphQxmfJwwL-N(W%TrRN`ZE&u`f$*`U#SkO<|P=)?W zg8jQE@x=)i{PV5O1@y=%#dxOjjAFb*(Bd`1OL&W_<~wJ$KSR3Nuo82anY|&J!+eO;CRI@*c>=35hjmV ztO&ozEE)eCMvN|+X_gW=N3n#{MKGy0)w%kDT%=G^rKY+Wx11u}v}@I>-qB&#NmV|` znLTgB@e`4B9&P;O!tiSUR=mAJLBrAZ{?{2sfgfR$^olCw%0uw8T$)VIfxha2rIyTz(Z2^y zmKxgsv7V4-_0^*R^^2GU-nCF_j{R?VPZd@_Nr80g+e1Fj2lYtmUDXUwk$LvT_cQ6h zu8wkc{9w3_4D+E(X`n_*e3T`ge8;3bN8WLn1d03{;!=ca8wWZVb<&??pI1J_3YvOo`#!Cfwguw z`JHptnKNYXsij0Bhg-}&UboWXKcPFi2^&IPC`$`ZZtb;5YQlF#gyMyl2kLRhH@niq zyBmv$9SJ-s#&44yKI^%}RF zedu*S=Te4p2y?$$vo9Xrai+vz^3JDk6hxe*>ND+ktCZoE`NVc_Q9gZ)XYit$c=+u^ z_t5U$40VCJo2ch*R%8VnL-sorzb{jAaUgP?b zZb)@W$2lIct4$V**K;4vH#r-G&FsyS;x)~?t!{XzQmWvvym@r8&?WnTq;Rm+M!>{E zubJYw=2lK2bi>zH+E=Z>MFHM%JUU^?{ zMk7h-+rZvIS=ehigb760Jb{G^F0bCH(Id_nu+?LE0WZAK#?d$d=TG)D?dFnNUQn%W zHYiuk%DomvO%{V{6s7))o$YgXOqwW9n2MW^6pmq@=i`;;zuz0U0_jXP9mKNlEC3@a@)Hi6&4#`eptu)eNu?hMv_}g z_f?q_ZYB{b@kV+P{rQs!W(Eqm|ID#JLe54TDZT{`n|l*RJOb57zTq^PBDp*kN8msw z=|IS%eWKE zo4fn5P{9lBO?7dJi5;f9xNT_+=}rQEck@I`S9Y3&1v)X={_Q0_g7m%Po^NtQ!X5|C zSOqPps!g`Xh9%xEGaC2XS9$!3Y24a)ELrDoS>IN;D&W%;G0>X2h87}^n-ii$dNlB@ zRZO9TgBi1mcL3&z51Y;d{dJRJdtvt8j4{*Zs*I)(-G1-nXV!Nj54K%*0Cq&zJE23X zeC^30`z>i_wXv=)H}vh}k6Lp3b>mljJV4!cd8Uc;*z9{tn3H4z*K1%W>9Sz)_7Q{(gOuEFzoi_Py}tYPz4SBrI3#p$o#A5 z*e$FU1sLI)GSTmq5L|QKKPeJo=Kb`#g5?v=p5~xLH;!7-3U6CJSXX77w%RsLe-_Vu z7k#{Z$OZqn;brBJd;XWJwoQ1>A;ni!)99amnwbtn3 zA!(UP)3lLWTc!MUkIAdP$sT+6I$Wbf4I_j@Bb*L2kOCcezQK-rB}Wo?{K!k#$x0$< z|CYKaeCosl*WiIIpZJ~Q+K`n|+Y!?ljzq2p*tteMq-7hr&37{c{TN&5Z#ng=l<&Xf z>GhWE&did^9b(xaB-U=qQN?e+@03DdvNbwav73HR;LZH^!k(r{OC5CiyQVty_ntbJ zf-36h**o?WLChU{#EYF)MhCKm{Dnh#aR;k+s!XkuVJsrr{buUkIC{QwO}b%*=u$jW zOsl4y>-H>9x(c?Fw)1W3&6t3B-1m1`tD~$7m-Fdsn6}*x?8JoLj<)m+(0{W_Fr ziLw?CY&>B<6c%j8HJQjb^yIKuZkZ~u{%ph8BV=4$+V=96(+xE3T1#d3w=c_kxeSi; z#uEydCmVF`q6Ohk3m(kC7>6TPappg}@7cl6VM?a(yy4;Sj1Ae`R|i?pS6%%+qG2I_ zlUD@cA2&lsmFRolMT@Db`m5MSYk53J;VV*ih4V1M3{Z?VBFaod{QPd!AtcBio>6O! z%oWiYWk-18x?kzMqz1nXeXd$8ALhfpjn{eOh41RSOTSa1=lKp0JxAkaQ=RsD&mxr& zHCN(KQT8eEoj_u;d0h4N8~t>4Hh0J0n!2C#f5$$wGGGrx^~7k-BI-T5_iSEG{)yq{ z4Byew6@i$|?O9|`HE~>|fG;*gr88I#+y}x-tA45hO3M!;y4(t2kAgoN;4*FyP+eyr z_rq{n3@gtXq#zMqFn4-7wIE`_9f5f-oyU)~BK9csXa;p<;$t^wfI6ccYsFn1iB3Om zr_o%+bzfUj&DG48dt<4fT-8}kk{0R`hbFvQ33ZAAW}MDqtLHDqKDmXJZ}5gu$vV?K z^&t9~gP-&`&y@C6q&wQ9tP09jSOLX_<0{hB;Cw{4*RJ`buj*<)7%J$!t$(zu7qE~} z8yxb6`b)~|EIQ8?$$MH#VKH(Yus8gv3rDGH?}RsblhiacBa2`2P_vi29p;H<1C2@_|_`oJqjau ztH`!>fPZ5HZnGKTNMev1*8K;9TPpUxhk&6SCZl?AY;-txPRf;=w;5NZ)-jR>m}`Tc zU}TO;h4wTTir35c_cyWKWXawV zfB`2hs}$Hcn&XF4jEGTiU?&?h*B`!}bV>WdsG?K1yAr6J+r=$cFR2%8j zjYWI6eWf2Jhu`iBgQwyTxEIguhta6xRF2FZP)JqFLRc?cg%zYjpU>33Pbww^HzAcY z>=+?~WGS0!A}&A168|nLs)n|icO7K7E$Qa!Q?w8*AMJD3w?@#FGZjAR?SLoZ)GA&% zqhw8|63F|x5sw&kj44dP?NnXVQvDtpT)Kb<1Lb6EHSPwABl+30hys>|k^CVtdy;QA z`CRukbB-ch?j>^8=bx-F2t#pq-aifkvt}MwrE+4dpa>j%~f~@M=d#>5U?7ngNkA)($#xlFeV&Bp8 z5)I~O;8j^gXejbKDk+hyU}oF$v)w{vJWAggjtcbgZ)P;*aZ2?~>YdEG`9T#+Xta?% z<65J#!OT*&0bLTFabWzI8NkD&9_A3UD5Pww@TFR=EpkzOOe|OCey&rm@t)8l9KE?; z_M>7kDHg5p>qfDx=SJ$8#^#e!V+r46-#j2`%g})}t#_K!BQo>D^V23O-L#W0oev5c zX{Pn}D(Rx?HDtRtKXR3F%pPdg<$Sp7>J4+%?9BmqyJAZKe*2|QR@zGj4lVDdt3Uj1 zxWSq}=Vdsw%Y2G#ano1HFd?R@6<#h$#Fs~!IKipOqVz@FCu`5OSGp<9NVdTR+^Wl} zP3x!+s@V;Nm_jL-?E3kCo zQl#GT>$H#5=5YrI4H#BrZ{&%HkhpI|-M=RFUeOH8#)<};Xhy?9v!vAlbCdB_cd{#j z*O=2*hDCa5r*+h$^(SfylM7r6kLlgvv)rEKUu7tHn<0aAUFq3&jjMe~BDqp-;nnP~ zS*tS!bM$-SDbVXk9jRom!4rL z!^>+DwFbkXEAmvf$EKWqrZThd82Mz0VJcr%8mpHfzehVuozKixgjU&O*)O!xj!<5N z3f5h+HF4APS;$FN2eY!3QWvT&-U}!F44-^|^xeqKnSuh?|Bth`4y$VWzK2CR1e9*+ zl01j*2I+33lvY6L25AMP+aLv0N*biQyG10V6cB0jw-5O7qF)a1zJJ|^`*^v-wbov9 z?>WXCL$~#s3Ah<;?Do|w3GU@VBTgK`+zUHl%L$V0ES7|!F@>Ifw|R7u4DwS=%lZ=U zg+Fo8M$N|xzo$T;fQUVcLR6`oahsW|xHf(B9$Bb$Zor$7#DwCBx1T=F*YY*T+-#(_ z$QILgaBgrlw+ZEHe(5xKd_Wcp*!vKz6)6qVMROO85 zk+s}X{jcDTSXrvwpkRMVcBX1+J_@HCP*KWJW2fyq#!eyB0!EeRrnDs$V=!YA+U$fqYWIB3eRNIO?^}a3x>Qk=L?iFLqM|5j8HaUm51!@p>u_w5 z@=M>GKWS-IgILgZQgQT2%Q>s~Xt(kmYP-u8C`Z+Pc$gQ^yAw5KN%nJyk+UjJfq96Z zBh38r=e3O{ijVsBVmqf(nwlj}O!v#vwAlVWV#3MvC`!(sDC3HhBr1qqYTl`z%1YT= zSxO4^%!TWscJ{SWdbAxvIkAxazgd>p@P0}$W_7%ichfkUl>EhHSZ+Q#Pr{62#E4u| zMBdlT7Zn5dHJKL`ZV@rHGAU3CMlJ^|CA?>Ry_}T$G;M5rG7wi_d65BHXLfV4r>yZRsSm=?>;PdM;rX$gJYbx3_F>PjB^4jmB5Qg?F zi3u_zk}OeVE`A`s6}2PQwX#&ne{dzlj>HuolN(z?P}j?%BC~J%UOw9(Yj&eJR_`;8 z;rrcRJ1Wc;ykzHKOXR1vpkd~2IveKw=m(Dd}E-9887bnq*fbpZW zkxyBVe51v$iZfbnw!E}Gdb|-oxzHQBZeUjXBA}p+F*!%HdE?A%SfIb5D|$lTel@4v!T;71m7FCujQ6@#UyM)b>$3g4ZpMAU6gSjc{$ zrZpw9I)Mq)ALg>S8wITB%Q>euLV+`Sd0bVUn1*;S=yQ{bZx&S$!g9!x8+ zyp>W#)D4yFqaCAq^PjWg!-bMk359y7kT&?Sy0BAud#F&rh>3<#15^YaFJw%qn^jYi z%kk0-JUo+2cY>H6 z_$Ubq#=F(d_DtbBIEd5;NqA|EFD7W>C11xCEMf8Q>xGZDi$*O+3n>_GBjCa@FY+3` zBOd#1Gs7KCI+QJuJci(&S}Tg(0DOZ@aV{ihjsB>#Q2pvc#K(Fci2#eobfB|JKysV# zBY(z{M$PvZgya?##ep8yU&Dn~DHo<5qW61KL_9O|Xw=YnAMGGV$)8@_1N#fMg?LaX zAPFuKmpIk&HQYB{lEGrdA75@w*mRzcvg;^=fk_)j3f9IjsB+@2${t^YsQg-?E;Phf(xKlIZseRxIn<^{vw!vEh7|J z0{9;i{kXddU6ug2JDk6qAYc*-2r}Z}Vuv^c0n>bt>W;xeB_{sba450_j(5t9Q~v2Lr>vYyc5;LYtgmg^KPnve8wXD0Z|)4(-p!$GN&_4&dYL+(+p6D~=6_ zuLG1nzrW(x*ddlhP@nU^-bSIkEOVZ!M-ZUUUY0=@l%L;Uali4ggSePMz@DFr@1M^& zC?-m0M$$sJ)Zw@=j~0Li*mC>^3Ide8z#+K^=wB-d>q! z{56g@TM7e;_OTa!x3mz|ng))n6*-b+EBl z6rRQ<^i*-Sj|ey5vsXdx2jIVi(LDUIR|Lx@ZDc##?CXss=je-vyK1><7fr43@}AvI zG09eZEFp^EVp+%d5EaPdq7M^YLkf_Y$WtKp^X+R%R3}85$fGEIL4{#Ik%vCO?x7@u zxu|HF(8@L_j({xGZ6n)%^BJy^*=Ok^+$a4U?zH&8pg;)`$0)+D01jV9^u9ge-CF%y-Dx-P66-CRGtur7 z#$hzMdk}c;m&AW8ROS)dTeClm@wpvdSEnhg2ItL%DS~f6yY~rk81bo@s}RqZk{#~r zU-|Hc=_~!=7oKF{YBAdE{Ccbzj8!A~PDF7Z24gZx^Mz#B5*2a!%U^wB@7~8L^&@fH z@79*P$Aj;hDW_E=RW_Z6UQjTzAX~3_N&6$Vdq<8WHwWRn-{1CsL$Akxq*a=gvCzjmk_^b^NDS zJAA{_=UNaaP^5HB_*^sb3Syfl_Rp7}Lj{>dv^&{;?8SMinTv8e zkjM4K>Mi)zhoU!gXAn=T_6~PUtWlCBHm0_(2;_yVsOt}g=dSE8@tCFtb^BmMHcIZo zGo&d4p@QcP*aA_+?#rQjsQVk(qsR#w!-geIvg>F9g z^v3wmi)YhvXIc4OBJ6GvqsKZ5h8~)s4W2eUrB#b|ZRLQ_RV&>Y{i&B@;n8EIkF%^L zw$p_v-^uahYJ3qc;!*!@_2hw&Ukd$K#x><%5+mR6k1CIrEhP&~nk)S;s%0co>}jG>DI5&hFm79XUA4zcN`9vH;(uA(e9 z4vN*#&-ZCayGxn%OiZ|IA3h>ts`^BJ80362bL`X7wB&wmJheHEg2_CSJkGFWo&h5tEx^P8 z^*&u(?GF+-l-hjK^d)5ze`d{WlPr}cG?cFK3$N+*r5a9$uupvPpHhZaYi`x@v_5im zt0`DTy(I@~$DOoT2&nt6+n)CZp9ep;*~{=VwjRvZJIZ;#!KSVwUP?Bx4}Np^g7Kcr z_*$_>@pbn0wc#Ks+IjIURBV07n>1UZf(w|GL>CP;otE-sZZ9ZX*zKO!9ns8Zpl%_( z`rNo0-Rw?7;D}CfPttWf*Fp8~Af^erxg^w|-z~0(SHaiJJTwwAOHygUv@2b=R{M@C z7eeLzeBUtdp~sBA39{z^fAPIMP?yq!t=8x24}BNvKpqQkN@&Osnx8*=w+lj1wN$tt zwTe%?fSdZ%vW8)bJ>=@w7Ro)D@O@zgB;sAEm0F2`rT%&9Suu|S^3FL%6>I)TU^VLG z?tdD~UdUCU7J-Wz%&pk(eIlIl-Sf@MnOYVdFMX@$aonpp1%8XJU*JA2_Bl$)5;9B>Y9qn40UgX*8=e|@+v<_JG$^ESWs7e_pchEKR&|V zHm$fl9&$()i#_75fl8T}AFzqIbBB|9DCaE-T3C({+aP_`>OzONw7}+Ue~T#GUX5I- z`b65>C-An|;x0oz@^k`+!ohQ6KUG9ll(%m;q1@T8Qf$# z${8}0mB}(w)0lmSL#}&8G~;LW57G=i+s$6L=!dHgg|!W87JEwFS)(a>dhZAvwO!>PdR8yy3pXM%ZdA$ms+nC1@uj->H8H^# zVGMeYYhoQExEJvIY!vr#?9pfzG)G_fbt%#XwaUia?rTCsNiA2`Htcx~pF#eny=K;c zN)7vSp-NIUGih@{znb|K8a2dgx(-S&CLI;X27Y`cYP=!CsNXqS5l50rM`RKZh?b__ zie?s;9v?BQfUSMMeXPQuipsy4M!ef?Q?=KkJj1tnU}su(E3Bhrwu-O%K}jZ~yTmd@ zM?USLxg2$`$tO-{-seKzqz1<8_{G?9Z?$}fDHfSxdsm)u-g-%3#*Md&l54UaTBbfI zpoTB9twL00*__{ooy%#gUtCV~@bzF`AOlML6;^GRkF0=4&=3pj+G?n_O4BliM+c*A z-8w&IuCkxiG_$wzQ&gHnYsJBGN-Bv6nF)RYZUgo@H!B}5iT=JP9Wl(lT!`5y=}jcg5axZRjKkE?=V&s)nQfKIhTfjYhoCZ2t=n{jO18>WVAjLFN7O}7LGId2 zH&-sUIGZb0lG4ePZ|4hW-9-&a>hD>D}kO)ObPhF>$6HCNqR(7FM!!8i9Y;_G5^aAPM=8hC%d+H&tSqlXz*R(L$LI%(&>H4tB+-Q$gF z4xzsP+2|881|hpbfywmM2l+(!d~NRt*cT{dY&!^BlpwSF_gB}#M;1-5bbq`SA6Tj*;OM4yK({?Rakdt}VQLtMp3-{PV5 zf!XUb=Y7S(n_b(@U(y8XgyFM@NUB(N?rVm4WW?D%z?x3UD$1{pbC@qnbGqlp>HQ-; zDzAS#7O&OS&RnPCTi&a~t9Jc_*DU?;Y^n#rfO z#M_ZoJb1HJD3m%~7Q2XCQGDn5ngPdtb{kbxRQ}l09~Pcl{XKQ?Qp#&`4}{q4`fdB9 z7?F2JFiF0Qy~i5AYQ6e+qEIxTGV)t^Hm7>EMjY<2m~~9t5T-H}o0z!~GAps-=lLeK zr{ehHcbc$udL4N&LYrM!t*c!l-^mJy`44sEz+9gfp+Z1esjC%#l45{s_>qIi?15vR zKWqms$f%5ij-rDBwTn-W6+-W6g%52@aUJck4sJ9+RX=UkNx2BwabKbJ$0u# zT_~k=epZAl-K1X=5)g8VQ zQf#f=emyW?+u4@Q|!{+*jC5FObgD%AmbMSzf!GC7!Pq0Eo zcNy-2>r8qWDt7@iD$m_xFb6O>3%>aqCI<&3#^ijI$F0o&%)+7ATXUTvhX3@4q1jsl zx`^{pvIEm}z<4?bFgXb{h#}*%5Z%Y|(n4Fz%h_9Vo#KQ4f%)&KCm@MAcO_3wBV+|3 zii%_Y_XICAgn!SdL!l_SPW9UVqpB`a0{|n3m%$1K`t5%P>Q9hg4lEQk0N1I0`)RNj z#R36|IhVo_L%0l=r5@n_ugzp(R*f;7ZfNEB=ZaKPXP)P8vqq}M*^;3 z$cl2DGoKFGoHmuYQ%@*$;2jB2|Nf@bA(fMj z6WaP+>fQa4aj6^^#ijm_Qa{0WB8)yC-sP^I(|M_X)(`4?=S8upzlG6kCn$dlqc4Ja z89x1VaOxkJ=kV!&C8wUlr*m*|{>`UP0r3l;IX4fk9+2(!F>r>^Esrsxm=;-71`2X5 z;RM=TH@D%rKI5P#(@k+CwZrn@o^(4#aBv~b(^sML#{EQ-1laG40YgTeYA}&%H8Y0<7PKZZn}QB z(-5TZ@p$5+LFQ_v4`Arv8u!}iV~zWU=jJxwH>$*{yCO43b#H$jZ8pL4Z^Xs1pf}$1 zuN&jUg-bRp#B$F!)EwA}x>bO}5qijtAF%IPzv_GYklP;i_NvdUa3?F+oA*P*4_z19 zjX4;vq3PgwHBv>u&|w?b>;0;i0jH5s?VDMgkkKAhSc3$8CFPlxS-L@VBQ5L1q2RlK zp@UY@Z4aYFb#pwm&Z9|iZUe;7VODA{N{6NxjU)KzF`3y|Om^k=vIMy|nKbQij^yB;m?Bo0eLm+>l$fDxd@ZR4YjaUwmnH<9;xH0dBwf!wcVmwMsk80X0N!mwXY%Bld0mv!g`L` zUg5{blni}tCxogU9mvf-=UVl+N5SiB8Pzmvb9{K>2=Z(gtDmBo=XloO1Bq&JGU7Lg zuC}XOdilCD3-)dIW|+UX6?+PQbMr^J(JZ6*4QJX2gz{zVM)fiuLG|aB3D+rSy)RCs z>+x5J_vcZxjMtV{b}eNv^k){Ovi%xwa`(JY?8%2GR$oAOXr_ZpmlU%LQbXD;jkc2! zOn4o-1N@B#87vbTdSDH9J+8j<+(F2yGV&S3MGd<3wQG~jf(Kh?xupPErwHMVk}H8S zGIqmVZ3a#eW;&^Sk$a)Hlp_zG7i3^^5{i_?c6?(WgWfVPqSu`_riEf$c2 zmOf9$=&G_RKd$SaagCC_5s;i53BzbhH%APcZRh^R!gidx`VOT;06#Ag^OuN^&kSpw zyeE7Nn)wFFzRff#ZXrCV^&hbuB=Ud}a?D^h_~ajYJv9$U)3Fs4%>Mja=TD@tHrBFS zT{W(Dy*K>msb2cUIEf$}HJ^cxN>oZOL@nF=3c}NoZrq7CSK%(?FsKA4OD&jh?{;8-x0rpsm=FgA zwb9zdr&I>D}nGQ6E%I~9HPa~Pb1-TX#DcA zqcLO={*B5LgFFGWtZ0grSLp;)o`k@sA>pM}%D-T6adGiO9@Y(@iIh}@f8AXAy@^C{ zF$z}f%J#FQ^#^na4=TO&$I}uvuQNQdtbb|~SpI4L6%!rd9Yds&0*}0ECY@K!Syx;8 zh$9Bxm)#e6;%MtNUB>GmQzPw=1wwx6u>doRY9#6#KkIXte^27sN^zp*iw#?4LG@NT z#f}8}mv#~R*U3lo1ZJPgTC8s^B}=9~Bz#km--|~DLawk2#k2il5*((llm1q&O!|n5 z*q}M<)qtOoNnPU=w`8AoVuEaLM1Ay}qyRfp#Uw+8#cg^B3K^ zZSoe4TBoxs`6r)ojJ@VIyW;B)W^OrB`EjwI5<(Q-7T&T;-1SKUca&GG`#I)%s`C%B z4JR09ms-w+J8$TO_&oM@s?mHqR{1O;p;!GL4VsFj#stk68+Rw*@I90aSJ`TW+=5n$ zihiK*)K!X9KyTM(rQY9^rl3W(F>u+)B)(0(IB)WRWSQ760dOldYjcO{Rc@QYa{LNk^78&|v;VV}drgNo! z(aQwcOm&y?tfbh-q>sBMIwbGS%6u_vV`d7g<8}O$K==mu7e4EhTs6BlSF8)uZqwTo zrYSll@i2NZ43A|tv1zqH{;qmFW6H6Hj=vu0GU0Vkn&-rRllz40QrsN#4F&`aznS zVU)`|f?3K}aL zuf?j&3ARnQZQh!h6X=K3zVSr{(A>@hn!!a6(0w(K8)#)H_eRIa}$OeW772^%oxiHXn2(p z(7yUzQM|?V3fw$bjuP}t$;dk~tJDO`;VA>v$0daV`RfTr;X15FO%*XyvxSrVOr{OQ zVXjSrhQHKu_d9FJN5Q$#`@v->dbldD8>$Yrj3(F-9nrjD=IX%{Y*vQURh)Sun6uMk zHQ(VGENiw+b9&vpwxDYN2RUPBf0{e0Xv*Q!myl z6seZ_3a#dPw&E$!ZWN6IVXR_wjj^D|*&@UZe68%h?MugUck85p{79AM z_ZI7o7&~9~wFRQsCu>t>T>HXS6Q1Oyy9XTRUrBBpEk;7j`61$bRmRwx%h-cb(}gU0 zFZw{6jFCjWrxKT`f7K%4>-h|H3vx|~8T-Auwf{o8$WryReWn!=XO6lwj z$KZ|5$}Ptn3DZlk`-!HPc~jcOFm?H$ji)fP1S4jP;I)f==Q8&gVy8qvmp0!nX>YLs zb5`s@vV90{YVgN{V7Z=`857I>Q8sRcJP)37^`eK}?+(?o(QX#AyWz=CdX4z}H#^P6`?cWk=XMPTLuu0?Nx z!6A}nEF*7q@8fe!m!PS{SeJfr4o#nGPJZ7sc}}9#-jq)SSJ(R2(HbgmIhDTbkauva zoDx)Lf66PlouW485@NQs)?GI)xJBe(w`8*>#S)z!SMiA9v(h0dUgk38=cbS9Q~Gc! zhv7}~6i5YoLsuRY2M4974Z?>X$`RMoSQc=(zmk7!IXZ$cqf@%|(Lvdd9V1Pf!VyPP zLT{Izi|Lsk5|*d~NLH%^sUTMgZV2^pyGPWvWB0i3t#8Ipf?k@i@F0-W(6|i$xIv*> zzJ|m){WfJLcFEdz@mjTU4uwB~)cXz{G@C-^YPHl~%t;4{Vq(DuZrFpNc_gZq;Qu!0#VwQ(%N;xC*4v(5xH0qqTs~OrORQD z*k!8Sm2Rie$Zrzku{%1lM`8+oOex~<=wk%i@>_C(M2L#MXuJwN!fLYZ+fZu|yqy+X zf=XzX@=bVqrdCDU>-F4MQrMipgahCxmQBK;bK^xlvf?#h5yiqcnO&uNB}Z&9Ze~S< zpTTzDj8w`;4lGDJNi9<8pN0F!HrJ>PzpYYb_EAwMW)!&M> z(;Q;Zorifx?BwxMacODi$H1Z3N>XkifWkagM@Z@6VN1R76Zjb3BrC9;ov zKyba_ff&M~C3WPN`3Yxlb=Za*-e0{4S!k=@jj~ZaPLkkmYva;=E&Xm9_lYGRj4e}9 z3n1?c4h*ro9~~AQ*5ET=(<)zE^FmsTu8`jM{tY_XJ>03rxtP0y{b-e(Oand$nFUHE zh*4%n@vnGaQO2A8(ikLoZYS32+eY5+yB1ytdf)IStJi4cIfpbQ)fzQYQ@1; z^c49AG@?Z+72-TI?8l>_O!DkM90cw~V$nLl*hKmvg;T77eDHU9+5j!2K5>;vOwapv zqSRTn+&A+j0%q;8nmTu1qIX0uuSlA2tVupYdl%DQ#PpUto9Q#yI)t$xWA2dTty=QC z2eQo{35<*nP2)CPy4lDD62HG0WJ62tdC2Bo8%5n+s#_x8`;IL9yB&3>w?^99=$&@9 zvf-=mY587Zkq{QFbH?}+F*!ck4Yg^DME7}?GfXABQLS9ex$~S{cP!QVF3i0k$&T2l zE8-m*Gy&ly2a8%b4cH@zi*X@oMe<5?(Q8WF(+=(*XyIbZ`8yv@F5cI}a?@kx>Fu1K zI@-`nMR3zgH70Qe$7LxP^LNcJt#e@>`o+83286FTv<)x&np#z6XFPkJsAToNn4`U3 z8k-~@o&Ti}XQ8)1LgeB7*w#@7BdoPwtg=bz*#iuCepKc^= zAn@%{C6%G%XUi4~GQFL3eIKK*)B%^AFm_zOuSmHaylVZK;s@df|7%=kZV5T>oR<%t z(CIs9DR?@|>OLN~#*e$cv@$4@1NXWCRR4aYtSIFNap$!5H`$IaR+`t4cqS|?y`4C1 zau04e;U?=RSJxR6uVu5xbXt2Eg(Hc{73$C+T$>yVX>XY9iE8!eaE9!iD{s@UG!DBRh=wga zf{iU(dHb>}z`uZMYMBMk^ieOoMm1OEhI;As5~eQnl_&VtyjOocBZ_-e+5c5FFxKzd zHi2hp(cRSk&0Vhp)?F|ZVxQxJ#{X|(p9^UG^FW5`jytXA2TokBIrvZCAKJVP&@#P5 zo0(XkR9@n5cuTpP2*Cq|*yp^U*AE#|1ITDjAb}U~A^?~= z2pP@A3Ita}@AV(2`Tp0M<^;GSpbh&^HUiICz5X-fSUG^P-E&tE3?vr=4fEd^Il!FE zz?rxJlCzJyx5YGUalRFvZ=LCiip%0<` z?cNV?r)RF!KW+RA9FRFLXy=0gr+$C~gNR#zfm8@h2RJ*QfQHsCzns8;=M=^Kr_p<6 zt~&=Xh&zYD59@KMzo*YjOfS?Dq|Mw*P z32JCK|CVi>t%Lxvp2;O&!WRK@Gh9Mf0EvwGBZN2xe>u2k3n4(Pr%2`hsP9V&A&yD6 zbG*fWFEAi8g4p$+2q7Toq2j%S4g$n_s?hw0_aYqxZ~+O z3+&lC2oUQ(W#{Cox`Ymb>w-e`duf434Pw`S5-k9+m^tT0fIJO<$`G_0;Zzy=Z*ebh zMc}%iApOS51_TNHaqI_X|IewJ0OfxQ>)EadAl6gF^M6>+b437rgD!Chz&t=90B%`e zbe@e3FvfwvzTAmD+ZX}FdS<;k&lusj9AEfgK|FGRi}QD3J%J4s=p|GzAl6d_>%SF+ zs)9K#*5{!7p97O%tcC-M9?Nrr*l!0?pFvs`xIS4^O)D=W%0Fd{< z95|R2a7h3phLEQpDpP)`(hp)gt5ls``j5~0IT#@V1K^^C40HpsBX$m;sse~1i89dk z`ce)Kz(aM$B>%bT2ge2h=OASV?shiujyac{n_paz%M)l>iJq2!1ChUI|IL$D&fVqT zl9=E4ApZc~vLOl-==d&q5uK_%e-`lUi|F_}^_)G1q=vEG{0$M2`0EY+bn`*urZWE*O~i3LWgRSpPg6>sVO?Gz4?EOh%#>du-EtxI;yE zzrmAN{=7=|>rqVp1ji)cE>WpgeXz7wr06%|MUwj1Z=`c4@I%4MvAcxR;lXz^#O|9u zbrxL}Ic-E|*uX{Sol%;{_P*UhPo&+#0%PSHh%F#m(-`OVk`W^#QE`#tp9yH~J&Ln+oXFQj`E z`9fz%Cx_n>;5ds|1Ckg9UpUM-eBo-?ZiAbPJ!|!Hpq@p9_`s!c^z0`|aa^MJR98X~ zqU`zQg1)WmbMSxCYi~&yB0y$+E^g}b!01+`vl}3Z8Df8)hPt_Z_=9obc}?45skKt4 zqM*UG4}ERD>mn3a6(5xo6mSGSr#`e+!l~=&TBoA)SINeBuyNIsT>$e<^5-8Up$Vug zXmUk-(GM!tucG6M-1Bu(_r?DOE5T#+#kxKqf7ilpMvqsGG*EheJUGHS?p1X%3s;QC ztt(upu(q^Xh_MP!wSMK9KVYZV$P@P!i~c<1HtC;J`_XVk>v?RDh&k$nIV&rtQ`0E_ zRv{vtdBJPF2qlIpZcbsRwlY^|7OvW2aUmz^TdLRwx#T-Il$xr=?w=eeToS3K?EQEf zVASD*@lXcjIyf3!)J<24df;p7WCHzgMh{tKWxlq;qtgj))$uKsICTkc_)vy~7d3`f z6x}IS8`VhhS*Y;Avzq5Q^1(wnuta+@+6rbf>ooLsa%aj+334OAHl2Bi-!~)rw8@}d zejRMN`rU(C;DO=%BU=ILg~gd2*vikn96@BxdkNNWtZO&tZGadQmu7X`cA1B_&aJY*tcc@RsqwcV;j$yCdn4^w~r!8Bf52U#9S zv9{W~Qu`HdDw2Q@dmW$2%2SVsXTr2&SM1qE;K2-`E=`sS(`@1q;T=K&{2Fpk`)8Fc z(e&xGuVm74I~=akN<_4+JheO+LagaDV#2^QDDQh1j!D5){?13A;|~D_8Dq zSK7~fv%<=L#g(nq3U|W~Z_Yv)ti69w+SQcyIy_9|B^;Km3MQaT!t}cnxLwZQ)|cH_$LkA5&xNrvtG91#}Uf6ZB#ZyuC^O*?!G|@ zxh0=kC6~M=P7KGjN3a|#mo@mV5SdvA_mRX@}7kav-C!w z+(k$7%lUq7%*P=)re8GDnpV2IvRo4JE1dio>v!WW@8DL$#}?Ae2OdeK%;dt@5qg>y&~R;z#+k zui43E%O_MlC-W`#vO63+i{5Tp7S+6Vy;U!%qa5gnUX0m7Gq@x2E~e94;ktNDOB$@) z=iKpbfk3=P1{ztP&Ro)t!W+h%H1bZkPG}^r0-gLz2)fslK<+(J%vrf!W5AK~K+a(fG=mVg4xv-jT7MTS{qC5<<1meP8h z$a=X8@X}vgp_48M&wu`~--SB%=w(8y=lyoU1#3OSyt~B}QhY=Xs_M7BD2c0T6-VP0 zjPrSNe);n|DqBr(B%rB3LsR}uxdd!56Cvh{xShB?%n@Rgr&J$c z2({yzSgFB2-enBimZ7Ayj|XuLSSbh*6+e0=SD*no38muOwLCsgZhtURFf5%WPot2M zYVG4EofMQbO5mVRV_0=?Q=qwxY0ItxCj2DadR>26YJ%g2LK0;t%XR9CSB#qQjYhEo zO*JcoZ*RHOvR{7qxP%vSCl;bQeF_XoIp+GA!R&0g7Zl9 zGSap^EOpL%8m*q;InucaOHqwTtImb=U1=W=_@kJf+c8P|Zv`KjerV*}KAdwN#fnd2 zuV2A6;2?Dn6eZS}*IY8b>xXBZ=+%UM4d-4#1zl0yruj-{RG(6H#10R5Dyv}0FhOK9 zzxv*@b>T(JWSioED`d2yZ(IUCRT+DRBJ@4#x&j}}p4N`6`|S21myYaw4t|=?_FgKh zf&ASjE0U=+IT8tstUK!+%$5c&3lhx^KYAy8az%$(yIT<*sZ`h!HYks>qgyie34;fB zmKooB?P_Ey%#08@?_?tC=;73FfNzRgn=Inr(8PEbTQ(I@k`ywo1_(51Ki9m{uod>O z=O08B7T|j2sjF;7mXAqy4b3|g$A%{sSE)kKGGp~_gd->H#(S2$V!hdPVV14(mOWK? z=}=EWy_6{k*I2Q~%@3n}*93*wq+oO3WIHiMBFC9VY|R$v~*h@m+nB0D;O#5{HR@oh(&l4IK8Y+~e= z@4Dl;C{P>UE=Py0QfBVKk&dB))i7}(ypn-U6!nQ3gGA|7XgZF6oAkq%H99`i`xW-N(B8cQn~~|-qPd?@SzAjm16TyR zB!`D4bS2w!DW2;Y)rcs;$y)VLS;cm%@Yt750*5ztr|Jjj2^vBw-2`f~#!y%vO+xqcCc&6hD zFWG2}Z|CZ#*BT zfq4&V>19EY-eq{59Fkc~Nhx#HGv;akvLBL)!t`hPpJdUGul%b2mU`2GMaI4(guii6 ze@xM~a^vV3+V;Z!+-zP|YYP`PoDSYrR>e#G^tb^IBvbbxSt`DV0|RKf<>ot$<f&ywL><9Mu2M&R{EvL?#&`Kvn6k2a#a$a>p( zWJvmZ-agL_r6x(DN&M;o>7!AX`h7Jxn3DSrB1T^7Y0Pcj#f0*oVN#SmHs`$V%P+k` zH(6By+4<@ykl8yXr%Y+jvbBx@!o%TY9x2b|y#!Ss7wzzfBMwV~*D6Qf%**tR!*As6 zx^4Cw42e&thja%zU`3!ySvs{PyvuyzvmFv9G69Gi^A{THu8gCv!%2U6T(TlsyYnLm zH2?X|AY}!^^REM{i1ZMRC;FfCcX0`y7un7)QTz-qlB! zkhK?7;O!=k1(V$-WRb^S83GehsnF;T?&qptkaTpleEnd#z zKQ_ThMmBppiRL~oxhy%S_1ZE#IblO>sHW)91Tz$!v|&9th>qXM=2xC8W@9`9+bwl< z&}TNCfjxY>1%}j z4H73+R=US=0x{z|^|fh3M}<1A!nQm@TlvC)1V?agH@pt84`OH~yW6pN;@w{dck*vn z7^eh;c`3|ZJy;96KT^9X8&yf4$o#&ks(ro=i4h~F*P&FFG=AWvVr*~es~t)#e%_m< zw-!t~ANK7jwH-Qbj*4_^@F93ZVbdr~202OkAy< zqdH+_@<%#PsX&7xm)5+aW_Q6G@PP{1P^P0>jAa_$HOaKD5D!Pyo<>#I*%Z%iEM7ZW zS>zE^4Gzt`4r&U~3E$Mcj`-ZFmNG>xG}QhiJ< zwXH?;C}CQa>8%(U(SW%C;!z#Z@&*E__{vL?O?M-XrhM4f9+*LvO{VSxmP3BthVGSd zT@@BGlqr68Y!u$|jFvpFCin4_b48N;nCsa>oM1I>1;UtU_T`T+*DCdiX-Lgr<_8^oK%!Y8@7A81Ce;JmkY#ez_q~^Y! zf{+AifdEg38B&b@hnR063D4aFSnU>8+V=ZQ`owBIR@Gi3W|8WacaB&g`WS_|RHVHD zp|x2J`bLRVC`{aKfDuL;FSHBu%9->Dz6O$jxsSuff%6NaxE`k%ih$>MRPdZO90-_w z2YSGqz*rcCpQXD{Un-!|R^WTk5D9vK_e~1jI&Eg9r zT)+8LfCK;-ncosAK#Ri+b^P>ibZ0B1K>2Q9fB+3b0Ttdc&-Wkg2Y5`Mx!-3I7H2D@crGB%!JNn7eq-bSgg*d#Z~?|sYY1H- z1xR21R!9NnH0M4XCtC^T;XJmnIZ;Rf`7(f!Gc6qa>k%;6ITtU4RRJ8c!5jeP17V`sn1LXq6ZFuI z0Ne31_=hHkazBDj(d1C@Lc1R!_2Cc0a>kYZ`#b;=Qpg2#tm^>-oFCK&{BPM56zK`* zpYn4emAOca22{dxp+Y6NGqtb=77@nT$H~L z0mL){fCmxK0h$^xD>ra5pdNxtN#;QRl$_%bu5%=FfMD-jpeH*Iv5f!}ekVJB0va03 z%WeHXrRS1ce^Dg@B26H21VDZYTw5TZr~^M7BZmg|QpWut&{>5D`kHdGUQmsGuPN|a z2l!(AmY$t}hKBR+MTH_m1f8PJ|GQo9U>>|rRo=ivIgvsexKT7_)r)4FR{njhD;#Pnf2=eAtER11@-IqX#iBn5M#R& zA>s-0%YlU=LWxXWM#5(FV4&;Li-TZUzoz3<-&0s;bp(kUSz4L3Jk(%m5-2-4jR(kUe=DJ>u% zAl=f9(%ni+OZ#j@9rY{m`#-Pdm^o&SIbD12b*+1ypXL-VIN~oQWrJue{ zzfLZ|r}(dfA?UZF^`Fl3FhnpAV|U?Vo?(deXCi-Kh!>0e6WBh(d{lWNMCiNre~oh(nvOCTPr`3=t*6Kn193f~TidNZt)q!my?UFGP;Or(ZT8hA6D!@3zwK_fhB62x zSq>yZT_=rRxeJ4~VsW7Hf2x43KIxiBCCmN_l!)spP#ti%u-Ce6E<{hX-t&3?AdNI>|rCD zxa<17`d$TjUg#bst*_kfQ+dd41BEI4!k4yKGR z`{+?X&4JgpQBym3TaR@kXYG3=5}sF%V67hCF4?OY+6~CwtceepUNWc zT4q73j;SI3J?OmdE^JRbsn(P`bqvRv^&yq@d)DaNB2b{D3e~8tl^Gy`U)DVr?U7T= zW^;O{X$|=dwX>X4V{iOZu~rW^FQtaBh5Xd3N+vy6(h`DcAHni0bDe)Rten9-tH~)i z9nj7{P-W{|?lBEU6sUhCldxaLdRHnw496uMSvNcOIP$BNYH2*<;x)}p>0@uIj>UTG z!J7!B*tYAYUKP&~zD3t&JhS_n$7tp0sd_W<%Nx4@?`CpB9B-trPux1gFkJ(gO{YU{ zL#{O+ZsIgSF$B)-&##8A7~Vv^tC6sH?^(2*(7r2{P!RW#?dwF8KsBQN+sF~zMvN+B z*Q*%$o@8&T8@_v-E#Hcj`g$~I*Ej37xVhLuyaW~>uZ>r*+x8n8#Qq~W3^b-FICDM< z2np^LSOwm8i1b3YZlgzUVhqZ??Yjd|H$Ae;nu&&W4`9VNDKteaqDr;68x3X|<`Tv? z&0jBBwr@YVsmDuFqYA?PCcDyoaQ~Vb$s=!vC2k$G8=-IDk3dnPk#8JD;)-(po}o2Z z*32}InjCMvu;G1IQFjf-UjUb6*EF065&>&Z$NqgeH0yEqY8N>*$9O0;vE+c-p>}JP z8yn*4p7*(&g#VoP=1bScb}u}=M$NeeyshRzt|ul5GOb@!_J3w7`m6R zwP2_&vWykiEVi$YwvCN9r5FPHoHMBJgE^nx2xa11Q`|Sg z;Od{6bK^Q^V&$qd?0tMOC2|jvu<_G9=8%ey+_SfE*@C?x$;_@H?Dg0*#q%-pZ8z!% zjtCn&quEQCQ`d`ycy#I5iS@#1!3>x7Yi4$|H|a(Z@D#@gZIoFTS`h{p5$ZJM!ehM} zGVuQBDxdz@-71#iFh-QXH)Byz$zTUb%9jH4x+F_M-ZY|C(~wb-QQt{1UZ98iNI9!t zF_sSe4)u$7ldnYb-J9FjK}U!>&ey+np(4zFQ54GAn@%%0!o{A*gmyCXL&)pvttsZ9 zp02N$m9Ts!%#K)R;JlvYlELx-+RBY<;=TGeUPH%gv(pMrxU7dAkBC_QU;6khtGDj?yVvX)!7TIUbIv9A! zZE%wnp2q{^PJ`atuQMDXb&oB7LG{`kZ&m>I-Deygc(^s6^SbhPNNkpk)T?HPiW6x& zAf6jxM5b`f+Kxg7^}U34!JFS}Bo2K^_2lc#9y*PoyAJ#2Lte%2d^H21(a6#NQ%IU)#^x}(JA>ktJRJ8PsMHRkN68(SizHLg60zu@tpQNDRiyT#tX533m2IIXnW|%}%b` z_7v>$rg&1DmrA!~Z4yoN!(S6`g-08|^>1CawHjv%3t`Yv@#0^5UuYwm?r%z+c8`R0 zt!Mv3jj(`0A|qL@_Cq+wH#{#~i3@Szq_hS&qO^*88~JoJgFBMPKJVMnTcYUew^Dv0 zb37T>`s6)!cVan8sl@J^&%?Q3sx=d7T&&21g{1N&w`WeWcHgA49y)pqH+`dR?t3t+ zKV1LJFIMO1O9I!mZ?han=r0p}H}<|XkQr=nK?H<<`_}aA7zJteTcJ&|N}n^L_QIj{csPp0nB3$tV%A-<;0Fr35b5kWG$< zGmAl5e#su5#BtGERQKH44oo8{BLkyc+ghyJN2Za2UJKR4`=mt^t3vi2RsAeO$&58dd7F}ZeI*&_@(;iaPodc3x z+A(Umsl9tlJd6~cDjKN{7;>B)SzA-xHKiLjqSx#2yr47$H4fz!XUm1K;7U;RYk~>; zO~MDheO;Fr_w?25lz6|k?=12Daa%ER0z!n)Bn^8#%GZ0@PCjJC4@S19WM(3c-m+3J z3o{|(@wwcMxzCV(>%CtX^jDa$U7v~d@lx*rE>jK$$`p8rTXzcZxdn@(=kD8m?oB_C zacI5aF+)R#9z>r*j;eA8fy=_d!>sfsuNH44lLza4?w3r)8@l1?3#Kee$C-_Sq;3`s z&1CiEhZ=Pnlj2XTqK2E0gUX!z^kvq}WRSkFr1y2}%)|9U^mD!`Cb93N`UKn7y_Fm} z9Ht~wUoH~-C@&JyJcj;Wc3M^-nW7S>l1ob6YhM8!Y?EcHToI91NB&;h^1b1^W!&MK zNzpctEpRt^GPv2Ml>C86l{FkCE~7iwSvFW@(yU!WSH2Jv%oDzr|H73j*v0zDjfz@~ z!CFw>!45q-bH`^;;pE*8XW5&CqU<}Qp>Hw=#8P!zKdNlVtIeG7>?vN8ufk*n&>)PoI#P-u!OQ}f?ELAr6NDK=SMCEZZ!Za88tDI~O zVb*A9 z7VpyIDW%~hT`8Z7uXp9Yrd?7ruo_NgOY?R0u-@@$4g-I9hvz{k@g4~x)qxlY#mar? zmJx#jb%a2fO(kuI@NGh~-gKJ>jqzwqMD|hgt0lAv>t`)_YD1`W(l6X!Y_D5?T+#M> ze@r?@tVr8dYD)Ov5okj=^Fgc&@zdEInO2E#rc6Ct!3A1YdZNeb6%kV;#F4EZvV@Qy zx!3G|-bDq$FB^!5zfw-|8j>~SjED`kvrKW;fpVS3xJ6-8i&J>3Y8~3Hc8)v8EV&FS zxK!x6-d$|;;gEzR(3=89E1wcjIQFC2_^+mZ`O9fukF>oz7c_8|L{V-<4}ls!6@b{y1RsTz8aJ{*hv(PnTz(BRE8}l zh0|9uP#N~;U1{C1uRDUXEBQpQLvq`X+juZP#D~7@!=v8JyFQ4u(wMcDjJA6 zU?7WF4-^U`xh|kqIm<;PDV{$hgl!gxdNitHwD5qL6iy~GCfzQmC%;nq^`^kxs8y#2 zPD5iZO|7iANiiFhZr#DI?|&1XXW-OG`25J|wH$kgVr5`=HeYlTw%q&SbW@zo~G<(iQWz z5`ubopq_-7VE11G7v7T6ohQ2CS`80Y@pAm4Rrx>ihiL8ue!$R& zJ8ZgXgrh^F&r?AR$59E>Knh=;wpy$Tvf{xV=U42B_bD(?Q@&Opbj*!`LPHjj9z;xp zoo}~lEpC_dcGVbs?{#*MLo`fz#kS3zTxgc(1HJ5?iJncZ%)E~vE1Qu{^hsx;#Xa?d zHe#AbwKFqTJ&|!v4Q@vK$h}?;Hc<|0 zhztFO)cvZiUfHp%U@D=!u z(8d{REzv$ej1n>>EQf$bmVJnghq||f=~{O59I0ond8npyL`98$waU^VQlCjbq7q>% z%ffl>vMDd({Sx=E4K;o=diJp`w4KPh_2NQ&<|gc{{aqUlX&UG<&Xa*MHw1Fp>tEF* zrU;j?1Va-!@Hm?mDwz`A69l#rst?xSKnD-i!DHVp38ajI2=5W8$8ypuJsxh4gugpCWCcW(6=MqfuO z#hhA%*nOjqD;xg|I9;PnJ_zTEPYhvKK$NQ^u5*+?kfol3@7VOHTj%naf9=d6i=B*K zb(3Qp8fWMI{CM_Q58cgYJ>G1-QSkb3`lPJh(xv|E88nLR{GnxoP}Io+k7(Vu6LtoM^6FIclqGO0dW) zHBtoVR;2Y^H}H+5`VgvXwq|`t-JfD38m}5dxjML7dI#baR!NL?`r7v}wgyS{t~1Qb zR=Xn6gfqp5zYRccx7c|=fY^uog?f$7t_*Ji>cQjM4nO2kA6#7b$12@aa8GGzWJevd zr+ewz+^Ax^Aa=a!jabch9^fJB?9lDr`q=208t^rtjs;;}MXy3wQgn=5zHNp82_f%UfS0~9Yu(Ya>PBU@e{*eMx+|G8 zOhDWMfOz~!)n@`SZWu0T#sA}Knemi50d6Ay;=~w#b7y{CE&r>97>KC3_)7V-y&14F z!Ax|gObG*E$N-iXnE7;&&bb$$R~bgZ!1$Xn^Go7Cn{>f+mpC#EOhA(^-A|1mFn~QU zT&nTZKK*6NfKLZ9{bLz_Gi82h)X_K5x77O!(E$Uk^%q{vgMbADjE*1c$O!oJ0HJZ& zI{uNYe-0wX_?IX1{c8T7h!{X4UaaxVh6UDw`qz*oFko!apUb#h4I*Ov&5=2^wywrl zg6S`@WxhAJGcwVhrda%FZf6AEONMj(qu*$@^PAfl|1xFH;T6F^SjvUZ`$u#84}CwH z+b`Bf_q}2M(s%MVWZ;r_lKv7z;H4!xbH(;&gfqT0M5H0Fz-9Q`Rm#LJBtngWd1=b|Ec#JybVl$NhJc%Vrt;e1?1ZS z_B)9F`vjs>v_p|he%2Yf#NjlDe6dak*{ehv=;{;dw3KIJnO=v*Fz;rDWMfkDi~NdK2X{MguZwiNlKy7mOd zBQrrs>v-BwiAh0K@hG7b4hwR~P;Tmq+8X|jx{Z#|NF>$$wwP^Hj<_l?zhTRVN_GYu zdLKb+74ZP!_Ugm6_1DG$t>X5LocJfSrlb4gHHh8#X!FxPGvzU;#*B%$3FGR;L))`X z6OlV#Ckyd|)C-^0I3YvdJBiXJ*S#08#e5sNUF)vri~jj`^qNY|!YCRS=4bme>w;Yt zHk{7;5RTr@3zgn~;~^g2$5lO9q|_cn7z=&eTO#)CaB)7MJEb?V8OFk@?Y-F%jm^pD zC>n{Wpl9~`n$5_mJuE8tP{^b)E7wdZhxX^T$VB60I<;>59LsS9N2|yP-xlRcZGa|6 z?08NHpE+phx+VVtC}>VM=w_&5WH-HYd@H>c`w7+g?gvlB$K# zph+_p^h(7jw%_fkOpl{_p$Mc#to&T0T!+UPID7m}2RM^BWIs&dzJ(a0pNHp{&-o2ESUTxjA+^Jdk*~+B@Zy{>LGG;w|Sto*^j#WZ( z$YNcm<4t!^)2aNGn8*-hQsK2_gX~k+zCpQo^Yuzkg~Q8exryy+4v=7Ag|2$Z;gIm? z#rDHE2n^PKvcRdhe@lmSm9#RKQMKH<%RCOIi{rkvm}XFkf1MdAB{C0O7k$UuXBaJ@ zZia)pZPf7*sBheaz|`NE8%R^dCK_^g`TPRoR5E>Ko~Rn!+d%|52E}k$iZZl&gsAAP zeKIT&njhn=f_)I1pw1qnpg0@8jaXAO3)vOnTxrcpczs>CAt;e*TbtBWox#Sgm`n%5 zz0%p)q2ql$Q{zfZVB2tAM&Sk%G$w~bh(FnFf!OQGBrKH~FA5JF3g=S_3~QSi>~QOr zA=F6M512Vyrp2F6^rBZ@L*T0Qkz79rRqHV;sC*#sd1zhj+uXy+Eh;eH^eFb;ZhCti zXRaB#sz%&XN0_&|($}`uXq)3lOnL+Cj&4?M#lA?&HqDykj+?g3;&X0m+JD^`z!s>h zlEGig|LsXj717HJB0(N%DVEFl zJAAqnXzS%}im-WDy|`pDd-IA1Gcge;5N*uG2yMqHVMF1&y|Q?m_t2l&b6HEW`9t1} zp|a$cgjXsU+fH{rh_%}e5k?#*8vL|220BW`o`@crjW=Ou+BJO(Ddx<=oj?RyqJ5tY z^PG?`63xNm@sm%DP!KnRKRUxUs`RdxXdeyp2uf}ed?iMSelVWG_oN);XSCf@h@0A0 zT`bgi#tL&*6YqU^qeteIEmwgmUvaBf{op4=@sqSN1ECF=V+D6!5JZcdh zrP&i{JH$z=w$At0kZyIeXBuzt^EH^nM=J+Yca!Lh+f82RRMA^wxn(maqdL=seY zW$K4p7T+j#2Fmh#(~Ns{R#J+M6Q3Is-PsEgo9s2(h!b2k(?zle!E=NO8uGBV4i+_1 zRp448ZdEt&Z6L&YWJVVlq)(HJ*krFW9P1d~%ZQ3qD}aMIdU!v9MvpmA=eePWNDo|K zDSUV^#kig1RzCt%o#{&2Q%<8&2SnAGY7}Uh)VZ8p63GSJvUeX0<$?^9rDm2Q3A59a zXajHvp_!(*=Qk;CJf6fMDwn_g(%sic{57|vpJcf~HVY!=&NVB~)MP3t#rJ8sr6p^s zn&1|CFw%r4X*6O%kD;kQnm8nDQ64|9z%}d4bmjy2B%B#!w`3Jh9;A1Clax16#IyAI zrTl`c6>dbEcn=}c43lj2UDpVR7l*-sdU~7swMWp1%D9;!mXuwtxazZ%FN|Z}du=#= zLeMf+(I0qBq#Ix>_G@XRCBT(F+q8Q#Bv^ub5Ls_UCpNzF(^My0dZ-OV7b2~H6kTH( zYAhS_wy!mYJhX|PBM*4>7~#4$`>jMl&7p$RT}k|!b9;3m$8 zr3rDjVK-F11AI5WB<_+P(uop&s4TCwH)(zE^FZ6wSem}*W)AA`G>GHQ1uEXDnfx3rJ=_qTToYzkp7-YPYtn5tUVrb_P8nzgdi#VUl$|hD=9?*UWmLc3nMjdJD}v zMO(bwBm4=3t8NY$j;{|)%}dVqZ=M)>WOZBDJC+Nz;!t@A9<*TxmT@7fb_P2^X-h|c z+zqjgT;+W~_7V8+6^Fc`hS_%sHMo}5@X6&oywwM=B*b*yQiu}!9O&?Rwpxx2Om}g5 zwo-9m4_11Lznctc+jfe{4o-&|i9-^FPYVc{SUkkRhGk=NSua|1c&M0&Mybvdx#6)K zH{$c8EKQeUbE^pKT_jtE?`oY6HCwf)5xFNR7Hn)P_!aZhnrDf1ez-*!Zr2KL$ag{5 zGCq%lxLlW_9ayN4r&Mpu>_6qiU*=o%0y}+C^sr&$e5n~Y!~j#OFt)x}?>hHp9W9JF ze0}NGGyDg0kqLo@6Phn*Z&`5pZYX_Sy1D+~I4^MP!ST0u3wvJPH1U&XPye-Q zcZ8SH&Ix((n%M?bj5WD)`mYLi(IkZ4v@DA~L;9$hq&whdlJAZckhcV3n1SE4=sSKF zA-0pQQNobU4i!GX4O690&T*Z8m3C5ObY|DAqgByZehM7B#Pk5CMl%WtlHT&YC?BEM z&CSnn<1x0%pvJ~j7o~TWA!K-UH?ku+k1U5G(behrI%LI!Rq#w}B~(VBcDUXW687GX z`dIwVozOmRa$?t?u_U1K-(*CtwD#haYvgBOXOj#y`yKkI*rF}g5~!d*tDt7xb8 z{#KNFc$>3)1?5O=fezH-;$0dvR0Gs3m8yLIc5cdPlttXvX~R>CPGyK&s-ebU>*2B4 zYbtLnLLEk144e@g@^7Tb3|iti1m4-y-O*&7*UCn;4~h&ZUDGgzKzg3vJF)r%l6z?I z(-TP8Z&PIt+QSeEXy>p=vA5TlEsz4tf`V2 zziT0g`vn^jscufi2c%_~P~ydaftul=YIG9)&YnlDm|9tRcOX(q3KsK`utg~qIc7g} z@&jp-N13?AhOM768?+tThuS~(?d7N65KT9V&a!YV&eOWJzKEn;7vTc#ZS!1NKe&|; z2-ac;?%tbFN=73%7x*4yOAl%}`+{9>5jx>F!o#nn7NKiJ81Ipw z8j6S#G2(=H7ik+5}Kw4 zTE37*L0U|GTt3deLk{ty?)(@kSNjIMM%H)N_zUxgo1NudJs0jR7Vc*C**xUU@Yi}S zsW){8RIX`{R2fA>}VhE3oAcYhx%f`Hr1ynCElTASURUKl~^Ou<@y z3XNQdA9lgchsczvwHgQvx z4{il}N@|t1Shx;P?4#Rlvc8gyGEgH5NUqH3a=x>In!QTFu(ZmnBb=p+QLz?{yj38E zs=)-ihkh{z5k1MXN_`(F-))0b4&Hupq5n|Pzxa7-qEzns27b9?ziil$K*^emu57qW zgVswE(m=#nji~t>M1yRq)+)L3jVYQR723szwQD6ZMr3VE8yp`7siD!?we(3)sLABn zF{VoTK7AO`{LLe3C;>5Yn9~=gyU09|M@)7-Lm{TP|G746=nE2S-evryI7oxnQR9X) z%BdE44`@6dzowaixAD>EpSe%+Kv5h1fwrR`3$8WkOhv8`bFEnCsxeFkf-8yI<}*Sx zyS~RhUfmKp%$&|hPA*-EY^mKGj$?hFMfqH}b};mq?`}s#gcH7ReMCICqv>~Js@1r` z+czPMUHRSPFjQe=BerrL?r#BgJ4Hb@8AI!|Pw4MED-^+Ge4ebvstUY+O>e7%K4bj3 zF%8T0_ohkSj*KbD%m^TR6v?RI57=&y(aY)Li?(#HKuu14ulB!kVgwJfiy5a^!Nl|1 z*}x6u<5PTIBcHx2y!}xDUe%yT(oKbqe%Ya&F;~-u-zPZ>^3f7Z*lTssRrH%dU)Gz& zWmRQ)?qus2Ep`P-1Wlnehu^0)gvCNI-sAsD@ecOo#>w#4_IjWGviKyI6O9nwZ8$E^ z(dop28G8s#nys4?Ww%huD7hEIG8;spiRO7Ecw0R_8!?Z(GYk}#j4s5u`=TeUd9@cS z%#Qrgl)FTLa^iU5HnX{m##@do;;G46i>hvC!Ic_DEZ@G(mEn5n2{E=@JX2^>3fueM zc7+YSZlW3lW&Ag4%h)+6X`Y}4tauLb-}GEX*7Ge@l8nMGYG|g*AnRY@!Ap)+TN>JU zPWKYAw{u*7-cDJYD@XAi1O=#f;MEZQ=kggWzWH3D8|&o7p{sIVqMIHbVu`i$PxX4G ziU=0(`^0%$^8}|=kVO>@!!V5t7}_QUO!f&Q3GEAFNe*&k#ZuDrnpSX}Xqq=>qN&Zg z72ZHX?W2y)BEYwCvz`=E^nDj+Av6qX}YtBuIK)TCSlzH?)EB~oS-4Yeq}Yq^8Q85 z-W(_15}^l?StR&^C7DrF-2z22BkE=N{U|lTEng+`={65zBgf&xn3aXgykRKFzZ|Xl z6s3?*I599;P#r9h2`z_NkRA|63T)0t%F;yzPPLQ9i?lJ_;POkHm6M?f4Gujb9#53r zk0-8q<{vD2Lc!4EHA_c=lI=_Rw7mb-i@TZ2((fjA;vV1M{-BLF78o8)Thivs7B7pX zVawFMTt6=U0Q`!9H3Q`*^ijl%csGeI^W zsv?Hb9GqdX%=jwTIYXOW?>OwK8%>;?$rmMUfN!04xIJA17X@{ndWq-o$!}= zzNa^&zitfAF*CsbZ)OI=C1wT#U|a%M`#izQ``y4Za>Hpo#02EwhjlqEP z0yN42Aum9rG%yVa2o*oS59&|N=eQY6|2H=Sm;iF2P6i+*252Jup%Vmn1i)a6|C7#h zJOZZQ?2IdU1c0f3q0%4L@OL-(#}{^HWuJS={RgISPQxqHUslGIdf>qfm-rb!;t$TO z>!0xl7puKm&lb~PhQ@cR{oI}{AYT8%CH;|q00um)(~O|A`~&c5$L4u!dbL)4rr&&x zU+(J#t@@|v!$lj`k4Fz|TR^PGStI$G=JRC!+4+9nqyMMBaY^z87#IX~q1K;|{!Ajtrq-R)PK_|K)c|D8c#oSfW%-t?I{Ejco-Q@=WhUwh`{omx1v{k z@c**iFM9BoRI0NF&j_TmoDR+VF&^l<>hpB|`Q*>ZXkhxQPW}AoWr4yf%qz?4fD`x` zEOMs)T)n5e^sjTkIS~!af7Pfny_ZEaoVxc{SX>66&mD+E`tdTH3cs4xa}pYu|Eg0z z*H%VGUP?|_QbL`NUyh$wj-T&;-i0gGD@LGE7l3MhBs4I77k{qa(*^jow&(0x%>OJ{ zmn1X*zVKC+7ItcAHM_6329*dt5jVO(g0-dT&R#91mrCO(NO?u1x%1RC76KjcMv@@ zfMK1tkXH+7VE$LBx)8Tvyrfvs0pW_kw$A|Isz5j+{V6O0#2*1e&CcDRu6E{Q{;gX5 zRru94wEpMCyre|^R0*skhykF1zK`8J(|qoNUWuk<`K?I(CG&qYUQ(1mptFfqz~Kp) zp~?uPM*uS=8BYJ<`9Genrt!DJbeYCWsu2Sa8v;N+01|sjt1$q>ED7j=NVW@LweJa| zzqa>tuxXax%F!={|HP(&Fo+AkobPZd9dKAW4c%d2IAw$A0m}P)Ozlr(=^Ubp<+t*4 zs_#6a>auyrKj73K`hHGcx=`QM@+w(=t2w_G@ZT`U{$)Lvo~ehc&|wd$&C>?_?_ zGY_!kR-)7q59K2e1olImS)5#C<(bsKv9s62e)9QJu&nt)zOi#|-N@z9bP_rflRW3) zj^ggop6~JTw%=!mJ@pq2oLfrK-qc7+gb;&wj3T+5H%BFnHn&^1wlX9U)%Pg1KPyTm zPQAq2dPFw$jOq5u5yjEbCZ*0G$#<@b&)IQ*yESTJu_g}k1Dkfj=cCrHZ^zrMuwxrs zl8GxVJhw9Tv1?M5(W z%CE8e-85v(cB=(YD^!`XYAG{&Y-Pt^+Z58rrV=WqA}PPDrR^uPB6`LZOyxgL))%tG z7Ap5OFK8iOv5V)1KTXYajXWpcyzUbMO?y0w2YWeMm@Z}I7Kjk6<|}3gOhhW7QPlNp z!TmI1kM33*Nr|Kiam{J3?YUKcV=BGn*TgZnKzTEvlyD^A5&9E7y8?6>joW1jCURdE zFdx^0K1=Au&_>6X#;+F)>=A-R!D5eR@xmmYKg2ghb)ODWY8c0eON*M?PoS6qi7&Wk zCoT-!|Aa*Rapy%K&mQ&I0OfPIF@lew3>2t5x9*@D3RPY2tmf%Vj81!*n)})C6s%$r zN~?CUgOmd^R=>5CzZD-1fK~EcZeK(XnZa$yFnbNW_1$P)+N62G7;NmZI(KgIsNu)s zF??B<2bbwoIa#bvci3x%d`O0&LsG5I?3A5nqo03te<3K&>4uhqR#<2oO|ZtT%B z=s&bmt?$XrDiEewzkVZ?)uH?Ild`w~i~5_sM18nZr$kb0>%gI*GcvYc$<1}RwiB&W7#VQ&vanGL4evQexjppFwImhQFN zJ99DDa37GoxDAgIjLzb*wMc4GP8VNzMA0P-T^~G$^Ga8XcT18{WW09JEL0w|i=iTB z{2Gk9`P$Ikga=}iOt95X?+7(a5gC*VuFqr}vEOfz?}xTBjvNi|FG+fHJFsGLsf8fb z9rNp$(w>n`mCKwn0t_)$bmTC9q;7oxOG69+d;P7(+nh%q4(sjh#N7Poir8t9NlZ}m z@S^Q=(DQ?rCM0sPv?H9Bwo|3ynt1t4@AMU8WBR3_sIgXaua;^{6nHlJvC%B7gDFWweOaH~#!T3s1d3z@*P zSg?hB@2+~em_-ok41(u_1;Px(`?Ph$BFlU>SuIlpcF`DPs|c)vm?QoqV%xm0BFNB8 z?iz`Sz6`e9gk%<@efttBZbl!*DUXrBFCgB9gpE4Xc-?VGb*YE~sBnAa_W z36+G8b$372V2o{lYjG^|y7Z%?*}c$$Nj*xu@Q@xj0W?2~y(K$5=vH-yFK@>zpr0;< z9Y%ahh~8mm4;r6CuG~RJz@ez-L{T@J;&5X2;-Z=ACS`Z6srKT+pXz48vm0~@jY^oV zlRaAA`ZP6?Af+`63wzCoHQrt52J>OSHKbxf0LwghEC8PqfUr>JVY=<_8BxX(y1h|ChZ3;bWac+lNtONp|SoYFT)H*{U00nIG~ zzch2PW81m5Fe2gc)Udv<@m9jnHF!q$$DgvW<7TP!5Njb^l(@;6%^>j6q~H*pWNJjn zpkQuu<~$^4-Yc&j{(?|S{~Q&P$*G~%93yeQ6wgUBlSF)4SPWy#yZBu%WEk?<iHy zIKd+{!?UC<#ywv4L?cIR3l+Ei>qBi;r=&Om!>KLEYqhlEkC9EwZ~HdCkFdhhRxfCc zzcu(tHX5m5>7$^+)RzOhHeq~2f@YA;cJdA^RDw!i^-Mon2WQLkJY2CT|A3qWz33a! zxsFbFwr}3Q^joPBUW^Le_oV*Zr#aM>%XlLt>8s8Aw*70_cdxx|OB`$q4=YRQTPh&W zZo5xPo@UlX(&+T5S2-U(${;#Ye)vWI+b{mD?li+NeTSHYc2eQw3OBUL!!|u8$>Gde z->ft-&|iK@5Q<27A=m5v3IL4j~Mkk-GSP>27-U7qYDDVhZgRO({9Q&p**9_iRG?uWrFf0gr7NE7D8}++E)fHE6ZX)L#Y@=mQzo)l(p2k zG#u%{NQbh+(@03{Ky^#t&@bt`J!F+u#gdrNCw|x4i-LDPslD*2;W!5W&aXQi1eJ8Z^TNGIJbuN$oaJi zTa~i)m+bBQ7qu4NB7|F7R4=|E^lHvNj3`UYgbKK|z9Tb95N2PKUM-|;9+@;C2bIH> zTF=Y+l(r%)Amu~&8+tj?xy*&?)-S;!vFIAl+r^k-7$~n11$lzD-+JBFAx^Q62eCYh zOXmra6zq?siq0fJ#c(pjSiX&LqZoy^R1CD9^D+S`$f(mHUsbE}wRpFRwJ@&yYm4Of z1bM7t0ine^3R1`+bJX2koRqR`RU`C_{cna$A|Ff-Y4o*qxH!~9K8Rm4-nHjWlSQZ! zebds{IsIu%2B#ttl&X6x)_%dE6asr0waWaUaVA zvyJj^hmDxd?8jqJ5u+k$)0*_P%`q^VDVAPOU&!&AhO}oA+iM3|+5VavYs(!X-mL8GwEh5nHYo zy^vg3OmBmeD^!;DJbu^+SBE8R71JffNzSn?H;>sR)2Y{R(SItBX)Y7bg?{&=wdWhf zrV1FXoFqk}14m&?3fOE19bF_k(C2zBt zP_Z)KQdNj0f7JZUQZR=IGs^?`3uxHf)Eyzc_lDzOi4NAwH#q$XQkEQJ(5mJtk0|S& zs^XP0g$msL43AqS(*&!C35E1@c!}InE+FVzt4vrYwdh{w5?M6#hXR#GDeaGNA}Q@? z52a+;!{srvvP+~C$0}T*;YaLaBi=mnjh+2qI`_sDYmigGR3bn@iG`$_lPnj`Y)=ou zgnS&~>k5I2!Y0E`B_DaQ%u3eOE2g3@)gIU^@j{EGPx#hPJ{&>92rQ|M_jf2rc*8&x zLQoXuD_b=7KogV%?uHVO$c_qBjGn+LXqxe{CIw@xNQe48YR5BY@+;O^5dBP;DPLJ{ z%s;_6@hBm}c`Dw<;qX11g60O+7bA)%qcgbGaNu$kPL=CrHzA~Qj$1=+KJ*tJS)_uz z6^?TQ(*hfh(%9o$qtc$>=oEx@2FVuxGCDnFzchBiSg=?w>zF61T$w2Wl*v}8DEo(Z zM51EmKK8B_B2o`++GcZ10!)P7iwIG^rJ{Qj@3kt|96V^1A%J2KoB;Krhh|qVo_Jr#HcH^5gqPM6jx2_#~|MD+Ou3In*~074AE01@$7n7z#=<4&m#qCkqHe5y$D* zjeA|FFvyZ{J6CCJUDiieJI9HpQ;~kifHVA#jObU%&BEq*DG<2@Eh_e zc$tjwW1SD z28^hbYx_lcwD_ZgA`vU|I{Pb{9%h2mn3g!3i#+28L#Bk{9Uj(jQYsCgaSI8(rI$Ut zO!|#EwTQaH&KG9HAmohaK#?c?>m#`TVjX%7%OvqQCzsG=#a0 z4IRVc_`#2dQ~ANi8m;*QX4%BL`VV&RF$=UVe(Jz_zbgxDz823Zv0-yG^pwE`^heG& zMcJy#Q|X(IP2X-9M0VmxRG<`wdLe|>u^p;5i}@`}CF|I_lzkB6Oe$gX?Jr@Y%*aOS zgJ<#2YI&Qjw5rLb6=nOl_-#=k?}N`K0>n>L6t7 z$J5U^>NpNY2^LWaZ07s%@FE4U?%$o%ybkR;@%3I{>nd5)IPL!PNGT|bu&g)Sjyx3) zbL1m2$#8P<`2!%Jb@hpgAE|Y1WMye(*`ht~On!3nVvZ!yH5Wpypc}>A9~vs4%G<;4fe$vMq+Y=oTT#6lGp^?>fAM0UJc$xmDA*x z20&?cO~ER|@#Om1QrTqhG-{V_WqX;PlY0-5z-y0F;ChRzd%|N*q{3c5iKnTmB+X-6 zQhLeM!UN_t8@p4QYZ|LQ?-je=WPT`=h9BG#YMU7&sPNulYzdok9?mD&aWLGe_wI50 z9kNggPQ6BQr)bFvw-+r6Q(Z*U0;;6eY$jG^`Jp$1HOFMdd2`xli+9kd``D?+w0iM+ zD%5j7WyxxB>k$}iuZmRnF zaa($lE=Ntb-iez+JEn6wsMqfG7^^=Tf%4Kg!~3Q? z2IckAW<$3}>lMKK2Nf|`Cwthya&4wxy&KCgIC0i3la=6* zN8a&BbE6g9nG{;(ZsFd}9Z6aj{n>i&^p)&6h!pq|vw?vbxF4tg ziSeAK5db0QmtjYzHp{O&Qy>ZAU+t(sBq*<`iIujAl_lA)`?P;MhlI>lU%6x=aeVF z0t3*9pHrRy=kELr0=nIy35W&;E4q6A*L#(+2&n{am$Iut7nzzqt_qsXf;Q1z*Yj z1_3@3&{BWK7lBUgovUg5_najlCg8ta={Jp+u$$mZ3~&%Y=>QM>Oe!OgGXps07iy)u z%Ju}J{mTIV9z${Y_QZ6F3;sQ90GR)CiV^_PJ%BR`?2c#R&s*CoZBHQDzkKk2=sj`{I!ilotoEqrZ((!1BIO z>kruMhuEKEmM&C#CC?d{f%M|#`zg4MUGB4oGzC+g+2tC{S89+cS0;a%xpRjc%`v2Fnr~9oi{U4tFC1vX8 zvp*C212nu??Ug`75Z!Nu>er(F`#5!acDQK!{{b4FLdF1C^aC_JTi)|l^lA^D?zeLF zOXEck{z`S~)Z+zSk)Pv#zNgOn^@5-;H_1~Z&i0-#?_1|}P5omb& zOY)+f>&K!3y(R!d_fzP1+2;!V|MkXRGz;o3BY0gr}6?SiIJZ9&%CFq$HtbUV3d=D zmq#!iW9Z~}dT;Qo&*%2OY_O44@4YWRw(Rq6Hc7kfQ-7otam2va;5GG$HHh#%=$8fD zwgy!pw{5ReCOFqoTO8e|DYU1j7-pKpsUdIIvWZnIq-i#d(k`p~cDy&E5rOwi%%p%{ zMyI`Tv7_7i3gC?(aa_jXWK zDxEfVXXXQDzc2?3Hy+Ky8!ggzr6PS}OX#Lvo8GPHzE?p$<+tKp&3`aj5k*ri)>V^; zw;yKtsl0b`xRFb}n%RT& ziZO;r)F$eVxc9)Oy7k5CzluCO?n`|8wKwG&TJ?eV7j1{YfW+(Eo>{or z?j;Jwnh=MoBK1VopQd%%jIXW-CHu0zx+@fFlFH9IpWtw!xQB^?KpNC9z0NJurtb327s@7b*>OjcS3bH;4U846Ag@sdlXNb%bQZY-RAblU~6&T zax>o}6J>h8n>*`cj`IQOQ{KV{a1%f!nWspQmO=&>84B13p+~n2N5Ii|y1^r)y0}MF zHAK|B6=m?pjl$N$OE+Xo)iha~xP>0OmKfJjxU4UPGMMi#p7k*2TywQyP$EMVQ7crb1tuZq!to8|EEZq+ z*g$_t$}r*F)OXREL$X&otA^CQtmuYG(+k}aZI2-Xfz2jw+oUN>sZ>T_1xXzo--lCC z>K>)87Xr=njKk5Qmg1=;Ja1~YqzYV#MBNvFTqb_M%5ugrU^B16JLa%bhh}IP*q7}t zmn+8LR>v#NI!|p!=d`heN2Fr0VJd=0fg#lt(Gjprdc|nPIM23|5-M;U>qG$2GFDhz zMqq4n5e@4p%f~XHPx%SlL?z?&E@@>^>b0=#QLc)Y{l~@Gcm%n$#1l)N%@kok&Ok09 zCUOmQBT)IKl_(UK&WjV2+4wn(X%lwd_Z<&VR8T?)EszWR@9`8{_bD#PHqAp> z^T(^93oaqQ9N6Chn{T)@M9$T+`ocYn>57haxpnmw1&U+f6&K!8g{ z;2nYkXMwPx#e4-l9ZCl#OQF0nwr~u|PflccMKpHF^D=5?NyStN4@H3ZN9EDZ?B%63 zK^ON)aeU3;iw~%1u$)v9I1{$OpqkX%+u#}{fkzqkaDZ%)sZp;;oQplWsVLU49m`pS zPk?Y<;H2vIT+x5fZAjU!T8)mTdlln*L9*0d)4l)N6NQ-Z3umU+4dRDDT^!q2>IR@Z z&+l}kW66@Xz&{#fL11b1vJKhq!7NtsrPJm@vp9IETAJs&WLx^7NctV9;0AEi3mTQ4 zV+{4OG&;+ll-|uHgx~I{hkk0af9|&)XdF+_V-Is*(0g1UP8-c!-{L!r@0CPj?@Z-^ zy8-kmGrcTeADa+J_KG;x)NZv9T2Alcx}0K? z%Lx>m3tOD!L0iUV%Zo;@MG_n~Ux{R3E?>h9&TV66&dmXT=|naM`GV)@7_pQ6eGhcw1T7K*=>mfY4~4=z9Efrj zt*L(AC1U<&Kbt&V{rO~2hZCS@89}fktL?@H2+A0X(Cs_uql9fPp%Be!dL+|3=Ol7| zS+Fi3G+g?1QzCV?A}usnHimcHVeZOM^i<))bSbmQBS^VxpC0gxsV^p?cdD^=?pfPK zm~bTo0TfN^f8ZvgbzkqnX zi3TZcwG#pBn<#5lY_veODIiT%o4Wj~XbmpsP7Ow*V0 z!Q!WQ^$U7Zjk7E+@TdKtiu~Swqcv3LpetBe2UAS!4ds$B(+? zU)HP0k&2^gY3#g=b{Qqu&EW6~op5czG?VJfx8ZpY9c>Z!^mRQXl(?YH_955CMsX{z zoG)~)qO_x%j}Vz=5I1TKN@0;X%Oe*$qpbAut)r~mY)iNm25PLl{mgx^TkYP6T9+a% z*fvS;;}yx3HdgVnyt?FsWV7_jKk^{kyt=BWtl(J)6YCPxdy~A`+<7hXF=l_w?tQjF zXWyO(3sL|fJ^X#d>a%V>L9-QxlEd6%*Y#~3q+{8Y&cG#@Z$%f?1jljc-wNoy08`1b za+$zCZ%h{q4R^{vCk(?>a8%%1JK&F2XyQV{w>`PyJ?c5B3Pg2V6}y?JNBZ#WwX8k_ z<_R|DO$TIy#45zwYuT4=T*ngJEV01v&^m&8<{Gha^|5sfdQ*hV7P3unsueVaBj}M0 z0td)ZE}E_VFlA3WN~>W_ln)9h9;3$egnZ4ad{=rq`>aBSnV_PLoO2X#2fQ)$R%{t4 zHQfr-3AbDq3DGpK(oXm73KUz1S=F>n)L(0x!sLR2SroN#hYJ+}S%*y8L&a%5ek+L| z5;*LoMvp*#ZG-X)jT3L$`Qk(*A&;CeDV8uR9AgwH3pZYkDPb=&5HULpHg@!#F^4b{%Km1zwL#+rx`Y;>%F+ zn<^~b15v%=x<0;C=Itx7B-*#2hk0}2V0v$f*!;nc0{+bQm`p1>*kUkOO*bP%eZ^xb zCkDhdaf|x7Qkp{^aVLv3c1eS5ZcrqHD%gi?|3W-|e!qzwg?H*jrz)GIV;DebkuQU< z&ti!7chTm?Jmp3io+nG{_pfKCvoq(-B!X=mrdf^jVXPS1mwWWe&e~SMKj#8gamhMD zBY_Zd>ZT?$OZR(U5tE-`{jJS!h9C`clC6T7AN$(i-7LMl_QAPP(R8$Ajbl4!aT9)` zwc%?GI>TrX8EVk*7ihy0yB~TCOM=Qq@5oi{-t4_9c@N*98W5 zw->XxRvyu86f(JbOc`;(8AnTKOe5c+4skov!(gWai`T%@1p>kuS}nK$t=yPav>E%w zIV$k{D`51mX!Dffm?49A#;;%oft5cKgWr4OO?gx2a5pOUT&B+?(fEtcknhftt1G=T z!9J3v$j^w&V&+y^ASmp|sU%+e1U1=VomnTQXGq8<3?>@P=Z&TdRlzqARE%P)Z=x!0 z7q2U@uz#aK>Y^5znFVf3FhIEf?5+9zVU&0Kb=$ZG$NVRrlsBk2Ifh_OXT%td=h0GI zBsUCV$&TheWoWX*@V>RVIcB=Al#h!wdFPkw1UIM11L4vsI=8s{>H!BBMrAqt}v`d*Y2p2cI7VqC#DFXY6f*PW9YrUZ4d^>7`3=1tVJ(ch;NYqD z^pjk@^VJBw_w!vZ2!!W*+uHpmW%L;!J(k4}zB*@zm9S?-t4+oU(JKTfUPY^gEyqEs zWLLp>3Spl1+I^E5m=97JdpR?5isWbQTbdl`dmOWUC9A`py614TcQmI&px{)XF&Sk8 zzDdfvWPWN3x75V415^~ zBTg=*5%!uK=wSdiE!W?%(MHf4na#Fdj7;Y&sX~+k&7sJo9|jy`$7itOU7U91#u3D~ z&zPK^^i(#$u)TA62$Wz)yI{ceG!hLeCUih=wfCv1(NzmN9HAQ<63yS3TtGhH0y<0Q z%qh>!W@>~|Vs23r{8t#XP;GgT8Ifo)E|okrbSbSOmj_Fx8I+@JBYFL^m)4md+nwK*YC9hv&v?h6SLe-a z-O{{b9m!Mvd_0q*Pdcl#33<3|b30$BA$4=hXF$Q}kZK%_t0 z{|m1VK<4^8Yw82cj5aNoFpTliyYvgU}br9_W)FB#z$#_6%acA^jw+mvdo{v z`4d(O#-9@X|B-s1v{HPx<@^HfkA_oLKuQas1NwWz>0?yOuSTQ%jh_5@!znZ4Uugb6 z>B*lqoO1j|jQ-wm$_$_*9~GWI8ctaN5mQe~Jpabj!}u3w{}J9(rXGNW=)Y{_OGkZ& zceX}!(q`5cbc#j>4jSJ90shYqc#QM_3YGAe=or3J+JEl#Q>*tEKL0nX_ZuFck^Zr# z{XYPi0G+S^uiCE>{@r%;^JY_KroRyReB$zpAc@DeyTJ7E8!O4ar-xj0bYp5;SzsX zBEG|a67b)2uqTvTrk^U!zf*1jhMa$c74RT>%!&F#xn=r}{NI6nLb+x7OU?POx+o;~ zyNDPz`rp{2ew+rtz?(;r5pah9_A{pM=%2*xv~~xGqx&^NCV(9d@Z17ij_-CjfGZB5h%o}Zk-yUJ{+<^N7)Wcpbl`jyJa1~6a$a@&6( z1w^ep2G{`VH~=U>9Q~EZ__qh?6ZMGs|EwOd0ek|#gvkI%*#!8385scC8-RohKxD}G zzW}J8T+n}2*_r=QkG^mH&)$pJ02}#Bgv@{!On_192SOHRfM@e@eANFv!oQTHKP&ss z5&o;H!~n>u0l4%S0O4?em-Rp3KD~yISMtxdqn{5iWM=+LS^5*0n7`(T*Swx z<6{B(10y372kn3M{Aq}PJB~k}UC7M*mqPR>#Gl56usx3L`jr!d0bs%hn5zLVNNj)v z*2iF&M@Pov8}O4x;(xqkGCcZe0iWj|4g%(X)E@z9F&&AQe+)4M1e6I%%Lz&82ua9` zizxo%cOW)~-&7z*fXx+9bberF2F!$fd@TJE^LI1#pF7X+({=}DX4Xf|-^kkV`!6(% zfbpV#S-W4D1ps+Te>V#NB226oL@^$0+K%bl9*|)Zw+3zB0tbOuCy{Dr<)c!WHc05v zqZpx<8x;$)yk0h4wj1GKiXn+KP?(l)6v-CfcyCg&T<^xj%aI({O^zFL&_f_6JHUv$ zxFK}0yRm&+(bRhTHR~IFpByb9#3U)U`~GUf?jgHNs&#QW{`xF8b#}yrZnhN>5rnVp zTNLpYwJxP{3mP@FAAzrB0s;Qr11K)w&qY3N_G`b&m~*iJNL5DNq+GGn|#SyxVUG_AsEnP<17R^BuKeF zK}t;%xbBfezRZ`{DNIw_%f+{+qWq#f8%kbJ8YE-_qlbLHhTmhe_N;ITv_+=bV2+9# z|FYzCAHF5_fKPkefM`W_pCs$c#H?azS8*QwN$jGO4J>(%Wih7{HH_qOp>jE$RWXXS z2*puu&8tIyMn{E6f*f20QT8|-3cj^l>>Bcm7e>gAdm_&D%kT8Un@_`Ds9xRRK4@$S zY2LvB5lwHZDs(hs51b5`Zajmfe7i3Jh%YJXHR0_fTTb8_Bn;Aoh{2Z3!o8-xtQ#Hq z2J7xGxSn!cg(>*)O0No26%p9fumV#-QrKPBVhTKTjK#tJh+@VY*lEqUeW1`kAYY@L z@;uo>ni7j5EL;(25ji-Ez^4KZg___>FDVE5UiS=?XI|u6d&rqj)-=>nr@`k0g$~R} znWP1^=lVN!vqXC|MF%dL*9NtW(UXXEB3srCHKdfA7hCYQ%*szNV9Rt5U@4m){m0dDix0oL2=^>zP-sZseJ_W*@ zomYIHeX>q^7u9SAVZ8lpK9^%JbFb5(<|QBNln-P&0gRN^^i4&+N1e~ZDm*)~{ci4l zrW9cz18ZaR(rek*VKedFqJgOp7-Nk-qFN~{x(L~JEnVK5bZ*^NS5ixorA4IjiJsj~Z#HSi#m|g)x%qMy(yre@DkhTvgEmx~sBi0Ygmnj# zybY&}`G9ghsiwSFa&s?lQBrpa9@_I6!|dgNA<}i!f_fa{*jGr0wrQh0($>W##57hN ziH`_D&`J*wh3q_bI@M@#;d`bL7Q8M%!DKbi3scW6Mk8mBcOQ&xp(rV8`ZM!iEv21z zxhw~%wP+k<3kXq}S}%YvWWi>HS)waJ%GYLT=Rd#~$*b33&&T-e^5CTV^ssOZwKGv{ zzhsoPhp}B%haBQ`T-KY$PBD9TB zel!FOY$2a_?^pXL_c%s3wU@|lss z%64O^C>$+|&D=rGsW?{^QJW{2PYH)Z_A^j0P}LJ|YxUFRlV*Ohv?jf`K8f$q-vMP> zx(7d}Jp=1MXn++)b*Hu}t{dt}877WpE0GaGmf%}u?HlrOKE-l?A0&rx$H}?sBp<&E zWf$oom1am7(7W*umX|g-sfpgP8l(s*Kso9hnOV3%90{Rq5+(KE6m@8awE`JV7AEG9 zMu4-UnR#a~T;Xl%6S|;V1@@ja#IF{{P=x`<+LgX+u~dE$ThyLRZ#1U}ZR;{o3?B*g zii5dv27N?x4xJ+EuVs?MoT2!%FkRRA#Bt#3Vb0*8mfaNwvdBw&)!cF9aBSLB~WOv z5X0O%Kwq)0Xp;#{!(6WDRNYvW02zdBJE2@F7)CD825b`#mub_4c#>I6nS?p9 zLPa!VH<6+n!i6-9ns;jUl4sb^E=DuH#`OpKN+nxk^C?W?%9#ai@Sxa&q3Fii*G7HD z{4*D^WANk)5QEUxuLbOx0ul6Bi6-HwrFl7$F<(HZ>=ci|(mnCgU445AS6F}m)0+JF z|KJcG_3}CRqQ>iInkE}S0fwge z-u_1TsPx;P$Ec_eZG47gn`%iD8s9TOwrXb&wh0*%3Tl{mLd|pAA9{J6dvef78F6N6 zs%}(YXmIt43y5{qID2g#O!LC)3r~rfNyYVdZ|+X*CaS0q@VPrIue^^AY%2ANAA9-C zQkBU*Yju2dWQ$WrZ4Gnq+{g&GA_TTZl}Cz9=!;BzVGFuO4o=V40ji9?6)>Bz57v2F z0)n2V$vXqXgl)rNz}27XVqe?Xnv&=XxmR~GB*lAACh9j-V%8D@F!tp_ai zwpn1)A>|GK8x-+NCDwF=TYB*^Gmi>H-1y+&x|nWPn6dZ*x#VWX1Zqc9pCB!TqcRiy ziuirAgQT~lpy80B9&+}V+$i{-C{mWOA9U3hZ8NJGlnH5W=H+#8B$%E@>Pl;Bl1&ph z%A@1-Sl${~;?c%p*F@vHCWbq9C4|N)_EMR{*Nx>AtL%IaNmG6tFf%4lTcC2B+D?ItE@ z3~%K;zxXdCJtS>gm9D+Ed8XzDHSfw+?1uQ6;7?|Z$LikDg7v^h#04!YWmzz`jr#hLep!oO|@eY+_58CBAs#v~W3#tqC(P-8xVg?D;`)2P?6YAF`pBqXE=bOO>} z0g4%8+Qq=ho{#4B75ye%ggs>F7Y0(tz~mTQNK1c5CWHES&<-d)8wx9A`qj@y7+dA~ zuKe3)UR@n;-_ImeyICa2?8qSh8l^9IGo!Y)yG2eRA>Ny`G3 zf=E(~S;~S5RI{rr0SkxGFC$TN^Ru&omU)uAX_ms5TxZEhT3ziE@TR5CeZ(f)@?QM@ zB^zZ)WI9bG$Sz`dirTjl91?T4m^_yDD!I?bxY?OiB{Uj8PjJ7Lj5H2zx*y{<^bGNI z8nRxTT_e64g@|( zQs0_byA|)i{$iXa8 zCX}ZeitukfXWf++q;BPaiG-XEheA}(Yc6r1jiBmuP3LgsAo~ffJs<}&2XNTtD^~Fo zfL->tBOV4J9qkeY<6TK&Cx3Kzm5g0lYLQod9$KM{;0kRx^b+H;koZaw8MaXTlZ7~~ z8J&Oy@tZZb*$B-~b$clp=+(eSvg3XJdzFga#reE9VECH1QiV4qL|Gw22_uw*ZEMM+ zZV@Jxj#8SHZc&~G%~pjBlSmS-1athCUbr3{HPYZTmBkh}z3l3$&x*0d^vKL!0hdL7 z8rmPEnFlFQ>NR?PWl656H__2=Ns7wDy9xbi%wJFnJ!qY5)akVc>U>F97A)B?%IA2^ zmEodq;a`=hW6iu~^~hY`><~nHJ1P{8srX=q`{TO%vlPJBhF$RuIqrr$Oi&-i4B>Om zWyRYD3nzGCk@rzBGSWa`9U1HFzGbJI;-#Z%R`p1DYpmh=E;_cTE$y51Ha~rool5dS zR4h2>U@eDru9^&qx?J>Y%Q{gQp)HxvqqlOzo|qqqocaW9qYfXKfd6c~dvqhn#5mM&jAx z!U^tPnn=ovJ>6Lev{89Tm4X&Xz`uu{izaZIVh6Y>LSC|-!#R!;9bZoh)Yf4^Pu71v z0ZQyLCruNvOst-kP(_PHPxiegJwy z>3f*bo?4}iNCUAKap+xV8AUG_Z?*S)(im{Nr-+`RUm8D?evK_EzTwEt?`V%A7ZBd5 zTw#&eESL`464-5n+53>^^I5yEB#yJH9fOQvWsABA3T+G2(ojX;RmA^P#9EKxG=?L; z=qyV6LF?<1V)O?Bo(co(*X0;!)pNuIXfKHTH-%2bR%;Q_)2$Do6u1eC*J`Kl2Fmnf zGc;Uy)iWyA$L$d-*LWz(D-`lc_60J3OZ5!7`LQSNd z=ho*iYvVdlKKKg^2Z&jkF`pVhPXKJ$Ohr}Dj@ist*OPc1Y*WbI`f!LLG^aiwEu@4#6P%I&Z!4KcZ!;bCqraIA%mT@Sb=VG#G#qj)l_O<>d|>q8yPvh5IPxOd=ha6FT8C>IIIU?r&KH+v$lC-m9<& z1+tda_bGXoMGlIi;f-7yhC^0?NS)|`PwURpt^K`Ozf9CT|kT&LQZ)eA^{FVn(CN4(WZpQ3*)MWK7akQfu1h!R3v2t zFb6Xh9kEOVgjl$-i3%lrbY$8R?13}&dXkkv=7~)qT=kO?tb}gc zlPjy>_0!9q+OiLny-82!zz@=oyezJ3Hd=?-ZX6A%D;%6(R1oz@42&eA_W(TX`Fg*xkpMaUD6fXF#nW0We zM6OK6^9pMM&VqP?82h_Uq}7QkOU_lCQ%n7~4q!SbUB_T3Z&Xv)=C5M2W7q>b^p!uyhC2U}5RSh1vLUKRXiM1ip{VQMaY?n0`e%CBaD;E4-zezjv_awBs|d17^Me!j_o)W`p9P@aGe149 z;(NQ#pBPymbLD@6@h_zLqp2L%6%3Mfk}=}3#niUGb<5)k_z;J=~J z0SW{YKpkZP&}xs2Du4%moVxM-V?4!L{wsEkh5jGx+HW}WM+FD4AS{f49-&83nf_6_ zWdU%gEKjGJ(Em-w0}y&YTR@h-kmUbaz#q)y|E$$-SaJqH7a(AF0X?0M1pZ@>I3Rxo z;38mrQdVa8o|W+D9s|M@ViAFT9auniO7@&M*#Fakh+ zhy2tTWcd5#0c^=nLH>m~|Guyy0>U~XvO0yl?;<7=X{g z@HqMmAbSC34LyQn092VL>kGs82FO1z_Roj6F|+)oz&v&Sp2z@UWBhBy`Gp+8NdH~O zu>UhreM-y4W|0-;+p=dXsMkX!jHMcy1dnHiC+@8?FLN<2S6!8a9=Sy^jbZcBLhM4_ z@=nX<5L~vKgr)_}csxXPaco_}s)2hFnTrEARj>jp^<3>T{DWB1zi>Qyt#4r(4C7aH}Z*Lh>-7cTqK5Veujy!0uKwi;F=nsSBC~gKv zkT9Ns_8DJ4EVb&C_dP6K#^1V#eOsY6iqE{~vBahyj`96=CtoqZ_4ck)WYBu+MAS(r zHEM4H@z#X^!sOc-!sbc{xYs3Dh6S~bEtMzd3x#(jagyk3Q&|%cr;d$i3&m~x*K zhk2s~(q&?LIYRTlh{AlH-O-CE-OQQG(cq;w%wv>D-zK{#`&QY!uA&fyJoaY#jkGyH zkSP5wNca+T8eVSA#22U>jfF%ZdMo;% z`KkOB#|mG_oXkk`32Z@!++D1El=_E0<7Sj8-@o)xczxJS{N^hE41r_jioK>k66jol ze83*oYHl}iCghoxbR~2Gp^bKGa@opGkELBF#P!C>XTMA77cVUP1*m;T5*Jf1aq}S3 zyX1sWi(x-}G`OlSct~*$pwLQEV%z;BXM2j{zSJ>N`gR?UmbMUsZ$0$Q6ufI%>FO5x zgY(PgYqu#pij-BK<()$dEh}7CZFqMD{1h!-`xBv097{SHhXQ)OQ zm#;lTENBm*r@Asw;Yp$WJpoCxz$Pw!ft4z%;AAmHjO?~MZslQ0{ zH7S7(gPNO9K!V};`&>Ztt~Za7r@jN?wnX@(Nq+^)0&GrC z0ud{WYiEHvk$cV8wA$IXfsX36wzb~4uK!y5ogPf%=47E$4EEkCdt|DFmj62sVy!0M z90xy|uN<9fL!|UWGkFdKsrW8<3~)ykmaglsm77b*ZB9G2Mw;`it|^zxys^#vh%%s) zE?*vTjKZ*?3AL5?GJiRQy>~6gSE>dB;RAn()PgCp0TvVmO{F&d6ds6vdXuDehX zqzNSj7e`+nb)_(wV{Q?7wZ%z*&cjkDGtRxz;+){H1T3bHDb%S4?44fyX?cSEi&xEd zuygRT(MV77GwW9ioYpt`1|zw-H@D6M0l3a1wVX_K9$w>(_9JhUxlqVX2(sNf7UI!& zf!>?6t$(z$|^%{OHP516UE`1X5`g%S2k~0^0*D2Z`Jr@WJFgR_LVuI_vII?tw>Wr_GA~^?xGThb zA!X)0&`4-q&0P!hY)!SQ9+4W62IwqCxP>m$%KS~&9Q{I@^(W<8vlLND!pR!;#BSZV zchJ43=~=O_rZFqu>43JhLqVb{`jZ+rq-CPxmUS270>*O#^mQ0dyfkG88NXx zT6HWLW7Yz5r0&EoFfkATI6F4Vc;RkCP&a0Qzp1peaVRm{)zb*HIT(ccG<(8N`WTth zs(&G=osqnkD@1^me!Vq@vw>AFb(EQ`Fa>|`KE;*I(&+gMJ{G&rbU`3k)gc+;n`DK0 zG3ak6;XBZ3J!>E|%49gYSU;@A@$7<`AQ+kOCZ&sI6UIyJX5Z}L=hUT|kB8annqjH! zdE35PL_Xw|jFse*#nns>#VR>`cd8YWmu2iCaqHVM@h^@QA~ z9r}Svj)tZ#*DP>Q zXF$nr&x{8H`wa}!`D2A!vzZBd^-59^x{h$InprLz4^=xouZERvmeBP!v z?szR?^A#RE4HLLIDkYTv$BNb$y}q5+mKm2O4ERiEBTM@+lwZ0{V))uicuL~;bGU}0 zx@M#XG zkV_Jw8=+W+8YHcRzC6CJhjli3 zU&7!c&)%=RVkQpVbZDT*r{dMg1_F4j+SS7lwb@G4TGz_HFSKQ&l`i{?W@GCJ{fhq( zroRQv6nOL;^!i;U@JFcNJ3ocuQTzNMP`tjOEdO~|_l8DRxGoG;zg4-J+uNojzx^az zk2-^4!JYmjRDm6#H}FjF(zH&_?WsTX5Q9d%Gt~XI0fY%<1}K(GIvsb zvHqYk{*iYE^;-3{Y>llI*1C@mr(pDy>}+DUR#kRicZ}lKg*~dud5ea#)mJ_>G(bzL z(r%4(LSE3UIY$~{9s~4d)Z%36M1IJo)o|e8^xe2#31kWKLm#Xw;IN8o#!izqH87CV zlW~>dl<8H(!d}VCwi;bGAv`N)X6WhyU-ne=Wmv+N^o#b?gU^1w_EpBhX*;jZHfl^& zq}D zJY%MQ&pn?rP12&|Ceq$lGdYcUt%6=x1@s3I-9QOTamcA?_m-udNXSK5Pun#J#o$sWJ; z4r77iRC*nQ%iW$XGT0_wotTZ+#ojMB1mq{|ez&@Je|vcW`UP36dbiscWTGu|R`?jv z&LxZhsl$wR3$as!x?OvN21x$RtV=R`4ie62j<%88Z5znJyD-9yNF59rb)4O^hk#*gCl5&j0x}R zu(>Eq5U<5bkMS3A#L=)g7$Xh|Z^i?UQEDV2g;kFisI_N4+0lh(-cN>t#aDP4nJg4~ zElpd>Qa;e-q!ifA%R|qUN72oCw1-Rzw;>$y;jqeu z72)q_ss`pwk=kUKl+4d($qa5StH!xZ@2bv2KV5{FmuyZ)S-2{a;LyA@~Y6{dqb2ysk+psq|3w({z}|KOap6Q#IOspkJe>0Q4f zd?FK%)0{LHV-R!`J!>5Yf~St}LIC!hXw49Q1u)#_0~dcejU?VvW%G<}CaZ7gZ`j|n zqc}sIt(^1N<@(`r?}>e^qhLzt%HTv4gI%N-^4~#~h8@)7p{r7OHJs=ARVip`3yf5t zWszEMk_JxZOp_Ro%-t{xz=-+xv8$gLE46!$GcQ&N&^$+wTZmbzk2{-M7c)id+Zi^A zIS@wyGqrApC>Z&D&$w2ZAb?P z(PV_81s%H4dQLS1(2~;-gnDPufWsoJK#)>t(0P$uTU7`w@7N_xn{OkMADzM);G#S4 z>X1frvwI5+(xtO?bn`zHfwU2l>5!ws#;=gM5shZZLxAa8=0%p5hIYe@G%z@v_?O-B zlf(6cLr*b z-1L3W6!OQmFJtN6z+oI+P=po2xjOIcn5NwqRv^R0NC}@;)Dx=#$&0slST9Lws7B+| zEu5crZOTceNZl&a5}Ehzs4g)|yap^AjSn$Ms8%|8-<#&unvy?wE;*-Z zK9DG9Ac_(=y+sjkDbSX$=dptZ@L-}r!&?u>*P@uMj=e`QC6qBIJG&8yqbtgNzdgLvbK$aWN+|47_MYc|M z320HGhFQ}Y*iGu+JWaCTajSv2OIqiMUH{4fZ(lcYorHjAju+hm-y~DGlC-eSzZzH= z%>jS!{KZhVIwfM*fU~^TLa@Q^9Wj})(8I%;xr%UiKzkXHM|1Z?=QPt4bwUyslQ%-26im+VlF zmjL0_bCX4jjV}+HFV_>2+r5+Cq6`?`^E$v-A_vDi?ytS|&eGzrdl_Cug-ItLhE~s= zRVmYPKt$aJt;6BN1Z4<1Rl}Aq5D4&Qh})swV%VrrFwd8d!3Zf-fg59vyeSY3!V}%E zgX>+oqAZAn8+2$lR|#$0qU$g@L z9mf;2AM5`C?F@+X{N*Y9LHn@)x<&xKIFD0Y0rM&WO>_Vu|4-T(uw%aj z{DaJA0bCnEGtLh(p9OGjel-*Qk)QpOr(}H`5DWNl|8Q@!{>8ohr^Eb5XU0Ft)JNv} zSA_46Yr_nfeMMz=r%3@j@>?<=ASwJ3@Q*9Q47f6n zO%H#N`G3HF3h>{L>Qh(dyG{JR{&K)WbpA<;DieUf2ee88Vgw)Cl9>U$L4Yp+cbwyCh~KlUe|rG`qH_NB z0RE=9{J7SS_ZjfBf3W$CfQBoErzMBKv-yB;{n-Iz`%7{8lg<8*YNSTfO_5b&`t+kjlz<{WHr`XA>4{5qSelPCK~0m)3;pPu&lSb2|dzS z8jPqg3a;8@*`%@_o2?Kw^WU)5z6*7>Qw#*l|x!zey zrZOVe-6!JCm9nvU_1eykUaeAUvXJEcyAu|u68z#lZ+0`9bA2Bgg&Wdt+eu!JDmf?>*$akI6=r6)}B$Z zv}zL&xE&;a8zsnF;(+aZC_UIC=n*qH=^_XZzt|x3`ec?2OC-xY2Sh+UH+5n_7uu{S zqm1O|R6yV|NSDw4UWqMh1BU{^hr-uqazHGpHTQvVk7vE7iZ7!1bt+l2#@)LB0+L%f zzC#9NyHZzZY;d);6{>S7Nk0K%M83}_D6mgYOUmZncL`Id;iwQ;< z#n)*S#pbdy--*bUOh07OkT*LQ@7MmqX23I#c&e?WJmJ^Sk6vk+lA4%-yw z9c7lb=9A|L9weFr`5Zlv9ZIXYA&sNKPmlH{(xxNL35Dx1YI4kdD?@;_ALJM#8s`&o zkC;eWodL!GA+P~<&MYsSQj`(JXZjm|{6m8~ej*=wD+h1L6V+Dh7%1TbqHPsQVGz)G zcJXGP*!%ZX9&7Q&3EThbb8?W=V2iX}EikZr*1+F_lzEGvd;bQK&P63%U45hN2R>X8MXa=g#K85_^ zDR%G`Z_ApQGRG1wMHrgO?=$9g2m%IoXZEeDbFiNHsrMD+3@8^A=I9}RCuxo8)aZCd^`sxys99UzY(`JPXeCY zZY@7qb(OiJK=qA#Z4XYQ4fkNP7YA3)*dA$Y4C)#uELcKK1EdYTNK2Kt+Z~?{QnYKY zBZLX=<}j&R6|;a#3!`(-bZ=%ra74+Sud}aGCN6X&FZevsO9s6#E`O$5?wex|>$(x9hz%6V9fF7VcahonhW;^|{w#Uy1l5gL@g+TwrozlVIu` zA}kmV1H<)@WO}&6i03Os*}*L?Q66MhkLO)e&mpm&H8GMcuLfQ^5W3J6V!Yjizo)0s z?rcZDyDw{w&)?mw!%Na}YhIYDnpZ%{>X@3lSIUajhEpiFw;d}9ToU5#D$RE~&iJH% z(k_Y-JzBk2W5rv65Sszy_KfXALjzUsYQ2D%bOM25Gn3begpPC(Tv&$PS zOIS>s2N{ZRefeBk=Z%>tEuhXmAp;$S5u8qehYV|a+T$DUJ)RZ9W+2=_UZDk(6NYwW zX=kS8=~sqoX&G^#M#TI2*lfO{F@jKhj7UkIt^oBU5xO2cf0Hm_ zC^1OgRTtcu0xRbw8=o`u=@qbZycAPZX2&%zdnDSAC1098`>F&jkzc?kxYM1Q z(c`Xn9S6$p2@w80D2B4iqMb3e!wv) z<3^x2X?18z^Uini?MP-$8O#KHmfwmn_iW`zXs>uSKjQ_>pz{L8H<67njZ&du!hErrY32B8w-7B0f&JNICeWOzU6odWV z5*7~xsg>9A!^)j?qDwzw>pQpm)lSIcP9g*RlO0<|!uH@$RLtgO+Yet|7JdlyNg=jI(ypkRrz$y<$_fh`#!n-3e0k@sY zimnX#X1W@TyGD~p+E}jJmK$e1t`S1t^7Sl(Q7awZAkjm95e(zx@9`3u(xFW&~ge!r&!nZ(#83P z`GMCrC=A!vtA-$CtKfw|*rGA~NU2}U!aDV%kUokc$eep_zI;{}N;c}#g*@F1bi}Vd zaE+!QkkZM99hJGhGucun6KnvUfIgw>z69lYimL~j`NftgYaFXq?AaM7zfkrEVTUoMLJE^I zkTc3u6bBTQ@v;{*puo8#j#h*+IN>7xhLRA^bD4B(mH8~*A{L!)o0GgqrA}Scb?{7x z8Azbi$}*9+?r#i0uOjqEQVIsDHATas3@)1)b;Qevz+Qt^KCYaD89lVY*sJ@%V0Ddg zgFTlplzNjOH6*(00;;yEAFc^H|LNUHx!bmFVT>fm6m!lusgM$%Y*x^z=M^$ua@0h@ z@!+pgtBk_-b=lp7WyC2YL-nqt*ZQ|A*ZijOG+H%FT%GDi=s8DZ6nTop=)y z>HO_z^W&$amMQE4#F_Z*R#PSOU|uKix2Sp{^~gOT4nS=1Ow|33qZSMc<5I)JAndWa zrv?LYmL7C%yBhWb0efJ)`*;uT>8}(BEq~T7YB28~Y&N|gn1-z{N`ZQIUEkFVd;DGjyO40LB*j`NMA8hb zjbEEsZghp#GlQimNcjV&R~L3t9vTelXv^!23e?)M6=9XP)&Z#J!9d^v5=X-#xLM|% z!dL<4R#Rs_W(~~9V1%D}pKEJQLzE~An`S%{oD`Mi1cqESu3Tvxk%vE`urQTlFZXpx z(A9&!jDa}hNF%5D8g{t>b2;F26l~K(HUjeTaQIUJ3Ik}Z|78qI-L_!&igYilt=wFo z1szlWc1`rbXV$G(t0{_~>U>#Od1{%TM`t8j3cAv!Rsesg&sOM0!lI|Zgez`xNY{$) zhZBqjAEB~>;|k7IIyhL$`-Ft`83tsYKa#do1xmj9ffTy%?EfR}E2FaPwrHihr368` zd z@jJBWXe`XLxr=iNUz)u*-LdnsCb6qeYmMEZ7_koou$w~81oDQE(F#H}1e=XK%smTH z1Yp1{v2>79;-(v@K?7alMRswey+S^sE-oYQjIqANJ*E}aKkMSUpbn^wNBMXZiS_j> zZer-AdUa5}sej4Fa|)R^u$Z-2rm5-NbqS3h*(vMkz{AcCX$Ll$R;AceCiV-*1>5Wu zZE8K*=AtEZ<28@%xgByoZ`PGq@{H z@j*6BMtNaEb0xE7nQpL_eDGuU^x!h9RsCo1Zy6Yu$eOCS26>!hv7e%-N!^Zebaez3 z+axDtCrC^p((e|=3=VxVRWK6)JD;9@Im0fPHIlYKr-Ac4CpOpE_Oe};*rA>^CBa25 znPZf{M;AYU!3?RTHQGWPV^FuUBQ4tEYd8{UAyNoaAcfUdq&$hGMwP{~bwxpT=7Kye7iKA<-31oF+;Q-GZUOxJ=&d50CIP=VP~K zG5Wr8O-~7@TPm@=D5ih?Mn*#4Nn%`ZCj6u+v}P%UD5@sy3OjLVPr@qHMNpr&$>E|WN8ufEwXuvbY|vb@qkC7w=rsnZ?X z$dZD@Xkfcz83lHXLn^5$p0i1We1}yq7nuZTZ3TBiP(Q zqwyyA&L=YX6ZDU*;`zvOC#GaGD^{gLLlL+o*kNDOKVD*kBcGOumv<3m#g$2%fMvy@ zuzg9JoZ#=1E3qCHW$KaV{+RFf%6Kg!j5a3I&aS(OC_4^?-0A8|b{J$ocP|8|)lJwI z6vY__L}1y=`J>1ZCDrfo9thS-j}Cg33^%5PDpgyp5kBi6%e_ZqJ)Ea2!_%o1@ATQX?c>6Q7mml#I`)ViyByF ziE@cBI)f*CgY3cl2mbaadj^a>=@&Ys;q#sK;|j_3b^zGe9XefyI=V*{Ru13bu2 zQk)Ioqd>Qq)%*>8%l`jJ-(HPw`~~043gk-yQFKf|2qxf=$ON#?H|Mr}j|KTJCCLuJ z2e_c$IC1u09vJ___DM=f3JCt3w)mYp1#)9=1^Uy+@%K9IknH3mq;JkSx;IDXQ_FqWc?-je5X9kG&TQUAHb^@~Vt}+>a z=0#mm;Y>F}yjsQo3LSu}=XHz9@e76f4;yNz|3cqN+eTmWh4~9z{r_3kKQOmH8|EtC z5ZD1%7KvA8gWr+gL@)xB>91IUZ@m`lFU;+48}KGB^lAd;wx$0`;4%YQhrpLI0R;tS zLYM*h>t_1?@1S1C-~Q;88=?Mzw!H#(6&L&iDiEA|Ws-P1*1zf&j^B7&z_97olKn?b z-~_^}0IlQ4^8P^em&*$rrPnU+bt2)d=gS{%m!A>>6X1}iRFh#eFgYti2rI8Kp45Ume<`a3erGk znc!_>K7fdN>)QX64uA;@de(omgCF2;!uxl7@Hb@;_~EzW_<3T3fWZ_%NBXG@g4lo{ z$eWMDzdErw{$3fp5{~~lT5i!dKy2R|?7#ZP%6$_+-`I10^$iC6TnE#SI5dgik<5b` z;TVB3i5S`!12e?Z_&^$urMlWI+qv*DgSmkSXDQjF)l;a4(@CPVexry!vBwrpcDytJ z{G$v&l2&Y7l>R8;iv8BogguJ>SBuNDiNhrpzN&8T7E+o3pN@%<#nNUqb3%enm!r>R zTUBEp#{mt(op8R6)Q=M(S}cMAO8oHx3{lKVoABkudx_vTwN<>lT+Ur8op~^A!W=)$ zvGxVq^L7@#94mqFdKZFBMU?z1PA^W@b$1qFc38GF@*nKF8IE0Y@j5}6e_J_Oe}t%m z6Pu&MUk^vl-GVJ{H*+~IPMj_s*003RJpAV2Dwh0mc0Qi86~tW_9e8c9!%tvi=AYuS zW=SsIJEj*ZIq+;FeX)97Cw4^0umM7|NOyqC{Kir`A5jj430)h?@YoEjDcnpkJ(#~? zJ?g!}miSc8Yc*+L7R5}_NAw+6Mmx$-oU9Os_mw#oLy@V>mT)Kdr|AHesyS!vH|Ohd zLiH!7@RyNa?=$g1fT3+#=1?w7#OgbMa2(P-po1TZzGM!?{5oxTvRdHS82IFEHn@H; z>IOe=-$VL?v%2~*)aTRtak50=euP2{#G?YJEKH7Q(pTnKF(YKT1E}q>&Yi4UsN9y! z^9p$jpBO8oA+lxXDq2(A-!7g|LwRuPygksBj^y_M;vfQtSP~f!YtxjfJ`iq+@QE0Q z&GS}|=HimMpiR_Q%wQ5jH@09&^MM)iJy?^PZhR`sH;)zVvoU!uBYY}-OxS>VU#^DV za;>G=-a)}BJ=Wwahn@dh$bC`jHWLKhi5UBjINVk54KQr@XKN}QdOV5i&{*;(-+%In0#mS_j>q8Qi;M8EEG)!m^Xe9OahQXOvegX_a#f*N8pY~*{xFI#L zChFhK#3eo*=za(h@xaLNxaut(+9JjX<2w_h!mOA5=K{m?y@tz7@B(JA(&ai6iKV)p zBCxuAex~K2sw9qdO3StqZEtlTmxW2eqmTR-XjBoBb6}lV{W=?l;u08LOj6SiPq}D5#A4kFaxb@Z zHMolrp5&B-QZrJw5|fYgeq{So(^y06a1@qO{6s1qL)}5DA|n4NjI={v#Ubm{L5qcF z42^XCOp)*0;oP}$N#mefZ8$qExMCJdjZ9wCmkRYf_l@WqvNg3-O5f#1=8QpN-}$C0 zXk+upkgM-SAx~8m*c-(Itf4BzHE2S@4QA7E5Cd}1DG=j4|ZIc3)< zX&DtmzG84$9N0`fA(EJ*uq^%%4aZCl!J7}8Q_k=IL4)8B{w_>%s#T4~Y3_ci-}|7p zcs4c}OA`0~!FgHdN>dT1ivTtQII9FwG}o?*?TGvc3_K_`*x(F-xW*y!gkx%U_d9D- zRKe#g`HlDcEI}+7pVP#ry&g%V68a)R9;0VODXp<f8Cq zFt^FgzSGOMj-rHJw*ji6h_flieF7UVVXPJn;h2O*U?FJgIi_v1^vo16>5VqG$*Ma<LW4~euKmJ)+Zm7COa{Lj@`}+4zq%hsa z)!HH?sz^r5_QhSiVM~xPvT8b;6EOGj9mV*D7g>TV4=YRpB)mXmsWE>2-KbGgCK&Hm zVC!eazXZtWQTIbSMQZ!|Q4ySq(aQA)nQS$eWs$w%#MPokbbU9vdK58{#`$%lvQgI~ zhAI8Q&bI4Dv*JwiyC&Y$(*VraDaN?b38CEWJ-ZTXhm`> zVY<)n2#Meody1*)g!HTCe8^6cUlvBsRt;4(60ag6jXgl6i)CxmiU?MAM0n^j`T?GZ z4jwMiR`mI7p^N0)Gs3+9!EJJH=PX=591Qi`mRt;A-0^gi`L{Pdz9l8Y#E|_gEY?IQ0?xU@N$VecoY3Je zD9B11`U-K(b)Z~LY?fjq8&0$pmG?x)mxDa9X1J>y6&*|O7};tuba)tP*YqB{xm8&b zvT`Ll-U$t?gG8Yzp)8zt>itsA*7k%IHNe{M@&o2;`AWfIx`Z8c+fAAYZ6V}M(xJ-U z%H}xsuIiMm4~$;wC)%sE!2zC^*zkBvX3eP>6q%X*%t$UW_K4KM8f6)Z%ZY3ml5$Q= zRtcd?=x_!Ny{=-9E#O0x=QS|rTOJBxw432cL)B9nw&;DzjDV~_9+>0Ru|!H8UA=HW z8I9$l;xtxk8%}gb+x?tR&8i62#uT5fx@6nIuiN-UyXBpJH&&YcTY+LmSDY5#AwDW3 zbN)=EP5X$bCy%MP?DTq?s-zlPQbcGi{92B>lWn7dlzjBs1t|s~!iY6V=7^}Q+733W!F$#jC{li8CGi$-P(!gWz-~xcF(gEH@;)9gs%yn3}tqEvk(1H%K4# z>wW5gMM+hSO!wT%haB^rnlH(0vR+(gOYtE~gV;RM%|6&wt9Bn)NO&3^?J>kxEQX?~ zFn1m_TOD&JDcO_}#+r1IjjOy5+M02^qPW4i!ZcqRNA^eO=CjBPB{GCR#M`P3q&Qrv zhcBz|X1+6euS`?R(pmwAjb^{DpJ%$AKiThjXUS+*N7UgXv%UVpFm!RS$CSZiYo|PC zmeL`N33vAg2*@G}X*65$ISOc#OsWK+(IP*nefTVv)%pBkIRl6vl@IDT*}}v^(=OD2 zxxuyjAfxi>NoQ^{s<0bzPCc^dq!529*hX2(4Pos!)mv<%=7 z(}nTN9jKNyeA=Y=&F-*a*;H~I^^Cif}SI=_~1fi zzRHasgp#P}ye}YfZ-ZzmG#!|o3gwvrWjq$?s-;fOCqC^~i|oq|Z0tl8-(x{!Th8{~ z&~qWvEDIRR4=a`>dj`raPL=+kvCXoTBGj`iIVSxrp*L>(Vb}|+bm!zR;1xspVK$*1 zacnQF%0iJjR8ywNW{!v=)KNF=M9W;d*hI@*`{5sd2}{X_t6W(U>sMKxKIO8De)1Mf zq2!X8DIH6161GcH48@%nJoc+o>`{@nLcqJFNk<8?`$opCsYNVC%p4X2gxO~9hA~!R zGu{5Yt(@!u`ZLMUrroJfC50YUTXr(Rg%BoSG1byk-{fn?jkP@E7)xIzlgwJX;vg=G z^k_U7PjHxGVNvGet)2YbWEoE>JAcW#SfhhL#IzlQ`s$VFR*2U;BGo7E2eK>?jb8U2Bjmr-|K`PjT^-fThQ70c%%*~KsOs! z|Nixitv^0T6cigf=0*|y3dH()A?p;ZA(=B-; zPYO-2Y-6tVuFz9a)8r@CU5%2(Mfc&B&_m1$CyCIwZ4}HPrB+n&XloS-v!@I`Z%YcA z#U#)XmhBWjc>J)Kvt%UA>j+wTST>}zXLQtA+46AM{*6=QLj|zo!?Bpyj~HxCK3@yp zwj(OdI3{`O#t%OBK|bB}^Ti)Da6k$=@qISlhj+Fc0kvHK(^tGOWcJjTdh_8)K1|G6 z=P+Y%2bEdteXLo>vbu1m%aw);yOt|8LyPSW~^ z%a8ZhPvSFMylj7Pr@>ajp><8-$Y8qX`k`dTRx_53&=u2{K1vd{rtH{2!2$vMiGb2NPX3B?Qs$xJ%w z$J0=GB=J#y|8+{=^sy}0CiImQmX8CFaIQvEW%uzp>X~xd!C!PaLWr$R(?zx|bY{^> zu^V$QOI-3Hnc-lCaklQ4as=t=Z$j|Aq(cFlNorKLvb5z$G~O#a&@FVUXb0XxG(@IU zo}p++^py*Az=$c?6^`nI$E75x^Vm>hE$J~HwYUx}@8^pQr^ z?h84J6YT~h(C4i;p{z3cZxWOE=Y96uZbQb~&B&8%eCO>SDKV@fAc#<%hIFdgN_21J z2C)Tj>i91qaotm8U|<7?AZG(eCV*{b0p9-t{zhzosSL+0ulxUo597R!L%x9z`#bKK z?Me{35?g>*)l3h7=j1^0%1s0l=zFTwKb#%#t=AD^oY!&3|0cw4B4)21-~U7OTvOMd zG$ZSkQ`A2^n$YmU)A*&68Rr){)W2#fjs`nGqPUgE?g0J-)-)HApZZX>o4Oc z|8VkuS=T=h%|FRTRwm{vPyU||m4AGKn=tToQuLr(di!sPWX}ILBKgYJ>(-tD zR7qw)%m8`@m_}g+p7nFG0WMrX9LO#1a95=8fBXDOw*~gWZz3h7L0+!=ijK7o2SC9LJL?uP#L~bMJ*?uLQuQ`W)_6sx6 zFIU3||MB3uLVpw9zv~yyfAoiMnLo&> zKsMm5Yx^G)t}9s;=xHF!=PJwzP@r!a#{>Ke|G58vv95n7qJ4Max?%tQ;a>UK(;yHa zM*>3IkGl{AWC$|fEDn8-PyDAxt~cRgW&Gt{`RC03_x`)-E@b=lp1DQzU;_Q-!PNqY z9@A`lRbZDe;K%xy&4nWVPIm;s*rf%yQ|PpPkvQsJmXSUjPnVnTMU| zW1&$to=$|MO3b7_`-|N+_U6x&h89x{_|A)~l*U>*934Arw=b*|#+0I7ZV}8ri>e|F zC^A+Y9vLw`o?k6*O&e2EvgN$|YIxMug}pU5r6z;3P)94y84%s6Knc~QgC+!uiJDTo zbZIr1Qmey%Vg9*xmDbQ_=rbKYE~r-?@zRUfz$dEzeD#68A%X)jce44ruSW*Xo11!< zX89OWM=E!rUgkH|nVZ*mP`FLbPNI6=g*MDqMz!$hu-k12y&vxqr{^b^p@N^4LHKD5 z&KiLlPGJisyc)*8>AUE$2!Fi8H7*mT=JF1P+e#LSCoXnj%-SV$;?l#k@kw*sB3TOj z{;-D0!&er-HpY?4`~7EpQc zIb9u$?rG{a@w%Mcd3kn#@Z7<~>7`d)-?#-VA@3lzXu_NPFRuIf3N|bBd1(q2*7ZOF(Fn8Gk14p zd6Yu>wchCXvyTP;hljpIK}nSB1M%aF(9N4R{=#P|)P}6d`dN7p!&Z-q;PyJI=`SHi zm6+A5mXO}O#O98FqD^j!GYgrL>Tajdi&aMwwlKZ&b|Hd7`be}T={XHo-gWF=GrS~Ag|9dLEx=vHiGqF4rS0oG_~fu4z0 z>1Ic0W{XRtX5359SsTnL7QGF zbO-Bs5dLd7?$E9|wYTcbI#6(^rNbkUCH8On&kuZ$LZs~W7B9NrK)$gXBj=(lA<$H( zm98O~F}y>#B8ixK2169(WUC}|Kegi}&p0=@;Ni-E$>7{E-xguNPnqz+(dJsyn*@}N zrGbWvor8rDMzREMkjCj##dq^70s78t@(-OCz}&6ys)^KgnrAmG7fBy`6XPy5Pdqo< z)(z25?95SS;hND-UakQl?G$sRL{zi)_?AJ8$~f+w?{c){mOO2)+3}&_c*|yCpO?^` zz2;*m+CJnCWF;e0V9D_9C~)>GDissPM=eWLP#U_|>SgxfzTa#1O3!&v6py$M?mWTL zj;D#BRqJEN#mH@z;knT{ggF&K(@&7N#F=fdh2!Rmmx7W1Z9%&iN%bwRifx3BO+BW^Wi}dqPNKwFSn1`1Ygeh zLc{e06erE;2(F@ax#g~xdAodCv-g-=viEy*ZrialTEx8|xc_4O{y5zuzb;tPBvzO~KH`)KE}9URmrUq%+ZeeF#-hM7_^Kldyy&X?0K zE#4I}S)*~cq*Kgaec)ViDL@@0EAK#j!M^r8J%u87ags&fsR@TK1je&={nLPlij?0;x0Os15n9ENz42A)`3D z@a2YutB&bizUx-*(cO8GZ>LBX-K4wej_R`%ebqR#vyBAF=ct-QN7tZupIok|M4P## zYpIwMeHlEsa3W+_3)n6;mQlii3LL5-B58L#aZI7KDItt$shF+b!2cM0cn^<84|!+B zgDsv_DOm&IG^NseZiu{h^Fd7bOC6ef^L=0spJ$k_ri4~1UOs^hic~RspD=<=pEuIu z=0JqD@7fh)v-6^vIXSH8(V&+M>-(4cdnqc~q>!YdW_a;~#H;aGG7YBaG)Co`PskYI zn`?cYkyoE{2B59OXk2R8PH_0qcfPV-l8qgKa?7L%qfOf&oVrB7_wh0Yq#u_s4S&m3`KB;#Hw5qo#JJ9ouT0kcVD^oWOJ459CJ?v=e%&NYwGmuLU$_w!GO_Q*I z4+%kHFD7?C`oMLytQd@KK&BOSPa<&gCJYvk&`L0-*^)|X`YGKdr=R!rIDGoFr5h5N zHXn?P8#>GGT%sm>n@;wwKm#)#RMqMwJVZ?nq8{uaXT{s1{1T2&`;a_LYWz+W-Jl70 zI(fpV+z)c-N3-}fV}!M|a(AJZCqyZ>cX_?x--E52M&?>1ysO{G2UD3x8ebh(a)g5u z;~y3@l6Lfq$X7|Pve{^ne2$n@yO2LzJZ%F+1H1SV^y8agr%V|&un!In^wUJjIgM3J9AJPSNn@+|tI z%P`$yB=d#t6#Q%^Y zxM0+Sq)FBhE)?Xgk1*1P8yP&rss~TrCQ|&!$0kmdB*ZaLs428~Moc4|3)09JTjXoj zh*tLtghVIiD!N^7d~gZ_(Ki!x9MFP%y;~Q;MNM_MuEGAGa~d4k5zCy!oD>EDPH`iX z)3FB6#8~0yiK_DtH86z}8RJ~Wi=Ek!G1JsIlG6j14h7u{b}JoBW?#oeqX!o% zD88kK>vuC4(!aP2aq{mBK=MXFnUpt4dqa~U;?_;LqCTb&JByrMlH|fUE*Nh|zS`G7 zPm&*5jx_0Md$Fw`IKLb3S4FE$HtKXYye|uur{m$>6FJ@h;+&+d-h_SK2R(sOi6H(}_|9t%BRE0H)B$SJLPLx4bH0T-#( zcNx6EKozLPZvb0&q=4hzM7}aZZTnI}8xnzOw$OuaxBgYF86|{yqjFFM|1_ zGfa`56LEmqKa(Twr7UOzc@5MnMiLt1FyV%*9KRe$IajzrDfyn)@IB;|hlk-BChclw z0$?Yv(lr1#uAl7WAKbY9jve~tiSwV>$v?2tKiNq(HXy*@KZHITU@gyi^W)~fBZqz= zrT;IB)afOxM%8tc<@<&o@*~PE=L!_i+kfM(5V5{YSdF;wXXV_CQbt5TgS4 zUENHS|9hQ*&v^|A&B}Nk2@S-h+%U@ncpTk|@;_n?KX)6G*-XFn&jT(|Usbz3qT+y>8oquH&As zw%tvP^Y9zm?{lWeK z1Q@JwUIj>TUe)UgF7wSNAIH@x^^g2BN6^Ue-qxn+k?MNTz+4N z|KPYqCSw1wdH*{b)1%>RjaP3|A`cruZuf#1z)>JFndWkoXmI6}P; z6~3swZ9MWqHcf&WZpkG#94$VRocig>KB8Kvx1UwWCm6qH+hzRIx_r>iaI`M2K9{2_ ztn_Zs;KU;<$_hl%TqmPv$~qsO#GjFRz!Ic*P~>m31Pf=FZgNEY+GWW4oNCh1x@&vDVuud$VolnOKp zsZnZx@c3xTU+Yl!dnlogji*be?S`?D)4;3+aW^X$ysvMQd$Df|bn@elJP~~!0XL~;E zEpfqjToLj3N*b|N;8nPFGDD<$wszctqY+~7lP*j4TycHVXIhELt? z^q|98sr|LjGzea!n+@)iMpWaVR)-xs8HS}82R?VBX#^GN^*wWM%9Kx-@urKf?1_+d zaFaKRn>iiK@@JI*u9ku%({E3Z>86qv7F|qIlCbX=A@E{^S(wwwi{}YX@XUwc^zBsP%-A+4^pN3V zR*@qJd&yj+qJ*S4RUJjJTBC(Owv?qPwb#rB!~0>EYM`h&zy}UCai*Ie?<*}b$%3Bt zr-Wx%d+nm;5Gwc1LikD#VV|ZtwojF6CrA+1gYXgiDQmJiEqk_wp`6YqpY=Ge)XCf* zP9ds&l<4#7n`=ns3hBJe8;NW_F}8Z~+!mRau!DqTE^!h&UD@ziYZfni+!(Y|>d;pgeyLWE%t4OEk&2hC378(MiOzU@2D^)L)3vPwbp%7k_B#;?F& zlwEa-xIQqUN-c4lHf9~|v!KE`bSpx`n>Xm)={LBU}x9(?t;R3Zc!B{Hm)-&hsJ?{-qv5cClY zr|1!EL(CAq4{~Dfj~3`^*~4#4&BLF`cQ;VFuc{n6w(fkNXhn@l zw*EA5dPntXEy)jd*`ieuV_h?~Xs01|3k9CJcg1R_b8`EA&WtQo!dnhk#?VQL7g0RT z6V!rhav!P)(>#!@XSYO>hoNQ<5?PttIM2QpG+sV{tJ;VHKgp{%_F8!1eU{-PCw4Io zf9a&MJEF@7rsGt51LcAjCB~$vb5^@r)%n!@-bA!-ijU1dA(K3}Nc@n`Uw~N{K;)=9 z=~+pfy_bli&D_rFS)1|!^mS2YkM_e_DRJgjChEeVFY3y-Iv(MfhB+cKUK*H(27I~uhbun0<+#tbTI zm4pRFs-u$^Hh(&5r!F6e;tSK_zOZn5j9vE}$isbuZAi$lzPG1w8CJ`|cdmdv`(fnS zt{%+=^fTe@d&&3HGb5f6>QFY6TkUaG|b5uV6lu7!6zPl!ZGiWplKZe5Z2`-Eq=*+yz#%z`a$a|HXXJ z0wcRzAk3>?&xxpN7-yY^inc@nTF&;Z4?8xv7@SFJcp~l*XKd1UThX}EKf30{_4tso zCZoEO#4TYr)FpE)`;wI6t`R@Q?ZY~@%@NpadHdW8)e=5R`T_mE-PFZh5%3)}TbyW) zdXWE7Xn)V)&_IAuX(zMKhM$Z>0MAEFy&x`@dnS0Ul>GM_1!Nuh=+^5icvH&I4-#2E z_4AA?68cNhK6%@$4cL!4dRpF%dkyJJ+Qt!@+h$3~b-=wPZIHHXrd5yskaeLi_g(S5 z@qwu?thE^;tL+*jBdRAJq1t(+=AFSZrex{g5t>_I&clNC)cn%Fw`2-e9C z`M!Nc-acZFejN8iM{A3LoX?b{sBFqpihssPTVgiCw|_l-#{L_IpbL2}JI!NaP3!^U zmnDco_5NO}lq`p$UiZ8o0diGqzih^)f#5w>C_w`rh6vDBx3SUqL~TE~fZuiuW*o;y zvUmFh>dp6&iCmfmIJ#A*zllwOJ&4F{2uSxFzy+m)^JYl^ei zl&!EMB2_>$ye-spky{I8Yr`L|BQ95!W|8*-(QuphmTZuaC!B1XZEihH;NccDG4@9s z)2Dez{1^_G_;HelyyjNq+vr^MJ{?puNoc$HxUOca-JI#>S)Kj<##8T%+F4X~DRQS) ztyX!k`!Y%#jyv_t1iEm!a*U^GqF|LVkOs`-kP00$5DSqp#P!o5nLBRQ8xRa`c~GPg zj>c-_Y#|52ET%6RQD*Dc=y*AZ4J~ROcX2nea7HECur~3fbX34IFC-nChL9`q$WM6p zlzKNheaZY>n(!3LKr7GcFfYJ?kEQkgfjy!7=fs_in9~j4xVl8FnDttT-dcLVmBuU@6k@au%^S%2F`BR&DNR3hvQ)w^pFr=E zYVEN@e_Mz_0n?MnVjTpRsxN&Po{6i4PoU|7M@1kBl0;9}6|ZvQ5i0yKOBn%4kRNWo zf$=V5teFzhr;%;}Cutn@92yQ@LzO{fCs*%a6HrTC z*HooO8cGbE8I4qAwOk_$cLxzP42A8H1Po`hzmE3(gDuYH*{o%v7_we-kDB@@v5_Sm`vm8*>uNYQ82h#FU zjhm_SQ)qGfo^A^8+!uN{>otnGOk&)qZLr|TQyBNnM7(jEmS(b{iCksi86z$?sZV;X zpPhGOi?mO*W=}FCw@6n{7^8SBAXgi5zR>kVl?f!d$FtR=2GKQ8I`EjS=u+N`wyh}` z|7lVW8Ma)Jl+7w}D&nR{H#mQ@3fpdmi{QIQc!=2h%T9&Qd}y_J!*wtg4yom zFG}8_<=LmQL+;KxH(ANXkQQ4kuva@~oTO--j>ecDvZs}^*x98Y0=XT68mJ*=SxeeAX+OB}3i)+SG{KNu_xa{#>-J>e$MO14(a11))rLwJs0s+R8WtE(E~^wf9w zP{q9j=`TCyfw~Y_T)74HMy}aAi z8eejrPFyPIKSiCua_a6=@l3bO;J6rMPL(IO+!Y&0{llMMbYWN8ZytXZA7No zI_1H_9Pf0K58={zL%fT`jsq!id~Cln^>NK$Un2h6D(+|)ISh~E%y4Sm$5WUS6h7Ye zL%hsjl%v5361V7X1Vf+qIB$^49V8%Axe^!KrC*%5FU~5&@lrN{Xjfc)b#}vhQ6Ggf z4ap*v9Qxaa`A49gk30V-temM|lrH9Z2O=30x0YV0D*nBmn#f}v8+T8JzJ?E-Fw!T! z_Zl%Eyhl{%L_%G?kkGuDI5N-0-3f!umk=aFvzn;Pc?HKqg zE9m6xc7u-*kBgAqTWKN5EtbacP!tQ=6Gyh~5Nb)asrtZO;#9QWH=fGt$1^PTNzN>l z7jIC=cDu#fCbDUB2CEv=Fl_mgGlAq-$^n=NA2DSrY*8f1K<0;H*)1_?di1l)!m${3 zii3#5#>^^HF0+sJAlf$*o56l%iX6C{9_WwtEF7O~)|6bx$VVr^xzW5Ajn@ZDO;vwM zE^uI&Cd_FHh-Dp~kssa6mGMiuQLC)NOO-~0hiu*E}3su2= z@QMc2jpdAnC$B{d8^?zPJGa*Tgi=1_f}^Ywx8U=Eu&KzkT8U+s!%$!4Av4~6`)uI| zZR-Iv+RG9m`vC~^Be%g1ov$wx##YC-vJ84Q#)?UVW*J;+A$u~NZS;fdK@`WiJ7d5U zHfea**U}<$edceUzc54zw-w`FEF7%W_HOc?Z=A1eI9KwVIV3g_^}RviTUXyfB9|Rh zAW)1Ql1f#9iBu(rOfSuaexOpZwVZ(wA|H)XIkQ>;gVFTSnwZ?er>L$6)k+$?dEMS{<>&e)GM{l9z#t>TEJkgE<3Y?D}?TddxxVnog`SI;*ts zTr3iVz1a{>b_mEtKG@le)~s2irPBVhLvH@Oz}PuwbfQrhx=f3a##7@W1*Sg3YN81) zdJ3=EyRqkYn;YHJFOCaDvrJjYp66X)pI_=y-yjSEq}Z+8=}&oqoe5we|B)AfSJt=1 z^!(M+cBa3V7XbgSTQUCh)MEqaQ^u>O?ca0G*?<&z)>}rX{)RVYx=voWfj9j-dErVQ z0#coSK5b{^WTt1kYt!z9(M%hqJs^6#mXfvoihg zk@~?$U#T}tH!H4x#YZ#!qBQ)8kN$(k@KX$7;RJl705Rm}nAdm2H}Sh5fL#BJy8a?u z|D$dGWnKTEM_i!lJ7ro(z+Fhp$e_xkd@cvwD=Bx1}X222S@7e?4S|}p^MCf(t;dV`xuJ?8n;g=KnpF;iNR$&6x z4p6I^0A2WM7!DBTt`dc=+{|uPy8hj@H>@P{HMh#OEBU7@1vuqESNhg>fGk%7Nq{1E zJ3wIZe<|Yi30ADkzg#KbTLai?aw7biOss7GQ^Y@9DZtYgKzIiM*B!8{nV5k#0RDD$ zquhKt18$1HK)hjCiut!2MO;t?$k>tLD`IqbDs;1Wi22#QV{}=Kfu9u&X zLBO;oFhu;b#@|1{%_ro)Y79)9UkmxS+vQrwqLM;V|5M{X+%3RxJ80W1{(3FlqCErC z?^koJziQ8B)>CZg7xC}D!93jw7|%8We{fWUYzSkyh+Ms z<|eatvGSSzksrEybnqRrcOsFZzEyXQRwkhGd3jaXh5|n2XwSJhy9~07Oenbax^Z7z zR2t>YoxAaT&ChtFsTeinIP&!4TH8_#JJK^J8`qiPuAN%lIX;*A3+Kyc=oBX(DXn_Z z)5I{v8~o*)MLQ!8&z%8t#-5$IGdHWt*)Jr$Vr&)VFHzLU1DPWlFO^eF_mE%k5v*-l zK}qRF9jIvozx#65JULw|DcR;AoJ{n9JLcQ|MGfJ+AKzSE83ha{3w@(ytR});A+ry$kD_h(|KFb z{xt&rZBzXUvMis6foAe*-}xYIC&vQv`?If;1eu{#RrcPU2B+yl*hBl26g5qA@7H~; z%?J&jafaSWNZI2l>yJF&T?Er@TM}e#LtSq1Oh-|%`d0m3vry(C->E*nt4;{fsZ)qJ z?mq7^gLZN2E|>e5$v(z6IZh{2`lpi!}3$n?i0 zx@=B@Iq=vIgOkyP@gv~*6JGAA+>4_B!~nv7805eNyxEx0-(-&*TBTluucw-xMY(S^ z&%Xtk1lKBq9K4luW<^&v=xdA~g(_ZuTo_mgt3vdMa8S0HbLq|_cFIQb^GuYDor;&f zDZXLgNX;+WE(~5*d5?KD>{=HmI%vOY%tEEL4#B?DuSVD^UNwlpBFbf9lE6KqyCvh(#kxJuu}HgHa|h*Khs1}A`yQ(A z)hRi=qcNI(OpF>(9|2AxejfR%yEIr^8N-G?&F_f5%8XGKD=u9c_DnPgQ9z|(>9HwJ zWtZz`_>Bwisr&S7bDGwcK3FE?{d0qHX7*FO4by2bre!A+R3@n~DiHaBPK5|!MNf62 zXy4&+sw&DP79bl-4!J4k9SMGZDC7{@nrQ)Iu8*{4C`cp|4h5rLeHdIC7sA2|i|A|j zxVFHUYUydY!xxkwC>REHuJ*Wm8eh>Y%vuaKNxJc9_w1ujuutAC4f+Lug{Ao<{=zFEpukJN5b7W@`w-_h5E?x%7&Uqrg;Zx^H3aYS5+ur> z8l)XcC>l@)K8qpp@AN#8aBonLDp`2$%HBW%Mv15Vb(p2TPb$Nmzeft%W>}m&acrRQ z)tx>N95f-GR#Ab({S<4sj}MFJkG7y43OzHuzymel%RuuM7(ER(e8Tz^aZ6dAbMc=J z_~zXuPBp>wHc~Fj=KCqqE@$irz`JNS57Sg;hd(Ac^lfaWb22LAs6Tm#oY-zu*IigYOs}Cx@@c*7RJ?0pRuP(n~pgBO)(yKTIxC&^g0T=z~}|u3RsRPre{~TxzB#V zYm_koSrbvnJb$O6W7OiCYPp0Oq4p6lBK~FR@H{J(I3b_gknouWY?#==`-UoLJ=GKFj8ky=EE5)? z-gdOmVvtya0v;hIC(%<5J5QicV|MM%2Ju`*=yt1jASJxLM)I&dc6Fb>M*t&*2FL&E zrd(R4ZE)VlZ$0pc+2NGGow|xze0cvfkA}VNDa=9z8x&l-Q1ZC84i9p1D&+PRG4nJ3 z1Vp_m2WJs3KN^+ch+7spq%|k>_&DxQl_OS?7IvZbjFvGasjQxc9{74GF}ab&!JOPU zd8M}bQ1sLt0ra++dF~vNjaz7GkLl={7B+Ov`kuJ;zu~fsKuLl>5V4wXsa`_FmDSP25`a^LhU66j!l6agb-_7j6w zozTZ_`waHJbuPW4^Ib^TEPmn6@}YBz6;JVcJVkuJJk%6X_q7^FH#O#fc`79lA@2O3 z6VC=7#I9-T2Jd92#-vnmrhnN|mv%sIaF1{TN*I=ooMbcni1BTm- z2Pw6Xivj`Wa9e|4aI%1lu?`N~snWk?(CLe~PpS{f3md z_8vB$sOCLs`=(3TW%9cLZ~oHNW(FZJ_=<%`c-b>& z4+FfpIx@gspowOjwpRGr3c0wpXWgipAy$|=P_4SXTE?v>mB?=oy$0Yuu(;m(JgE4Z z1dqG`pKr`{qI1Cf;jQK+tTw+hHt+MCS3dTq;nqfn5jz4`XSP0guHtr$OL9qOmE+kP zSxD}>J1I2PSK6_AqOLpq`htXUb}KE;!>^)PKZ!c3*`2NgPwLTh%W*G~og3{k`YlYH zXT^dJ?31ZlqwitFB}1nW(mW0fcE>+$9N5orOz&M3$Ia@QtLpJ5M5!V$+dt|6e_dmw zBkVV_bduR5+$$P$Lh?rVL(&y@4qc@Jf{|q7+g93V$BS~GmuKU)>QYg6jH2?UM6q$Q z0+VrzAAllKYn^JatiLi(*sIP^DXQK@go3UHna##9Y`A$*CixVMoK`XY?Q5GO0{I~C zP`ixTw_a2FsDxLY{lz_rrtX84g(l9ytlBT5UtdzJLqUov@vUebtXqaAV z>4L@Adv@&A;;Ard+BUY&&6kTjb#s%#*KBaQ@o~SyQe&dm?L_!_l7PjP?QY@;t9*TO z7t?CJRDsL9?^au$h``5G2}8ed0wky#j~XS3#oP_`*IGgCz4HU22%y%!+jON6Y!E78 zpoqS&v@KvXR>2c|&~nr3Sf21G&$?}!o~hdGA(wn{kT;7Y8x0`bzAXlUc4V$%JCBA1 z0d)(_x8WUamegyeRaYDE6oWwzYh_uf9_pP9P%mE~+NC(D#g<3L)M#2T9%{h`=_q=Z zTs#8`=d%f$F6%PZ1xB8arRGI=PjwE>1^s1W}_UA8B9r|xV| zBw7aj&tLGtqlDQ?k>Hh`h=g5sNknCR+<3s1_<_4GfoX>bKc|?C44IGmmPT;@i&vuD zCe1-kqJgG9WH(YyuhfRh^b>YM-c->o&S{9=`>XDi+ zZ$IWuhJzeQTy51~(47&t>?b)*y3ehDMmKLkfJVw2gY&vj&o6{R^7dCKlNZA4$ zAyD1~KLLKy0jIgRQi<%Yl+1D_>FI9eH}l)`6sh?&Q;LVneT)IiGR~3{IW89O+@%_n zo5+{ejBX=jlvA2&cNixU#^;WPQ}Z3+R`+W@&(XPqj?%z~oL|pXjw<5xj0~a-66Czb zfAK}?Gpf)}72N03@dN%|hE!Y55H+_8BdR7?uVZqS?0V>m_&?KTt;iQ_`@_!gsRq+LH85JW?KZ``MOKOE5g65o zfGY0F(J^#N(#tlEHzMTH5yc64XgKb@ea%(e#i@qNET?U6fs~6aLVGoFfg!}W*tPl0 zygeH;Id-3T9FiyD%SED3V!tAV-dAg=7OC}|nQn5`JveR}xh)K2#j%Xh9B_24%^s8p z9G{b6_8y^TA$RT43VER@HD+PIXHCYd6Etu6pWG-5KeKBnyZJ-_|0%6He0Z9j`eGti zcf?T+{_BZ9rW1-hp}Dt079-b(%zP7lSd!xe+Ji>ccQk3-idaVvAh2}vIs9uLG(R+W zQ8+E-f+7R~h3A*is#mBHRmq1}8)yJ-sj?9#?^NN?fi=YyGU@DRBIk%_okR@iIMgQ8cJq@I;>28#)ES{MNo9McuU~v+ z%gjrHQ(jhB=W}?E)vea_#wko+g$?nRY!VF*+h>(SP2bY0L}Rd4`Npa4TvgbFYjrpE zNdo(tT^o&6U?o30S@$*usrRXkfm4p55vk=PmJ+3KE_Rw7l+X4rn3Ch?onMwg3PY9{ zCagBjbhy*UV5olF-y}V+H)UJ8UU`FoCi{6_e1SOrD>$kIS^ux)T~5Hmbgx+OLsGe0 z^#wR7m;mhuFo19Xn!$Y&xBfO2?00;N^%a*rnPC+TGUNfQtNWQ*UY^Ivp;J8cYj zj2|cg{`Su2^e-s?NL*q4NeH+@`D<~76Ug8Fsb=D$X9nz)-;9f_fV&Rh|JeX<;IE`_ z0l-tOy4=-VHqW4q(~f0id%|L%9=1ezS~#r|EixSQ8`x3cKFXu-kQ|0G&)GX0AN@B=U~?+L|(TNGtvW>c12vW}q4Y2H|f5G=Z6} zfKbTH{7ujPJ=Q;BH<2qgK(b$@5{{(Z>)NJwYjR7S;WtDdGQo=L0J& zx&D6VGym$&XZ!n(LQbF=;a=!0ck{#Vl+$m}?*=#n!TbLk`ybXTwx8-1(_ib=J^Ccz z7yn70#J2$S$>S!I8$!kw1_k=puqd8q+^_8L^Uui4v=+QJ#~&ioy?fJBwHdoz^F#gcyHwc`1#IileoOp;a4x) zqtlm!X~rB~b}9%I8~!J~#bBw+GUOtBx988!mr_a2Gj1QRoE+V)jXP0K3eqN0BM#h> zWFNk`@b>8Lx%ODm+W&~({GQebd*<3>cEThr5bcYbU{$z>>&>m(khL)*aZ^^4@QPPk z+eM+nu}~ca55>?$(^q5cuZt@@L8#A{R~AtHakwdzX<;}!3?Jih>SEu@z9OxHV~f__ z<`BA_)N>XP(WYGTfm3;6N0f&GB`1om*%oZgu+O_TQ?mfi-9;b8!{O=?t^;{(!?DA- z=1}Y!N_09t>!YfV9e3Ko=!$9%zm1h*JXMVV=iWA1qR+rMEHMj-Y0tnmY|cTY2#x8+ zyhLdfU{oN#EplU&Ko{0R$?C(s|1@mrV^dYvvWo{QV{2nqn+V^N4<&~18E?l#( zWOLl1K4X+9Orq+R`E5-=zBUi*ny_@7c%NmSgcSa)xuG|GAN4F8S)#ao;n{YY%LGzW zdS>Ip$VSZ~om(!vm3DHYt|RapH{n|j{}<(R8Sg&^-9DSt7!xBgNL26mbPOlj|6u*I z&mM28FBW(%lt1XKl7P|4V`ltJwRB>QeJBp7off91;rxKT86N9cDCX-z?1$nlRjMh| z8PC+dzRcCeEe)d}3~<|*WGFpYv+?AYX9h~Rw<-Qs$Oy$`d zQ@t~6KA5bqTtP9i<^Yo+dD-kgYFC%&%(olFVbt|NGp&6~br%s4yK#-;@+Jf^v2jiG za<#s#K>Mnn3o(b!hTR5yO$;G~=#$~LsWR?b^p=?qv|oO`GGOO%xM2Y~-Zze6*N+z7 zhE_|j)!PBf$HVh=MzDzKCWGb>a(vq%+1@IJ#OF7v&b8fbtddZs_Fx~C$UpVHSpc?v zO*=?==Rkfz;pn>n*R4u;%jAdP`O}qfuDg(hurz^?f~|Fcl3W9a_%i;T-^*T%i|j!f z(wEy2RaCQN14dFjimXWx?oUQ^|LWqLZ{JSHKYut%C@ z=orPi1qS%X=)~v_E>8$?BvVSG!KSJ;K}q!93)y8!ea&2yfV}l$^y>Uaq5%W@{W?hlR;ei6Sc)1~u6?klW#EnYN&nD}B%V`h4xI;*qPaonNoRf92p56r5#p5 zMnh0uEQUdzPdWsckdf?XKNGoE?BI4ir=GnqVaH$1_G}M>9Uu$4js{;3 z5n>}ocw<51|F@~Baf2g)^fo+?s(j5$Y` zmWN8MK8|%mPVc(>uv$G@b}k}7b~)pNqx{%~>UlhT-)m0qhIka-GhuVTe5FRC&Tt<^ zyLs}?t>>7ZT|t~7qHz-i=sNW2wnteR_8Ejwt_X;%iNd`aFatpP>Jgd-OD6)y&_-hw z^{32xU(d<8Gnb`4;j?~-tj;MM49ehKoGhv0OEDgvi|V_?ZfTWA1&wbE;rzOU^3uJ% zTr`O(ub%{g_ag4x%ZI({vclfY7@LcLhRHY)jXctXq!bFhAW(KX4a>1dI9 zh!V7J9z+%L^>g0v~p*IA%;G)>;#Z zrXlr%Zk$vs`OLoSVn&?X;9VE%>f^jb| z@pmt%OR*+8(1KYRr7M#6G08B^n6HW46mRq}-pND4j?*LQsa=9!55|UTbobO&M@JSs zU|jv0A0X++?crqIcOt7*i|3|nsX1{45f_J-P^OwSp(Rhn4mYSmkHc)H-&s3+UWX=B zo{j0g!>nS320KyWO!_MDWl)f2xmp(*t3tO#K%=%| zio!di6aCw+ss~8yN}bORBc|I63=lrFtgD|Mlg`Q#x6iK!w0dTYCcn|bUiX|5vHN09 zSQ3vFFJBPyS^bqnKt&9vcGSrgeQu2(y@g$RR29W9bG z4KO1TOqTw`6uH8~nl$h0;>R6TBuVQ@z!9x5`=tXaZ8Bl`$;g%vWFMGbsAn)66s2)E z>c8$E0~c7ao{xlIFOoxdp^}xCnnpsee9-L|SDimx16{hLtVl)$W~}CCob;xXuS@Ic zk@HT^<*^sBDa&qZ1Ouumm^l?z&Tfv7WU8bZRV~Y$CL>E5Uv8T+#@E{ElMRK^y16GZ zyVabQ1w`sS4PNrlx^1N}2yvF#aQPWEv(K=6KdmN~6}@Ss&El1W&?t;3N+ykdE0wMn zy-<>k?x7?6R`gl<1}MrYCR*GMom+Y2Q1pCCOPq%Ne96F*VF?dMRGA9%Q^-g4Mr-Ga zb4=kHqW%#hrSH@}*je=^%3yT`ji!W<(1kgOJil~@bb+RO^Ai0zbd(|7JA0FlhL#SD zm|YFZjgBehTG-5*%83nYjgz9!Vo&5HQXQ{la33i#5^Gsl+H5NnQEgX^%xXte^~^4h z75d5HrA8ifpBzM31;@*Ry1I)iM)%qVIpK-8og1rI7NzQMXWUOMU>gdd>t;(gqj6VB0VLg9F15pKTL{*;cx8fC8h;J7lJIMUyX-X#OI66;?`^n($!il@k^N!U6SRqdM2Y>dtP7{8~t~ zG+c}iH>X{_G(xpYC7BRv-!oqD3_!bR&?zV(+|;`pw%ECq7`ot|$3_U`Jk7g3)o8QN zQt&85%3d{0+!vmVM6QBU6U6{@zsr^Yn&Jk-;F>Rfv;CMhwWUVD*Q__Uk5k zN{omJX5;kC;T=i@<-*3`uO9E^()iAW6{^G`qPM)78m+xhFnhII}Z9FNEm_h^YGA{o{e4$VT!9}&LEfOBwb z`7~^Yt!hv~BgqwV4x%fvMIzEheSJ?b779()l|v<3p4(BwBevUbr}xA~k&>@|d z7N{X}Ym{0wnXfMjvcBX}eDB!RuhzgF+q>>dPY^yx)96ZVzYsXhbnx-O_$YK!!Q(t` zWO>=|BRZ4S@yrwE=iVdr-A|)cn!AG%=^%+jT$`)6pL@Tb$RR$aGWe?Iti^^11` zab1q9j_h><>kLHxYfA8D_Uj&H#B{OSJeE_2#3-*GP}!X#6`4ygSyx=sbz)4(LS*n} zY^m<`y)_M)COZKeW?*C+K}re0t zaPfjZs1Sv`*DK^@XHey3WeSMIlQMy1=P3^du8-VNLUU(wxo@jU7e+drKd9zy!&`<2 zp1oywpHbJXFIT22U0+aOONLu1b^~R!jNPh1>McZZUXK9AVA`wNl;b6mv|4%VWVV8+ zB{o_>zc=0*E<4^?d-=y;u9&tE5dvzW2jOEx@oPg9myRY7Lv zbuz$AGs`wDaph;L+|1W*PYgXPIc4gWrsqp1nCN~#w`Q}uKAa^%OZX-!t5|hPoZuya z`7$aJ8anS=VnQG>7FOMfrk@<$sH11TK2JY<*IdjDWj405W6YvVtV+*-eW}0T(K;3h=4;dYR>R8ORGQ)+xPoL#en*~8OXR}QMOIq}t}2V~Uy4H4R=4DRY# zf4FK7*R0#~cXM;y9wqs4)a5yIsahVQ>0X_cLFM?l=4D<*L*Wv664;_l=`XSDXZ#BCvY_PjD1M2EPN4htS@Mm|==s+L|)r>vA-ayI$J zn;P3n5{jOtI3=xVbJdUQ1}7oekD5kwmc{}hT6e2PbhLn*8ThGC80G^e*&dKK5h|+P zDy*%~l)%*76|)y8g>T1u%go=}CshgU7^z+--R}3rn*;`>i1ErlchjrRu=-l7+WL{K zGeDTo0w*r@Hn;ICIu=}QzEp=;l82^H@rLBpV8R=)#ePL&v;9P4|3r4`$N{wHZ+w)T z-)PEvB)K19zN3-vd@pxe0sFTH_#I@x#q-x=@f)px?I(%#mwtg?Y6ZZutb2pZ#0Ct( z1ekX~nFD58GT+T3yt6AZ0iLZtgv`bYP_4l4{mE#@{uk!^&iH9zNx%^7cl<|2mT*h;N7UdyFskqHvQf0h5P+*(Z9#{H>a5WCl36V@%_yy{ueI% zhXeFZpamfRaDd(m`Hu{s?96}HvjIo!{dwjDf~6{sQma+oWe=Z)9X;Wc`n~h~;037c<}-1Fk0)Ky3qVR#sr8-j4_P z9b}+co&&_P^AwUqJpIVtqG9BZr@Z3>ZW2J-jS;Zp=ILDAOHoHegHKf6)IP z@m=2j=TO|u75K%W_)GEn1!5Z~$GcPUYsmjnyuKU9fb0BD&}3!=q&ooeH~hbY%>2zh z_g}~?ce8-UgD~I9+Qt5Vu3dn& z`CiC(`YappY49B~EAT%SAlCOn{-e8<0;2c} z)l=BW!SNX&;r{LO1bD<>0{uys{bl(Sl9f>sQTy4J%X#O7zwcb$p#*Bc56nM01n$NB zXF2{!bOp5Fdtv;@G1Hy7{=Yf?4(k6c$A76y|1mV*pX0w4q;^%oznX5 z06l#06?$lKC~`Jb4{UW$tDHq<{nT?uGNt~&Fy=*YG?i#1-8CtB>2=hh&N4knSdN%n z4rGBDMGTp3w-&8WHy<*{`K6)ykjY#Pk&d^Urvk>@sh79-G9G^`UD!gZ&Wq8HACEV% z=cYWPF;5n{kBXx{!qK`rdpz45EN>-_%HVtS^)c_K!l_ovb;2v81b$$bHQG zyqBNhtAIgVp5CsuHxbcsX`@KUa^n;c0iZY8yhK|Zwx9P@nHn@Y@cZL$61Hu02nm{# z({2}d;K)thUbN`+eSVIFEVK54ACF+)Q~;qBAb>;10bGEI0l#S#^F{uv(;S{QuXOCMkH=k=WKUy?V zIanvoF|(|osVt`cWJYSA5jmA+EDZZz3D(^gUbnM0hH;OHnGp2v=8|`qXZKB$m6W#jkg@el~NL2WPI1 z^BCLNiJa;zSzycB!AeqjU}!3JU3cOPo}&75F7}{Z@Cw|=5GG8*@=^^_A}_S8_irH8 z?XM2d1z+ea8Nmk-t?+SqNZf4LRCQw}Z-!?R>bN08JZOH5r2mN0;@MZQ<})~LicgI` zGY+n=+(mabYw2Azu$lvqO+HZDlFo4Y z>}$q96rNpu0)6F+-c!*W{W_lsQ81Rr`C-A*m4Z|Y;?=T@t$AC2-la+5l{2T?o;n9O z>JwThm8Rmy^^x9ldN|I~X`tLOprK_`(-5qVn~ z6pSV76N_mu5F$Ep5Ry9Ta}L}0WX<-j!;ZTR?MD%i;8#-HorX|eFvoy<4TLKjV|l|T z`u&t~|DZ+=_(pFKcb5L_gI2Hdu4gQh9f5?oNn_D677uWCiLtHMU$%h0VX4{o=?Py_ zBg3kYIEZ(Ug?>!IqDz@K4jn)5$bc)}9T_od)g%24RZ+R-^dT>Z8HsH{fU3L0mq zP*!&JsGW*m41`^%`^lqQx{VV?)QBSuVaU(Y58kRbJ7dH85Rm2|hM_%0*M7kIp)n zxQ{3K14{hnevlb=j9?N8nsL!;S!S)IP6Ta{zzX!I2c#}!$n0Gy{w`S`ETgHCndxJWYh3)HQmYfcR4{&Ecx(7U;bW9IugNEPwTqe z&*`_>PYs4BJbVq>LLgp9_IT!N*0!on7JM&Arw7bp&^H-+ zGOAbOG!F_Ua73DQ-=h?D*$nnjdl%xp$zV`d0p?B@!gGz$WGGvd&Ve#<7HB;jiV;p2 z|JKq}<7{XltK~3h0YUZDb0a<^)36YZQ~fi6{mmdlMK`o3HjKCxEPXcAlAwIa@sE3V z^;+$t!n3K7c4Nrary6*%6MRWP>Iv2!#XziKs#dWu_|3ws7{06Vc}elyHayzFsEz=S z+q~V9XP9-dq=eHMMGG{XO7_`@jkJpK2F{>hWTO{u_kPr`zC zy##~lo#|!<@A4wd7-F1{Aa5zgS3Sp2kg-(89v>0KwFLQ$rsmsrFi{UmZ;I1+^HTc& z;`WHMTd^iPHS<+Q9IZZ!04g`XFMP)Q`Z^CK9 za=+}R6SVN(Y_{0kE!xYjZ){&<&Ih($XPZ=?JRUJI*Qy?9$eXM6`~dTsx1o^znHVv! zepoUu>CtC=*f{;+P5dH7{KVrLYd^C@sWGg+I;v$UGELWVXBp$$KIjuFcxk?Z7ztJq z=uG$ozRuCGX%C&et_NVy4U2wumMK>I!mS-EkCN*<(^%yQ(y&kVaWg(22lo;mthr_3 zh{R`@U$FPRtyeN%K%Yey7QAI=mw!-W>Anc{X~EMj(4)eLFP2W_YXve`K-6d?Qxc0I zS}o{?P|P^%yk|);-sYIu>uKje1}~twX}%j3F5!}Dj63Ocw-ibe7YjdJi8Ae{En-hW!=WG+pT zTzOcW5CWyE^ziid5p0rURdYAYWkG8TdGOr&1p-f3Tnd&0H4WW@J$v)4 zS8U-?@jmXWvP$2UERqV4E{wA4DPO0GLzpgMLl*_&Mjk6TDo6FDyr5!HxOl8?y<0OZ z#1bAU;Yd&_g$GNZCB+M;nIC~u6u$YA<@HD4GC#$i*G=&-HUr5xVA+;2*^!AnTn!Ld znS(+=VuPc%ouevb*pXT*))=802zaSkJ_of){6P_-Z;mbc!KOl}YoYc+!ORVLA(7{f}2Y%0XK<#Hk%WB2&1H;VSECoV9JosV##Yj9bc86GGoISb$d2C_r+)m z40nz5AXtccrxw>TsZ+Yp71D{rmy&;N(QHwK=)URT9Ie#>CG*|e+lYBmmsUmo@FEGq*}^dq0{8SF0btjx-C5dLn9B9dv0eo0;w^M8SNRh~Auj)UXWRKmZa^ z$M?E%eB0DN!T{89Iw#?2Fxxpfe zVc6v_)OXsLL%FIW(RbQ}(1n%{h+5}hZF8DLe~a*S#xSAD8G2vurM-;+$}?fZQx)PC znAeTc$bPfLN*WNcBK%5wiIfy+bWg0jV)^_%jLfG=`*DvZ^WW^!i=Uk!K4AF}YFWYZ zI4M|!Szwmr!_MS3%8BD1k9z5ctByEk>lu#Nj{MxkSh+0oo2K9liQ}MvO;q@-m0>j_Nt@a^SJ@! zO9Nkqv>qqy>9DVT1r<>-H~5Wq$@(w!?++H}hsBN=XoLqi>-#NsKqo&ykNlUL{EZQi z<1Ym8f4Gc4nI^}1M}OVR0Rb2RpVEI!fh@q_Gmd{j{AVQ4w;@^oU9QLpxMl9e@q+{c zhI#>ODSz;M-$DJqaX^3JbpI2#dpRJ0fw~vxj|{T`YTli>=6i7H!hS}Kvo8Rw{eiybs;&D0u zw><9MQp@|I^&`KmcXR0gXU+Hg0!uFeHvD%$f6DJ~+7CGYgveF=h3)T71HKRO9Y){{ z{(<;Me(y*8XZih!#s!$-dvW~8FDsxNvornY75P0)Olmf&%B?rv`K04S&5iYv0{@cOZVG?0yhG9Wp@d z{w0dPl!;$SShhy?-+Ki9A#4JzEBE64-hIK$1*pb9nlD)HR?7a~vHkb5_B*`)q7vSN z_h0G>)7|{uySF-yLMHSH zi1ty|;fReBt;J<6yaltABPU+o}4K6!ozXiznbFDTD+!$MG!Oyq90DKCNET zIVfyhefb1pafRg23G&5**S0KU^}MNg)-6dOd<0yJYhCeL>J7%2-{%C)=G$Iil1Au*X5rp^EpGBxvE7oUx8Ecv}Ohy?V@xLM|)7AiKc-KgM5{w^@J@Hz1ChaZ6-nBML zzL_BM;&Tz{)J#I#oGpq-8Ajw3HjAfrQKHticmgesChcyPR$2z)e|wn;xN%3;;_7< z%KSOM#F4oClECiea3RtWdkKKUyYV) zA&eNSX?1{uOOeuqQeC}}TJ#a#Mu9ZoFBbEQ!4=!AH!F7?g1eEd8EoCeQSUeI;d%6= z&_}&^=dI-n9GV`~7O3<&lSHa;;};kBthQmIr<3+qOQJo+1l0Dl**aq^J50+4M)~az zqY9{uWzPCc>c6NWv0cyFj$K=f&_MjVrHfFeng(iezr zv3JEI?ll{$?O1~~r$=m_BmIbc2>m3p^|SmMk#dY2G%gp(^C4TJ^yp(T+Zr98_*STB zmtc~3>1ZcgxJXUCo?_EvJ}FnJ@Vw8csI;9sMZO$VJlu3uqi<82AjLG8UgxDmK# zd$M4)`chl%F(9=U-)@6#+d^ib8^wM>Jbzx!wiM1gV6=Dq zsyiIsUAP@xZdO5=-SY(pU(v&vR9JMXPK2=RlRZ_mpgNh{*^R6hd`;3z&aPCA?YOSG zwuDE^iqpOPiaRL5roInFNf4M4R!SGFHc%H>=850!qP=`~Zs<8c-U(liWg4VV&5z$C zkF3!pPxWB}RnwPT#yy!OHTHsB`IZqHF@(4c$580znrEIv5t@)hn!YowI1`L6blG&TD?RJGLde-~ zB=KaB6x=KlH7$?(;yofa6Op(uEI;+dqptvux7YzIOIP{$f{Xt3q*<+QC;k~m&8VtR zU_H_lQpqbtEMHocr&X^*rrk(ZMB}k@@HF{tKMMx>vHKa31z@r;kQovqP?wzV$kuX> zwBWj~M>Rit8#V{44*Jk1z9PUO5tcZfooeQwhMii2l630XOgDUKDM7TdNcD#|8ma2A z8b>%a31f)PiAStx_NK4Nl&{}xxFOWsgyF~+)Cv(DL$n2jnYc{4M`jWt^LD%uWp$DK zsst&8Ef^=5Y#bdCkk|^=kG~W~j=Opte(kM*(g?>bB=97VHD<_m(KkGj z6MndR2ErhIiF~Gby(*K_w&9WfCO-#B3jSg2dh|u^x*4nqefkU}@642(SO8U0U=~5Y z(*+g0#PSSrgR6G%W+N_HZVnuMSCtcD3ActaC3y82_f;QlIBi3=-jLl~>9ELG1F1GE zYy&mR8Nw-)z7+lb!Om%l&UCVksAoPHF~fO_ zW1!JL+a4s8E;rC)WW6W~>DR~Gi#5xUE4pjgv*tG`xS|HGN}sNTRPH}Q1&LR^h8O#i zvE7xwCxSBUF_^d9r@-TQZAPdDTaTk;<*kJE6?^H-ozLr&bS>Ja{n8#{e%F+aZ1^kN z#JPj?3Vjd6mIK3U^dd8^u^#8V?A0FnqO)jc-JQJ2c$Ji|PBEnd7V_)}n+y4I`XRHQ zIZP|%aa$ZD4HuF=S+_45cAWPlf?gLk(XyTg*HLnSG${ z()++XK-SWRcD7k-&)RS^{4k^9Noc1=^ZK%KL4C=R*|Ib40ZvTB4aYqRGC@lFi8Idf za$*rWW%Y1}sR8b^8Py^b;*PT6V70{+>PLR5FtR>Ifv+?5+Ai^U-VAsq)(F#hU1xG+ z_o&w? z`15P4=!pjcWGC4AP=dR$O)RLON@){_8W?seR&!QI!97o>c&}Wd|XzEl~JqAOb&TDRY$=+=AbT8 zz~~YlX6p1<q`S~LCKj{YkOzU0QV2 z`@WEsp2+HE=#KPCD?K}6S96K_HAX}B%2iTAwpL*&k#AWcK7%!d zP5WJmu4YAjlW}cKk)pW@mWM!U3xx)s=*}Uevfkb+Yb#4EqNkSfuPRDo_mw+U%D^|Y z6{#L#r$*ZD8th)gE^txes)Z85qv|r3Cp;c1YYd+>C`3|wr9tjYQA>LTjU&joIK%GS zcOy|>VjX*+A`*uDTra77T3(^ZJU7m1;qDOW!>42>itTWQCfqJD zPBGh#r6+XioPaZ|avO5PRJMl=`ksc0q<;8VaWZikW*|uO3OB%VKZod` z)Ys)UN%5Gz8`(5A#zAz!WvrARjhUzZ%|{b9J=H@OGxeFAT1nc`Ye@PfETf`2mccc5 zu8=jZtw2R)s)oWEfj&+;KgLc(R$Prtw1I*d`;&1Kjg-=J+FB#Nl>_HY5SXao<0qie za-?1RpH#NLLWQ zNGm5aUJO(MeNlQvELu(Yef66EXN1szh#8eJ_V-VDnoHk9#RLSJKW_)QfC;j1RK()P zB;h&hwYKVdR7reDY^&0R*u>M5S;N*+jJVl7)ql``?NawO^L^~`LbIA*rSv&RjlkPx zIq0(V72^EcX5?(lDR#5AWVe*> zgq-c@te2XO=TXxL3 zK@{wS8;EZ_nQ1(9MZod28%Q-V&4+4wnj7EHPa4JGF#9MX+~Y2f%Ht`qY{6yGqC|O2 zL2qtZB!(3)?TR31LsyHDQqvrXE)qltA~w^o;$C?jCmFMBeDN8N58_$C zFy@tx4z0s7&WeApySX%b5u@c=R|RRiw-Du+)mdeV=jmvXy1de4zqgQD)e~Cu<;A7W zDWC3|dV^$H7gEERm{fk`1-i_TTKy7YaZMFTF7BwJ7;odblfu5gU4-An zyP<@Koq~kbR@zh`h=cqUF1MxfjdKYu*u}gOl=LcY>?dV(*x8#)?kg7^&Bkjx1;&H@ zy2PLA@hLVul#4a4nu;#P;-*(VD8`mHpt_o`*k4?9&>eglIPE=JuSKE@#(vmKrFTgz ziYQYJ7L^eLYJnin(k8lg@TAphZLYh9Z%DJp^qgZ?#OuYwsp_(w$MDP_-HyinOLWHI zg(=5U7eZE`n4VfAMwPx0D0Q=>J&yVMKG|#-IhLh*`POS_$l3M%P>yP`F8B51O_p6f z3-`No*DJq?1E%cmT;bBpv4=E_s_vWrA8Fqm&-MPkZxbS$>^(Ezwv_B-@9Yt>W$(RL zBr|)35Xwk)vLidPBO@cS$?x^XIjQ3S)^-otV2;8Xo3van6V9#jWO(zLM zfIr;n=NZg=tvEQI`p)E&GRNae#%7*XzxWV>Z&u}gJ_eQdVbOIeHcS^xt(o^>CO&Vw-uNM1CKTW-MvdwijbP9 z|KDr?K;T>m_#YOO7d+~4Ore~Bhuqq`RE*EC0soM-mu{hgX_<>+d}@ct2|xxm^DzU{ z78gUl6i3GU`&L07u;b@NAh>{GCBP09n5_ifGk6{k7`Xy^=9lIcA-(7`4gUYFCkl|U z7Xk)P)Scoz-NpDfyq9>-8Am`>K z+Rj|8XWIM!V~GFK+ds|;5HR2l-hT%4`N7!1JPO3wFks2!8P10j?6C?w+wU{NfDbT> zu$849Fv4g{2gYk_r)Otx``@u(z>@RAXo3-e$CgjzIkX;MM;_g`a>0(g}K5p#R6W|CfUG4`g7@4VV?@0B(KoDD&|H zKuTD^Tl~!XXFqqqjf?eZ1w1&or%SNQ-J#~)rlQooq#z#@bXje1TF|LLJzY+gU10_xStoxGqf}~ zmWs;4!lH`*F%3R`)C*3~DLO6?z>|})f!(f;jSD~!rx<}t>r66ooxAgvi}g%>0)rD( zP>@vsR-mc~-IEm25mFFWmKK%y5AzIu(2FkmQ>=jbH}F*mUf>GY2D2X{zg#5Qz^@AU z(LZiZwll@)7g!ltU|XxQoSdwJ(tjO7j)U;`sB!>9p}-w~vg#6STFwdij{hyJoM5l= zbC8~?NxzUv$|x#}iAf4e0wL9r7L}G&Q2);v`b$YVjV$n;0(LYxnXqO*Mh`Kvzu^VG z3D3oQrY8NuD=aH5tt=xcd?G;*6Oz2AtneRm1MtN5C2|4q=m+NMPxJN|K19Ia|KYzE z6bE>T`#AwVQ=@(XmJm`9Q58}U)q#ZdEYEz7{^%sSY=GSgpdkDw8;+4*4lFw`5Pcrl zGd1cLSYcTO1!cM8mBS*UN}|H&W$#}~)G1zI*);f=@d94wK!m~IA;JZx*T1oaa3`>x zDNw)QDk{k;2#G@sEze&{)hSfYV?z)&V5d1)Gyw*FIjDgB^SP1zqfVV%U*IWmozw9C zdBBcK^j|Loz@OrHU&txWW7H6V{+6#?V51A*NB_LK&eW)1F+B!)dfEO5=%uO^8{jhz z7E=MgH-RNd$FLy+{q1`SIEv>2{i9l)MD&i3h>oI?kkWrnKQQ`#iPH~Omwz@q|O@{dt+0y__Yjl(CAg@_V-GXFhDY~V2b_ocI+saN0+6N5+2 z)^=7p=l$vgw(9uz7QH|L!^3v0{rolH-US|Tuf#ZBaqJdjX`V=iRI6zv@PtQ_CApd= z+})P6HzF{WE-Cy*9@T9BcH|yQbu|?AT`Kc-n9t*y<{>au_4+0I-%uu>a6i!MES2o? z*jxA_t!4Zq$*sLM<*io#=JX0FEgpKu!53Qxt?J3G6ykJs`W z9Jw5}Z@V3^Na}xZqfuN4_M+CC+$Cq+7%KKS^6t{9b8-E?H_(RoLBWB|^$=NOFN}kr z@kskxX(<2BUiVkF>Y~Z;Z;67`dwr=ob$fh!I~zMZMDB*Qw|*j4?{qAwu1@yFv$CY@S$e=uXEy4Q$sa&|?>li2g@) zgn^V>9XmWe{>6e*t9+@`)5d9llXwIUr<-aC>a9+rnHjI^;}P(OA0$-2JZ)L)s@NmU z;S4chj6tUF#dCfd>6|w1i5^M*(dmo&>>WBxmN0FR!oV~Wk#&kJ!)wm950z3MMihB> z?W&E?pqkRI(0SF`<(PGM9YZQPU?}0_OGFu9pdRW zHv{$?rKE3;Oqr0zRl+k1vG9yf%won(ve-%U?8n|pyOBKiz}xMOI0!vr3g1u$g(`mX z8}1EgcjnN&x!Y{t93K1j#sud*aU7;aP*gRZc=WdDrQ?gz@$mXMq_3!BYW4bAMPGVw zR666*o~Q)bGKk$vf(^}SEmVH0I-DgYS?$fg<8@u+DoWCDYtaVpIzLMpUtkiG!SEjP z{af|om4QxqFcnuGly{c#gPNL&MxBzGt;!@tr8qK)#Hw*-+!a? z?4W*z7)|RlHcmAR*R==VoMbZdP3LoOwR0Tg;j;;?i8C3f@{S`EO{uNZ7vPy+F{i`Z zp<~BR5J<=C8LgdiZ5w*=E%HW?n_ci;OGScy+JA5W2gKB(qLJM3f)5yy>?K zsnc^cB0OFdJNWcqePaEN=C+ogZokBPe8*2ht!wM7K{$5=?^$M$^j;xT!CGj- z(23JtObXnyx6?L$&{ezi81s1yVQiET!yNpJq&KaW-?vHUbM6teqtUDOXB>%8C&(_o zcj&?6P^iyJmTUe3JIC{it%aBs>Hd4!3h{6g3jb7_R(0nZ*RN7DMD!CT>JQ>{t6191 zNqzaMy65r4>{#&Zs^I!cYsK;6Hv5{MMu_l~<42n+Rb zMk{E15Z0UjW{>ztHpzUhW9-Z|A&6ND$ehM~{&g7~;;fe0OU4LClM@9)I z%H<08N5$b#}5p(HK4zkw)>i zhQL3QDHbW06)-mY_QMq5QzWy9X7!QpU!g*F_kN~%=aa(~V>;`*tw_&wGp+D5X;zyj zZAZ6FvhXDOypW`|ZtA+oR2fzTA|$xPdUe+f55qpv{HS^zldJ?oeDS$sg8_QV=;Fji z4}Jqv{DAA5`U5_#P8JmZ`q+ZK^^hVGY)}U}s=i$>B1ZF%)LSui=!Z)Wy$TK1E_+m%Z(`Y8F`m3FX7(Lv*pcow@B5x86KL#8`9-2+7`p2|lUL#8Kq>T~ z`|6m2=_-3kSATqhEwNTbb0EX)6s!0&i(TSZ8<&OfNWHmqw%2<^l`bzXC!|n5CLBhN z0e=?i0LofsHuSrCeIcNosGIQeewx{Kl`^!f|Js}2@mSs@EWysCmj;428*>=k)`*#? z0=}0fX1L$wyvMe3JH3k%Rl%q0<3DSGMOAWqrV$&|nq?g7u3t%#fbWLQTAGs-Buavh&FN7Yp2+IJ& zWg+yaeldM905(00k_D57YglDlWm?=wf>}>t*D|c)YMZd}_6REl_-AW#qHEP1$?o^zt>2JWV0pXf?Mot6BP%i9L>+O^1Cmw-uop^_FZ_3R^BYfo5-UI)C}U^Ya3$j zMzzpYaLa$(E*PudJ$nCGQt8XsyDmE>uDm6;WR))CrGwiEr1I@0@f@szG52bPLq%2u z1U(8Yi~116mpY;!aFm8JEQwz;U7oelhat=@e@YwB!Vu|B_D#7oMEg@#%#b|&(jeL# z&OL8$RYKbid)a(S(ECkkA)kBB4(;h*q*Rm$RSFf;)ob*Y)OgFMuTh%H3s6kKXK)xs z`%9MRKT2${SCXThdzcf;$n;hZ`O5unKALD`xBcok7G*uC_42DRpyyxG7YpuE9aXD+ zJyKP2Cg9Y2Mtx6~E4_FLQJe?)*>jQj_j-il>Q}zq^2u!M4|Plq;EIS|u~s5|7{`;J zI^IX`q(&^B1w9zms3*kF7#t`ggHVZ=HR{U?^1ojYYL9I1AL2D_HymA5FV|O0o-?8h z(nea>MBPBjd6Uql;*?+-+sP?L&HKjirI8w;s(vyc?Hk8+k~du3HII$keM^G@`(BtO zR(e3)|M1q{5i27_V`-br722Y}h}oqZMK+l4<~+hg%`|FU2VKZ^S9Gvl*mSW+Er;KH zYAe(E`Vmk}YMOb;^tiIdqiOn=_zve#;mm)O3;dvfJQeSV{zcK}&Tky7GoeZT5! z6y*$83hd>_%tbk0Oy1L-Yn`|~j*N26rfQ}=XQYag+z)p9y4Cfy4>)&FmFsd-6eM$_5!Xq%-fr2PaTT<*6t8}OE_dQO%&i7CdzT~Pcf4E zW)p7Z^D^?OQ&XaR5kj*~M;LNgsPv)Z%%OswmY~o(FP0;;C4-=bvgr2kT%mzd#UYfaXt(ke6UTqRnWhhNAwb>NZ%dA(%=kv?4(T~21Xz!j*1^3Xg zEva%Y|2n3lHMNjV+VV`;!Z1owA#2bpv$3f|>~giIwrb1me8O?IYEP(hHg7+UltYAD z(rt)^ZONIj55DuHZ9#or>3xJNR*2TsbS0=)N&PWAjL*$eyV`v8gQT1TV`vow;cFk7 z)->J>dik=izM1@Pn=%>BS1#m|v@B!Gfe1w9J=y(eJ2?#ZqBcY2k%_)W|40opRIO4g zN?xAa&mu)nd8uU52uI%G3E9QM)f;gRtazi0T;Vb=??#Q+rOi$g!gm%JCz(iBF`m&= z&i8tbAXVgZ)z_}Npiu@RFy)@Kt@A5?kfvXue^mLP{2k+o3Mc`ZrO;80fc4jsbBY`Fs$*TTeQ{*vS}R)sPdW60Im* zZSZp_EiFr)Jw5Ks$2?GY@ekxKvUn98-kTGCowaQxB0y#^sCj%>Zb@| zS8{H)Io5{N+_>omAq1EB-7Bn%Auco`rH3P`|&y+$3RZT%rrilb9* zyM?l?uqfq|D}A#rG2hfqvaG~nfXbA4;e8+bHzUQ=NfO!ez>109M^A=uCv^n_7wWsO z4i)OdFxx1;AJ^I&jA__Z%aNvOM`j0}bPo4wVa|9tZO z&Sw*|`Oa%(Uksa&))8F??ZBUu@g3WR%M%vHz$u3tTmu28M!)`Nba?>^=$3soN&lGRoDuSn75q#lK z7X1B(*UCax2JP+PRfkV%h>f8z2FA|{VPR`zZB+_su=bU*BQZ>1mGd`VL?~UEe-mJ1 zW+q;v4OJ+SFfN0VirIJfku{ki5+n7~a^n}(x;|8CH%(nx@Cl)*eBG~7u&$5c&&SGZ zJ)JQDwQzKJ63uUET)DAKL!hfiZfLsgwA$;R|6x&?^9xl~kJ!s>JSmA0k)G}y=+37y z`V4f)dSMIoQ{Q8{$*z7~TMc)BUfbhVdSPtseKg)DU1=kzt5)==)M+o_Gs!bf`_Cmc z;q2v7h2l?J@iXfPm0_%J5vASDdNQLS=j35L52~|BW(ER}xCHF_K>ES-mFp%e$mX4FVx{`SNQiu|n zBuvrd+03Etx}nFv>Ned~uh_f8h+ugz{^onFWVX4PcJIjE1L48wg5_Q!a;G=V&*Idi zRN4}p=BQFpqTfAfmD=XzcJS=`nf=gvYj;ge0Zq*|mr*E!}Q9>0OLSC%=pQ`H+g+p2sWJMll+)RmkJgEKX zYFcG;>kk~!&5n|hscy?sWOCus@zDYp$=zo+q!7P)i#UC8@nqR>-TXS0c!LE_){^wO z#-eQ8q~6b+xS5~$wg-%s-xl?}SV(zoT3+&j#uV>Y%uvO4z}z0mnBOIS^DG9v!zI0Z z3vWX|HDeo4%F}-DAA3i}OtP;AJ9jv-!fzFu9QHPgaFA&wkpo1^C{a;oEZ~tP8~C%W zl*EO;Mc}13$Cc7Y3EYJtunI|raH0z@yz4*;p*csc5x{R}N~4&-yGd+=oH zMPNAqYgfQ%p9|>P0)#erRWLx6oj`{S_P3rm`}xg#_A|7|IbbiaP6k`tUj+GNz>y2w z&jp-v!IF(r_>cjEgYa)Z_k25TF7`9T2t>f=xDX!?(_g?jaGcPOoB(VfQXqhZ1lqxX z6bBF?K?eL=ggL=~1@Ne+pl7XT@X+o*7T{ne>!J{|fj6oH3M7Cl z1&9O=!1os*usMNgU3Q3W8<+BW2GZ$KWN`KpwM$ z;U0sB9OB=4{OsqtX>+lk;Y-d5@kMUh$1cMcr3HA`DR86l0%|niUx0BrkR9NS-MkPD zFW3R%;!Ga1fu(Ziq{SKb^b6!)ggv~+E0F#gQ8r*53?NrJ751DUzZ_Ty!XD6>>hufj z--SKAz!&soVhb2H0qY?Ckxd+mBbc%isZAbF6oh+ za#wc=EB03+qi=bl8G0qhJnfFw9q`gbg1wm3(?+X1-m#1Nd~SYJSAs%%Q>TCSfnd?6 zGGp=XB|cIeJglvs^UW`cj8lI)+j(%aM2yd>&Vq_NKK+>gww3W-vDg?;P!N%p;jzdL zTgj&S2?ZVXf~J@ZZEz74UV<=%@JmF$|7c^;DOu>FW%-aQ$m`Oj{{90?s$fGD`3zIU zq$e4L!_O>qGnV$B#B| zd@5ER3$Skp4dIk8H9u(`X;wR9KL~lc2W|7vYZpG-hi4Hn<}*~Ycl;fm+sU14hh2f0 zPS$~>p;HoQ?c}luz*2zgw@kNI_4srtzG#2PWJfD~=dHSkr-Y4A;)ZRCf{$Bm#JP@& zEOu+~MfB}AM$`vBAuD2E5#)`T$92;Qm;BJ5WwHt9@n!iZA#i9_R{;P@4(*JL`{!5cCMlvvfL zIbiZnmiJrF4p9fqFs)g#JxmMX6=XnYE{u;Bf_cw=&&Ca3L^3wpu4z{FhY9Hq*a+0d zR~%PJ>J1Lx$WvTvhyTE$8U%+F$8-A-D*C2yTk4*Ff{{=wF)Mo6YhpP9M_H?|Mx!}A zbmopWR`RMQt4-^7RfCb-+HBF2f^EYa)&3>l2DWL#h?BcE=mW?mQr|kaHD*@q{s_4m zvM~R(Y^uozwZSO}rkor(7+a{f;fNZu3@Sr;rulK^Arx}=l3q@vQQ9z?0W~3)K#b5_ zqls?@7lRGD5)2bh%0w1sB)RrHnZ1V=E2wG4EdrH``D5&$<9shi8cxZVS#Qmu=0KFk z@OXCvO>qb-k!J7^-xB3^3P!U)E7nqqKTu%0Ye@Kmj`g0H&%KWX^o$7U_reXO8v4BZ zc2`9}e6_^u5~L*y%h%8cCL8zNL}D`rA9d!c^$-peM`%qlnaH&6!|S5A4h%Wpgv*Bc ziSJH|?#$Dg`$ZAQ$<|#;5GUoz@WUwCcKS}Z8gJpTjumr?rhrRy^}#0WlBPCMOD|p--JOgEzpY#sd<1mIW}(vs^;Z;U^o~qyNe;A+`|yQ zus! zYTitqYoBWIYpn8!78H!F*FKrlx%Lx0i?6U7MHKkx!SkGhrz})Z@#aFAghZGtQRk@e zGiq!EBs8Zu?CVU!a7|M_B2+9^CTuWBVP}VO|#eU_JCdi#o$ZS7r2gkbG(7^KbBZRSX=p=d$ftg7~hfH1SZsVicmsv zs&s6!YIedEq6SSe-xR+&S}Uo9^+(zYFLiQSBcOEI(fW`>YGlhN!cie0j<|Vf`(f|V z&-$FTFW-6YWJy9{+tpKUdMD(0;uy3euq*aKf8d2(r>7tZNDQ14eSxM+;TvCV-ND!{ znywMzk{Dl}W{#e%)n?1cNW2#zU%^6$&i3#?IQdx(-FM5IEca)gHHOjQ8R8avq&$$C zKVTKoH&>Wat*QM!{X;`(yAG``C&8_Xxka~DX~?#?M?A;z3JEB(&3_Qhn)ks@5X+Du znN_PmZ`0c0#N+QfYVP3`nSBQYh&WDCNEP)B((=k&f&4l*VM!&kNHg~(uh?~x?>a(J z+!f)W3%GkDRabEImaZssAnZ$H%2xLmSvGokL$C!g_8+&2qg3BZYPl2|9JETiMbxzb z7AnG3o*!SRb22V{Oxg%6zTxnc>a83rD_SE_&d#?r_I!=fCgDhJRA#G(%J^~SFHv(u zoS!8qCXLsk$4v7e%@9lKy7LM~yG3X|Bx;&p;agHq-*j;=RD@2I%Y5?aDEXN|nH+66 z{n{$#OsUIaZdTsUK{eT3H``Bp-jJw8iqhqA3oBkTaPQQt4uZMo|8P?Jr*#JfO$P* zxqlA-g#k`sZcj7fRnu#|DpA+&bBD~)cP!a$?>$caMx*8z;GaaGcPQ1dZpr<&QHuIm z$D00TLRZq$*i?Cko#0u?B^*+@17>Udt7f!{116QXu8(auw6bVi=O~_+NPrixO`l;+ zd=<-x=(!PgHyR-r3n%qHTo!y9Hv`30;c<+SW#Q`yzT{FjO1a(#ZLQOX`wV-^p`<%y zi}Kwybgq)8KqD?KLUMZ-8PPaJr}%u3DH&Ziem&={A}wQQL&jpdQT(6`QR_Dau|6qi z#9qY8W` z7bNH1ufr+Ljv<0)^La5^y^l`ghY$+}FMBnzZ+~1IgQi$ChaMb~&kh2n?!;VY`ns(qCEtci6HG@uu1@x~tz$+WwXW}* zS|iI(WHi}3Bq5KDyM;;W1m@myGRgDYd(Se-K205|_!i~Mk!YABiFo%9*fpWxjKF$2 zqC1q|tDqRz1Dy;GFvW>Cu6;TC_lm3+Qps{(ZXEGxfA zqGtm);T+`JMfbE?N2PGls-V@L(7GB#WDT8+eAus63SEiqa=?_dDE*s zhUQ7uLMQh}<4o2qW2Q<4IwrUljhhN{wId=f>K5g!k)1q7aikvvS{ZYJKh|rM?rbRS zR+E#6JG+SC0a#X3P_nh=VglSvb<_wkzN_EAFdo$Je{iHrSS^r$k_)q|7tU8RYj$;m z*Xw5K*HFeTGMJjq&x`%)ZVTtdBvrAbvm4<>{J2kGx-M zm#AD(F*Z=TMPF-&1Uzms#LwEtPW<*kZz4fH*ARE|9ZMlraU%Oudu<9q5c;Tp!rOiX zi(sXZerHspb?|>x`-mo5QF<1(SAO-w!5->eguD^L^ljJqu0A6;hB`+n^>KkL?w9P?VTxc##6idPE?6mbW0G8J#-xz)AihUqnbdKW4;`)yTM9Z_#%W{4>u ze5w_ATk@Pu`*YV)f~7N4ZnmY*fqg{{%O3Ji{S-LKMHd}tS4G8%VI49@KP`-m(M3&< zUP9*92I&%WcKQR=MkJ&m_Jzib4-X>?jJ{Xr7Re*730HKyTDEN|*>8o8TwM9uZ0B?M zTrs3k8jotWZE;Co@4o26OscV!$ljWskUYzLBzy^IO$xS_WQrrGbe4O7kzjN6J@%{p z(5i(h;<{}x{P%29K{jfA^M`JMNjKEF(6ZT~DMWi8CTO#az ze7jcIXGd@qHkV=W2!^SG!N(MGBtJ0SL>@IBi5119-ujSDu_D=Eu~aP)$cue`(^Iio3H{T4OM<( z=vR*Ys382p)|e;RzDRc?p1=ktWyBvk+ZfB#jK;VdJXG?2Uc02g*z_9Hdgh;kr`BOvvB=iPmb2;@a^3!vU!$;S!W##YDx{aU@HXasJAE z`|e&}Kq%?k=1xJYJywAvm5b_cZ_SNXJWj4CDYyPilAjiL18;2=OGvjeiGc?{eudr< zs?TCPfPKkAp9|U5Y9q(=VYgqJ_tMow0hM|0@;5B1xRw>=$x9IF`I-n3=2QomBX+HHNv1W8pWtCQlEY2S!1<&<8({R6&LP&%+K9 zmi1!OQl2Hb4nA}nF-eBvXNB$HfdiY<*9H5vri(sgK|PJE2=uX>XFk? zN3J;vMmf4EIh;am7>3_0{oWqC*flQcby7+gbyMkWb7`fPE7{_MEbcoX7Msq!9nk*FZ3~0G(k(z<43iNnka|Md(ghMa~m^ zr>x?|`2N_{4M7e8Izxb*6VMCf5WIkM(S?}V0g@gdlTR_9F6{jq=HFWOfEmVlOep9K zA94=ni<00kLy!Nsv9JLL4w!a6v10%MTatMps!lGI2ApR|kqgt{QXB{f7{3PYj8j$- zbPV=#Sqgzw|G3n%0XBQUp*k(~ zY=Dl01LC*IU=pDoQxPtFC~b{X<{Mb*5aM1KHN@f%Sh(t$2ZO{X%;IXV1yX{@-OE zqm|!1jn>f)=*Qo&3SB!eu@ac!`7p3NM*Z5pW`T+rol?HsrSyfuE87*q%^Sx~2QcQJ zVC;sB^fh3Fm|qTCee(%yvF9Lp>Pxe;HQF?jLytH#z`A3%vsM1k((0$puxGq-AZbUz z_gCicEBcy3t68pc)zsBkA?Vg@&w^I&yj@z74em7iF1HDnQ$ zeKyT^N-4_17#&dm?0XDi~oYwMS1& z(qr)lB;Ji(KV;HKEK$0Dn>a8}e>;hF0e&J7k)E}7FTgX&G^mr*%d1tXPWN;DYiGIX zxQ}!KL3uM&*gq<$)aAR>y<}778NFlaG8pCNkfNBCHW>QKKLu+>2_9f6NxSdt+vm)}o?9g5D z;lHZTz%CanA8|+-YbYAkcQw;${v-1mB6eGbn*rvt27|FgdA3kRLY@jG3}dg#PMAgU z$!{884)QeOof{}Dy{nRn#-Nm~_kSR?n!9+Ea$iSp3fn=e+gd zYyaAY1$0^=YbQ3w+qlG6L1=X>xvE0Ni6jSh7`2^kL9is`zJ(=sX!K(fzQoNB zP{${8o205dj~qeYbfXnWeBY4iM_uxO$*dAI706$Y&fOXuMjK{@I*SV8Fxg@hRu`w$+PVvq`ZIWWAPw3Z2NY81IFy=%g-urVNH1ZM zILtu1Wb%bj#S%iGm^5e&3elc;@!>d@qTDE62GZ>|kXMR)amEy)Bgd=PwfeW>Ij*&D zTE4-2HFZbTsKl@|lW_xivi;151vlJu)C-T3OaK#;C%(?fl5 zaEAv@#--8qv7F0`cYpqz#F%ImhQ9Zs~i`?({*RJ@Q;>Yv_LV;Mc z>dTEB@Om@Z!z_@xFi@*>TX>tOW;oTg($wD&2S`h$I`xu0WX9)CTxh?W%01AzyXQ+E z4{ReK8SsZ6?;bKBt8B1`vQ@^017-U0W5!byu#K2<=xe0sSq&@bC?d2E!8ax#W@>C7 zz)Zh-8J0R2QqY{AfT%59g;Q?JudtV~j;+}%{@hKCE1R2vyJ1Um*2u{i7Y1S4;{GaQ zrEpo}VSPwg^Po2`O?p4x6>8mP^9Ya1m&I`^jc`w0L|sS?n4D~AV~QdJ#9?NXV==V& zb#9>{JbUH6A>Lx-gh%({h`4+)W!}M$#?9BLPEnxcp^spV4Oy+f_%q*@D%q^B^p@pn zlkOiM8G!N^b?=dU#Orr6%jq z@MmYuyLJ-ZgvS^CR%7?Xb8e6uI_b;rTB9>+jz-zy&YZ*NwRx#^_irnE=| zGY;E`?Z&>0!-%&cB`xD-rL1oe;h=mQHp}(SgV1J|c^dxCHH>bB9cM?oYr?KJVHV^ftkPRVSMzw?(H&EI6(8-mG;*?jv%lwft!G*d z+MCNKd!?0c5`P#em?TGy-u zGsSN_sIbW^ejfiW{Ns_<)GSrldeGXUeoOTlJM?JW+B*A3albf%an^nhOU@xZ>%$u8 z3T`^uC!?%O?%7hq_L_?Aowu7i=^1zj_|qri^{DhilTDJ2p%Q;!k%JjLF8EoFQHmnLnDDbGCG=_ydfa60t}>#or*F zK}bSx}4Dn$*9r+ngQi zN&2ROY4&Sh)=U?Rq`_p4vgS8myU&efdR=ik(OKQdy~RjPGaZT*>#QB>*KfJrOHC1e z(=nNZ8`3d3+LyJ|F=`^oy;(xNhP3d;-?$-hZPtP+9_wq%s8fOK4T@4c6h6#Cf*re} zB5qHLHUgdGpMuYuQH#4?5AALUG{Eg`e%a-vW_qsFb{7X(0l|eeds;t4e>||qfZdYA zQ@ldWQq2I@=$?AKlQ=53jIrKG&P(2>f>*lnD?0leD|s>KT~Y0bY++W&t&?u6rc~3= z63XtZ<6@Ds>2B=fAdI`+rbd0!HxbCn+GOV60JlWK`rrj~3DY!rryDA@w7MZNvNA%a ze7zyxr`L)<*$X7)#tK4=m}7CEH`!Q(MgYL>)uDD-~*`%v#3>tpMk6moY52M*9yP5aU4)@Wttw!QRa$I~c<&>jTk9ZpPzXs-YCM zqV0*+7!oB};~@f^H@5gk+{NM9o(HoBFGN|kFkHF$DXOhYw1sS=PhF{TfFpaoLsDGgGP(v%4TWzDJluS@fQ05*&KZUF8260hse*wB_xA3O+T_Znd(7Ubs zJO2J8Vp8UIlm7SNUfGYs{fM$m==r3j0jy(rzAJ{N!2B}9?tu);t!`*xY!_c${PLEZ z`5A>3;h9}}K3ou5b=A|o{=fl56oGMQbm!s5E}3U=9nx+zJn#2zfF{X_m8im`2nD7^ zwaj&*m&NbBDB!`!rE@6h^EzmmmA}EnQ|z@+f{gJK6tbP%?{QxZ|NcyuW}xVuqGqqf zmpu|sr4+PR4u@~r<`OkkM22mk*-P=NlUSx93<*59z4_hmW>_6;)SIqxTqS-pqTvy) zX&sp(kKL7+4Ee9dKfYSE9G0Qq>TT&LBfZrdn7S8N*BhwgX)jxpK=z2!;3F)cju_K; zydgPMX%u(OgBr7k&9|M(g<8+BKc8vU(4WGO~^;_~ddwmO7M6FpOnHgKSE1 z^t$!b8#*6Z+zK=d4+E@q{P2S+lKg9mGW4j3`3HGDD6l-V-hVU6AZ!XD3jJ`yU?QN$ zZP}Kra5gFr`M@0e#R95`Vn0SR!{?sQ1AYFASB1rH_P$@U4rE`|!&pzcEzaaSh&B}H zQ`q77im7c$L1v4HR8q`X%k^bD%02cHGF?gPWid117FT*lYYcg4Nt;Y*WA{YN<)G)< zIz4d8=%&`02J)lDH)^je`;s{n(RC_F`;alnVWoZw0`XkIW6z|Z~+bm2ac@HNvaj8gogA9oNX~j?2mWXuBiln z<%_s;J)ip-`;0=0VZt#6q3tz&dXeoTH{Z`N;Vob=`u>nLB5t|YOF{2XP^eQXU1 zQN_s?>Rp_~X$lo8_;DnCTv?|n=LRax_psK^jfQWBpL58U{D|I+Yv{D5bLwB;3hXiu znRF)Xeu%!Jkeh4D_QrpMtY$}1^D#>udyR1$+5&Y=h%em?ixA(Wt@8H;#gC{VR+Pho z47I*@5J&GfiyP-G(peJvy9P`@ks*rdD(k|Ey)xQf7^o69v#!t5qV6pepG+XeG8XWW z;#C(6o=V(G+Wb4oO}?TOi5k7}ph7Ljh1r-^st@10P)BW2L+zLuYutoa66c9#3d4md zJtlZa5~9~EOKuZ$yhM2_7_9$NGz0EuzGBGWM8-=ky#BjyLa+aDA$21c`Rt6W<+!EVTg%ZBtZmC#vnny7yi$Hw zhuI%}CTUu^AI(6p>X45hng1XFQ;Ly7I5fN2o;ptDjoKH5>xFIEG2@;kg}bRPC6O9c zF``Z?GpqNRtH$mslKU6V9lGtt?Kw~R#CndgRY!Rm+<>jH8&F_DsJjM_i=rO)Zeed` zlz^uKT0>HAho~|479T>Svt93|rnCWhR9R3L^&fftKAs!dyTYwHxNX8 zK3ZZi7u|Y*U8GQm;@A^C-HFx4CA~i}=YMyu#GLZATMfNe3&E(;P~8~e)6SXiD%QFP z6-|UspRM|@$4fpW_}Za8ZkIcet#nW{k^N5eLvPCjzlk9>ORmhT{ziBy;#|*4&g5Ps z;O4#g;jpHcep5L!ePZDiyL~aQ^kT9MuG3M=s@(`$)BD%k_AkVv?rYa99wp1r^pI>m zC3v>a%{Rpu@oA+f`S9?r<@Z6%&z{hmd)3SkSZQF=>Q|5FoB{Y#<8m%uU}zMW7z7(G z1Dip>>j5A)q<-U1AXwLPooV);*N{5Lx}KN)FJ1mqo(#N`0&ELmz+^Iyc1aa^ji4;~l)#gmNFRQ(L)4$8E%jJOppH;;Je0<)bh5E$0R1 z>Mw&8@C!IKEkA*MIiL_+%el`~sb7J;z_pwgu=u_VN-n@40Jsi-djL=X0ZuItQT~>z z5G>2N&(xmQWInE!7m&n;OHnPT)6AlWUZn7cgZ44$;ZA#KFqL4DmDXawI9wnId%#-1A9N(51=~JK(ni{w6)y1_OvY zA#a1ZoP`O`nfi1N*7KZUctL-uPA3Wk9>C-3-z{3;MS2%(SOF*2zn47(u_4cy;sizt zNr3<+t}i<6|0obn@B!Z$$0E)P@m(%UdCpX$b3zF@OaD@kPPgT;od5;_B1xd!UL4TN z`IqpVsY>SnzCdXR`b%~C2QqM^0J9Dd;KKxL<2!i($Tz|7NpQaYfagq!ItTLkM+>|N z>7tDI2Q9Gl1Mt5AFVzD3TO4DDg!Xv($-f!P2AJTSBbMMfQ>Oj_`_S;e`UqgL&&Buv zTQlJ673?7g+^5ICIREBQSOw){2yYFhX2C^Q)G(5yc-U-z$@xJy`E(kXL^2Wb|NU*KW;JUOBYd zlUP&m^H)UD(j@&9ykYMy}qU9jP{Nu;jaU2B^#@8ENfMr*4%8UY-U+q)r_v)+)nL2%h&Z)7M*8}gh#vU%@LGA>9)NjU@^xBd>y7|9c{Vt zm<0ZbaN6_R!iS(ooj$-~iI=c<&As%!?tS1)i@>Y&*k0iwx;dHJOB^acRqABtt7G+D zcJ?4LDU4`^BXee&;zzFH_2u8gbsVe-Uz9o>-XY&MA^3DXvz9${LKs!zK%zeXTibsgb8S9 zj1CVO`G%V8CsT0?{lvD5Jht$MNl`Ca<5GOBQu6pCqUkbj$i*T>S$^sG{6Mqzh)^Kl z_Dqy9Hj1~zTe6W*HT2s(L53`8cSxLTEmcTO!Y!e?st6MiQ1xk75I@gd$6cnuE3Xg8 zGuAXvXrVLQ$-f5Y_(h~KR7idA%GP!bnM|J_N&HWdVlMAnX%gMCK43ucY}0?ARyf#E!`nVNQZQHmo!L<(k&$jNF&_>z8lmd`hfCY z|1ak{A5a%Fd(S<4)^FB5;K3k{#tGTlh9$G%QHJsE=vf(U_|Q%aQSI7DP2c0_X=-yh?_2S4Ys_yBudaK6 zrH3>rm`A;;*P7n(5FdRKrT(EnM@Z38OAxCL?8Jm-TC2DV+|tJwZEReF4Q>dKxb zhdRSkjq-2XE=_r8f`CMIU*?$sV3FM5>7iUGZf&x?7V?B-PoD_YT+uTb`b+mqeKP%UbDe2JEmT62JD@9^WRO z7i@>_RtpgvMAouXV#qG!0HFum+#Z^;W>M4^U3HuFJYJ^2|YWduYK}Z`SlZZ zh2UO-^5@o&&w@VRjk94#up)(tQb~?Q2{Tbe#apo1#yy^AXk7g><33iBb&$ zSte4h+(!nLV=OFuZcx^b@7ZJW;tQ!hZ>YM*SxHfL;st$=^c%wPW(l)=aXWS!WGf{J zl|EaG&vf?8)=^yXm=hRuacc79fgrDkFBiIDqohF$1p{#+hm;8~0t$^Etn}kbZK3!m z?*5)8iBiIGJQnyM`2!aJchjPCygA;TAl4?$a4TrLFeL9M9tP2|Px;4?l1+nk+S()C zVUn4eh}Ng6ivH|EQ>86xm5>*`2`O@2-(HnDf-8>TzqQ@#gEO!=s$I>rc=pe>u$V@yEEIxQi8 zC#2TBJRiH)VrSWg*#!Cb1!W9!7oAM%a*Z}cK04$L9UnE4KBz?VopqJa>otw|;?>;M zJgC(zW(`S3iK^?Ulw8c-<03VJ&v-Ir%o^EB#BAudBvWq!O*eLXoOH0*E5QXZ9C&u~ z$8N_zC)|3tUq=X4HeyRuN94He&dtSVmiU27=Fr7ZfSB#=!?$F#*f4hTf>5u}=&x|z>37NLgKM3^(O?CS531hfN z>~t(1Ub|BLNX!(s$QaPNek7lb%5??8Ha-evc(oM%wi;Q}!PBpyuRl4*Tjy63BegpV zLScNxzgM=&sDx568HNv6*BaD6D$c%&pJpXK!uM8KRCrX}8D-hpq6BJy4p#aFlggP8 zA_;EUTz`XHeeAm(L4M)XiZ{3<7*BBpZ=q~Rx#0~BAZ%>MIv@BgtE=DVi1J<7y4W--|uA#b5=dlbDr*-2;$o}kBQnD;kGVUf00*OHmB&9XF zZq9-Y0mRUQ`+evENnlGI$b+BL=U`OMv=KqFzD0U_FfEGT_S)Y)Ab>rd8E)3}i7TZI zSJltRvqGr6n~{tXnb}xdRYsb`aX{=BXl_Nq^vDQpoS5Dzxd&n$nlhKL#hG_2tJ9*T zY-e7JH(gz6YZ}yp<3*x~HTL{c`1VZ06V?8a0Bv=7>n(@fv3s;+DreH~vcaXx>dHIw z51;A=dE)OMR&>fw4&N$-YSAk$J7UPR& znzw<5_(0XAyCUUQACgJ?M=4U4podO!$gdIa6H=jB#n~0#pW8Fb-r|FQ`hrn_YxFkM ztyJ(sMU#m)$EWBq##XB#kNIVXa}nN&A*CR6~?(T&8Xsl112ejE`zTn#Km9e;gi@lKY=9ehB}BgR<-IQW^{_#D zy4;2Rrm4;b<5S8rKeLw$1-1C1vN=YdsCGnk;Bl$zEqyhcOXZKrI#1El8NHkt#MfH$x=^~TNCl>&1W1&+ZN#O?{+ccs z%E6YUr86~VjhL`Px(%`$bXaDkS|CXd30P!H0W#=hdvbOSAz_HM<4!8opCi(q?R@qN z5BJdd%ITR$uoc!gl7bd*$thOK08u+rc}r9SELeA0PH2?D3NsyT(zZ*~M@n(D%+%e! zhpiN3>=*~(sEM~JwNtiZTVD)B`tiGcwQ#yL3l~0SvG&54)KF5<(!*#8mzuaCE_>7a!2E~O}N@y87J<|8s!xXPW8{N92(X&s=T1_fld&wwb@(~L~?4|Ktz*dt{zPc-(?xLkN@2JwuL&`RM* zm=4)g;ZU9k-GZ2cx+%q5^>obl&U=Y*s17+%R@}8juUE?^)>rrobO8dwa3UkO>r?q=osYPqCBrs#Pa@#EN2ED%V#%|4Iw;C3&F zm4Qd!`j&AggiObcZ?@PL#3ybns#39{f3QO=mIWL+HPO|Af2lXjDWTOWdnhNP)gmOT9=$EouM52qL= zQ(h5u6MoZT&I0^lfFRxYa3Mn2A%p? zjwDZ)7h!JFCX-+SdcO7kBGxk;q7(3k-u#-=Wtu#cQ+{g)&JVaZw>Q*h3j_1?wpTG7-id}ri0va{orLBQjj*%H$I>FE|VHDxDRtsQ&dn$gTc;ohkN*Gp%s2u zcaRjnz1T9j15uD9>xgVL>%Ba<_!z;FYs7N=-WsBZZfp9~Sv8smi4z=(NG+K7CX^y$ zqbp&CWV9^Z^!UM&+FTOc3q#AS1DW?HWfb1QX2-SmZ8Y9flA)N;z^ z`%QR`GX<4>-3B(fPy$gPfmu&6vtJEWE{~Z7yBWU>5kRuw!sFp(mwyYTV0YSgNGq40 z!NBdzp5PV-DbQ;WzdqH+xIaY)(w6^3fv^EjGVe)a_fx7^#)neyi&>5)PY;l>MruY_ z%>!7sX64@$F4(KcmFPymBT)z$t&2-7TlZUteYRusPMKZw>fU`P7WKsP_PpLPXUMn3 z2<9xqzVdvwd1<4u=nRJwKMy6Sn(m;mJ2vPW5@g!53)p*@Z&P?`N4JxFsK7PsL(#P$ z+0d%97vuv6oYKX+0|G}@6pL3YPk8U}4CF8+`>qae9-rwrR#6a0ux`iRwuJO-o<^_6 z>r165J2vo-O^U`3Ft3a-b~Cki_tapBCg7>iB*t_)KOU) z1FzXqnkeZ1i5+@9d5V(A`c;iX?^ z>YKwhmKkXhHYDj3s(Ye4bZkG6aE3i-(1@Yg`wT12#pEUL)JpnVLT{!A<9*0C_BR1BHIC~c0CLiE(FaSrb^!P0F=dFvcI{~D-NTB`i2$25VvITzjkNZ-rmz;}p zOHEu*SwrE`c~@ltK{?UKe|FbpWBP|<@e@q}1fILp-_exss;?9JJNt3X;X2zNmc@04 z>%fWrU&rygqrwa{fCqx;e_Y{az7TsedDoyRY?oY$^I^OOO#wplZ=wzeSEmDxQ-QF0 z;Bfl8)@#-MW}z`%-Rha`k~8tkH~qi@({>UV|mET{6*s$-NPl1Q=sC z5e&FKKswG3Ea^i1wSs>`J+28|XZxcreJ3dXg(U&)K5n8FKokJP@+X#bq5NiIuf~#C zXfG9~%cCnNrywIQDlG-nQh7oCE0!+i8&xYNAjb!ID1Tx}7wWIodjl+qh4znX^?h*v zfh7TbtKlRT+CR$HKj5VEhCP2X zr+=tC?*wwb;kyVQ_^$c?rt-?VbuFC4@{fY`15Wy`@+X{hF|yaH{B37-bz=Y)+Dj$t z+@k&qoWydYI(5ET0qpkk7C=mF7hXEswMF$txf3k3mnzj2F8W_`CxDIJUuXWD^*QGe z=m2^S@cn^ZG!Urs{TH}yP;bO1vCv+sR#!;A8lt%PjQC6J-1p}c=$SvraZ;vAF8l~yb`oUo~bw13Kx7q5uyb>*~Slq9mSD_xuG*velQw~=>J?&IN3}tRKf$lwtvl>u`xke8BK8~!2iqodRMNot7W)GDGkTQdfv*}x&}uU z5AJqC@6M_=U6KFSwx0KM4&IU*8yk6blM^}{@cUzUMH&#U?iX!BH0i@#QA_2YyW%Uw zym8$NW--}19up&ku@Cj>}!fCBRtEW4P1alj<@Y?QdCsAO+LrHHM zFV}312VGRzqp!4aWcsm4;ag$(?_{4kIlCfE$xFF@Qe2iy6P?-8wF=}h-^|ngwwQr} z4mnAtu0?c8S@J2e27(w=Lr5jX78(c~k$=>loP1Cr6nPkGDxabv6ZSR6R6foqhB|u` zW324S18Z2ODA%saozdCW;0%bNu7Jp@X$S3QZu>z@aE;UEHwvzP&Aq&QM7ekr{kVM?WAf5HI897ob!5V3uIF>A1V_Hu!qt-3x2V3HvNenJXXRvOCC{n zCBUA-Sj|1vZ=k?EOlu9QLe?eIz#2}shie&&Haj65&*G7>Jx(79`8w zbK`tk48cm7`Ftb`gOR2kuj3Rjt|_eRWYU95JIQ0RN(vvOw}2H(AF2ud6eZ?)SbY4r zP$Bj^?%SQAhYxz_t=C->%|j%ELM4M{KB1g8qV!pSL*d26@8QC4J`=#nbi!Ft&sr!2 zJBeM68r!ME2ySySnkA8q<1LJ)S@y^pE5e&HLu@7dWQA_w3N4dbZ&Zc7`B~GPe8xQX zi)D%UqJ0hCCO)h^q|1C0?qZ;;XdT8E$WUjfETl1LYM7ydP2{S;qD^ zPFsaF+DUUMo+;+YZxoAXD$UZUpEtiWtBP4(m!lA?rlFJ;z8e^w|5lrys^1d3(ZF*x z(Oq0~126AI`^p+K)B$lkWno?%T*51Ai03a)7;#?ke4S~7eh0dN^L!8L*is>A8nMlF zw@P099wRZzW38`n>{gNOV7@*W`88yugl7)solR9QCo>QceAK3`8@i_HcT>@EF=%l= z=)yITK7YJC(zCXEM;vw%PAA%YZAF!T$1)LAzmWR%hR?6A;eBl++8~@OIL}7If9c?xP}x#5h14R=9=x*4i?(1#!Ex684*G z+7bdK9{w@FjEqj!Gtt66DC0J8aCosROVll%N;l6J>aU4ORtVMFyG5X?HlMM9+XOv% zC@_wQgP23C<1p#z#lhv@ekygqP76o!8avP}WoGlpGE3)Z5I?<+>zM8%T1)cjrj)sr z4~%`-98~$51DkOF0$jg(7=+6q(nC2(<;fR>uZ#MdCFVYdu zCr(h(juT`9@H131d1zVF7n2Z~+qjH1X#JWwBL0D$NUb~)h8?AN2_OSWfyAer%|=ogPV z4hwFc_*yfgc+A^k9vk>{iurEZ{f|5MnG^5QMK3epi7+!pfV>TTjr zibk!VnXzo<$5ASop-Fma7NgVFMLOF_$uoF?KKyMG{a7?ecq?&mTABR=pN&KiDn%1a zX~R|QnR5dpk0I5!+BS2tlVla!Goe=Edtdu_`ba-?1v~a`C;=N5SZDttm-w zO`n)}*#JQvvZm#R_z|x3K}92-><>;(Y0@INm)?RvGU9Z0v*Zt^w=pZV1A!#NLeF-* zx)xhrOX*DQ?Y!?QpbC7%BdYPT|CK3`aZ7(QOvg}#PaRz1mlp=~uPc?ne9OA#>vk;) z*~AR502e2}8CQyn))uF}>b zDF~v4)+8Kr6eF%@RZP{7^`M$TeSgoF7&>t%oKUa9 zxiv4BSn`#-v!_VK11(FlGRlvyG?Rma^rl?+g+b;*!-}mKKavdeA=Jt?w{fk|q@H3v zA|iAKt*CVr_6SuR$+v?A8bQtd~MyL^%i8qXiU!$`NBt2vz2c6IWwpVU^q zoAg;+A6>jp_5QA5FGnFp?u_7CZmU0n+?sta+gJa2)biADwbX~5;_>-`ySf%7vG)_F z)j!yn>B)Y)^}x>EJ*JOJ)<7Y6zBxdl8ZMW9rLIe{thu0>?K6k1_3Hs=M!u6sefJsP z;~GWC!|WDVD&C?MmKJl#&{}HAPWsKKCidkWkK+_{y(osW5ycgXA)N;8710c0!f4cn z{a-j|)-X}1&WsKP$cC;;p!sd_KRU|js6#dqt1Et4AVepzr#405t^}iR@m8hJl2=eK zG=fhA3tsK!;=_ zeiS!H+sx3ouYWb}^t}63ioHMJLvIRNSB5SeVnnfidFB*q359o_cM>Y;| z(u{My$z@@ROwKF)K&wVZ*>*rAxn+h8)gLCHX3yS|`k@=Mp^Q^VsCkk3E!J!X>wDRQ zPOXRx*U`4y1xu2AoNjx*TdrA-kI>|dzzUo}c*nr8EOJ}Pi>*C7dz4(rd^m;_Ckz)8 z9lBhgH>uKMX=>Wk>&3g{KeyE0QGhVx=x_d#K~_`NGB+pPPA+M=yY-oc-TvE|p~h<* zSI!KtGOw{^cL?6la9CRnBx)hbk@ijWB<>IX5yRq2cp}2=MNsHutZmHlV*b_dsfJfk zG1(N^!ciY%=yj3z zg{EZC^b?EX9mwH&X+&36lR>^{XWxk<^RnlXK~IpNwbl(aNGFN)a@FeTvz+0nT2FB% zd${Sm8_}zXjGO-Y*u^i$!lW^RhJ4$6ls2o;ELOI&KI;&twwFwhvpc&aUA_PF0Zav~ zsE3f$0>iO!e-l|}dLSFiL_r!xBCN&07^pdPEqlxpB@K`ue?Cu?enG!n_dPJxttQ5& zw4P>4bf90N!}{;5Z+Rr%sbe8{^TJQX(3w$fLUo^$KqB`|cBXI^Pmu*rEJ&2ZESkokxZ>4!Y2&hr+ z2kSU}1rhs5p}u#eyw5RcAy*zgZ3mGCwTd7Hf*(b{G%77X-`}-QH`=Hl6XE?c*|VwB z@pf1*m`;&*;pD5z=-%&qI!aN71^C=oeW^%y8Dy7_feU%F|A|Vw=Go2-A*bmyjOfzm{H6DIk>8K zaDP)hou`!)1UXnc=^JdnN1`cqwo4N3`G3r7zIH%1!_2{wVP|)%CxEd?e}Q0@c_~ML z`rs}*NmLdTBpE0}xz$FLG0`T|=cb@pQ(^pe!ZFo&c7%$3o!s$3Z=W3>gmCNyOi~N& zhz^{l`;+uW(T%3?un*NJ-0EcG`}#yF#+NZQ1v$F8%(*S8N`bts-M z=y0Xd29y*FOelra%5xg&wvp;_jKA~wq;Wv~(ch7~wHBLsD6rmu*<-uT)^gU)&Mqx2 zknG8G=W0i9BqdmbAp;f;QSby#dqedB<`SD|QL(QM+JU7Vyk8JB_1G)@sm17~if=ik z#Vk%eAAg`WD6aW|9W!-l)IXO0UcOD>fPtw(8tQnimz?1jZsx$KLL)}XHa{p~IBnF* zanf?sO7#i(q-r(Me4Mi^+OKYXab_slevOjt$3DgYhTm$Mu^^+|)t~vQRZnL!BH{aOU8_?=ZNmUvD|hru$X8Uuj;9dD zTX&O|Q&EXDs+~{ImRG2ySxb7YbCC#bOl-6j7n7c8Pt%{kPgp=aEo-cy|oLQil+W4$74I!452k`NIE1KV zqkJMOMby9zDc{yX?2H33pYWJ!?)T6r8n(id@IH?9jvsJ5Rpg;59?pph@^Icq)3DU) z{}hA#2wFRnW*l2w_6TR;;OvE16b*TAzID}yHV;yt@~rR}fq~)o_bI^;WqqEE(^Z?U zag6B06DXzhaGM8;y(l_DSd0jGghsaKfg3LSb;jjMcHk|efYN!Dcu-2};Ri3;6jCZ! zRSNp}g2!6AY%8d1}IyalttK9*!}W%=9g5a^IwY_=Gc_hS;CST0fSzQv;yc2VuU?(!EP z4*nCf$aj4VKTvIAiJeFnSaUG#`g$P8uh#CM)N?X+<4sfH*#c&GnmST)ry?wLD>8dE{h{Tz&dzAy}Le~{qh z5-!)G4-Pp=(6PPySlIa_r+2EfU)K;T^L?Q#$;0p-4tTPA9OeiYq>j1RMcqn=Wmrjr zSXP$t$#tY#reEbYX-($`mMEoxC)5hZS;j3C{tKgCw{O2{D@{#|R0nxXLcj2#%67`7 znQ)H#RYfSQY_iV$c(IghP}y+7*i_b3T)#=CoKvm+7dIzkF#Olm9lZ4%2RCg6)R)!rnmi_rS<+Z|up(O5`3?yoY81l&##L1f@#4wb> z2#de1EAN4P5MHToGjF_H{={wBrUOg$v!wQT{In;>z&<)*m-uAc!(p&*yVNIUcR_nL z*8_weN2nFxtf<%}=CIr@$H>yiOT9gbl^*%b_raXW7la-fE6Hyn$MREeKpbB!IbQ?T z0N3PyowQw%`|<-=VFBE0;4J$mumU6zvs~}E-srgXlFM>_HhArE>y7Lc;F$UR=JF3< zg@qpQgRjr2_)Xr`zzPf9ANI;Mz{~E*Q z*Z664mkgF)Vy|_o&aYzr+fQRYze@>B`1k0H3%26=3BLibz(RM)Q~9Oxw;`1jl$4fJ z{+~g;ng4%&#Lo5;Sop5~+EM*Y@72Tt3*9AO<(J+Y5ew&;4F4WsCg5`VxvPEwuP|N6 zzgF;X{_oYq0t@{mf903pe-R7kUdRo!0+AHwuGNnql?&xJ6MGG@K!3?>`6c!SK`N~O zuv)&qVoZ#HxemNzKY~;))L*OjCd2~$C8y<=-hU7a0Gf1@u?3nX0qvcB5(^i~Z>IGc zVuAj85a7oE|IaJ-j~ex3P=UBFzz_T$rNVTf`dXd8J+RjR3-p&N)UPr98?eB7qgurT zEL}kVmmdo()4A$vb>3usrT?Q;{exFvyAcWSL*x$<;O`=Tt60~70Q8qC)_J-A3kbmW zk19paLVw;3fq@Nhs(}_h0PzbTSd2jG2g~(!>Nknk6jk~w>(p-*;Hsj^_K$i+570@p zfZX#&Zp`=$Kv@OaxqKIY-L&7#S*O2Lv954euXNTgdPMwXzjEQMGXU5k@WOvL)*0yO z0iyakr8i-d0Sxe3Hq{kuGRpe5c#R?Xk!-KftT3&W+#bj3hk-)D~PAH@k+ z0MD`C?}C3c@%a0AUTl8;BLRT8wX1f243~=2PrX{!)>cN^Hr9I2{?|-r`$tWp2crJY z6G?zwD)59d0(n0`?B0dw>!$ri@gyt^mx|I)otN?{{t{0Dd};i(GW}G1{!V=lqXY=B z@A|Kke3QTr7KTfu>8IkW0zWQ7kN)x+F)}g$J=uWW9?SW*gb8?s0F;iN9$2ZarD-lU z4!>spJfso$RsLX982%_p=eH3=1vI1-BqaW*xUJkN*Gm zUB_^#8l4Z})!%gtw6y;yL*HvU9q{>a9zt}!$e-uAor}G0hJRm+uKBKGxKxMEi~5z{ zb%45m)Sw^gfREzyYZBitBG8=&WnEu_ek-iKF%9Q-=V4b2Iaa(y3{KqG0&3BpMBH0F=>F z?oe)=<=p3QDit~8Ydz0!aXSm_)@ZPI+23wk$L_JRWp+9OHGq6s#_IXa1*xPAyXs`e zsDm2Yp0GCEJmz?RrxPRT0m&PCj{eWjAv_LfZ1)dd(FD!-eX~E(Zb3_@Wm_#eCuJ(U z5a7qgb_a>X^B;B-^1#1MagC*|O-AMknsmSYir11i6A@D8MdjhydR>D3w)-1nbCP&@ zTxpV5hkLi(Uax(tH)$4VEGQIzUXqmMW20xwC+LCqLZzv~-KfM!kt2$)Y0dNt`5ymZ z;d3<^x`Stfh0NjfdB9)akrYASOg}`lkJ6CvAu8P!8JqW>y`Sy@Hcf1C<&+fYOPV(` z(-n2R3kLZ3a%{m0RH{#vJT&wf%!T_}pVFkifq3sJ!ceH9S2fK~*F+GF00CFDL;#}ZSZInRJ)qf6n8 zs4j*{{MQkt2a*!nLBalf79^A~r>GHnAu}h9!2_JVOFm=MOa071Z=PkSv5p5-2*IzP z3c+X)J+QFNd6@2AHFRr*%VM9(>THs_i}C=>%)L6MPz@yV+0K6EI}>BKE#1dz_GDZ4 zT%Xq8>&bAgtEfpu?8>68I5E?r=5V!pH@d#8Mt2_OG6Nt@w$tc4;>=`=9B&dFr<{6rVeefi#WrJ}xzd;rEh;$z7(-x{L{HH~R6P%V_VRMof8Z)02k3BIoKY?@C zDVDjlc(81OxNSD4BwFU{CoE3{ZGP~;V#Cz7gk_k7)W=+8<)$4k8ThmY6+b<@R8L~lgSK)SkV?gg?=nJN<>hds`{WfZ zj(ZC40|>Rc=B&uwPj?VZJ#*i3G;N%M1__G>`Sn^XaalxwQWFWBHUKc5yhfzCVa= zoDb8%;u1on+f-TtmpLDLdh&eHdr{-p@6!ZvycJ}$yVm=uqbr7~YE<97BE@*4@Zp2W zdW!ro<=CY3R*;dh_De|OISS{OjQkP#rbm@=?zdv`2q$_+vmC!p>+Lxe*$ zEQ{R1Kq+>z{rm|mhD~x0?{+xt(13DQ=j-??FfEHLsAb@$Jzx2fg+HQK5~c0D$AO4L5Y7Lo;_iO2&nI7182C-1!LA&d zeK$sI$SHE3HIZIcnL)S5$n*E$ai69<+h=^NZQvS>AGUhm09#uZClUSryIdyZBSqc$ z70_~AR`G17H;B_b?gY*L=vfsu-j8qR2%~~;4ijUnq0I&d-LEd#zRZ?w9fVD!yN^xW5dxO| zpGpr68;st{(ZL2F1ykA$R!;3H63fu)WEdnN*C?J>)TFUAUPpLR2;AmAg^|QZuYu}fp3yeopa+7>lc_Tu4cpRgabGth98IG@m#nYL`V0F|TIbTeM1UA!lsjH{O z{VVI6?`UI!otnLvEaaSR?o~{S8J8cmOcfD~K9n`_toOnHTnK+}6P{L9)v*18@knza zms&j0Cyg*#Y4gdkn1|rVdR3=XhWuchrX9#`WM9qNW=x*YqkN&E3MR!fbT(QsNiimk zW+HhOPSmJaWL|cbZbgVWI)e(vKVtrbKEJmXB~Y6@K`abYcL4oa1h&cTL{8H^Az_g8 z14(!a5j5BwE%_p9BxyJDF_qzYh?>_to|=A5O7H_D*50tPBJs1Da}P(;>EAqc=30fu zR-CC~B@o;JOR#7d^y#Uc0&~*<6YL?haS*%v%tgYKpL)#OpgA_rLK5drd9*8jGkYZD zvx8zVv_56w#cKa)UtSr14Lp?zeCpaw38iOfyuK}{E+81KHrbF<%l1v?{z2%idYd0n z@8M=sm`8rww^YmPPzd1zCtFVB?x^6?vYm-3ULeBpKz;CV*DQ%&%T~ICfd`{kqs@`= zEFgAIww>f`44ZW%#g~8yg(Uk$0e??nGd%exuEs9rcVpC?gDH6oN%Zedh{{Q53kDo< zJ4&M#3oQlp-G%~&UNp!_CzK@G`fMvpn^}-dH$QtmkJoI3!CM4+^1R7`$7)k zG@6wktUijOA{`!71~xBns7&A5#w^lK&51Ii%0?uMd~~$a)fOm{)u|-&FsD<=KGu5j zo`KlF@|-qyx(-Gn%+o^7K++E967FSK1gHQcz*qvwy-_LSN7 z5qmhX*!M9_jImW2;HB}LRCV@lEo6@fe#v>BkeAvt=#&4d$$t@IKK|pdb>gPNh~ajz zxPxgSp6+eDx087lp8qMU03+>E)c(q3J@gm?ttL(PFo>b$l=aR-WkX z4$DQCvpWQVC^r)$gW(hN!ndxVmQrJP*qLIpCxKgnAZv$Ut9X9O(S!Hu;sHQ?<9?f&!FE-J3aE zf^K)laX<7YlYJpU22(>QB=96xw{0r(C`G4}59K}!wb4D(`Hn1M0X>`v;{27h+j+Lk zZ`(14U?=Ido^w(nm%_#EK$j&+6bG!5tsm7G=2Vqv)uf6pA|nJJ_Hso^5CtFSF#2{I zQyLJ)1RXsREJ_YnlL2`c=!Z1Q=^3_NI}|*7JTR9#TJ{z+3mP|^GK^$BuCz(jztA;8 zpIPsfYYIjmwmiecI2l6|r(> z!ucrWJ?YeakpvZaj1I`!2_Fu{4zgh_v+^_}^g@-wqwALaaY{^(#4(Q&sXbMx++WU{ z7U?KA__hVpaZ-<|$ScahrIF_i+1*E_%z23#(Pq44Spyp8bKjvde%y)hp{HOU?QmcR zaHY=3!9Lp{&$ElaI`9ky5!4KULLMcSrhR^7=`kgKn+jO9?YOl!63M`hl6}6Ze8T3^}Un!FGyDK3XTqm z?lCK7$(}oMD>fmjLdRqgrBKbdv;rF)a#^80q<^G$Q@dKzu2wRPiaLYkBy!8_ymdAA z6Ydo3CwejfmrFRAxNO3M#xdIfExCCw-8IeJWU{E#`C++` z41^84V`!7_G?pRD&WBAul4_D5l^ZSO`UhX(ae&<eipe$@T8}b&V=x$>e$#K?zeCBF10MCd6h9? zVR#oxz_0no@6*5I`avTeRO`Q){*UC!|@FkvnjaJ=4-ov&%g(mbPkHj06ETi#yYF7 z1FWf>dD_)PH zEX{Aq!TL?HgG0sEP)%j3hlDKdtIwN<_)xjFs*RGko}NJ7H^o5p5Z7HYss1polc88- zo&4pt`L~Jz`t%R)1cpV`5QFb`DQ+GG#aezsN$<&|cm22u?e#(ogf(QGFz{6OwW4g% zWXZG>gx$CBJ-yGNNicJABQpR}=R*f}kMrf5tkEK9baam}TtCV5F`>uS^q`2JRrGHy zxl`>l*1dU;tw+1>*+-#f--uY>79F#eF9?6O+YvsqYK!QVVL^vmm^%Job$~BL8&vuo z+(b@qjsn9duc_J)!f0B3%44mX$HnoFzGwwcET4oV@Mv<@Ve}{E%(aQ1@-DyWD%nDe zr5YWxAW_{c;Dm>MmT6m;V7lpK^pMu+ZC3hR?sq-nS#CM8(e8 zogjE|!Z0*^QWYdoJqp3DMydv0L2I@`!E6$P@bsPuGcgqPu6q!UTgDiRoF2&xMNUea{RZ*7UM}OBpK2>o`Vx>zw2ZqNN?b zMohUkflBk}OnjI-8%$%!c3#4`B`IBv9b3pXk$} z>I2T_2&HA&FQbN{2T`eE3+Ew+zC|hP25{aQ=82W(gvo@IA?LzdO>~Yuwlr%Fthfs! zO!vu`RGx%g^W`cIS3WV$(OU9RUTu4}T~CSPTVtqK%gv5Y7#m-2tZtJEjQS9h=0%u{ zYi+PP_e5C(&Mkz0&iPtbl#uv~~^fv+1E# z=W+EpQ|z!QG00oew4S=W@TA~IP6{2g{AEuuTFg3|pbiTik90M0L-I-)#|i%YuK3W(BvTwR773+;n@+Cm@s4Kcq`YdYu& zdZt;7gWhL^Op$#WU$uzREhk7Bl)agI>bHjv5fJFtLIMjgg$cDPu~STlCZDqf>RUt+ z)3&>L8o`Vnpk}>K^udp^dBmTea8y67wo{hnKNz$;l4a^__mNt=d<*XI6z?ktEj}It z=LDzb9O)M%+(x%r<9wI;`?#1;i@s3DjW|2E9ye&2nwLZ3Rk2f}CU<*|KG%VAzP0i) zt719_kKqmlLp@C(QF2gpP&Ra`7d7CwsL~ z2JX=ck<#|IZi_Q(bqnEqLwbuyHdV>=_WU2CJ8qn$duz|J#MBY2qbTc20D5vz1pCgm z5s}atJkivr7zy9)IRWpgp3b+I?)QDp{|LePA8Dm2UCgTcVgbi(G2$nyEHTGgk)%mn zykl+nHNiOl6eDK7jps_32RIA75sUCW7w115x&O%_0F?g2==q`a zJUZnEFu@EY`}~EQ`Hk?nI+=up@siE+OXuH{NdT$;FnfMTr3W%!fMfq3xisg(uRT`( z?cnt$&H70fhd`;{kFUfSw9~Ie)GcI50ntP-p&|(myUwGoI%MTrvHZ zJf3r@=N`&MmJ{Da6osgii~{f^2=dDb{*n3uNWK||0I)LWwAT-S3dqi9yS7K##ZBk` zT%T(ID#kxtpT8RXfXbUu2*Bm^b7$ozGV|Bh>bJ-B>ckfo#!JS}uSejwMc^ucih-8y zMotjZc|RB6;y=*mfd!xGLj1K)>~C@z&YiF;9)mxOpznkFo7^Ax%%6tK`StM|AV~~# z=f>L4gqjQWHxqmf@WptgH*^Ew3mDO%R=v|a;zF@~y})0I{1dg2QZ`i~;^{mnX0R5dKf_=CuJX5S;Wf+`)1|s~jsjfEd;#P5kDB$9`8sE* z7=JQf3_vHHzu*ABNxX*nV)}Q{`d{V?h(-BF$@;;3(F4U5=t%aH`MMB)-Mrt7`C__M zwSEFBmynt(m@h!=Kk5}dz%2l=mGr=h58!k_&=Ug#KK=Q#a4q!(EW5x1_20Gy$c(wF z!ZKYdSXXGhKClFk{EvclzG(q|hMtb~0$yPSGy`n)`7dzY@X}pW?f)b*op0rUpZ$Zc zVY*bZ&Lta}T9{i|Yy3}VGC<)!$`l>2Z9S)_nJ+?W&OsocJsceiD**ppC-H)N{7)gU zrM^<(A9d<{_bRU}BdEbA_&;O_{Xa_6PmRDL1vCSt2Vk}HPl5}@H`B;?b&?MAAGPV1 zMmc`QKX+3Axb@ey>8D5r7HVLC=z)&{pg7Q7NWP)SbFA=xr<(bXqV%6gem+S-2?^0Z zE>8e6{*RjUQz+2biIEk6y#U@H7|jdW*9tvfM*f>|U~7A&&_9aOe?qScpao?9qayv3 zdEUAiAk=g8-M3RsHeBy;3wU%v(8L30BNHU>VB`UKZpQ&pUD4 zU-`UW*DStKSd^E~%BpETgzPp%4ODyA z!3($I!EbfWmf+?m8=V*`+K7B}K+hIXDcUja2BqS`{#SfB?A}=7(nlX<-oQqy$fRWH z@+7z3CWZI93yv=H;sdK2ON$FrRXb0cg$C?4K`$EGA(>KUU!u#QqV@mgor|C!y>+{qF6N~rAE$)a}(v<8ObC3^0qB+t#M09`$rTBE* zIWo(ndRZr<%v+D^<5;T!H}8H*KZ&3+<9q0*!Nm6insmk?)HxTYR z*;s}5$Ur!_*`Gum6}gHUV3>q-@4Io_<(7OeL%9`ZVdHRI9CIJZKJ|5$+vX`L_o#kr zGrTXpZ9B8C$_8}L)-hpSt6TC5FS`%#`0vwiG2>@Q2QaGg z-<)!xprq*F&6%++Rk$1*_=-;s|3ku;XeNJ83B zRZF6Gvlr=voiT~wur6<-Au9#LOXJgyG7EE~kakLnr;Rp)N1| zK}{)&dxrbiBIWRpH=%B=n>I<|Aj>K>i{7bSL3Vih{z2tCQ(*4;nGUq^swJDkd)P#~OhrMg2m}G_PG>zetcY(2>9M|7d&b zsI1elTUe0plJ1u7lJ4&A4(aah4k_s_3F($DNdf8Zl8`ij?}yGi?~J3)d}p2W#~5ol z<9@EYp1JnE_U69^wGzOQN)rR)J;NnmR1?QkZI$dvAIo7jN-Uwu05uHjDxC~t{pavlBA_W%4pf=ahfwKPO<3wh@yAaehv*w8dmgn27X}Ur2~IZLc{A`0qBp9 z(a9-`>Ob4HzfW}@G|d=>>}*aM<)E5Sbqj5Ltr*cEZzcE{Y3)k>brzb>`YBm%W&^@5 z+?O?EZdKiplH6aN#De)p549z(Sb%8ir++v~(h--`a}zKYa?p~ggVo&& z?uIzQh2~=f)t6R)v}E48FXE380CPx8>O_`GRudKtH%q>!BPnS#0}HU!>Y}x+QQ#eV z*U4)7DGKu{-;(9nBKjlL%pOzGAyjqt3f>0TYbbJ(?)?M?Eyjus->^yUh1`N-1aQH; zj$Wp#MGdpobrJknt5aM@spIanvq!CPNf>n+KDI|SINH9z54xjtnLl=T84V>BtQ zW18sEy3*L(3A#;8{Bm1^y)LT+_lk>*d%INxek6xgmiETSy>S!uS}*1{yV)o_rHRFI zEy8h<;WVj-=5KK77`EhH_mpKdXw|I`-<}}hp&XNi!^>T3Ymgep*LMoN7iKn5uhXQZ zeifje68&^DZXJa_o-v>Ft>WbSEO0&5rO3saffqMSu7+AQ%sV2=jiw`G?s`a`_BEUd zmSK=f;m!vjpK?6mFDM9{dK_s9n&gW=ti;Io?h&u#Hs<3P`mP|rwk<54!SDHqc8QuB zy*hS&l)%=LWaR*_2kR1Q{SG%NmM)sLvSlQW5Sx972W7a8v_te=;3rW-tAs*|c^TkV zj4GEicWb3+W1*(@-?OhUlVLV8_=5V`K9VORdZ$R3_zYFKt|22VS!Ow9uXwN5TVR1u zWWL!DTU-vJRm&bFRl!ilegRv(+Yn}5Pg}++=&;Z}H@+~3N|6a(wQ$CJpZL}D#r0Z- z&=7`7iA5G)*YHK5_^>{CmchHW;Oy69H7KKa7V*_+bT3F5-`bR2ctw=EBic65>_#&t zmG9Oknu?lqwY5E0v7;9Q&x*40u8cnSxPNWI*4jDL>eL>Yql2~>hiMRGYzmrv@QCsQ z_MF^ACi%sN5Ie2z)Aiw3L@>R17?22vJcoYGtIiP=mx=dNQfyXPW*Gr2YCEm^Ea?u77X8kAhRI(n${u zL&&K~P4dns*!$38cjQtMjCi$L+RG}u;A0>aPNzd*H{^^+q;6O|vBy)d6-?IGXZlOb zCWY|d!zKG{C{R0(`k7jR4u&pVn}KzavxR^S5WiQTbKEIRnK@5I9icLRW?esMfIBc& zVQL56Bi|}8`>T4@#25UMD*0S~^J04hhfEx}w?C!U2{-95fJfJf&f17B2kjqu6$ZURg#V`L(6jSu~rO0_4DaP`UVP zpR7Jp2%ABbYtyU~1VW#BJh)`uc!dZl#$F3WsVWBY*IzDj7)V>}@_l>?I7<*t4vBb) z3T~cB`D$w^Yjdm|;bRmME4#UF+gJNJmiuBdAELaDZikLh=a67k(XoyccPE*xCAmHO#`+M@}!-tcR%wpP8H{?rK?!;|ZC%vyjWlD=4s1WOO$& zl-0LTJ6Np}uyIw1L}TVwIX8YhE-|_tWylNX4v7a=_&3btiem5F`Zz=May^ZtRT*4D zK|b!Y7r3v=-?XwvY_uMd$HiPC6@ti}F2h$#J1r=%x4Cy%jw8Y~+f|iG#mI3S*D1** zB%lPEaY2;K;7Bk~e#EIMZNW(H8I-b8Z_-1@)u^oN@{D|Tv}YWfD>#C)-88t<@g_G- zR0DJ@9MpWkzb02Tk1L9IG14kI*GBd5ZQazcR*m&6jA@K#DyVEROYrMPoDS2jQ&!(% zwR%wYJ}vXa-nMR0SIX2c9|(JpK1@AJx56UV#pHe6o3B%D7rYaLcctl{gVq;IYoGV= zQ->9HxkcP*djTyZ$$9z~I2OCQG}qe*iPy;&_8)Mb$5_AHhczh66xla+a^4Jw?`NiX+lUg(z1Z7CjL0d$#f8ui}NnCGcO>fW%~*@LPO7(Q$vwd0q;?lINs z)O}4UxJJl<#MaBN(a;!0jp?I@5F6zqFe=eOpB_K;>-G)<>vtT)o0NI_l%pH;1cB6_ zLaMzXENM`-6l3Pg%}1*Q-EF1ooyXvsfp$FIHqGj2?rk4RiQVf)=%wN0G~fP#vunj*54cU{c8zNtAh?9V1swSmciG~~PoF%fr zlKDvgtXqPMo0Pdbu#lMnG2=FCf5d8Qu4Ez~kB|0gQN9XOe(38LNMtXMSGGw61EvM1 z>moWB_^;fLFv>%w*&dbmeef*B=n4d54Iyh|dxep!F`nU%eZ{rg+z;<;s)@T1+*3G! zuC0-F(j8nM>3N~Z01Drz&CQ?_5b#87M~FCZ=S??*UQ##?Cy8sL^L| z3CSTkMH~6;UhE3mCB;fN7kUwIJ{fcapGWCHsIO8+fGHDH)G>vvPV8S>iYe)WI^#(m zFDqwY)ZZI>nV#P`Nb6}%4>QtTdvWxxoTH|K_$`KpKeS0k-ZK4CtvLuONki^@pc#}B zdI7wyXwe3DpZ;JAXt5)l;jz7C?7%|YVQ#w+Eo8@x3h2ZkQC7G``UFJ)#WQ?k?(k`FKk%TbNNCZX6Lw{U1AXG`TU#-HGVU~ zQ(IsjA{RkM92SO~oQkV-bHEmcg~PxvARa}!Oz=Z20Xy<;DsF#%*EMGTu@|}tiaz=1 zn5hDJDpGr`gfcJLktRjFL6$gE&OE~>l2#)MopXg+R2r$dtL^2cYfh+`H$t#&_-&ko z+l1pMA?zARPrtCb*q5VQ_2tLryn+g>q&a(RNra%QOXf2axOJ0H;mNT3tS*Vq4f()+7IOIJGOTfHAbksM09wK8+GzSDFZ~`B z=jnk6CUKMC+K(=pw8k#EbTdL3&yO@h^-|b<@FPO9bJSZS)|aTfwPxaFxLUcaRc6ay z6nrc~udOta;8c-Ps2VfrmyeTvzZ}}(Ii!-L>c*1@-8G?U5V*^g)hqHc4pKEO?6ER~ zriM!UAmJp;_!fzdfrh{7lk_ECNxTeMM$(Z)Xv}?VP|3(Kv_+}mjH>~0im9>i(NLo% z4+qI4SSmccP;`jkQt)l~r?RQSte}`eA|X{taKZ_gYSm>gT=zY6WuC@HTorkq@yNc` z&otTd8Ear}auHB|)9qo79=4c8KMjsZjiA-(JzY;MLnxhl?x?unQYe@4Q$AF(7mXs3;k(@1V=H?4~K|H*5(O8SnF+C~S1m9gfLR%)2IJ(mVtG zLJEEbJycz3+sdunmf5@bM3S;}$&|g9*Tn&|&Z8;j{OWP}i_I5PT(|eVJcj)J`R0zj zgQZM@Q{V{+Prs;(HPHiFUA{E(zS9B7%K8uXhC1u0$W&=KuAMv`{I$j->;uATeqh*_ zpFL}4eTl=}g!91c-Qy4hh1N4kXbodP260F#il2l%wZk60B_Dzp5(O2fefQqo9Uqx$#Job8AK*~XHfm5bYI-Pl%(2l4(fe} z6)~$aci21MdY^1ralWSBcCRFbYWucREsHW*+K{=Ve9^34CNjoM*%E%m^%gQ4hL&`- z6g9YU**v}LR9-b5y=m8Ktb{$OkBod{^PbcOh#xf)X=2r@1W@?L_{otdW^E>BQPw{*X z@03W5($vJV+jVcO{-o~AO^*^>ESQn8fi)`2tWFiw0*zg$5?;m706$Ps+NLJ9OAbzs zH4q?C6tB4Vg6iB=@Th0qcxHsS?b6sMm__n9LKsNNG_2>$;sIki#e9s#)^993Go$Z( zi-(*0x_odf86%kyIuU+_j}U93ltH(N|D7kJY!{R^fCb!D5oVxCG6;KB@-y zq`boPO!=7gKKb-6@xyl30b?aQ&2qEcwCo_&;Wi@@abLW+3*=Zdbq;@-697Cw@!Y933y_J zm+oBr?7ergkgq#m$w8VHlw`GDpG!G{Llbd=o{J>GRbLvbjKDr&4pg>Dqy98?c{ zbCrM+oQ7nVQb@0kHnyxBTXYrYm>RrBu4rOREu^ldO47!;r)P>;MrIPan#JS!{LV-T@7ZfD7=X4vYmMLofd_IP?UQ!N^~1U&fhp ziFX<^TR6^Ut#aO6?;SG?`b#8C<<^BjBSopn{lw@=#gx*;bjXO2>+IxW3;%c;C7lCJ zR}cFA&hsMa7glde(m_*iMDcn9E^Bv_UcU>k$9r}d!2qAv3!79pP(e8!=*GCil*=!N zNA;YTv-(mCrqwD_L(FA)(eha6Jd=JYMQGtJZWKJVM0F4&F@vM9p76kJir zcz>~!i@+}es3?;9XW=(--O6XXf^JlOnSxTiuc7sLqAs+InU%Td-ovGQAr#A_6wnf{ zu=LY;AF7^zggR@MA-{dmvY?JgjQqs2R=-FNQoON{{Sl>lX#>dwg}#4F49hktQV)}q z&xG@YI&FTDlJaOhjPSbk`|bB%C&EH9_Fl{0KD%WbAD4DUH{xvtNn@z0P(8qM$u{=W z25(k(EuO)8PLWmJuvQl4LYsG)_?E}aHkNlEwftUtQIfcgAICY)9q+GmBgd z!v1h^{uC?M(yT;R{}c0<5y_O|Far+YZw@>T#rthA@SafB6GG6u7Cfub$kSYCdrrlr zI5co>{o3ABI~FjezP&G)-CxIo0fhY<|$2rkopdJZU^%SSuf_3TrSkW zN<}#xR5G2^o>mcE$>(+D46*GbWC!SHG#3Ww#*$FPlwMn}Y#uVO|#0cGJ=FBVUz2^s6JY|@l;tB_z_|tzpPg7H3)$JBeab(>^ zH$gLuaw-;mGsH@(kdL=d(tohf1dHcdHDvIn&>LYkCu%aBf>51EFf5^fqQ%_Zf)WM= zNrwFD#gos0ixY7eGQMlw8IQ2i98FgoZRpTj-fwzW!neBD`+9xu<%P^_4)w>F_jt3s z^8un*KChuuC=UmYym3pj+Y7#~Zl@`rYP67c_}(cuNbrriD-_pmQPtx-dkIhnYojj9 zr4!BWs<6{ySm=#0R)%a@xRd?@$l&o}!buyuS3xZ*Lod}cpPon6$)*#sGCNg}=5bKH zxP<60PmetpAsOX5^M@h7(T6fdUNcm!ESUB*zRik)elg^lT)*3^SWguvvLuy*H=tOR z4rTl*u?9B{Rn*cz8bh7k$quh(cG$u)RjGe-``Ef+(^G-7xs%IF4%5jo=rDut14T4$ zYj^exavZDgf*f3+rfpuvUcraA_GtWOFH4+ZZijU1O86BJc9XvtiEK_Vizv;akR7~a zdZ9Qz?Of4sY+7_AIDqX~l0nJz;cI1do3qQG^c*9QEBP}X@dpLLpS+id zkkB`6p}c^E;*b0n^S|f^SO8-IK&L4FYUsCs+Y)ZhB>RI}>^VqlcIhdL?=l zMTv)hD9xRm>>Ro1>78tCtsLnrOq@*VY#q$#&7G{R=p9Ur*x3P_tcTx_IGTL>S7})v zw!n{a12zs`-fz44n@3;Yg!AASOqo)4me?;qu#;Dt>bowNwQdB6O* zhkv2oW&1%?@UV6NeOvsSy5NsW1C;>i@IMOu4f#K@{=Y6XJHro!{uj{!GjKZq;!Re- zV+e?KV*xa$z-eR!45xlAJ!kx;S^Klnj1M`6zz6+7V8Z?v)xm?n#Ki4a0+WY0+TWhK z?*bE6KxYn=_q)D?l?||O`K4;-@A?w9hX~7`0Q|Mu;2-)D;L!gTA`=@RC}kyl&^`iH zd{A%$QY2OeKzQ(L4b0zUdd$GB_cM&Yk{Sq$|N6%LtK#4%5?DqiKv@RJp8#Po;F1Z< z@O|?ZV+Tb1ztnF3r{{tFFB-UqOYFZr5C8I%F|q>sCsrUz3^-aqMS(O)pu7)9>nB+M z{b(86T70{_9z1p!08=qpz-5L`NuG{_fq|BlO~8TqXIB?H>)%flz(4w|&uPwufFp0q#Do#G#d@MmAkSpMZnV*>8n zhwx57eh9p)%)sja2;i6)AJm8c+{NGD-~Tp~!toQu+<%-&0Y+qgTVLQ^`tCgp`~-;n z0E0gkKtK2G6Z{(U!)5trg_(c_`ALO2et60Nk)+;Vq^RF>6Mv$d1pfNp0{&(}2)q>! z-?#tpAY=qe%=YU6rH38%C)%IqqqB4T8MI@OD#XTy~#u~Bfw zYB4#N=_AgCrCDU9V=W=}Zom0{?{5189sf%d==2EwW#{KwU_{4;)va?n-1;%uDes*U zVyUlguLs6oQ4#22q#RA1MY^ku+WPYGcIcrE5PW>KPg7NNK7Tg9ED|hJwR>Jh>3ief z&fz|E=j?_QjC_|;1Z{>q^%9{_zZAuwKwSeD|LYZAIv#!-2Ol?w&!|TK7)2=L9J67D z1^9iaVD-6H)9t24cV+Uau#1RVY5V81)3vF+3mLlt(PEm2fYtd=dXqs#Qo+dg3P>V0ZhW8fb z>14E_2AFp0u5WM^(K}-_kEDPEi;|7@CTH*%(IQWxLJ?fiN(Jv6&K6Kc4F4+`%q7`L znI;QX?yFV~%go>vHR%IP%b3{7wI(CC@f%u zA+A^Z^iU#4%!!OusfK}prErMf!X@*F4QGEUd}(UXi^t-sWvNxbbd0}(89f>!7fU`h zOi0w)^NNaNW9eo9rwUgBD!br{yKy3=-Qzl;db3u9w+C%&d3XvH9j{~5OwCGpB*upa z_6_Y2Qk0mvK2A}bI5N4;om9+Q-0m^0C^=Z|*aO6E2MSJ?vo4Y+RO@RdLdiNG*YUS{ zo_!VWHc72Fb45^8??jXcRMkb16MY`S?#jwMR^2`%ovip~L*HCYZL)}h15Dy&Ia(SPbnrzYOcfd@28C9A46vb68Bb1o$>^| zf^;yp&+BG6rd3ye#E&($w#)g|t2*0P1mhZocWs>dc~D4gvDlL@m@1(!HuNn#yscKe z42MV6WA|QaE{^t=!hA}WCB>4oHWV-ZylA9lEic8Jm+TdUc(M;_tIpFM;(GBIzN0%d zdwn+%4G#MhYqw#YXE{jp^RcBA$VnSnU!AfpPetTDe+y+En3T39%3=@bhnHDG=JWEO z!Aq^EAl_B6H(;=3==a!0hp34rZH17>qc4PB%99FwQDR|is^8>xzKJ>sLHE1DAOZ}OdZD-<~hOh z?W7DTQ{C=Kx{3{|s8D+adaJ4zE$br(;ToSlSC}n{(JYqIPz7@sTi<+uFZW~j*CG<7`)W#>RZ0`j_FlI&7mq2?Aj`b6 z@Cj78?f{K>V&`JNTD-#`US3IRT)jxOEQ-%UcY^UAmn8xgbFD59FIj818xziGVWW;8hYL0dh@2;|O8GmO4C5&_xPF-as`uFbRm^P)t5;w~CY6Ku zY1h%`@lwe!v+$o>l+>uNtT$50Lm)BCQKXW-I-OxXcBIt+N!Cqv^wJGihHw2fuD7LvMND z+&e?fbOy~}g-P1D{xS}|iIUwryt)y^C2)t4FyH%}JgCTJ1P@Y6IKMlMsG;>V!s705 zO?37baqZdB_KH!peJyR3tVK;;ATBh?EfOab$VcQu&o0UNK0pwTYb>Lc735DHI=VF(5vsYwR)3 zeM0))`a6hHPzhlxGq0bTCeU@%afziP@!s#AUSy~;~qyZ?Y3hGb!E@a-?@m6lc zT1a}KZ2U%IYUgYCi{;%?3YCtvB1m?1Pb)-OyY44(ECNr zq@HQHrHFunl-Mbb5?x~EE42(s-P}gWP`?RwW8t8Q-0KewPEa<5sxPKMzbgm?qizwW7ZAVgjF=H5Xg zu_*N`D|?^uV1bM~XGdzfmP*Ix8q9JkP{+PZT?;>9^t=cTmv@#yA}i2RG3j-5*Ne!V zZki@2g7cRWiv*AS8i35H#E5-|A=6iHC;E%vzfQQOC`&T2A4Zw`IcEw0i zLSWrvp>N>j=AZg98#FS-efcqrrdj*c!QRE!MfS%Fp5w&u?g!Y@V_fq^6atXiTd$Ew zL>rrjo{T0xj@25@L}c5*97ehgS>_}XA`;{8F-Bj9j*_YLX{9q?MI`xj7(g2hVnpk} zohj{FKJ46$f)eEZtSPsExTBfL**a{n=sl|&!a});(!%>r_;_}{_0Nt06;-94?Y2xJ zW9!s+*Y-xzgwL9b{HS-(?3X`RT7}a8ggOxvwRuE~?g>94fJQ2*X_N_~Zj%@8kBl#%~2g z(9v3>NmAOsHl;*WWXeskwHWzGyW`aA)5z$)T&h_eflHuSFX~8K93Nps*nGCJln8=e zpAcO!BXdyai+jUIHO)&=j10){P&YrwkhYK(Ek(k8bE#k3A0pEXWi#FP0%w6* z1FNn;g5x-sS66XDwKB87U_<#T(+&rEr1-2Y{*h~FC%g>;gjF}&XJ?{&>lV!W_IXIT z&k_Afdr-&h&Sh8u?*oPh+LTHx5)Uk2@>-;*H3<6Cc1lu|vu~51v zv32F6{ud~LDvIZT>lh-zD=#aq7B3pN#+dE)FTxeJvuQ;{u^HSK)olWk3`nrKiHl~$ zuAVw7W>}zKOYP#%Ph^dP@;O4;GuW%VslE!g<8Be?>NtFX7y6qvG}=%oSTPaWXw*S3Y$sns`bCDdN3RX3%? z&VL2DlWiTha&Lr^&N4hZzLM`D0Cz)x4aC)7)Fy?|yPFT^r76}6?-=zy=Mu8C((8@B zfO}>XvE%v5&kQ%v0dl~5LyCaRQEZF0?r7t{*PU&!OOZeT-sLSyQ^JL2w@jtEm|wvq zHlikqSBlKX_lmsjjA8ZILx((jaVQ4V2*)J}kCIc>(di-+Cc28Q)@ow=L-6p%wAse1 za+W<~Wl+2{axIZ&7US?yv_A*Drdu<@F4q#jU^Qf>aD{q@yLp=T&Ldkx=S(-ce_F>5 zdv!f@mwumR!0i&fQbQkHKFRfBP_)%nF1Jt=gkx)B;8B~^x>F}1RLSBQ*I0!<(yqUI z1stp04WU&P;w9r9zUOl)JQ$o@kKR}soJV7yP8~c- z7k3@PvY*M;^MOP+vG51?!YdQL;0vwl=tDHSyM3ulB&U6ZXxE}W`78nVf&+mGZI6i0 zkCL~Ngc(#R3BDjc-Zq8YJ>-*rV12P23Rlf%grAV%xRmfVPsV%_XcQR?X)L)xCK1$uC~@eJaafd!>Uw3EguFr89PZIdj-0I#|pFF09h#%GbE7PJ6W|jb|B4w|W?Pz}>o|g8| zW77>v5-dJ_@|^Xt71mT}^F5HXiJrD22$WLwmc(Te^8gAIlK0p;uNxMpt6<%or%b^4 z)mQ6?)jNBXo?CTYWj+sKX&-O!50lq&VWdWOwg@1fCV%#-nB^2n%SDq>_%I8W<;>0# zXCmk-p7z;W7~FgKL>HJTFd4ViepI9`uBRu^+3PtgW<*#AI{6tCF}@S}c3z?s`ygjn z2p;zYH*h>~ykl$3Goo+ky+ZJ*E^BY#2AmK=$4|?vti2$zI>M4*Jq^CtAs5Bo3*oU~ z-Gk5V>}&sm)O`p*_+9t#4;Onjz_S9dfB&C!GQe_$^(U?H?;W|n+rUGx{C^mpwd zz~|++_`bKj*#KVV!6*K^i~V=7ziPhy9o{co>^Xj*Mt|XA&-yRj;y=&<6cRvh{oz#d z9qTXAJ#-uY?6v*Esf6P%Q`CR;(vXo+k(ChoZnGmQAR(=yDDopQ4m8^TOFfyt&DDQ* zDtT~PV*F*S0{h zZ(x7nRKoc~ulPII|KL;txc&SWya2)RV7K*$d(k)azr_1cfj@V{FT5%^|I#P^-`((w z_%~(-)_-XafA^|j`;PJtuL`!`qkL#N{skql#s0YkIDhC5|Hi9=^>v} z|KqL12%M+i@ELzwbCw6*?GJiHwBb@&9U< z{`iar_ThR>1!Q;57cPfc@cl`hk1-IoN-Bsu+O? z&4*+vfB^@jREz*=4+sXBfjV>iQc=M4&2R93_bou}{%kY+@K^~*i|I)y>4{4Ti~hJ> zA4C(sE9e8)27vkw@f(Z$KqmhV;)4g=Uk?9+WZ@^<^#{%p;7ooC;~Vq$Aaw#1Pk_Dw z;E4ekz|GF`OOEPW^5&m~VqyW-;wLcv@(ev}K?5r@TL%j#bL$@?otPQe{^jlYV=*6Y zap1H(xIBEbPy{?letk;*Mx!x3$m#w85s(D@Z@H{&PY9<<0rV zssmYL-*K`4U)+G&GXe%wzr^`p7LG_fjEFZ>Ir}<4u2=o(+-x-_oA23eOl?NA*?6|WaF{(h z^$j0dMD)q})wSBw*3$LxqYz$`ovG{b>|3Um8%w)9Q4D|?^Q}Ew&EoTfmiv14srE6a zc&>fJTX1BGv?DMAnt8X+!<14PilfSyVzk9 z$v-a;XOC!sYML0o$9oeZJf*PbgqAoWn1m}*K`qb1^bDp{oz%ei@IBe+J9s!pv6%481n}cl(D!UqhlJ zJ`KsKb)|q~1)M=)%mD+Tg-}xn_a_t7v=cDv>BTTxX1W9{Ufx@^G+Xh}!O=uVIOxav z>TavGeU zmN`zI3MYiWzM8%rG_@E^@;2@=Gcr~ZkjUvH9cctZ#ap3djUa(AIYR3jJk=4`64En2<4KU$~M*7=a7o}T;26v-ypGGD-B_q9=f&h%z)cvJYr}Ol zNcHvEINKoDBFesI&RH(uxP;Y{;Cx_Oi)?zFNGTZ@FmAreow}4rT9XpLbA=y8OI;Po zX*ZDw_&b;=;3W^N^Q)CJgD9x?(@MkH%>~1T>Nw$Dk!~9-$#jG5Sq{C!`uauxF5q!; z>>G9rx)KoWPDG;?OFBC@66se`ZGPkKCUpA41Q)Yw+cFbpd!JkAWM+qVwhX^+6KSi_ zG1>Jw3`5~IAbc6>%UwfvI1wwMI;K$is(-zxf^Lar^iuST@c1*TnCO)(kGd&^0D?qFocN=`*^`_yQ9hrXn%UJZ?Ws!)CK zT^qP^j|jCOFr1VHbq9hfsF#MfLxSVI)Dt=`;Tkv8%7<0vaM(>ZIkec77fw!nRt8a) zI@Br=F|UGmeXu&Tq1>#DvD=GqJ5orMwPf_y{hHM{i?lmKm4>&TuX0Iv8LR8R+v$}I zaA=;d<@4ty%SX63EvjP_6N$utp!qNjIgD#8X?jRw#6=xCt8A~jY^CeoXc*x436E{C z^!zRA$E0ghmt`19Z46Fz0V4wXWoD{8%tK#K<`$OT&PBwX9{y(;pO6sCZS#2#Q_LA6 z_qYx{mf%0aq1(sN?CPfWwc)P%PRsf4R>gTj*gn6xHdoz8qffq>teh>~w-d^ilMj6> zWQmw59PpMAZm|^yQZoesr<#Nt9 zB09Pdu25zMkqWFxKfk^-0&I`|rBEVrZg_<1hw0-*5>X@g=t3{tTeBd=9 zIujl0w+JI{vSc&^;bfAdDjOKfX|ih8Oio0p;m8D;>uhdQ5l8*-Kf%0J$q2D9O&`4$ zaLeg*5o8BnKu-+b+|I3L%1Oddf61X{kWlGoqB`Ad6K85bu7*>-5JdZ#`>J@{C`{I` zm=Dcff8AiP<{SkXbxmtS8z0tDpJ*4}Q9pMV)^S4Wm?JeXKf1gNcTNtCFydqsHq~Q zcd$L9^{h^*_uy5Xsu?`_w#3z7aMkLFI_sXpUMm#|x0oQiml#Qf`7(b={M4<(|Lm2% zho4S~@(CH&Oi2J$ja0Pf95@HX*VyV6swXamhX(pnZjmxmuOrJvbaIl#CPZprS|}^q zb7&0J#qtiZeMz@3UN+=vZ*pns)13+_(J3H-kkc-w8}n%2j`(x*-sW;VQQyUkM3wG! zj+PbX+$Q@xkBuVBQL1`LNUWR{YA-iq^%%uJDKRBg=B~K;G_U=1Y`W-9wqm_|PP@}% zc(H-<0@ZthEFU&H#4iO_N!-H%Ka6&Kk!r4x$oI{{$Lz-;ROdlCof{08p2K0yq4H2K zHxWc&+j-$cj=%-uCy)CKmX9-$DBhR)&=x2@DRK{emHj-Ey+?$OAv77A{g97LH|JWe zE|d&&)$FNmSWP{ zg2@*hK59h>7lY%Q7Bk%(W?eZ4sj2! z9<1xI$ceaV71-ClPVQmEEhxLzo%wG5`T~P)1b$jrNY+cg^lImh|B+itH0C>W&zfpt z5X6{w>~19zE%&cEAXZP|Tw_nhLqJx`36pn3iz>CEMo*|yD~b!1{Ft7G>e~ik;O0HL zO)9=UT&`FN%_(`Go8EdF%KDCrNyo!K-8za+m%C79{|mb&gD|#x?zPD7(+{`73mCVW zzTV`S{1CMEF>$$b=({;qGfjcxYmix|Q3y03(g&B~P%HF#@RCDFIes!_I4Jryge!e* zUB%ulv^(Xx7#Zg8p$ODuwG53CRZ;F z&UaiU<&kFUUOK?6?ZJY1m5{qF-s0nfuMSoiMVC@Hi|cq(ogB}h7RA}YaBs~jCvJ`f zA0uQ1)TxdUofRmP(m&sT-WriZjvaA$)V1?nD?flNgF z?<+6Xn&9tQaKGl9&2JH>7!%WE?2W4NH=FFMcp6wa#9^OXyJ>+=S8pH8&>X$xla74F zCiRIvBFOb*KEkUIx4CmEz3>EIF-HH8e_wqMkA53dOq~sX=EDlKeF9kxCG3;SzR5aA zT}yFgyC!Ge`8j&ID|a3L{4?s4#gBCRii?%=t%flNCC!)e{bOjvx3oN3AOxT%DJ4~E zF1(}Y&WA7`f+rwwcw!mt4lVRjN1#$n4CZ(yg}NV|Es0ju(jO&-T3=XT77iRT*yO88 z@bTD1k#wQLVBlOYB31JfXo!36mnEt*)lE$0V4=C%Nz2w5Bih;PP%IlE_$!(kIjBwQ zL|i5&Zq==X+8n>ot*Im@BLg2OOFPVHbpl0c*jk!(yUWY?64FCz?K5I{l2)4khS4>} z2X4tc{W&`XomVx%CfT+5RlEkd$Dp>y5IYQw{?P62N9B|91n*CxB-z)Zb}64ko8G1F z@HR9Nsj{zjP**lKkui;Yy0fC0<@|tX^};G97Bzr@_zq=7+O(Ns-0T=m`a*&}oVU=J zGQmIcFito-G4aW~>e~FfAeva4nu^X^ueZsd<1wPNLT;clH5=0@uuJa>>XQ|1WMqMJ zO2*lo{|-hdhqmI`N%Hmef;$BdIYo8BJp2?TVfUP;j!z{nWRgDPk|8+rIBj-(e9%`n7)9yvAX-Z*dwJk)LM z)*!2c8~*uI&usChg!e8*bt-+lCI<>CrWIUj_rdt4d&o8GtODN?Nu4aa?xG>TBJ6kM z+oBBqH2Re4j=nAODFHF0(};xrJjH;0fNs1A!rhV2vY*Ay3?~6oA3kDQH^K8gPOQPB zZo`7xlSQ4rikCBF{5s}Zs(O@x^8%?UP1M20?i$rXq#gng)|!UAwe9NfKB$qJ!Y=?q*FKsz_~&r zZ^g_qv+7;Gx>K!&mE=Gc*^NZ5Mvmdia{>jpP7s4vXhL4yPb5{pwCQTJXo=(9atrqD zxzbdg<#6D7B0_eSF~m0z^_2D#b?Lwk5=Wu6K^>CIN3-F1y+=&gbrVKHfb`jC<@jd}UcC%=Yw* znh82Qd^Qym+z)lZE5(Wff`pRk`q=bbT#}5%ZA0Kx?PaOvJeu!h72@o^7Dim9_}IN5 zUcRNBKsR?7P#q(3ilR>BP;PIl6xYw=w#tYz&!f%X0*Q<#&#jAJR54eW$C$lSi8Uv5 zt0AaJf4O=b-reJ)L4Qb;vEy_lLSPS>8i>Fdwo;I^q){OxJ1fkYb(^gowz7&L^Cex2 ztcg`gbu$}>2^;lRixE^6m#+J!Q`ninF+fWARZFIyuKj3-y0(az>XS^2$xbNO)HnYmICc%bU>FvBbz>T z6x_+xl0L5Qe_wJ1#wXEu%#XegS1NgbkuK_(02_o5HFX@$(Pxy77hBku9hO-z>LG8L zVdl-(P{(X^V^b^biG`Uu=T3-W(c94o={t~aGIMga{lP|zYA5T|kX+Avzav)Z%~L(| z+{WHW6Q6ZM?tZ;I+?m6bPp3)xk2OY2R!`R2Te*bfVnC17cGdQVZ^IkUSnl5B^`rIS zE4C#B`c93j=&XSGz%V6Z98z#uWR;1G26&w;N_fM1CGH*NZ8*Nc(d*9*qdmF^AHD~{ zn&S-o1r7VH>Gqp2@ju#)Y{0C+1Ct00sshdVZ(P?eiG*)%xBuIjWqY7Ne$sFJ3z6{8 zexs6t%s&Rx0Iv17?LHbQh)`BVF#F0rU#yg9T<`WMxlN=p7X=PvOYLv z|72l*AO#-gbN({%q9Q9TAtM1K@#qN&$O{NbC~N#k6+C47{EjLBrjeO}Gz%7HpqC6x zZvoSBK(fU5&+)6C?ze68XOo`oVMzNYz<=NhzVY?{el(Z??*G9S8kpb(NE2pe7CMGs zW)=KUL1tiH`DZ}>!WKLnjX!$u|8pkvfF>wNun!oJJGyZ)lllegc@y|tM z{DG5xpfP@^-#_--zfcIkkPSfhecNaNR3JP7m~;9L{GZ$H--iW%F;~v=@L&AzxigH*cksYS^iB1@tXx_2DnL}au2x$4>u7opZUNC1BUv{ztqwEw_VEk7t;Fw z_b&Y_dHrin1YqNsALyR{ii>PJ)2L_K07cNq`QzJ+SCG-gt>5N5uy60_aN=N`{+RgPX&jg7r} z&XE>nJJ(uki(huI-cx0!MzFhC%ihzvZ>26nU}_dPuu9c-@o_yDoBqvRn)mtFfLkAr zgkI>olwB+{=&9hCLj7hG`@A_rFOQGsDON5XA4lKs56w%B!MHekdIZp-_Pz_Qp(c;UF-wJ+wOt1RK= z5Np?IYg)qEPg18D-s84T>NhDRzvT!VWg4pXMtN0E>F~MhL&|i0?5D@!Q7_t9q40$o zeU>SaBd39RA>}YQayrMj&mb&cKv;cuQcQJwpA;N2^i$S^51G;pbkCLbBC0DkKW<)0wm&di_b;HP(>X ziunRlg^nCpEoNgQjUfG(jxo=AA%@p7ion~lvRcRl+_(kOHonF z=O6rWNSN2knos$;wpHqk(*{0Kgw6Ovbo4>kn0xrL*=VJa# zOHQ0<4-Bp|c2fo$Ajvv1p2TSY^^)P0z~KJ+%r2k{6q z{BXV1@?k#D0Q8EDC` z0ru08)>Z6MP+>K_R5gv5qMSil-XbmXtOV%W0+QB7K@?P~-F?!Ki7FqxS_oK(OO6QVlwBD9{~v8{8CK=iMGe#4-QCTmySqE3TRJ2JDd}#I?vw^Wkd%}V zq@)`~q(cPsy-}a%Imd%~zW2M{pI(y!8i&ohiHpK6Je3CP)3v|YTI2H*R%7o}XhXv|hRq5oVd1amaX-g; zKAUir*?oC+GF!7Ou}R_6d3_vpv8I6BoqT`#rlxU<$f!~9xR_%z@*f{_>fos@TC{$ ziyOG0d^jmmO}Al+^0^+hl}DwPDTVVA@9f?9`=`UZ^g%A ziSwFAa?U9GERS5?B#Xl5teQ4Koe4#w=P@;3*Oyv#6<$sgP^vz=Y1++26`VwWQVePs znp=no*mD6_o*eO)OxqocXn(xMfqCT0X-&csM*OwJCC(J3SY@dfmTo zs!fDc)u)09r?;}JK9ZnpA*5xcRAZG4D(07 zL8?&$m&4=DqtGGf zm!e~)1pd4qUd+y4%7f7X)BZl?nmkT-0U^a}umx_S zwOpx>XzwKgtq2Lz{S${`dz)Eg>AX-*u#aTg9sI)lL5J=HuTG)&z1zd7Y}skUStu=2RM>W{jZ zFfty1ui!}YF}V4B%0~~X=rsx6^p%Ac7W8E9kfVMni0|S{Zw0XKPUmqng4Zi$LrSlo-NdIRvjeJu|seDF+4!c-YTC7SKvtMEe zLMMsbXj1X5<$5mc)tzjnEK<^%m-}lQ_AE2Jnmr4tB^v$sIi|EPF67lP^H-rx-Pv@C zke9f;MAj~C?AaKq163r4>70!$qZJh(BzVXkMrSn1eGs#cai)41owHH=p7>ONr94c5 zfuf6K*YOqIfmYN2`e((8{)~4_C`Uzc_a1n$l1Cv&#uH(Cm=E)>%f3UeC+g2w4QF3` zH7Ih8>dP=_jnxKA^CGKr0YE3`Pi0AB2i}y0=LX-y@=xGBD3KJaHTdj*6}#5kOJaHc8KauZYjYDqw_* zq;QVh_8jIzIedC^_V!n~%tul%Pn1G8Srunapxb*Xq$1(DQF1)jDAXO+DKHj!bmOU6 z5{2QT2Fdap0;MeE=>%A)kN6ptc)E zoLps5b7Ru2#o&T{p~9kuxUB$pZF*HlPRL~rvn^spo)*mPe=d$SBu)IZ&ro-Zb5(;| z5~fb|D#FB|*l;=fTCvY|H&1yvY0&LB7iW!OkVxXdj8<$SNIN6w~{%(#3`JD+0u zB?Z|KY2RWsR$Dx@QtC~9;wvTQ`TmxmnF3qZ_{VKHqjlolb`wOWRZTXT9bkeUEMU#@p}kAn3>5SOj8!p^eE(|aLIx{sU6{70!QRR>7;_#wL2aSa#(`gPQ^Ht+(`v(J(8MXi#Hp|S>>`+Qx*v>-gJ zOvBv8IfKD9;4!Z|S$K7ulvcljSt>Puw~hPHFW$fW&i@1R`GctC0VY?0;I-T7OJHXA z_r`)h{my5B`t#(uuBsAEy*|`83N=Er-PKEam{3r+*LI#pZf1u?A zOt}ERo!_JVS3E8IPfk$ZSk>RKBb>J$MF61Ne3EVD5m)bAXBej`*Jh)b~v&(6{W` z|6=60^}e|S<4@Z>w;08g^^9fj0{Mr*X%LXu`Q5M#V1B)dJrpH_W%+4=rH84OT%zhxkQJQz+O74eqc`|kI{$;%6neZM?bU?%)8Gv{1) z`iAm??wF+h$Ad9e7t{I2Mfd|}`a|6KftUjbo(5j}?-BniRRQ!D&h!t{>3~n#Zx59N z1k70jF|Gi;3se)1TS6Bg9lss%KM(c)nk@bAJ@~H)Cs6e6x)Y$E$kN*-vENAxKkftv zP>S{8Ih+ca;-#N58pUD!HR5@%^F8 z{HUD3>KO|VWc#CXeh2)|+xY*ba)SP%!~Lfx{;G0*Gw1wG3;JF;+4%qw?t9q;-3m%~ zw4eX~&*jc1@{!x8$UFbVMQ3aSXuA9XaF)IN-9gY zTFh7c{axohw!E~J=Gu}-51#MupT{LtvPSK0dU)R(e^uR)nQOT0zjrvP;^}#B`uY&^ z>ZlL@>g1gsmh>m%9P2D8Ci+BGgwz3wXtNnjnei`Y#F?Z*S4X?=-VUi`Vei@boFd6c zM>kM~ew9FPs02*BPAvPY4ZJAYN}O81oS#fIcos$(2W@z{cNfro3ch!9^6o94;L)=} zYgn`R?p0snZ~2|VdRnd-oV)>rXRvU!gCHyV8)nr!ja(8faFn#p$>_m+_sPmTwqm!4OmqW$U|_8#k!Y+DU-n0v*@~{Sv>!1p9e=lQv7A%JrL2 zVR~sDKCz?ZLXAayUMoe8Ioty~oaNStMo1Uz_5|lJr!R|Zc0p&EE(V3ynButfa1FBk za3#%a&Dw8`$jI7j4H~%*Jx*E8CxZftD8oT*IS#A=zd&!@Kw)JHO8z6ra3kiTyH+aF zZ$xyE4$Jqe6hC-Yr^Ftt8iI) zNd1RI*;qF-A6CFGJ&w+No(V0emNnFc==>a_V34i* zVz8&PL-5A=^YISqYGTyH!ZW9A4QU!Q>N&cNN90scy@@~oj<|Rl&qcbXDPCUV#RfhN zB>y#tG8PKt4!OyBL0(!H-m9dJ>>0e3ip$gu5A(hU5!VOo(U%aIt{8>S$L|CYSx=Z; zPa#L58uyW3aantf*0hG=^7dAH(?)bh3*nd2z)QyUKvbWDDVtRfmZ8u|P;02eeKhr^ zbcWIPrhF~hr@#DewJ71Vfdex2ofS4?HYH~7X2W7A5-*J00Unef43T57JrvR_d4Ci{-jny$g^_{g z2I|#Wdz%!mhuR5|_y@q_obPMK_CTUTD!$YnJ|%A?swkoArW>u!j22&`xUz&dR?o=r zS|62u?Ya`M1M(zo+VqACj6x10pP!JM9I;8%8%C_9SdhIp8qX23E=A3$G|i&w=su&j zC26O~+lI=@8_%G`+|rt+O(HW`ZRNaU%^J_gqGD@+coLR=uM-6eeHf)h+K#V(m68jJ zG|Yj8;3Y41OO#-^p!6fx#Gb}O%(+G0h3;KX&9B2)Q)L%4RXHRr@onDwNcJuGfup*< z=ioZSe7MwlgAOMbU5)Y)2CIRL+?^8e`&iayt9|oVQfM_*N^kPrd(}tiu+qg2iOQH4 zmlgSWqC&bpav+Wo%g#pcf}^D2C)M;&A9vM4gCb+1HlOy1Qm?iRE{SeIvp^A)Jy?Xw z!nj;zA=3J9;-Ik)Jg)zfC z%7n@58KkS|cQ9S0v#j|k4*6XPgBadECnL9C>`kS|77&^?%j=MH#vBnGuW%3}nT6mx zMy_`94g+JkYjv-ZCnP!STkN6pMwhD4JL+3~oHq?}> z=s`kF5~UMK)vf4jM|!skhT~U6q*?SRV7GRr(B~OVYTcpW&Zgc5i9ZSZ11#+2^mmSf{=i zQx4*OJ3LBq`g~BfMg-fOMwi|cQl?HlclA(op#@H?P%nVAMa6z4gRQ5qRu@kB$>-Ph zg;JDei9rWGBU@hmGZs^P87CCU3E1rqaab${%^3wRib6=K9(ZjTI(2!$J@!&Wslcy& z_+<+W&TU9VN*Cow#R?J@on}jMd!sl%56)6NZNh3)NVR>iCu>2~XG>TCvl{`I+iU-Y zJ^EI@to>p5U~-stC_xgbfO3}`=R~fxmc-25B?8yA+mT0VH77J9kkJh{KYF&GYFaeq3*oOU6!ED3 zG;Cmh6my*2+&+UFq(9Bv%dfJ{F0b@f78Li&hal$+%2rQ;e7hhJ%}jZklM1V7_r4(( z0=e)E$>hQzV)%O|xVBk@_QBrtg;lK+_(SP?1rV=c`)Tk(dGg?oCw2&Q-7{I8u3q5l zD`V$8Q*bi+s1U6XIh1P1zaNkPUd~>hN7ni5{>A(Ex{@}YBX5W?X86l9FhUC@^f0#D z=rW?HNQ8;=5M#8rFyqE6YT_%}HliwP##;%S@!XvK9FhbSXJQTyMQcOSb;+qPvsuA~ zJx~b6!LAHnfqC5b#~`G957{s*jaAQ?3|a0Vh`&)JI#?CF@pz+pDwwb{k4|;EYT)`+ z^8HTwM>U!1`m<1!KE`|s>v(yF-GQvS*7GWm-d$$$Wj|xA0-_|AX%sYN zZPR4XMd8Qxjsy~;F)(9uADz;CuGy3 zHRx^|a5k?pZ(!;W9t_wiFmnK&eJ!o1Kb6yc|FYCDPADtbBg^AAgSU6NGgYZ9V<*I9!IW z=(&Lx-xztVYW`f->IT8MGcPRB3kCi>x6hAcpz%sKHm5?VM;|Xik0_iIIX_PM9Nu)6 zeT9Xl&1B6zN20DwM$}&0eWm!QY3{so0s72Q?QC1n*}G zoJ%@%7P0N*K^hoV(Usn>hrQHpqE?P@i)ZDoK}*v8G52+J~By4KPr~zNidSU zM~16j_r^GR*r?b^KkLdLvR|SWPXY_24uOm4-KcuZi*QK7Sl+N(#?fZ zp&892Qc(Bq(>rf`DG{G4(L9)cmZq-_!+D`8MPG*nMlalr{(k$w_6_VKR25U3<5lp% zz4v8~3?l+PNu0e6wlCya&lQT376kkExPAAYmY)z&cs*I{u<$npH`^ljz%NA&AYLVt zrF}~*v9C@8A&~nqyUkbZh{v#HGVl|j*G(iYi~Ig@LEK8sX1Hbzd@qlCq*8Fssbh$<%Je9Weh`{7zWVZo<-SNtV<0!kTLafE5y0cwZ%sWf? zQN5H)&{&J5(pjLF?Ji2wUM@MTXIP?*0nNagir3GTo0CGj>cb#D9gVFJY5{p!C3cdF4PO|AWL{tLl4-Rx3UWTGz`9TQf^B zD_KZ!)=^Nru&uo3{wcD)g3z@1yBT#WXA}d4KBLb) z70c=$2K`T#)$7s-ke3XH+Z9)yw@zssRXDO(!d#ra_akVTkcB2}#)^Fyyx>8Wis9{W zg7uKTd%_`y`}K-HzOYh~Zc&-78Ui^ujXtrrcraN7@34^Mu1X-yRrsz&mRbK)FmWzm z`q^Hdg_tc|zHdr8dA`YMHD&;|`WQY9W-JiYB=`X!>k{vnOF6F2g zRS2w}8lW#kjT`SZz`b`(`CwAqdS_o2=PjZ=ISa#aT~(khxxa)>RJTmq>WzB zn$tIvD&Vw&Y78TAQ}ETNu~WE^@*>g%gXzku{etO?bGIJu6;aI$V+HRfU^vh)glB(QX%W$@!i$VMIol^BMg zvm;L}SpicGu0+FbmB5N;#Z2H_^pVRpeX+mO3ZCfIX;;dW`%u;ETn&G-lt&eei{In>Ariyq!*jqCA8+(?RA2cDtIw`* z{fm7AU~v22Ft9&_A$EY)1PJ8c3qzp4GqCJ;4+evN8mhi!V5KA^HN<{q;Q{*kw+KOi z`xEegejwxkhWde->)#{%SNto-PZQMNoTL6j#NELI|38ziIQ}9B{D<896#@GvIp8+P z>i>mw#R2-KTg@*C*nda*-{!^v7G(etdmFvO$qCHy|7OMI_JjXdU*qJvbB>?m4$}YI zmAh5h{&DU8MEe5{Hh}K;10{$T2s;DzHGYfoUx_~)f7!$NgZOj%DSxM)fY=6 zl@7RlKg6Ezh<|ze{*_G5aYyI)MXh0H`$O~K0CI+a{>0AlErpB&NW|d*R!V>stUE-r z|7*R6oA1Xi$z6I6=il25`?m-9n_~sMD!&Ked=JS25CaO)cl^IR)_?V=IqzsQcR%Vs zG?`nm7LfOD4P$|~$_|_`Ah`kG#GNAAouch8{$$|1qsiQj@UI=_H<}qA=QsDV{|xtd zWi1ikcUx#VdT4b_dZ^YOVGFT(;^W4lyx!utL4~{ULT2)4klW#Y!Ju&B^Qnut&#Y1R zz_94Sxh=t;G-t@BiiWp=oxebI_N=j^(bNu=$Y?|<@vbV9!L zjE{qhD${7kQ|X~-SWRhz#+EVdc?McgbXTx1oOeNzKV6Cz|)jvuBd6K4urPdZH2Up7#Gb0 zMNEWe@{d=Q<%W9|>0Z%=eNn@+mP*(_t?uYGXiFCnOE68YK?(|8Z+0A|!>PX&&a`S3 z6%DPx&y=0dnVr9kFpspuQQ8HzW>nt;*HXPYWC?gX^(k>;dJ{Ale*kEXd#Vgu8&mYs zhUqGTF73?)tZzkpqz3nomb_qC1}7?eXQ}4>1aj^rsqroF38Cb?v%vcVEFf$?$qb1| z#aS1MqA#ybGZ2<522lE76Q-vE%k|Z&0TDA0uv@P1E9VANZ_X&i^f=` zn?Adi5SEmEynN?YOWvn}@X@c79I^0a=xhnaC{zuY+cLxfh9apcJiI_j1w5Xl&h%5x z@<~ezMTG%hCSuGb%H8B=oF2zb5lL5gncdU25vIIxp!7#x#Rv)}uqFa&`}GRr#eE37ylOsr!<&LWoN7(U{P^AryARTA$7qsP1Qy4=RxXcy@gI;Nu2}_lzU`@r*3bECn!OM6V;&<&Z*7@f<+(>K z@UxzLh8FXK+&(L!!Q4E5PgEKPfsNTR59Bb!K*2Hyw1?)ZkP$&#P;o66v@g7V7m<3V znYBd*$F%WqWP1qvtBiOG?qM5epSy`XU=}FH)MzaIa_4c=k!X@4y|0&G&oDC@w&|Ov z8*ehE3?PT^N0YX&QRb<&%8Uk>1gEK@ZDH9@FCWfeY)+}5Nupu+4Hs4B4VukJ^-5l5 zD@cdzRGg7-Zxu*82H>rceW`bF3rogsL%%y{G!*Ye@Y2N>OCg(fnIGLdso zdzC1M7225-l46UL*^}rlHb2S+9^>IFTu1N|*>L4upX51qOnJ@W58?3SLkNT2Ql?eQ zjg2JE#9J@gS+@LYAdB*JcP`Qi^&7&Z#Tl^Mr)KGQaXxyqOLe|dv4WPyl#2HuGwatY z!Pa?<{xOUbSIMuUT9(Z6n51=$n%8Y3w0XiS1a*=@`5H2l^MmqWQjs3d6K_OhZ2lU@ zJ}LdjeD_G-N{8L+tR}zbCbD*j7h_L&)0$mf0JrfHMv+=ZbFZt(w^;lgR`q~wVvTy0 z?8I~$gZzUg;-bCXi#qt40@n7#pfHGrkVARWpiFhV(*47UR88D-?7qt})j%C}76wfm8b=^nd z>wELf@pl-PJAy?+&c_$)s5ZyrNo?C+ziv8_ltjawOys^3Xv}eqtMv}6)`}~4<+3Wv zOQ6-%o{U?3#*!#dpGIX%dv*Sqz+yaYP}tm59f|fK>z8zzE5-EHj3p_G_1uMGCOSKL z%2k!GSJ###GloaAif$^)`q2m~Po=b7IikpL2s#<$HX=Ihqt;_PsXi`TR=((f@n>#* zEH@nB3wx5L62~UD5&!0^f0G%>cCei#wMmQV+GFZ<3o)gE5XR!3F^hQh{L@mqGm95* z!+VG`<#1{n^d9;lbH7TRV;bv8W>tql9k`c{+o|KGM-dHt=$0r(77o-mJ(iB_vJ_>{ z8k8H&P1yHi*&(l#Ri2YvG&QTVUFKAb3RV$R_?nhJLV3AhOyt%oDpFsas=$IvR2HM< z74;Ham-ouQhBiI@Iv~btFEPsUf5%1v6K#HmxMSAc_bDm z3~Z2qKEVBf)oE>z>7*bhmTiXFZA=znOWI&bWCTNJfSVfaSGEhG4_4DPJWA~Ijuja# zp5qBTS0_`#9HiA-B{qVINS~3`7D~lNmkgwa)=`xvd)5CcFJL{9`0_o;eWkoZh9DR0shZ zZ#gaH-*_k}G>HyQ8hbJJrQ_>|x9^XPYAHh>)cQY&CPhI#9B*qVyfJ@U?^!EilCBI9 zSdz$1N24&x7_ng*y&le8T#!Pxc=nnL5kd!LpepixMe z?de)*-ExZ3X}Ehcr;5tAw{}*cF}&S49J^8}FBd=N3pG)%ZG?-ORzMK3d_U{kQ}H=79p&*lF{AaWc28(DU52VanU>OvWvH8L|TpShW@W%hgZKZZv?U_!OFbw+e%Z7@=ui!uxJ zthPDWt*A0df*%+JYb>Bh7D%)s&B_MN>F;|H*k^sDK7!05UJF$+;4aD)!HsSoJa5ez zrxm~afw->!$gX)B-%d*oDPFFqy;j%IZ z0esNytBb>zFj%Mu$7{uLc(}>C#}*~! zqjdO-^r8%q+LlNrT7Ma@j6)zh_i@$e?l+j%Yo)9Z~)8s<8+>7uRiHr;It zhI5kE`M}6N z20`f2Qb6dQ(CySK4`)V84JF7z32UAC6#dnB1aVa~3_+yF}mt!c~rgJwj;1 zDnmXYH{55;9Ro4Z`1&9{&xP`+@Ye#H4>yzf%1r`HDh0o_%ph{=kAq&m!Y|*!#kE9M zTo7_bVXk|-7>ouK6CT%8gU>wfcRnY0h4))ZK1(uVG99;y#lJ zFDkcOhgEc3zrTYbXhmj8NDx$dY>RSygmM*FK`TVU#zc#5y%AB{GyV~EEF;|*omzje zEyN0qntiyUNlI>=`W*RXuWF`nw%4YF1k}@j-a{ik6ze70@N3A2QK8RE6P68J>=D7EnJslAo0X@g2m`zIO)j4; z^4B~o)+Bj+;gH6M_|$6riZ%v@X47~SHP%wMZ|aO zhP+pd!QW--2_*A2gBho!@)duBaA*=wv+TRtiEjBF9Sv_hS3#eA5>a^6T&T}4+EdQG z$PJmrcHi41`N{8pO2Ikggn6?(U;i0lgfBrr<$06v>V;|d+QH%CdZh791KuBf-gqMxbD#qfL*Kan-o>Yl&YrJYX{v1>hLexeyS z9+^ZSzd^~0muO(^+ME|Nvf2pJN6!CDukrX~s|7vnqb7YllIzC86Q8*e9V#5>9WqQ@ z=wp70oOju*4uZb?T=siBYWBN*DY5h<{jDUdgppab1@Dm}vy_iEB5e9lJ3smxl~=H% zjHfAN*WxWMIH*bW9DZ`=Xc^4`Y-stM;t0UHAr_b?kvEtOeS+3<% zv8bc)m-}?tw5f6-3nMe?p6lt-#0bBT;wN^^?Tn5rZ0tt%aeY{I%*~)UcSBOv8>Hp1 z?cIh9sR;|!EriD{7i7JSnyIznb9MZY9;(WfwPZBX$*&4n8vdkSGCFYP`(diVX(=<# zL6^gE?XA_Q4nk5-0}D?=M&@JO3(X5iDIJ-~N7_Z6pn!DW%bI!6{@56I_z<(;LY4PP zy$#Oxhd%Qxf-^Z19D6^e8Oj}Q{1a(!zvGOBih+*Z>ERK|kC-GLj-Nh&O`dO`V&f;% zo?F=x7JbCYv77-J^9d5Td!BI;A2 zS+J1D)>Dj4QrPVXkZ~+l)S+qki#o^P!KK?1yhXSTol5b@k5 z0s!10U@ZkOiN6=~{+%Ged58A%Zv=rqNi2K-S4{Q;F2^k$&+$jNf7@C571jA~6&ChC zC@kMH-noIG8Qxo#nB&%KiW@jw-e2y|{5=)x?$9n?&cDbjw<6UqGTzyNCBon87(X)J zf8e|IMB@GfJP_M0xBFkEj~loicgR1Sf7$l?hR@d8(b&P#&CS%>@+YB>o&675%dLtA z5a|EG$jiD-C&FH*}b#@l2WTZ?}LkN_d_zdytO-~$MDV8`!= zaol&bzY+xgl@Q7K7n$YvLL~b)+2%Kz1qZMy30yo*;5h?g1s59!3y`Y91;~=WPW|{U zFa7rn0cGZ{GvxYdweQy3PD?{fM(W!Vtg(`m#_d1;@s0m!uMfz+;Q*vvZVnbez~BJ9 zxqws?&fltQK<>-mt|eeecE`2kx7E_dy1eOt%B^Cei&Ov|ZK0lz|mLuSMzFp@AocO*0|K&m6%E|vNO2A(Foj39? z&F6nml~pv2Rd44HGy$*8pDPkDQ}Ej>$pLh34xqSyhsw##4Ww@V0qVajpnqvXw^;vO z0lhUE{oUZn_k(2ztSx~j|2;dB9T<>d|MeC4+qrUa0{;ZQ0u6Up4|8`_Q&&qzcQOz! z*Iyda|ISrhOIlh=9dM^rG1gELQ&jxN(f(lqfDUR|S;& zr`GhR0t&2-|MpC81KEJ4#15$Iz)CX*02FYP{SNzAw-xlS3MltaP3g}C6!eFl^yBO2 z1gtHAc)RcK>O1aVA^m%S0zTDU-#_UX`XKXj!ZNP)uyj{nC+ z{RaD&K>yY|x$pLx;Qpy4{k>L+smo|7Nhxdo#Btt!@qECf3IO>V@_z@G zi|x)op}7CjmHzjtx?~{Fp|4YDs`z^w8XXGs} z_nn>V50SU*z@*;)u>NL*g@@yt&Bp&mShj9QSo)9JtglJ;DH9^di1rWd1Tu~oWAz7I zDEXB7_iaqz6M0kVLcl(%eNp>r>51z}CA%1r=RELWUQsrx3%u>w+{HdIO73Xpdnxak z+Rp2(L%lc2);iOCSI(cVn{6GPzIc1N`s)w_bZKcrea7+_N*r!3f#B)QM+c43&Z}4< z|I478FQ;;U-TZ#Zl;(mb$6b>nd^x~le||c2l2odK(z#P*LW`@CyE+)|k}CU2B$`^F zHSkSM9LEE_UgEdZH^b94vnsj1=|neZM1w=d8RIGO}Blc;oc;E|B*8*>o5eayn0ZL4G%iyO0o zyl6?bT@6FjU)prwa(4@GBXZPeW{mQtxLIax;Q(g|VE#p2gzB)Us!g&`gIJ{@B#R+H4ppMpzJ z*7U$WYyW1HS zdF1i_j3|=1BDib=MS^r1BBzvqb!9z<9;9f?WHE%CXj~+w^vnH#MN(MXM<)H`X{~4JE5ss%GLuU7lY%41+3cSW@y>JIrC~pK*)n_%Y-#lu3&Y@nd0gf$01j-$J1~$1#g*}y?8u}rGfayO5e!5 z`8+Pbd^_3CH8wR`Y_SNRIW$(mDE@=%I1F1_TDS@VI!+sc_Q3n+m9O43T;AMsLsaiI z&)aLv7ZFw#hJmEnVzg1q<(As2rzRck9Ge!!Ou$_Q;I-BEIiS39UhQiaY^ajbo< zJNg8}pHqYOy(pxzH?Zh!?iK{&1x+MBa;VRu5HUK&c)X2)s4;1!DyH*VHJ3$|Dq)l+;gpxG~E#$>`N3NP(XrpN` z+@2)p7%2I0F0Wk#Msco6(U`HFXI`Cr;zy-BQql0SM*8PC9%pq4TD3jIvnX zrDW(k`Fq+_$8_t2*zko`t_k=N-MHdZ+&6f<1lBL)IwfPvUn^#hMi|IKlCdf+AhiaJHGW{>FzdM2l65NY`#h9u7%y{9iv#A|{zo$M*W zWV%pL3|NMYDY{-DO5Iv>)sSdWbZYFoc)9w)%xVIy+_%KGPcQqJ=}D%jEtGWOtNI+B z2ZM%3yWEskcnAXt(K{&Eyqp!Rn_vy##I$RO(Ds6@yZR?7T3_9cu z+#(ylxU7Z^diC^Eqjt)6ij9P`nD{l_V zd7;@SzilC}j>h(L>OIAsvtgY)FUa8B4rao@ELmz8e(BBm^T4cUEE;^0q;D}i&Dlo0 z(xW_(!d~u5N=`~Rdc=bz;fX+ymhLe}3Mxh}CA^MAoP)!E3N=lwr2^!ronVARg9p+R zu?agHOuD>Wq(kDNqSLsDN+`|_$7JjJ{Lbx!FGd3<$G)RSj`R^g&(=STKnQ@kQp(Od97R>xMeZBM0Ns1)$a55 z$5F>aI0)tvrCJQzWwAV9r*z!p*bQ^7uhpqg53`+)aaCg>qHb^Nvnxo#C5jhDB zCqD4f)4G??ifxafGMiDpI=)U!ISrHNvNf1Rdi}&mKdxm}SI!`F*>QMLu11NJ`Ot(! z;xxAMwGW;%ST^bD4>nGJE;mpx%vuLAm z#*m)Fx|aruQ+L0g@pPdWJ_yq0rbaVBK=Zx#`$b%IXSQcGF1LD@|NaIB=t7V7Or_3$)Q#RuD4Y=7vG6co9y17pTEYj(kTH$3LX$5s!1jd_iEbw11aFD@xXd;YnMhO*Wq&qKfjsfO@38ho)n&Te>Y=pt zVnHI#rfi0qEw!ASNug@%OwO6&f~7;GPzDj9K?`Q1Hr!rNv!ICKYpNBr#`GF|qRZM| zh8Hib^0{S63_+*-AJWb;F3aS7`;>@uNT;MA-8bFcjdXVkNDD|eNT(7KQUU@Z zAWBM0cL>rFA}#X2Zg6+iA0W@?d9%LR{p{gfGjq;8$9Iksd&$)VQT@}ZLY4L4v*GUU zJ++VYlLOlFCZ&N1@?Q6Kbj!J|4VM#M&Hc!9z+Cm3fXW#*h1}CvY!)hg^H~gPBp9v@ z|LGX9a%|F|r{;_mp5kFEzQ|iyev-xlpkZYQkYkn$Y?uZ z;W%??AjuBSzxStYM}r0>1s3d z)m)->XS?6d4_76*7{jQ3^OXXont>MAYzIxU;@0dZa%%P=tyx*C;V$f~h zsT{Q~cTS77yum^5=(*IWOD5YD_+bIEuY`w+Y@NJ|uI%QaTuA8`h55-cOzkB}8MB87 z`*+apn^{0^eDo-9%tp#|dVWjm!$;YI!N9wBVHQd%t{k!WIiBJbuua4K(XP+j{2fhwbc&m-SCnIVh{-Z&1#;Cy*_3U@7F(WX$WbQ@*C8 z-@t-1*DTwi!Zvknt9jK+{OFEnW*}Fp$jyzJ5#V)z}U*1WCu(n3P5IlKDIo7~#8c8uML_1V+^IlEKN{AMz#66)O z{$q%nhfpxduB$Q=)HI%n$}*^>Sc1+c?{`Ht7RVVIr=8Ufux(@{rCVoN9r96zY4h*& zGf~?Vt>kKAX|nWq94|hM!;c*=P*OeSPHprqt7cjsn!W{`?r?=4p&P>N6PLMY9U254 zvJh)QV`+%YV2?4~mbEtCOyYLOgdgMS6VBYg*D=~LT>px*vYr5Q;;2a=t<6$Z#hsb! zW~y`Zb^i8!sSO7ayTI|ZZ@smPvMrk}1X*dg4Z&;jCyeidUp~p|TZB3kQowJ)>v&_g z-0y=klm|VGOitgy-kQZ!h@ZblqnjU^QkZO$uC_|f zYh6x@2ERAHu&1v{yY(%ye-ZObQbL!rt#{#`tD|1SJbE?V1DTkH*7@1J=UUUzrVB6( zuN{o-t&ewh-e(SJ(QzH)%)R?ezs8?`T&H?-2657Y*Ex2RrD2__wXPdaaqkWeKuhE= z-qUG*VjQ&3VSO7%?__=0qw7Xetd7G`-_msTYU5Wn^i8fWsQi{c_-?tl4`{BEmvA)D z1hDgL_P7&!TEXP)y5$8ednQwrSgNeDSpIllA2FtSc;nmgk+&Q)+zJJJOEr|Kr`hzF za8!gcT1*IHTkx0diV@+s$|qtnMmOZMVy3Z6jovXn!Lr95`67o>18IF+qQ`E-;ltZz z%GL6;AGc(nTo@ll4aO%vmy z--b)Xr;@7vBY$zcRdR@@5AQ0O@RmHB&M)YPnm6n8MEkg6LK1<7H5(E1ax+_1?{m@~ zY;_b$PFH_nZqvJ}jrBCISj3UT)LE;qhvtFp%CyzVPmvX^8qn|DsIQs~QdM>o$l6|RvGD%NZ_GhVEfJ@H}{_jHT0)z1Ux{w3ND+OQ0 zo?mZX4St+;TKdK;8y){9$pNU&V?DstD@+9N_;E`WKVqd=jt&k;(ud@Kfly>`R6I zb_L6RaSJ?-KP--4g#L68|3~PxEDmr4G!t;Q4S3o>05n+ir82>n`~S{Wb}-X%!FXP1 zaQt=^4_wD9$t(QNT|CRRd=7Rtc6xU3`&LG9LhPCNOZEO{$N|pCg?caaIfMj7^psTu zfqWex6#8s4I3q(?m;eLw%2~<^xWqv8_qj+m;88X33i@i1zZu6&oEH!3Fa8D?V=;1c zvv;!7v#_;r`X7ORaWufsgTblfz=8*(EPw&R2Ea9S-Z8(7n2pAxWMepSH=&eOPH?)~CY{7X!k8$2-obCAHH^jGbR zV6PvrvwzBC0h4FII9)CehyeIi9?K>2{@BLBX(8gGDi@^?Gl4mgs}!CgabUOyhztLT z#IXXoCafHnjo|O@63RvZ3 zP#iGjucZ%o$`4FG7RIxU?_BL=U-?>49Oo~U1g!7!hObOu1nkNoJU8@Nfan3B*s%cH z9{8UCa(3xF`~&G=0`~F?J~ZbaRpdXULrqjkQcUwQ(hS^_;5vGN+!HXt1uS!biemx# zHC#n-ftTXHGn4&dDvtAyG6G)Pf1%<4nD9!iKM^kQF%me({ey4;C57oyEbdy1ob!)j zav8$K`j<*_e$HV6ntuYv93WmC2njjYdfDXsUEL)F7v~?=_$34v7+SdML;n;9923DP z%sIhzCiPNrzwO|c09>5E6qsK*gR1~8px9nVDX_?a{pugkR>q`mQU}S^d8QTRCf-W z@|P7+6YH+#$>pqy#&n`o^FOjr68F=D6>>xxV`T-tOv&X+kT*jUr0qlV@ln4RBPUj0 zKi-UzFQg%s53|}^+wPnwtUdW!Iv;jy;_#jCZ8F_gOP4pC01Z*N)gM(|t*ZEA3)__K`)3JyzM>Fi&a?Ja~RMO--Ihd;6QCpAIV$v3oNKPun$H=_z|N=h}T7 zumZN;G6=bB->`iPk{|7c&uF(@)+%hMcl)tE@^MUlT9K2>NO1NfOy~RIVTH2mC%sI5 ze9p%(uz6FOs6aEs$gOv=I^mB9b6=|FTP%zF60Me!nPRJ~i$B9xa74I$(-__WVs{m5 z-)@CaG~2`TUOgEo#f=AdYIcOWL3N#9m&=fJR&9yGc)={hK(|0g!C+SWE6FGpBQ10B zYCH2?9It#;iU!tVsnHvl4*V>|mPv6dk3&xwC#X&QP4XQU+P*VRU{QG!;0mO>I&^R7 z)!8>syNfe1dY>Sj7Kd6Hd&5GJ7PP(8ys@uF+s5!Dxe8i$CPJn9dV zV(*sUQ&0mU`)|K^KcD6OL;V03N>;2vmDZnmx9NbykQYXfY~Zm^sL1-w=c@I2ytR<5 z*t*8}jKS$5C^emIJh+tD?)uqX)g??8`UDQ1DlmTBrZ2x?C?p7m&O`Idl+)%C%QR$* zPc#xM3Rkt4^ykQ*Z0&c1n8FeP0;~jRs zwzgYadVMr!ezS-EiTk^nn|RvDR|i{XG4w7fT+L}MoKCq%-Yuishs=6U5x(xcs2HK; z^iE~49nIGu@Z#AAqDRaRNMiIIUVL~QfMvFo;hz@IF`>>kXo%G3id>4}s`GyBwk~m9 zHsbWcGNIQyeET^>zVA?_Z$FyXY+>=uwv2QKW3YWks^fdVW>)7KYIpD^OcrJ}`n?TF zfJ5X6$NH|yLD>eq?K+bUaoTK*mpyFUEp?}67Jlh;^nOsxE$ss|zVG?LE2=D?R3d84 zy`Sgb`cUXK%l{A~-bqwN)6ez;Y!>X1G*&I?3lgEGk2f^ym9V{S$$P~`1+B`t z0OaMl*bhH!27GuP#fQ^0E4$C0SEql&1Z6RxkuMwA>93=HGr`V)w0KE&6k5?JAAoUm zBpGoeK!Za6z5c;mB_+jcQAv@2RRfP`rB7<7HY7_BImWoazh7`qNy<=G4GVa6Moav8t`u z^2W3|gt*!$G98}QDk@yJC z@?+DRBrL=V)dz@8y6;|eNxQz?k3~yeyjNAT+ppNd7#j8vfdSgH%w%QTUd0n|8ni`S zH}xAWz2zU9;moG1R(M8&DrR^h5AV4+_wEVQVThB&_4g71 z*yLqRE9)jyMFU%>S1Od0pCTKb zR02k(+?FYyaEXx1J*$mkAG%wLi0$aMXfu#nQ1hbMenhHRFWx-UO!!eQbRZg+lAsDX z_s-Oh7Glo~Q_cwf39LJOV(dsz4e>EUi+I+qEl_DzY0WOq+5~G7b8JdxzVL?H=qBg`>W>vlQw6aO zcvyQ3)y&A6e4#{dCf$6h7w+S1iQ;3}!2OtbmPjn={Y`OZ3GS^bj-Cb1P0v1PkAy=F zuISk)j}I2js-jS@gUTRD1{!;z$ohC?U<@1s_S53jV$g|5tR?$v(k5dC zL|=<`gnlOR9>XT^V@@WwWAmVS|BW*H8`=E&(YPgQKF&HhH2Gk^o2IWxu$8uKF;r`4 zz%rv%mp=+t2Bb;@MAqA?TkrKGv zg$#6#83!(&aO!F4G4f^3xbhShhdZjtZX+n3BCsdNzZf>X!vJyOpF+2%Z>lU|27xDp zmZe(f8|dXJb03ZAr4B6e$0d*Vo<;p)INKSw$IQ?}*FF-7XWFl_R`y@0KRV(-x5Ry#3j}mvCDN+V%$PC)*V0GoNLRJLFHzzr2xy%04M!+VEDb;=ShC6nqw+$eSMI;Gz zpGv}Iwyli{k$c4qSHh7}2X9ZeLeNp&5AlVU?dIg1a(J7duQgsO(GD#>-53;5%h`hP zx|Vy2PRUIN#q?Re@e6~M4>nPnUZo_;%s}W?9 z6ms&E4I9m!4%T(vlds`%K<|TNpKLg`C`fxcpAX@?IRI<)-V)-hW1Jm*6>3 zCj_ZG@jjC&UNj=T>3$)rA?F9rj3m=is`-67Bm~ha-^`&b9N|z1&IMet_$HZyTl3F| zgHWWjEOM2yM%bIEov`6?GLXvZwjT@yPj@IAJZ}A3vZwD%MS-O4n02u6m59o>=r-=R zyc>9X)Dky6Z4C+O2a$q!k@5pKvZ2!BV1h{++v6d3pGLX#c1pE2@R!1I8{AZ=BVFxX zuy*+_JsG^#`eH0-A)UNclpyP44e19FWJ8HS_yha{(sp7K>EOJMPx7;Ec0=PruoKqv!Me!uIqYF| z*c!UIay3IT+6bXYL~4G9UT?8(;|nADk;bL^37J~7_2e#WKlXbca%U6{o>7W99qE)C z9$ss`RBwFrNpnY7D@oBH?FQb2!!!El#jkXu4oZ@p@Hy3obDbS~zu#rHi)3?D&l!#O z2tv1VwAl7`n;d8?W&S%gjdpY0QbB`&FG~#ZEtvbwGJbSi; zV~;qQ(LoMz_`{(}h)+(`%M-jUP*SCep~gB0mm*SDXrjj>EhW64Y2-5H@VRa6QFVHf zuw>$om_9-A5j$)$=q41#lUhOvVw=e0K^>lC%4d0&RN9m>@h)`F1!IV{nTCC=S4_9N zkLQj_@OzO5#&_5k-3n;dUPzYyP$(g&WQL&hw_x`0rz2DU(i$u7%prcb__4=T7-F+l-BmW4;9WZtPgT~klN8&VQ?aJB(&YWbaQe_fxICkn)~z8i%_nm zl5ySwtJ$xr71?@qNxC;|JV5v?lh1o^SX~-;MBUd!?M*g8b-`gA7o@6|RZ~PR3bMDB>ezR3vB+q2P2qCpHDvnwe^M2&* zc$hfwNY|T({~6^1M_%I6x4Ctslbz1b@>EM6x7)7HH}QuuDf> zG{Yl~!ev(T$|=0%rW;;=Z{xT2*d1iDX>1nIug!pmq_j2kGt1;vh!<;3FOj~z^sxQ5 z$ia&@Os~eB@(I?k_t6aHpt_l*-6wX;Uj;ZRzbM>!)g$CAO1$5%sn*f%p+m^XgCMJw zUCY&2ka;i9TmP`4s$Ik9GbV8)9@(9jqaPvcsti@#)IGoI)+l43;WpJD>E7I8mSM-8 zWjlgCHE#-ySfNE4nv^m%V|(+Sc?rs^*zT!k{;rLb-iu??+tfIpLo~5ML$>Bc_}$tX zN@Xzk<4}C6Oj=j;&77VG8}#l)`@VcpK};?2qft%)A=<{tr!5*D+Bz{IjYxOiPjPcV z$pm8c$L1a_o{9FeCU&hD=O8LHXRVqoXim#U9oe|7F9tR$)1mjf*8+{WPGF^vCt%gL z7F-FJx5nHQPfOM|KH@Tb)8=8jnUQ0Kf6QCN>x&$_NAh$isi!5G4$^H3%TuUm*Go>Q zXtZB8@5d905Rxn+nxRTF#v3^LgGN~?J?-z)C+~zreEf=p*O^!i`yH!g@BmsQ0?kV? zjPJW-kiV(ZVE_8sIv#i0SCEywn7Iy$I&DktM!UEZ(C{J%8qWOSR+NttVX#0)3tKJI zh{$p(OvN0j^;WklBFzg8H4xEf*ds&~(^$IW67A-_*wLr}i|%6y2P%p(k`_0yZc{I# z#=@_WjgZ)s8a7BhVyhA^%;GA=M)mbH5-07f)Mie0KH^ADZ{6@;E`1npE?=Jt)Icms z54Jjyy%Qr$${X>LvmatpYWusfQe1eCi@y3@G6|%S6KDDyUl=1f#|a5WNo4gUiXHM@ zlNrkKqR2keV4Has=@oesJj#X0C%ap^h8%Yl2diJH(N6?+mZ%P^SL0NuFB(`0>JIT? zFAI0+VIn+ob?{+7Z9ZwPp_x!w$)Uq2U~Uckn5U4tDqw|hM?0DZ+ZYnZbR|+{cgy=` zZg#4K_{!4?*0PxUBVQ>W3YToGV;{gbU|3sZww5uFFw%}na$+CbgtHEReEBVCL*nBn z5aqt=lT^K-1}3dckBLQwAq%R*euOm@Pqzv7O65>!<$7zOo5{mw`7U11_My!El0+_85DrrJbbDs5!(JNtDu{vghm zAsS_+tJ?&+m4AO%8;q3(6A(sWIcFfKZ0tAUU)k|#CdoHB{#8(fc3}uoG?H-MJ&wRm zTV@AkDWBau#|Mg0Js;AH-~-VaH~Dny@=%BwQr5dpHykv)*K_VsH}B~CTQqG2r&xb` zy`8+tott{#Ha6+X)M#G$3>njC8z=SoF5Tvr_0kls0jU;PUDo(~n~LHm3m8Xv)Eu${ z0gqDjjcOsMt1T4A*_+AbnUY_Qh~*>Yue1k%!ZYk$1e~PH6uZLgdIKucYdgM^k4HET z`MG>{9&Za8dbN5|hZwcagVQ72XD8O$>)XH)wO*9c-(aG3SU#QjBKf4qycwFup^H)Q zxJ^=2`x7w&W8+%BvRRKl1fMyIy=GBDfE42(6-n<$B6Zcc!b}ljr-MixcHeK z=oc^NzuUcko)lm9Ob>W$e;utqxsab6%Nf;j>7Dd%VlR272l~S#Ilq(sjSaZ?nI7N~ zUqkOtHst3sy}z&_zv;c?nI7mDr{urEz1A~5wriOu|3D&Vv*G`R5xL}<9_SDAC833Q>K@)xFw{V$Hnxk16s3Z#q!$u{Rq6Z@I)>uJ4&X#)M>r~HBnUBWc6 zU&~2h2VUv|uHZjH&tzXJ^tU;13DX3+&`CLiuP$Ml0GIhXA0ODcz_IN=A)zzbmkRyO zO}m&90x@1_qFhP|vHxnIT)+wbq=e2@{zC~}t@1Z}@?uN~#P~}w02}*PU_yZHedRcw zHD}-?VFS<&765%=Wd>eA1Al-cm@XU0Ymq`A#^1ZApZWh+nU2gLz^W%<1BMD%#=y2m z4=|YLsxH$3w7ULn`vEYq|26SIjK9>PUr>^ZXrZ(27gr?%0RR<%ul&@=%5fGFbG626 z0Yf0hKkCm_zz{fF=&Er%2Zn&Y>i=bEu>yV7|Nk9PlV!#u9M+rNsOL44vy^ zW;_esxLV(}kT4MAFIDDDAUH(pqK^#la955WIJN|!gMJER2a;icET}67@H(szi1C-Q z0@imKD+ErHxa#x%l*b4VeE?5)p6_)o_OfMi9aIR!_)8@L%ew*AUnV#iR;Pkxn$-f5)c5rMD@Yng>jt4RRQAGY@h0fwiBm|Wu{0Od|cSR;EAd$gh~tg+l*QNPZ?~ zF#+2&pzvpM7C>KKLGfNI`31!EODO>#eb0vSis&qG2cv)I=M~5Rh?N}-)IM->G%>J2 zf(N>l=&U(TaF+kbEUbfm6spW5i(0ploI=yKZCsZ+G2YWN)@}V7C%IgMOd2nyhoBcf zy_#nV$tO$X{c~CYGfQPfp%_$rbC*Y6kbOLSnnRz-iAQ?&XNWTgo%u4bIC>K2N5X1# zCr^$KRt+=>9(CAty6Gl{9d3U<8Nri3snHm0Sq&mi8?lp1pV4jD;w3)Kv3O4~6H?wj z@B1XscPXf+(Dm@s(q`IWCw6J6ZUg6!7*O&9Hn&44ts~?IS*SnU1(&s_-hHl440)jS zjxb&8D51m7POssBnd|feFTD6tKH|*2f;h;N^YMMRmwpA()GJ z{ebNUvy@S`%0OS(ckemsIM3NgBhd93)x+Jw>QRxy`NTk=iRM_X{AOLMnX5-w}^K3d@ z`ve<51L-3n!kt$%cmMOkfeEui6qF_B1JFq(hT84;rP*||uc2gU0o9PXLZMF2^5GM2 zeEKmnYbL>p>n8RZ_3I$Q{NqM-Qvib)|hMnhgF`n>$6Y`y7W5NkqxqW_g}Y8>WNfRva23!R}rW^x($J0w6)`<6jymoTv#T(YMsK*CAGF$az9X#K@n^&mM z5<%N}GTch8sGZ__aK{?HeT%|VZuS9PRPR)_^*1bJzIFt4*H0`2+Ko%$_uq%?e_eg_ z0^?J)=Qjq+U291|iEV7=2)I*j>5q%fBhuXsN?cLWg-lrzI*vopVa>Y*v94Zuf z=?LIjHW*DiPxC~2Ln1eIutLf5{3`e~e}D|-yx#hq&Z_$;s2<*gKqsL36p2BV`6k?G zwryV!5hH~({zsTNp}OosgIJwqy*Fs<-NKNfGtJnKGwn0*j@1bf71mFAPIH z+}pY5k$Lxk40piE(v=kVSd!Uy?|fVZ70gNT>U0JuUhENv-zUE{Z#62I{QT-$X@&4E`Gcw<|y2*e~x~n z;A4d{8$?MGk)}83LYUJTJdl(yT14KV4b_?ks6>1RTUIFi(s%7GwZ9MEq;ec+*;F3t z^C^Ty7H+C7E_Q(0`p5={-Tp;r`L54*_!_>pzC#Avo2AEG1j&sF`UqOga-jYQB9v{S zgyUP%dHAUPH@P1^{-lhSp?2u3`q*53WOpDfoQ~HW79F>(wvB%ljVhr_oZx0s+h{N7 zd$`N|ZDhGz23KnBw^ZWs_Z|0f@;xg->_)@SADi|M<2)aRHoLX+$)(khTjyijTvx)R ze@J4hM|(GJ05Sud1B@H_5_8AF%~ydKo5qOSVy_M)ru5fP6fRk}@K#)clm=?)30fq3l_I=+o7n-pFKr^k(lR+B}LB3UD$f3opDom0J&h1#I2Q@*_v)=CNI6s6`zTZ12ydkU3#j%W_TyxW#yJqDR-RZ5HdR6r~MCS+VY(bKJ!!Zm!A`5HpO^hv6GY;nkN*2UTN5nea4{jVmu{>M5#4fkOlYRf{~6Mw)mI`>#4ExXv9&YCg zZ?XTzQ9r;+r-LTU;|XmcSYwNtr+7^P3X#c8fCs;hPk-<^e}-pAS8l;Liqvs+54 zrS5tm9qsz;IkZ~&qTr%QOysnBvt*aHEai>H+>RvaZ}x?hdVHy`b-pcQYTZ+GhGUL1 zd1L9c=IdR{^SXiO5keIK#P-qr(hK>_l`Z(5{&#PCym3!HA>(8gA8^47A&R0<;-JBi zA~=8Z-(@7+)d)$WXb`bj&;77t+{D-lgGQG$Q7o+YLvIn*Ms$-P2Q>M~S0^b9ZISg` zD`>e!{+8R)i!u&4cT7%cHi1b)LL|%uy^vebLJf{3U9s?w)mUF2q^23)Rc}F}Z$ENJ zIYkf6qG&pVL}*aE9iV#~alvwPrz-woFk?(>@xlG{r>9C>dYQ{)Ud3Tkem@!=``*5b zf_7C8Tv@3xwQ6MxHLTq1WnDMJHiabcZ04MPt*n>v#DzDedqyhRo5AlE^`1I3%$S-z zLz6!eC4o?McmIGxw^|o&z-^?7t~rhhVg3$?+YD)iSZ3v_j}takU5^@^n;s#f(pqhs zB?OE9ppzpMD(eFON5eU!wQHKjqGfWQL-yex@k!%a!mNqF55BghR?bp_m0yT|NS-7X zgJVJw?n1~zaD=NF6n2NNtT>o{3nLVIJe}YFX=-lXd`huqU$8?sfi+xh%6uIO0wR^S zZ91p2#ShsSO6O<}d=i;Sz(rzhv)LdJN;>-=t7)K{QkO7RhNNH@2Ea>}s2u!Ie82q4 z=|JLrNgRl8icWuS7z)cEl7rJ3;vKV$d>fkV~kfUqtmYP5>5a6;vQ&PhE4Q-hS)nh$WY-q6rJFa(eA)zv4X6w)+yO zH*1znA7clh5>|Y3(yqWn_gD1iHby4rGCesWX#sst7cY~`m(bRxQprfrwYo=^`>pEc z1Gp77X|N7&zKy+zFB*Mjrc(DUIHo6W7a+GM_*Z@Z(THN7dIDRGd`H_9{2{wHQG_NZ zEv;7CLMEipH*Vxw<7WT6#9bf}Q!P}QA&_H{0{S<}}F&BD7bX$0h5AWg;we^h<6 za$ITm%#X+&w~25X&%GwRQUhxTf3lfFkAdMthZZ?MuchO|t#9Vp2D+bWsmJl|K1Ib= zXXs)G|6H>sKVX8eX77OE`4kf)poc|7>QzzHo|M{td*prEcL6T6wsht<<`^1@iqsH{ z2c^~rDvirfmozzwLAp;rJ~Oj6*o9TA?jK;UE(kFrRsF7ko1m-B5i{Rs-M=6?N_Ef9 zdt_=;_jdY76sa% z8qAw=&UbXGGMbwlt-J&eT^TbBD+o9!6Njc2<(6*wqD@)`at}LXfD1;6AQOA^Hvw| zlOANPZ&dAaj+-5Lj<@r_%-u?V#uS_aooWJ&z5-HJ^$vSV^-z=ABxe;;CJtqb08{wYM#wRD z_zPJ1djB<8a%sOoWp~@{U;@?UxGkUiYCEt*crJ=1Q>FP`Q?TsLp%Im~b&q0Vdc+L7 zjC{5S!mZ$j@jpykHd6&3)Amt-1lrAVF`j3#*9_L6DGL*~bh#FzXFBHKg)S;aA2JP# zeT?Ws9%KpMtQ4U`M2Fi}5ih;5+mF$%sI>%>4*Z!YZO-B$@bJz<71zX>yKj6-zS}%D zy7yI}ubQOGX3%@82uoLMa4b)3D`4S8K~Q3Ef!@%GhAWmmkJz)`7g_EB=@zFvkW=^r z!-M#KQTS$|uO8Ak1*hQ2ZJms99}=l6wH{CImUj0A8)24E%i1tP<6Tdjd zh)&vlXzj=#-D^D|5^U}>(vcAk872((VbM@)j)PXa;{B0&k%_1l=7Vw5M9c5AVGbbb zIkS1siG%6e7%#0eTrdY@7p-Qg%+QHPU00n5N969%?0mEm!<1!P&ki@@t%oi+mX^0D z)x|I{HY}hDBQ(ZU<8<@J(&~!-kWN0r95%J?+K@1S|46x0b1P4#yJSvq!Nnz~of_Sl zrLMOZTEo~FOR~b9BAgv$!eW9m>q1?UJwin*aGTg9+F+=*J*o`Zs;g{cA!XX-%bh9X z{wEyney#Y!^aeFFF7 zNTp6Rp(gaI_qbTj^9qM?vMvn4MqTX|N8%e%g+YwyBph)bK{!-9eILmG%#U zILUV_sp~|>BWUa8vf-g5a@Xci>-xJ_k-sRLCCf;#MYFqC?#K|64)3};ROe7P9M>M0 zkW(JR%Iu2P9(H=g`LYzf;1BOUj)mtN0{FR5*@+&xgH7C5~Mp3mPe(DsQT@xK5hzgYemrqhPPF+n!}W2 zm+o%=2qi5$mZF@>RFj(eeq3Qd8BrH! z?i{1K(%LQ}k!{={Y4t5S#hZT>0b8HO#;jbW^Y*rTJA_1&Ekt0M+UqQKmcaa(_Ggci zoIi(t>c+VLh%iO*X;vc%BMF!k)=gPQ+PGe3T)@x$Bud?ZEgI~W~rVbydMiO zY=F2-;z1rh)7@s4+K++!JkQa0v()NQW2N5BM2~l?VJ$N&zOyqj=ce|sHa@hj*3uu$ z*qQXrOclE+H=C6}l>H#?Rgs*TW$D8rwS;KcuC@@jZn9CA3HM_YV@z{BCaNAJ9)G`nzlh`mfe3aOBP1e#`{b@_0 zRlw@nei8Mt8RTa#do!|=CMK#4q1(HkrnP4TC!6RT+S=`EDz!rV;wo9ToKBmV8Xg53 z4PXX&c{bGrj%Kuq)a@&P6xKM1zYd3?&@B_xsQ4y4qI8b@CRpmY`V|?k8Z+FaIDB#5 zK*Nv?aR)kTm%^&pDs?W_htEXeNNhmLlJlS~Qfhx^+W~r5DNB5YXk3G>z|yLs)nPm! z>PKf;%66AgvMzgg0dA#AWEv&IS62k39CO0-Z)W-_9z3zRZgml>U0i|#hbLmT&pBF; z_$9@K^)8_k&T=NMxSjnOZU0Xbkn?E!tD`HfmCOuc`o(AY=OXdyX#2A_SXW5>`7V+j zNV^8!XZ?H^$qoV>zsnt7u)X>3J@UnmpFvE&xGh(D8GmtFeww<#TUhWruJebH=VC9r zioedoND$L6R?FEystOAOts(xr+CFm~t{A=lEa$Vl__Jtxa9qI^ugre49xr|w31a%i zXZa76_=iKeINJWqf%v;rfI9(y=ko||uvgB0`FH-!%f0wzB#7x3%jG|*SH6q{H$VCJ zcKZT9_vgz<_H(JMz!(E|+|^RA=WQ_k;=h2kUc=h}CrDhS^?U-b0in>~SHYYY$@j!-P3U4*r&F502!xO6z&9{ZFkwbM4u$6ni~)gZU2|=5Ou>xIxcV zI)CQcvw>lge`4*=RbRH`ueW(JU*N)Ay?Fw!ov&2-^Xmhs2{<17d`+FnzD(%vd(*{l zOhL?lJl8+}`d7X&1?P-kHKad<0t5#zq0gr&+nMT1h5kl#T}<(SnE$9o=R*J4rY^(f zIIo4Dv9SON{J=(aj?1x~DZifBi*Y#+^DhPIzm4h|xEzocahbU* zUX06unE$9y=YxAKTn_XXKH%qU0J<#!Hs{aTa3=p!!N1{07vpju<_n9~-*7o_M%UkG zE-TPf4V+W-b2gkQzn<8Oc{vdCg=Om+yd2=RUq>$x&jPf-`pL_ktG`q)c$4|}ICa@l z`=fN7&xXGMb3l`#>u3dXZ-CwFoRmjf|hSiG*v00Rg7Tw@M^ z8(RG*6s-EvA^mN>UX06uSpFzm=Rl$oV?7gnsm|X55-!dF z1F`&3w*J{=e`&{YNd_3ecwJ{)fu#>5F8##&&edNk__x!`C3qjph4t%Fybtu3+I5ci zv7W2^iTC|Q z0(w&d!^6x0Kw?0BJ(GNy$ZNHN1hM>5sLp=?nw}XSe`J+0W!K0Kx=L z0+&hr{RDW)k7t%&s?!xeo&mD&>WTRi1pKKFfU4*LmiB6W*W*1|ekn&_fj^_eEE3OOG_;4DNBthTEqUJC_e`K1bh6<&e@0=x9JGRib>aav1+Z@m{ zIW6RhSn1NHHLSH|kPZd#NY z^Pf1mt0h?2#qExDuk2W8%59!yO}IPB%GSYqfI z%WMXd+3rxE|u!?SV;j-o5kWe)7W~KR=V*blbSY7VHRAd$e8Yk!(TceLh^7pN_iIo;=<0 z;a}_tSzkbo;u7W|n2U-%=?&qQah+VQ@kg8_?+?Gnj?l3`DL@1>0cDHeRKdlB2*1HM zSVXG6YD&@N2VaxAZ2BrQZVVQ)*86LI99rPBKwtc?O|)7#uMM6;IxqTTzM0|n4$=Wp z-C^{0_J7-16xG!$ARsd2MawXE|D6&K4q_UHAV(yjB;aviYR)lx?r7*3NM*G@7obKZ z)oBmyn#*!ORd+@76(bzEi{**?#@iM3<;LTuG24OyH%Og$r;4Tr@Q@(8lQEKD5e=y< zZ%!`Y5gnSogAK9LHtLTsXxvtXgxiP?=#LQ4bZ460eC-`a&cw@j;Hzr`^++J51lvy5 z@6Fcz3ez}y(R^sL1R4>T;4s#w(~xHJF*{VI2CX4$4oF=mPG7L{{nzqFgiV!q5V#)K zZHhEMbXDP^N>l&pVC^IVj*P+4)v8Ib@$ck6ZH$E?C$Dvy$}J?3885KQjq=$W^c`*yN_w}(EM zqjMzv)X+I$Y)xVK))>Vj_V$u%!!5S(sb;I7y0`74uvDBl!XdDeCd4>*Q+@cuzdz~5 z?Sp`Nv|TjIQ{FB++r#N?szv2lSNYti5tc^Ae%iKm zq6g89dl-t?@bOsRpk_pp%6#ZcZm{4GJ*ERW6o>iUPxY_LG7fl9;U?Hc@AC{EycX|_ zld#Qz#)62_V{Y^iwW+ur!}9Rs=odBP*CKOV<-_)benL3Vt?z=uwQoRJxG%4 zE%bZ4xg9jV5!X+M4M5|h8#+E1ZwnuzY`t#AV3?CW8MQh{o0D|k+nu)}l`WD?6^Pb{ z=wu@(T7kL4`D|uN84Hs3CGzP0RB$!av?TXYLZuN7rPgY#VBm_Yxioi`U{yZh#JhA^ zfk4JMC4;ayN6z4EQsPgt7O#`C3yX4&a2Svzzdl{>>5Nh4eWO%p5n`F!Zd$NSeMpcm z!9mfdlrsoVfx^TpfENj?IxC>bCHUfL#yC-6$-CWKLR%G8rrCp~)*l;g98WUQ-hq4; zVolr;XwCP=-T8RJ?rn0lhX1B}3^G0zEje1PFV?YMjDP<&RI(r3Ta9mG5+EcRD(B-G z2n1_5#$*UGn6>Oj1Q`5E-NlvE`VO^d6XU`ZfmyEFigDnx-Dw0I9 zJ~lVO3{jLZwC=fM8ma(-lo{VHV!M?0l!5Whw&c!DN3i$N=v){-e3YaiUPX&xSK`ap z9DWjG-<0nqkl^KgDB?!hP<$Zp^E8)If8i=|O^Q74WS>RF^oGMX-fVbB$+ zE%-*g;LEP@5N6)*G|bS~Vx!|$>AYC?Q*=7}bO`)eC(WZxMvghDa>AWr(p*unQ7G+tVxrBtwZ}ti+cB`VHXmIe{P^M~Xi%1Xj5^;gdLcf@HOeu_OF0N^ zW6k*!QHJD)o4tzOTK%rrWs>Vm1y5Ee5VSfi%7Jp=}nJs#1F?| zsO87Gcg#l(_L;Irxlkue1B1Or_{sa{qcvUjRNsrPCIZ{K+O@WgBI+iVS8+9{a{TDKIYRP@uE+nzFx-G` z^#)IrT^wR%$4!h^+$rPFA$mH##H|Fqilww?ZR&x!XZVOb>Ui6bj7;*;%Xf4kMSFa# zLEm$nnu{dt!q7PjYUmy&`G?TDSy5w03*)RRyhU)g$$fF+Kl)(5sKX;(2Bbx)QWgw( zy9MM4QfEULQDy$TZGkIkXmL{g>I0!bz4`1ATIUxDWU+6Iy{IE0f+`|3H0Cwhe#f@7 zvPLKMQM;FyORIq-NOJDB4mHnI& z8-1W~hV7tsYu!e6NoV&piIjJmPlP|#I2>pAp@gt~NN_?Yo0Ch(zO5v+ww z%1q+l9EQexdDYd1JQSzqDM~vSw6ynpokIlUR6sDBQE7TQp}dKXcW&-(7Yen*b6*ae zJULaIeHj~fBao>q= zWydd!>IAB}tH(te-?qwb9wDSBKq7gEX9XCR_Kp%}JTue|kLr$oJdo8$_29OO4Ki|_ zd6uy%#p`~r{x#D?6z>l<@7~Ns+a$z}w)eK)K^9@j&@qmDMdBMIxeYz~R;u|aqnkW2 zr{c^Hm^Eb$gnM__Dng=!C2%UXoHQyv`*m_QM#8qXx8*112!+cN&0|z9CTGp6hgQz0 zDME;zOc5@R-RC61lF+ky!VkfVADGvaQf%)N&O=L3X5mMdUARnEuL9$&JLB+d<37Bs zsG`LE7uY`nlMUS?J{r9H=)=jR z`O?ly+&pet1GCAsj=9F8L4;(<{Rye`b#V8Hh80}k;8_slgV?mDv%eKY#UR1IFq$Hk z*nJlwAAy05$@Br~J}H+9!$d&Rx?5yCk+tCxYP0d#M4N=7CLO7s$4cXn^UQAp!S8<8?S1q_3!SX zEE-MrgxEJp2%EN8HFj*qK9MGr5E7ThJJPiETK`aQEuqTbiP5tvs0lUVnU-lvh}Rpi zH9`&|(aD~5;;b;4H+m%78`Y!F&pp2n%lhot0d!=li9!JM< zXEsi~Pd}qJ%K+<(UNjwsuhZi%HVubf=`93iNhn2*Ay1fF9-H(Gc(&3Wr80e)u&OBL zg>KVfz;mt4b4`#v8l5yLr|CaXi$986e5lwS{3dO!^>OhnL5N&yfru@07Wyyy`7p|w zo8u;pHZ zJU@}X@2-5iqq1F%eJS*ZwlOc`2kkdR0SYUB|^M!^SHU>({PyE=?Z>LrTJKJ*zG8Nio@a0_C~O9!_2vw2Fk>M!CvUgGMjSMoiQUB0*hI+ z$Rn&Ou^YB=1h%oURHKv9&~~EK)(Jhzs{662c0j0yq^apKV{mAujT(&7zS58tL#F=C z5Y>@H$JKUcRi?%;&L_JrBnNF!@P)ND4O6bl_c9$OH5-aI@J^s!cw_H!7WNcpRxc@pc{iL3+Md|^1Uz*3C+uM>DeIZXCdZBLhu!;cpVow# z-d+^N*cU>?vYge7eOn{=egNtfqa@m=nYq43t9HHIi~=!7AyV0bC8xmd&{mZErU8>V z^YPMvUB|F`8ccD6AoxtJXkxj@w@;BEo2dK|02RT~u`CpKy_% zAG*SP@5|Of@rot!V$WiyH_r{;bs1ncwnMGb?0eW*fYzF?9bd=%f26%-Sk>FwJuKZw zhjfQDEIOpSLAnJ50qIt{8>FN|8c7MIQ@TSMX^;{Ska~Zp`y97N(Es~<+86tS*I0AT zd(O4S827kaMm5Q35RzsgG>^YTZP=^M;>f6?`fz?}mVT)Mb)aWc@wINyNzuGO*xi!3 z$8~bKclU5u_SNJ7vQjOKZ|84BX>CeZL3+?QS`V(-#@xT~n@an!TNm*)8R zi#d5;hNQw-Gk4CtD5?X0cJ*gUn+tDHd#=FX`(HHw-oL^E(CD`knm-g+b|8%!Fbl8( zE&-tVpB)gn*>CPw{zjzyM;l-R29y7WA7uN58vd^W|0A3DH*I_0Nxgpvkl*+wMkewYEhkm0#@OS-%Y(G)N*OK8M`U}6O?%x9Rht~!KG`|9g7C*c;AQm0K;-_t)CxI z0V5Ewj^AwoY~OI-i1c6N`VCeawx3wx|02E3YV-Y=-?FAZtTt@lkg~A@buYQ2(mVuSekgS!Q8l0aEAz7W;buIU6g`qkZFegue+O=VJSbDgN)W z{^Me}HnV&)iTo;G0P^l%pk)P|bb#UEpF;plN?^P33jKF6-Czy@{X`u97wv84knbj* zTMohZ)5;3iZGfp!-|Yb3Vc&EH{w7O_3v`2Q`Ms`gFo%3M^86VqJCL>Tj~n1S@V~=) zgEs{9%d_+wiS@TpN-RK($KM=+@5w1Yydl?J=A3^A_XcYS=$CitJKVpqhOhu4#@_%2 zV*P>B_~R^mLw_USe@X2(SVKTRJy8EWw12RMumE2@{st=`3|~7Mzgt7DXQy!7czONJ zd^j%9FVEFKtNW+3V*)8zD=IF9!c;mN{RIw`WqMbZ>%Ap-#%csTSHg?=thb3otn9Z-4^oFc53@1L$|yHv;|FiM_!b0{Z0v z`+f*+F^8~R&zbx4?y~^Je{E#`aU*<#eIw9+eJQxXYytZ1>vfaag5{fvf6M*)-E8p# zD!IKC7ekbXpASImg1)gLFnE)CevPUC+!1(T*_| zj1oq>Ur1=c#d0jcs+ME(Fis`U7>|=%GsuHk(J=d|wMN6~!kroHUb7O3#}8nS9abf% z4BZvb<}WEQwAGsv0m3nQ3(YT2CRUE(b3cE!wBbm>9JA+tSEu=`V6WJtcTKhSWWRI0 zU7j)PDmks4uH&klZbcD)Lz|T*Qw9#J@UdcQ+QsQJHXZ>tn`h4*Pwx`03>|Hs;)aKk z5t>0=v1Vj$iPxNO(uVECS$D37Uv~HEmGlqHMag5e3QHOVWh)!Jb3Y_8YoOGUk zcz~>glWb`x*cN1B@5K=}bhLayEnTP7hcQx?vU#Ss9Iw(+2`?$x3?t1V>4S z#YBuy{#X^77>0abJ*AfwGZbT`)FTwJOtD0vEG?{KA{D-ACR5QbD5eBAPdW2vFKmj$ zhJX<$kob+42v^13c=ngD;3Aq4Avu`ZT4GR_Hf}r(C~SKMbQ|;DhN88PQ0GpYwS#0t zqNc%&gD^IPYUw()M~|-%iG(vZ0$s+uqj8nHBwOBkKOn1!i5w<1D3dOzW)pWxU$rfI zhVEY)GX?k54Jn(T@sUG+ovF;dgva64!zeW|)KPSPk8n*n`Aum14np~@&-iAi0xp|K zHIf~C7Z9zsszcFa$Qf*(7Yk*l*Nh5oI_-Vpa=q+j?4vVfb{fQw1424%cd(v%_nRz_ zWKD1MaZ)t4HWutdtvR^6?{!D{ewH*JutPA)O7qBq2JdB)Y+f0}WpmYSi5fPsuy;99 z=`EE#-Cjvb%RKo!Vd#h**8QQq@pVU%*z&?N^L>#vqr=9y+@{V&^PPt4Ta|+e%Jg>XT5HGgybF&Mf8JgpH@O6}3!&8YvIwW8qwu$ypsu1vK5;h!U!ossRDSX201!v{# zAW`ihKg`maB2xELI3UX<9Gwn7B%lkP+?|>hBd;!K@VOc66ca|yqroBNGHp3iVuCmp z1rM>k@&egZ>P)$~S$&St57E4)8WR^!)taEpp9!%>4nD!snV0v1K`~MqeBn+@hOuwb zJNB4QaZgtY{CS4b6!julh@}iV`TXKKDYRI;oF;m3yNi}?Xb{)A9A*TT)4SceC*5^# zyWKRgh-`)hgkGX&b)D}A=@!v`%{^!O%EV6>dq~7eF-cdto*+?zMOJH~`A%ZY3im>G z7Of_fP4E;o%vn?xEx@FwaK1Z~HT50m=X>qsuM@faJX*?46%Evz)CGrQjz9X@Dtb;X zusfiS&cSXiFg<{W8HisvAZTS`ywZh%O`y#uoc<+Etb7=Wf zxrLp|3fH;B;|lvZtWWEE2Z@y6t$pzk5ft@JG@O)o%&x#B+G*m}!nw8>tPd%mjq;+0K>ITWI=xBoV@U6{7%+X z^^Yvo!9HcK3$J>Swcd>sZ=lRL5!ey?KOq_^)Zgn+mgtr zc_gyN=7E8ejxnsBlJ!0x;1S|Zd5Hb=b)!;l%M`~eIvYurNj&;m4ijFx$TKEyIx_JH zsFe}Xdc*?&>C#yccz^H2KR!;k+h$zTeDtPM-ru1~^((@>Jb zf&+9BUAjGSuVeiL$32I@@Y>F)r6cKuPiA^gTh!Yu>jR^oYCt}3Q5UsDT_wAqZ+QdB zZ0}#w;W?|+(!j7lZJYAY^NH-Ley&Niw`^H|EGmyb+KVYK^89@!?p8v*74KK5FjxJK z_b;m$bY@41m8H1od$&XkAm?JYc@oy}jNq#~*NrYEVN4k&Gs8_<9Pd`HXBAm)Hs;AXEdoX z|H@$PL{JM+5RKe_ip$zA{ww$FE57BsxkqqBsx=O~_!%tB@PPlPYbX=P)S*>H>71Dn z%SX+IJ9MEN?X~$-;zq^V$}7$4*c|Vr?tIIru<^;#odjhx+1ZH|-^*&uomzYA_Jcv6XB8WHUp^}&WQ^ZMBbM2)YkuB4G@*y~**;E;#i z-pd$b&P1QD*F!1vxeM~Zr6-8H?w4(nDCRi|ZM>j$KeK<1Q{ja*I;-Qk7cjRqp=+iO zZeWY_ZbYe6(98xd~v#D9R z)c1(GDnbRBoQAfR)&;qRll?-oj_lb3>H?G{KG#}D9T3%{_p5xwcFCFB1K$4t%HlRF-2?Z`E6P!rL2D&*mY4o%!F;m}a&4A8WMxf?ut8v@Ip1#Z{u#oCvP4$HPw#*s* z@4}H#%49P2UWk~!Nmuvs?4sGJnt+uosVKBr8OQB9=LvlX@AZ@_NvRlZ710~IeoG@O zUA9==wZ*?(jzPQCFc-VXpe%|dKyZhaPxc(>w1Pce4)8HZ4Dvx(A}W% zPTmI4jwpCO@K)!Xyn6@MxBnp=HlGM&u<{*nm;S^BzV@pAfOs7{w`sBi{QE*4kq@r? zw2Ss0LBeE77i75;qo5|L30Mfyuc;Xxi6roC-Yc9K_7W)4t;aG^&^YdFI>^R;lxcZP zj-JqfA47O2HGYvS71_2k{oqj^y@K{+*P)`_ZZ$^E=flSgUzZ?u`y^Um2u=NT9VslM zv`pycP+g6%=9s-`#qcW8c_86l3D?(~Gf{-QN5pi-6esR=^#~`A)EP-WBCSN)hbQD^`$Jer8}3j)+i6auMXVMH_Y9y0wd& zJ@&-z9;P9B6Q~XUBprOpCRD0Q~Q{E10kHP#czrUrQ)X^9Ma>Ro3(eJ;FB-11=9NO4v&ME@PC+ zdxJi)8WHCSvCO)$q&cv=>oe;xvxk?(@&sNU5U7$2eB6Kk@beoaveA1*&RB?0>nQaR ztuPz#2J9k~>f?O5w4*sMeY8tuK``|SN#+l2b3dr?B%1W)yp*mWRPe<9d_Th_NjRWR z_~21Dn-d(totH4evAna{Qm@os%davhN%O9+Y1M>?40_v9LOjL-GwM&Yc!w~>K6RSO zk5~fLGyR%{qqOdbQW7sdKy{g_$3>H{DqkdeTJCg4|MOl`(mp%ofB;@{Zk`OxeTRrD zNP>l+hkL_LObbCxY&*oe0yx%r)ONY65P8^eTw{2U$ekk?5p?Czi1;YZ40~?Ka=AJu zkfX~C+k_AS2N9#vHXbw0ngoFzbzCuJVDqy}i>$-R{St`sSayf!#e0?1ow%gC*2EN_ zqQj@N&R#T>8N$CzTlT#SqR-)Bfu1BCJ56;)fqb5;?!bhkmo(i;&*jx z;IU<+?b8?$vh=3TbA>p5555|#D$j^E3>5grKhr}PzAMjHhTr=EeZ!R9alTkQiDPf6 zv1y~YdQS+a31fQ^`4u;CWpuL`4q4IXT=amJcPHYb4Z91^U$ zLd4H)KTzNdpC?orisvEdTS#pq*$Umm@)%1L-XTY>Ne|O@m}B~oC;o9zkbU1bd|!h- z!0Z{Hi3ALnHDsEo^vKd$Q5ddf8n)P)k0lY#xW4~_(EEcHYdbOlUHJLP49FHvp#F@A zg|`k`dSg>z{LL5x-q|;Dg*QBEH`pR15mpbzO%M5Cruy!2JcKay!KiT6B1aN4h|d#nt`)bd1w*hDt2r)n zXi~P=OT_BoTA7EWeYEyUUgfUCTf}&p=RM8U58yQsCV zu?P;wx3CVkwP1aMA)3?eQAXc*3BJkZ!9}EDz)K^HgjE1h#SE%vzUrXNR zfee$j*+Y;ju2_Uv|0G4EO(OpcSrEZr+;(rU^T4~ZJw1-My=0IJ6TeH29_L<{90LYU zm)JI&dbV=@*n=p1a~&~I;QH*?!8-jTqKRltZo{el(alRA@zhg(bm*@*83Z38IgP1C zPU`yeDG@m0--O`PU^{tkA}xMRx{7;s94nHKdOjlk2;S`qBJE0=&1&7&?E(Y|-wN`YTxAB5^?_y=U>Y!x zJp4^@zeao$J@{8c-nrO+qTa7D-a6!+1?afF6(t)Jhym#Q0daw@d0{qya|hNH5Vb%z zwhaDVOAh-_oclKg`<9j**1w|JK>%q9#0D?}`Tqdd{T=ZCaV3A^+5fzftbZWbfz0x2 z*#ZRm#s{+ik;5S3@0f2y$$U+P|HljP`_buK?7uMVKYJErfrJY|anWCuOdtdP)=g&t zdUJrK`~j5>n3)bFPv4I9Tgdx=pfa-p6$*T;U)tN)Ij{LpW2;Bs$WvCJ4efRutUzQm zpkIN2HYPx&23@BEfPmID)*I!Xzv{$c|A|1q-qu?>aR7Pr)`j{}9jw4b1AO9d-UQIM zTE3Ay|GU_Aj$hbwyBlKHS*}etx7~#QD7~BvKr8FFCP3gm{D$`CLw8+m|Jh04oc?Yn zIey~Ke=3dNwSxgc3AaN0Q5UR0-Le5G;on=b##4Z zZ(B^g#UKzGM6OVYpe@Vg<$z{9D-?)7i3`=ES-rBHks|zf$)pYbhiL z_W_$BAL+|X=^NEREZt7uqm(mDFRQ3x5j_t3LVt`O+#t#ut{r3Uq%h4ax}`0VIxTK4 z2Yp~}%k%biblP)nT$Qo)ug~3M>I7Usg#{m4iKx`{2s^3bv)*;ttH_#+#4L_9(pr2q zW-shGNb``>O-Z4=;^#NSZN2I)Ux1UY97@EH%opiUVId+Sy0{c(;p2C8aB#Q(j36&# z>)__@%cs$TUc8`3sbYI{CtmMv$g&lflg!Si>fvW@&)g3ioc1RwOI)$xj5dh6#^%E# z`WM3+35W>Z3xcKe$THB`NV9G%g&EsATr{Yy3g*Yrj`YeOJ!6EErX8pZ7M9{CYZpuu zLdljh<$NAtrgz-1FwMK&Ge^E6x{KU6x1<$&&Oz@Mq|ZyOC$!m%0jX!Kt`uyn>6mE= zHp@n#D!@duJ{zkdN=cJ1qOSDP)IWNY>HY|LtZ8@MV`CBhg4%xDxxUgB(YPnxqr`n% zE0>W4x}Pbx*Gl)co}OrgJ+H7(YE-$!O6jpI@0q_T+v?2wgLe zhpif#sp4{upa!w1n?W5;?zOIk{@hEg1K`Jh>n}>M|9x;rLhvb!LDzj99G>;gd zYuOYCqeE9HpTIqReNWfdp4Pz7LH>B5{VUM#2*dl3B*6Ev*p3NU!lGKDuA@3HSB6nfl9DT{u*a30I%sWh3Uc zzw2mUT^^~Q?vmA-IjOottPL*RC7#|J+YeNAwHpcBX7<>Y9+n;?(cMAStqd4tE$iU9qJDUN zMDRjYrl6twf?rBiTB&mG#4y-9nPVnzC$Ps%4{k0~EArXJKeio3z(TQwQ_*7~`bRan4|Mo5f|RfqEVLs=`T z=Gyq2_iVK@9S5z3dPJh_y~x1>9i66^F0co{FlB}2rhHd#HJm(>I_SNx>-;2q%=Htm z7h4=Xq0c{CjZK5-Jow!;m=+A~Y%fl~YJRgZdPZ3y!^TWpg_XZ^49 z5?;)uLvF0k^^Mb;q147tw!5IrxU4?)w%Jm%(NS%WC=CUrK%!B$hS*KCCA=GcPnSFX zLD0BHNZRxw@lH$_S8mloI_}u6c2dieJS!gBQZ^BMxng9SR(0QZ;+{hQS8Z zD;_!Xf!e~NFXYUqfs-xOlBork&O(rRgz_nTG^fjECs%yp4rk9m4>!i=sBmS0A$4f7 zbtH?~yDKV>pi3;k1zv}!p@3sNR>B-NsAbLTDzJ8YV&};S!U@l*S~RYQpvz2{L=$;V zdD=s0Y;;0|ofVP(@&oU-&w6?S%von=fuBg3EfW-S7IpsOd87$Uf4Z1lX4CoNCK8X{ zlP1{S<$FwM@OBpDBMTPA6xUR3GowV4G%#aZ*?#<=J8F%1z z2`7QDDTajK5POfw=(Vb4g4C4+qY$1-*rnztV=y|C+{?^~CdK|B8cXXlHko1~9q5Hw z{6UoEr6Jvw6{iHl(8y>z37v%e4jnHnjgp@qxxH8e?U29p8ME`SX@~>l?xG@nhHV=a zHy&Pw)VsSq@&lXLZ|=J;otnOjF*a!QeH{uHV`MceXHim%phWQ*Tl7so>xbn6iZAyF z17Ad9#$u>BhN*wnNw0@Q9~#v4)@7@VPshgFrg$$V?8c*9DC`F3S~jT5SZg&nx5K8D zRsX`IHM1Udal#S);H@Vyl-=FS0>3XVuP*i`?3`0twk(3~AZkjebb#v`*xE|HhOH?a zMX^yjOkI3kHHre`Oi#BuB4@Gd3`v8D4vg1;mHe79u@KT%%1wTZ?xzoyxn1JzI(^@zYcq{2q?<*Z&(daLmVGx$oJy@F01Wi^@{|YuNiN()mXwG7W z4ykR*Py!~I+x>6=bLuXV{Em6K$bc4cE~!))>eg2Z<}M$@+-?a(kXk93(K#3Oi4gXd zz$U{JYugHWB!btwtdtdxy;QPZycoe$fc?|eP}<}k;6mu3ZRG@J36Y5 zR7K5P79PFCBy@QKemoDYL6Kl)G?(>>q@2nQo(}Ih!lN;1Zqjn8!4RJ!|M`uC!Xi3q zk_O^aK2L2_UPconjlpODocAl-fEo1BgX2JNG_oNdpnU&>-c&IfbX$g|Zg zjVffXv~+mAcPeNLlq5*2cNttvmpCw@I~yQ?7%xoMED?<5$Iy_3-UJyx#AE=RLYV~M z6rxkU7i;wePGPGra0;0WfK$k{2%JKrmKP>hPni~hGdOicZ0vlOk`5Eny>D~*dBR?z z56A1$#hDarwX4P>lnTO67XH}?Co}9#WWxkx;Yqjd<6=-h&-3fj5T5!*& zk_jv{ZYSllT)I34kOka^ghC!G*bU_I2TsxV;EIn3{2k$^v9d0@bv0_PH3cUtn? zx5Me=%ecdIRgCpwOJYYv&(7IY7c~{QAA3R@%F@}9_*2!$T;$VK+}MK)aYv*@Z&*Ua zc;2t@NT^KOiSdCHJM?0Y5wVX!TNfYp^lQRKN|0fXJ!^{P8VjiXL|@tX;4)7@2-QSm z<18|i^%pDIzhij(Nhcl?|ETMHb^F_nYWai2EGnrdSGTg5LP*d%0?odItKfQ)?3NEr&xuS@!WO*{qb8c zoBC`r?;6PZ-6iLu;BvU0i~_A_C%=LM^`J0e)u6@DfCA{$5?K|@G=%OkD-~7Gy@3Z~ z4=LF{^5c@oehFh%6+p0z(<$m>7J8sIgqtlD83LV;c4#PApldt(pdiI;T(IDU33eAO z0wYRU=-Se>9bN>qL!(J)=qr~#; zgqqh*WcK0SXrDxc1>szW6coI5EihgX;~_z9%M>F+QLMKM3Dz&a6%>3oViD%8^b*P2 z+kd`V3#SMNO-8<0AOhiS6&_JZA)KNB6&iBoYr@z4)+$U(>e>U$jA@f$eVCzB*>e43 zUa`g=#^Q#3A^Q1#nf7g026qD5#tv|{7Hb&PLiy_o7ulp@CndDBXAB)m(Arn5 z_iXl7k2*sPbY60H-od%_gvAlyXH(ECu_*fzxagBAD;OpMIe=&u!h*r~4)0SAK~8qo z3;ZF!c=!3mFO~)CNppB7Mo3t1S&w>5caY=Gs8Ej1&Q^1RJ-Dg&E&T3wyUMqJfJU7W z)Sv20A%4ZPi(U{SBVkV0Dviu`#YlTy4wc?SiAwJH;{J92DH*K-9oheYd=B1r)4;Q zPqc{&izo~J4;Aw#l8qUd83?T3caW@{-%P)^gZ#Vg{Dou#2<=->)sO9D1G2~f2K4)O zUPt@gD9-%dZvH*TcD>YpQJmNFAORYZg&pwi18gL)ddxRM1e!d5u1?nL_M`u;PR`$x zY$Bp6qDr!oa+1m_lEQkw-P`LC>$gE>`96O32V^#Y@C78L+adqm-u}X~0jK*`96$D! z<+^{{d=AbNQ=A`Ar~-#@;a#%fCdc0yza`mZg>Hr(l~GA zcz@a4n@aVUE{7is>hHJn`n3FGbN@{jE)bRXZJhOYkgPy)0B8392_*3OetQCMcpn7i zMC4^9HAO{kIDS7r6gQKXY@E#hW6O7YidTzzCGemD!s{}NZ*+^IcHpD6=RiM&m7UqW zGuOv4q?79g2yZA<-@PTj5W9#=!L?P3pjc5ADL^9C&{X6Rw&ffk%0CD(=1Y0e`tsS; z#i^)HeCyeMV7{^3+U8S|6l=X2buP#jZ9 z#4BOcifQqalNH&H9oibQcUexg&yPQ!Rvi0msWofx)|e<_ocqjP?w?j*TX#0{dN`89 z;Ij2|)DnLbiAh-uqj*QqK(w5%T;PIF8I`zs24*Ksixe|?m!?)YxK$tCfW(2T^HdAc zv}@r$KfMntR{}II-pt~(n|r|r4{!G-k+zi26pzrb68%bM=<_+@(Osg4umyi7F)K4}EE{i+Kw9gSSL~^Fe%#hMli`qD1B&{j)7KMp7o=Uzo)b>N%Jx>=f(9C)- z>!(B_`c+>$41!_w!o#P8WXJ-Ao4`+f)gU=lq_{Kv@uTNxN@5c+TjrmNyOT;#^ zIHPhVly$Y{&T+LANf;S+!2HY+-=$(Sg&7)Y;{>m=P+JQkKbwabT+a-y=V!K`c!~Hc z&TT;6U97U2rA7@N73(in2}FcusEBlhxbGHz-(xk-MAsL!dXTq&+))B^X0D!ufqk~| z5mREgcj!1lL!l3Af9!L2>+UGXV@b;JHLR&}YymwM$4jiGh&0BM67_7KU~0N1b?`7Y z3JxxGrX@NCNM5_a(k28wBgEIC`)$$ z#|}7Qn^k8Po?U!>Kxnbac=Dke-i>kNfBK2U-O9B5q9L}6kDfhY&}qJ^c8llHHd2+=c{{Ck zKExtg=u*q%k$pvAw7ma`2y&cpq;QQ3)`(_)5_ZpKo~osxuec2k0v;>h3#V11)8@Tw zm*6>1l3*o4l~Ze{>=D=$<9~Qwen)k=jHky88s+1*d;|w=ii{+X7J1+uk%(v(4 zZOPkbqhvyus-q4p&<;3d{NCj5h_ep}5l)L&8B##3y$7lGQ*5xajwObxt$J0}k9f2e z0=HldWR|0!niT_6Vx4gz1ab#1k{|v#|HAoX*(UT7YR)Vj9Z?b;=!CZHv#J~gEU7bT%Ci-VeZ>rkb!0C2dL>~~eqGr+N|QTIK2>>qx+Tx;bXgxtk-zV7riY4= zvnw|-br@`!l1KMTR9knIUy)lYZBsj1*M`69-s6Z#&gvp>Y?A880}Bnm7wUZiv+t$$ z=8IY3T#eYpXCHuR2bF2P(e#W{hvZJx8rR=nU+NP62BCt#Jp4T-f zY6M}&s~v(TE1e&JAu!7y_lXvaSR`$Jt%4h2%cCo26BW;CF@7#Yk zWhbYXhNB?aw0!|or>@4e*b?^KPE=K-#=5X4Nd3!st=UlyeXx|dwJe304zbPz-qA%Q zsp_$7S5ypQD$RX3K_`P0wTZb#nI)#(`)@jItfNoRq0epZk-W`N=2#ExY#=?kKkLm< zH+9mDS7-f-ab~@wUWMg=jV`^bRCcRkYx*fi=`1M4VCDVr!IDZ~VsZ;q(nhnAr}JhR zzW2LIm500=bVxAT>GzYd`P?j%k*Uo1LU7|z2%J(v^maRO;*>Y9p7+w?=R>u}3m?LZ zzaU-2MZ$H7uvy|&!XJ>b71%AK)Sh*FPa~2+ZBa*r5W+GP1IYp!8OeFir5G7MDK#og zrEEOVdswhR&|JTqD)n%--$hpF&V2K^NPEYQw3dsnH9SIvUN_0U&`MFsGKu+|f_JqD z`s5{jQ}+aXM(yij`DEh^2Z_G>9$`}GLM8S(&*X`%f;ko*Z|JhU+yf^VwyyN0GH962 zLX!XDl(oP7-qob@-MEi_=J_SlU=nt6v{=36{uF3n4Aet*7bfN;Vl1qy6lRjEJCTE z2do=Nrj#L(*a62apnke=R99;zyeG+t{vV5NOdzRZ@Hkm(N{7=}_+a?-OUa{iJBA4pVK`pU%+h|;yv9`!$@zq_Nmwt)-Z)YWIETSv;1Y{sKqL>gS|VQOt5 z)?n{PDksd z!5wCaQ6$;eIBQD-Wd}~L#B4VYiY1bP;=`G{RD^*j8XH_r>b4oYO6Xhz$kI`?dK)Ta zS{U}+36_uUvkQaL4}*oiDz=3yG&-YiPIwlGkGG^8;QLCTK6WjSLRa1jt;ROX4ywBBf(7eCo< z?nmfo6zpk;pkQMu5~TSrdxPD0E1biy_AZOK?$K%SqXw-v`+*9u5`gw2d}1sg)xbs-)S zCRx&*;Bvd}KhWZ0{7M|unuoA7qo5GOMaWj$rihsoS<#(`L8}_BL+#%T)=D-u&YI~k zy{eni?>}k|s-vg!8Xcy39llkJZUTb z>FE8j!;ce$&%QW5_knDUn{I32N>}JW37pD1;>zlg+{T7IF z(L2xgpC}DHU)+Xj>#B`~IKGsM@?)tQK2QaHw0SQ-2{e7eRYp}{gw3#eC0ven_=R_3 z;s@Y^8!mbEQ=h-BI$mjQ<$VvGhU+KD$)~qi43D;c2yZb)|4h(m?OoxXHs4krKa_RE z3VTxui&-XP6WUQBt`E_G|uM!i~tiGWSrcO0{xZ}NgN4`6og!@^(UvjvZsM~QK zR0fP3{TFnTM^LM0^mg)Eu%yoJLmp5pg!xn-_$j~IWGfp9&+}l(nAaddbhf_DI+9G$ z60ZSnOn5br8OfNICB`7oMFCC!%sIvxy;*>TB=K^g-M6-NtHoy;`U7Al5po$ zm=blLOF@eIvO~ihz331&u{4P&{D$WbTu7yA&@5^mg>Y@dCbPrQy`i_B6@FNt9XwT` zK7PM$K*_k%aswL*nRd%$Vk=WS?w+x)unJ=mM29; z*N24F%4=G^J(rh(F4W zEc~fpd(12*pEgygG=|tZj!ap+aAB`X#3buUR$d~5+>|kH*=p*Q&_HCWBlbBXI6S5TJ8) z_9#tR)p0tT|V#{vLthd_2ROQEoeEQQ_#>n+EHH0DyIFs^&YoiI!xsgI`aM@ zN#yiOC3J?l!}j=Iw5{Z^UX4HtrV}!ipXGz5?hIpP?_qT=)d(33x(Bi2Nc{uy2jeWB zCTHE_0jcsyS=ooy%%Sd7MPJf=W0+8@8q8Q1g^%pcnfs9i9h%myKbYLh=t_sA+ivdZUs8Bfqtl1OV_?V(ps z*ihyv`Ov;@oj6u}u_A!aijwa|%qd^%m%gPB8~Dj_XSyF}j^kZ9QmiPZ=mwHev&VKmU{j~<^4g*U;&0#0u25SyllX56M&?@9q(T;$y_Y|7JWc} zP%HiseE_#IFgN6f=)(m>e%+{${S}kU^-G({Eus&QfpaTK`-4da0TlA}$e-^_GCRQB zf^JMD`#UC?>nADWr=9&hll%uQ;|G)c1LSpF7SI{+{{->|EraX-x0b>F2QA}A#elBm zK4A0{D{vm!h(UmJm;L5cnr{Je{}D%lPy0Lao9m~hlb_c0+OVz%RL!>uK);G=z$nsN z4*?4ZXpI4yc)o+Z&eH>=-`m0dUAb`lyIk1+AZz?1ssWR{fQY;wq8e}{S^sas3)fGg z#vcsMz$)CnQb2D6ph*FKa9}(b5N~Yg zVE`rKXypKKUJu2({sSl&(2Y0F_i-}+J$Bcs|F5baD-+XC9Vh=ByZ`ak z>;3QKDHfp5?$#CkQ7A0z*JI}XQJt^H>agGFYG?U(p#Y!tw}^l9v4v>gZ)qM z2@ucyS6@X z-gw^tEC2J!1f~@Kb{T(qYyR1INo74XNg2S*qa^Y_SIr;Z8)o43113CPhur~>Co2me zO9K=9xNgy;uMhlxPv`G0MPMO+|JdAqDgNQn0mNt^){+xAmVgQgL}p%B{B;B_+s#=2 zop{WA-OurxO8U*4^FNjJ>#}nE{M_8ET>_nOpno@B^yypxjTco{jSuF%n!vHgi4{c@ z)0|)+vMr}fs<-W<4|ir$G$4b?riBQojJhlo4sUBg!@w}=YTR{nq+s+^SVfZWwe zG=RO4wPdU+Q*P7#{Ct1Crl5SEuF<5Cu)e0aU^>ZzP-kX-MVzR@tn7WkM@Jj`hPMT! z>qpy`v5X#HgX*1+qAxDb6W3f%^rG96UFc+l)lTT(+$RtwSv)R3JryWzKQLuvNEP65 z?bGOHpd3gukdCmyg5GP~g8B3jx?n!J(?YWa{lg1>ip`OvwSngZDGd(DK0`DIylZKn zJ~9rZr8J>?xLjJuBO5+WuKcE65`6T5dWUnxEk#biq_7%r2v|#X|`S6$+1l2dg2&g5&V-8wvYu>`$^W&h}Ir*p{4T&4St>x(sKNKNns?u=JWwv zHu9KJUXOWqU8gFcT(N=k+0>sz!H;APX5m;L z=^sn#g|uVXi$ISr7%+V$kW$<0#x{a^L3JKCT(Vx+E4h-(V^Pst0Io%IA?@j<+5ghJ zgyQXMlj^;_l27|VVU~zeYM^i(26pikn=&dbsh3Jb0}+f7^Yyj7&^p6J&rZ%(v|R1n zFTd;)Qb5R7z>;CRnkQ^NvqT`MZwvDcn&WIuG*we-QgG}(f5|n2hneSF5h}87ha7y$ zSIe^VewPcT3r=jwEi(LSHo{1MX#NnAJayX1+5R97`E9*OhV@AJ2d3rA%v?^-^gOw)te|q`5PVcP<#VfG<(70ln&FepV50yAZ(T#)HMv2G?O`D-(@S3@|2kE zLl|Oi;1F*o-(z`|p^y5T9W!5SS&%-Jc09yzw)&b)oK40V89kjdCf=|3Sjsl5$2f4; zPCGu9_CyPUr?NAH$rSvG(EbIYT}TUx%PQ;#^da z09{R#&y|jpm<6UA&Te#!sXA#|9J|b?`tthLRv=<-)t=O(21 z_JOpylisdBe|H=eb~_Z=@XaXGYOD39a=qPfBisy33>my21r$%cL@t~dckQBL9PVkK zCgr9QYdaM7J2H2kqk`YJnt-Lm@XQa^Mr!wZ;W(t!`@+-XiEe>@{g+sOM{OP^{(MpI zEwBV!d?EO>AR@IFV`i-LUZi`tmbuDKkKRp+?6k7|qF8)OXI3?gy&VV|b#(4poJw9}H-CEGU0;C$3$_>X6aXY|k-Mh~OOBpskus~0 z%RY#Ll~uNH+9^ll8;P=)fe`=Tu1TdyA7Z|`r?7M9lewQ{$~tQF+-?_|6B1%wmurud zLqd&Y_L|%Mf}`!}>YfATV3Yb&Yj=YW(Z@!IQT!d9xfOhTuv5f&@?6o5Y8A7x#KE&Q zTZ`|ph-optL^4-=W+1|j0f+Cz&`KKO_By3CWw64cQcnmgO9pB8`KUym@K6bVP2lx7k+2eb@U@h@rFmI+rS&!5yYJZT(_8^y}>!hIR=jtolCB z%3wVigmeC`cCO zsF!6ZmXUkaLY0nAM}a1)-JHF(rsQXO%Es-)Qtn75?}A6e^(pUx&}dP{zUD=>LiRTM zt^(65$JwfRij7pS)lgJycQAur-j&vRN!clJxrhJ6}tIU@tLY&k|MOm-#!XCle zT_kX$ymia^|44i5s4CazeON$1x}{4}8a54rh;(;%Nq35LH%LjhG)PDbNT+m4r?j9T zrSG%R?>T-vp#IkThikK!EWP&JGxt1uu9<6+$QIiCj$mJS)CS+SHalb*9WWr$KU)$; z5~)(b5p3K(OMTSnjaAe;N#G|9ZK^ceHJLh)V-##i!&W-zbB>F^cVF~ev^;Obfc?!O z%FE~X@^sZeS@%hV1J~6oVdMe6Qx*aH zlqgp~!kME653%wN=H+P)iMZyxqfuH}$`jTXx+zaIGis{o@^G|!3b8sPSDACTX&oOS zZ@c%T7%JZV_Er#zrRou^grV0P5k}bF`tT3sZVkyir$KwYJ2Bjm-Y@!+8*?~}*ato! ziKBfTCF8t{h{gDM^bRN#NrCHOBdgTM3PPwR$FZEQC`5D?EU&fULHl_H{`7IR^;|Lx z7NadEMhF}_?xeHLZ!D7CX?jtEwhR!vD{q!3m_PWae&z|;3}BYbBXej!I^@kLY9V6z z;3M#9ABRp|pR!dW>h<|2s)l$e#J+J3^adwGYLDe^&dV(JJLknO1sohBT2Bn0FYL2O zpKURGd1Lt|V{Jmg84i})7RKxz$AIc&LEvTKR^uKITW0u!BQ-46X>1jnpGow#zy)iMv9#EgH-fq z1)_2lB2z^Wxwq^LZ8B#*(I{&aOrLSG&L|plMN?^?r0+2z@Nl+^|Pk^BzX*wWU)NnQ$Zj`G1t!MSzG znR2R@01@UL)m}~A$CCC<894MHrf2szs1rif-l)Z&b7OFa*)Wo%2c*5=v*8jIz1=C2 zQ(ou%?4`NUOXbkmWwP;m+op3q?%^=TFy;QPK|W>~&S88Q@o_FiFu`3&^V@1YN3aHx z8?$d5GYiYsGL~$a)ea!FL2uuXvV3f@Vr9}PBp0sQ*xr6joo$=E(SWGu3fD+QKaczA z_5(AC_*XoV^+NQ{(nJ()irX+T(l2-Mib)+tYv|F(m>?~ZCMJzwv_(1k`5bieoP?0k ztJ<*O0*q&nhOElEXWL4`4Yj+6_z|Xzt=BT&86_hHX);!T4I{(g>72&$AUh^Y zV%(Fe^0H`(;JycBz!Jxb?vOrl;(0XQ4vkOT8~3RYU+pnKb&S6zvE!9mOQx2fz~#7b zR}+u(L0&{fAB70A&}N13tHP3^R&kad;)6=kA!c&L^TMPFdrU8;(xX0npD2v-xqA=l z{&sC#BkXP=myuj1r94XvI`=4PWP-HH5TfuMM^0B`R@jK8OS+;n$)Y%5^I4sWT+r}Q z`0!<^%fuQIbm?jxy4#6H8Hq5fDih1?zD{!XI7 zwuHd&e8g?HdXj{4ZvRfOe-Si%uHL_4A-6xf1(21V^APl}%Yra!lTV&U=}G&aL8QUY z$vt{4O^}w7dg<ZM&`tiaqA7JcwiH{r1`SL!C9BKeARd*wD_rsdhvy&*p(` zn6w@-R_;!9@oq4Z*tG2mzoiKDR@v>Ab&#~03n1+vRUYf1BYi3@udG&BM*WD!M_aO# zcPxvFxcX&<=`?F5t>ylilS@Pw%fO)=YFloU=A3?wT z$kWuSiAuSAW%H6+Ls~`0$(Jcd=CcK49@I>SMf)=817iV2{ko6O^nBEiXEmGNu01~e zV!)yZk6zm=w#M`L=yKW7jj{Qm0H}P-BqN}H8xIzKuHa241|)jb8zYm($HRUm%Y%<9 zV6*&jeQ;InFkD04WKcBbujV3J@`N)G#&h(J6w1RMOiJH9w@M@LB|$@lN^Z;2p_}Z^fFfI@4&8-+*fnm z4&pwm-F0~Uq0l&|UKIMXl^B`xuILU`+~eQ{CWQg0x$1p81odT2lTD-a*@P2v|4a}| z`M$NjDHNg0UdzKWESt@cq}^xnfoR&qM!G^Zp0~ulM5MQ<7@YY(M5$)tFjJVFH;^Qn z6CpO7|8g(VM~L8T+mU(8n&mcb#1oFpOXp!ErX2ykaJ^Z!nEj({TuL1)nY=0p6gEoR zuz*mf+0iAfJD=xPMspCuv1)qSJUv^z(5HN4}BeTvW5R^ zkiavQF}uQy@;yf}O65wPe8SwiosG}|zChm2SsJ8gl$?yA=Jou|p@Vk~X|gP0khNqx zHUlqc@T?0khsqLJOta&QTsz>=D>aiYb~_G-cZxJgt_ zap566>s@)L&>rqr5SQGiVGP-^=+2?XlMsD(C#eg=D|1g%ABVorstLodtLA3Hxr102 ztT<~PE4LnK{CrzN%lSOv1|e z*vQ^N1DH|-(-HralbOMTHrGJ>i7@)Vn)kKD<<)|w-;BU~2gnYv8Gv99u*d@Z!f^%n zW`JNS;vaw@j_Zr^KhZ`12k_Er0h?X{ztODBV8-MhwCq6OU5EB3-sp;U{bAOB8Y=!{)IX3$AYhFT(CNYc9Vu`F zf}P;^NdJz_WWI(qx+#P>e|c0#w&~^F+(f@&{{QBBWcfAQ{LYSlN;H50 z0R`zF7y(&}KLG^)d;b{m+Abu(6@N-H|AfnRnyp-a%rIA4#;kxc2ym7B&}{vV^`>L~ zzLfMIgn$!Yd(1y&81RGd)kB4hlA^4VBJi{Nf0T@YR+HblBd{|T*lbF|3N*@q`+KfL z627Cp2`Bim=U+pzgSDrDU;QFF1v=iCfG2L?P=N;(Ht;tYplu8I>UFcU z=U-lc{||Wtu)}X{1zadhK>Ha8cv1vn5G*{(0f4-Me3P;MM$H&-yPp!t@7?YXX#}k6 z4n)EagkT|Fuzm#CrZ)k+`bPAx(}A^Q{(G9BpRx$p>AtUie552SEF`a^C?lhzASECv z`Rip30Qs#s|4+jKct!*+O&0L;H?Xe~tWJJ&FCjQ6{&l_^u0qf+3FV)K#X3>~s@F%! z&w1tM?joR_koAANi`EFtt?@Yy8z8>HLY`*PZ+(u@+*^^ww9%sa%x0R>{UKKhUNBk( zWh~xdq(1ySa!+TzKdNXl#!dD8Eg|2jc&9p^HrIDH-J_MJTsw~S6zA*7qm>mq4zL~c z=Qd|^wRBx4&8gb_(jlWo(w>}Kv27nWt1b@;+9lp~tyCm>oYSB0o!cKTtYlM%9q7d8 zrU*%{(Zu=~y}FZ~C>6Sr{ms2YxJzU~i5LaAD+3k-C2^H}kSY`rnXg^xUM zzg8u8fA5$8g(t5hgigSrdV*@k_oSjU6MK7_VhO)wPDsO70XF zCrB~UpbdR*Koz$6lUr+WhPShKPBUQzRtKHomvtWdK-|!K2}r$&q$A<_%C|K)PrgA! zk`7g2x#d2ht7MXX6QmZ|I@G-r>Lq^2HG)Uwbi9H(if>-NKj#EpYdfVuGM%B2$ z`3ICpl9*j8_nF?qNf;*jREDt-0Fnqv8@LaK&O@|!eLYB`^J8sHq3HHGfmHi4HW1}yM_0ooq@LPYC^}X}0N9RmgWn=@SsF1$8 zLMg@R>>dft+Qo0H<>K%Qk^7$aZBxlBF%5n^gO3Qlqd;YgqVSZ5SCk1IyD^e}=++%t zZY@NdJar|-ZG%NZ6j9knX?vX3_=0{Y%rztdF%ihQdo|jmT-@n_I8bv2l*cw1;rUSS zT3g|$AWw8(Oj~?WY4y=eE+>KtaX`(SCYxd=c$kPqvCIvvxT2gu%4pKYhs%{HaLVM* z-=SxV59=UA-{x)D>)nu=tzz#a-quRpPud%}5#x7wPL7djXp5}=meVf);hPmk$W);0 z7y)RN(@*Sf;aPhc1if{1+QBGj`174`T9~dKuRyv@v>(vc0)-vVKW!74P$^u{_NiP0~?o846ieb(rnUqDNJrr=#{E7 zcc2`A-!Ko-{y2Iy`YMGr!c0-xFPM4@`P= zAZs%jhAh=>dC>BR7Q4~T1?4gI#1pTjt>T?9adHy;2&NSJP}gb;yox?_SP%(61s$}< zcEr;9Jxrpxccdm!YDDRA)EO|Y3Mp2z0rwafX<{G2&L8>TRcDlkx zp*nw<$^4AlP?cF-N+l8n(QletdFw4E$h(@Zg-4zs!J7qJf6Zaa|00JU^0p`%$td;I zjvo3GF-pUi?aYf^FGcj{SiC>m#cOtdCG?;z@6`(HmF9ZPl_=3UNrJY6@xD#W{8gfV z`}(#(rfX7h`53t+Ej$-|)z=T!=`_Oc_Rz#PkWp{R%Y;`graW{`*5_bwAHP(k$T5@- zDozhHrsSQl=VpqlWX4-Ij;@uRA+=i9?v+J;1P8>T^6sO`I(rVmSEO9i&i1oSIt`&Bn46?1P(aGGu{ z2Y9}~lnX;JM0S~lN7Ur2dxEWDD7)6eW<^h9Y%B#0L-5$QAChZ8kccbeDK+-QqLCQ& z+`*u6zIEiL)qZG&dKQ7tn_kccTyX`wDkl3~0h>{l(muMH+3ah}I5{K-w)R zy8Wz zs=>9K3vZ4>`RXajJ9E`0%XB?u4}X~Tt|Rt;`@zn#yKd>f+~8&}WfQI=oRUZW zj28ah$<0M9%8a@Y$9JSj$jFBv^+jAV{uu&xIn2~cd4CHjF~TR$HXbKb?hOpt1@`m` z(|o*#;_tvrtQle<6trVV2zvZgUj>uW8==t(=?oIGh_y~fA9}(3 zTrHI8D(P~Uz5w7Ya7S#y=OmF;jXbKEjq1(R^;Pgc>ct5kT&Bn3K1Wf1M6FSbPadCO zNV^RaineD2wUq1Hf_~Jg3nx#^yl;*Njm^+KWj*OQu1FH9#Z&6ahT0{LMfn!`-Q6zs zk&1SO-3#ZW*Kx$!>I6G_7Ib75We$F?%A(m#uvKc=a`JoUqa^Gjc*Gn~All2mCLoM3 zIcKt$tvp4Ei)%?^ft|9C z5cmPxdKz`e8ds6@HnK!sGSu0CAWaRdAUn*bqZ;6EIlv}X*z@x6c$)5|eJ1Kiiu$-i z4W-5~&qh7IL^CSgnWUcu2`BM+GRmkg_HDDE1L{s=JXn?n)e~X7ylB3bsj3M1ImVJP zj>ei%3A2~ZBrDCqf;Rrp9 zB+Bg*Zpee$Z)#n?eQk1{>Glg$J6m%h#W)y{)*hQ_GDew$Fcv>@BDX-BE#(h)*zbzk zKUC^Ju_6>;*M99-){SDaOYD>=L5B2&ruUUbTWdhI?szQ7x*vMWZ2u|sof&y!f9dv0 z){&Omyo${;nKYw_Ma!Y|g|tNH;nr>04(c9&hAFh9BaLNf$2+ZeWj$duSbFWx$@NeRupn7w`(26y`Q-mZAn z0TXm3>mf0NAubyVm(5hid)ET1DFoFR3EqX)HCAk?)=^XDWZmtRMlZkVUQ~_3R~x=S z^uL-kp{~VNsnXSO%vpZJ@l9(0{av69iOy%T<0ATTHxX^F+R5HES19cyeXSPnK8793 za(nGn2gtYF%KPQXPVD#V+vZUl+^wg}H(X1ijxe34)X`M!lA!MNSVbw#hi1?q)tP_& zxApamD|*l!?wWa zx%X++Nu5KMrrWSP7wUc21lD5^e_BntZ4kj%p$#rQReNbCBhsvK=37saU#5y>h(7+n zXHMo?z#H+VdbVI@w9ry15h-Oe%L+?yi7x>$>$y)j_mLoSi12ZJ5ND@B+D=~_Hf$P{ zK18qv8U~f>w}!d$BYDonOz2fjjfZy>o3NW$)ae`~mAcw>Mg!{kqnlM7W5&i+x3m=U z>|ShZ$yXv4|U8vtA92y(hXPYVe!=2*O53Xk~&`l-xjgZL>s~A5q4Howxdq#<}JJ_mg5r z9pX{LbOnQ#tkbO@0$viuYN-hD8fNDb0mllHZ|=q6EHh;h%< zIQkftbLZ_Bh|~-oif?QS@3i`ddOn)L9;OQ(8blpez>Q#^++K+GlPBFeflPa9k>i0O z@qTF~u}9hD^~CbK6>7|JQw-ibj4%#Ih7KwA)1yS1igO2nvYEmcrQz#GM;1ghE7b-I zm1cQZB6b#R8ZYLxX)^Il%a&N+P8EWz%pauVVl*1ph1-_8S>BDuw{i&Anv72luzvX% zr1hnKxVtq&%Lz7L7;oJ_YrUOn%YPUu=X4)SglND&Q*7PJDfcNE{jGJ?{5i}OUEQ+- zD%$c~`2GEkmB}=SK2A*J7VYz>+K>d4?N`-97PyZX1W=~OMk|4|l$J*COXF7sHS*v= z(buj-8OX|3yS8!W82jpBGo+l`T)7hzLOHZJ@*2{Zt^|^~6&2h;8 zRA@VOV1LRAD~ao5P_>CGHO=r)Sskh~jU(QOOBv#%t^Cl}n14d-&AR})@&4f_^`LQv zXerk88IlsF-kJ~LM^Ut87**3+mReOv8q5rxegpgF7_V8{jam=c5IXfJdj{{)nUY79 z&?PRqSe-8n1)Z`;IYB!3o_=_t#Go(hdgpG*s0;HbSMYr+MJnFhp&N*=yfM_c+@rrMGa)2AeJ088U(g{(LDxPH849MAI1COk^GuOsHtghFb z9N3zFFpm#-O8xkG4=p+0i;}GinPJ%T3l5%)LS;71ZHDxhECT} z$QZeo=!(u9+b!Q9&Ix)wZ)m6hGq=CvVSY?HvIE1T0IkFVjJ^S!5eG184Z4{u`n!V9 zFSYN#DER!T0uEGdf8hL~nEZR3e^nF(T@{c1U3UbKj=#0nj{+GxP{0FpV1E?I*nx7{ zZ*~g;^zcswvKxxXpr6Xze^EpR`V4*#^vA)183M340t*AM7LE;=$7H&B2jc&pD;qEh zd0pM{mtr@V)A*lBK|y&nS;b%KjsSP~d$d26_kBkT0s$-$K(qc9?O)BZf_~vu|Dn)z z9R7pw57qD=_5^{KNdjB9eh5*s044I937G#iDDdH~HRw;(@c(O@0UK0CKuGpKApcMe z2cI*z{{0;!E5KF*%}1=i1^E{<^FZmE>wjkEL02=SzhQS-0cim+SpYBy030@E;5q?_ z1Ta~3Bbg8I|360wD_EELzg2J6U#i|eq=2s(p9WpEu>1xi3kV=IfZ=3dwIwkA&cX>; z4tN2ksX^Bqr~uHmrRZv7#3*3kU}|l}sKBTsF9!ZY{lvk+#-5vz(ZSlfQNmH8L5{#^3Drbhx`CV`eRfIJ2GXyD2L#6-ZQ zdDa^v`l=J`Um^jxu&y)duSBYYo`a+PH39OcOadSR*qZO~eyFkh9v;v&_4APf%@x<; z`zeuti5NY5S4&GH2Rl;(9V06PJ6D_khVq{h37|s&ob`94Aiy~R35ee#y=q?h$B@k6 z28?Tb^A{!++zMrCc#R?dkYd2L1H%JU+ySk75DU;3^W)TSB8>j(E@b^F!CcwV!o=Fn z)ZvNce-U1_Dg9sQ{FZvTq7>~N?2Pm*k>FiY1_;d+@I?-Jlr91EJsAco%Kwcg0mP#t$ouF<;&z-Hmwt)a`8U!AjGm+*|_# zYd4yVs*Fo%9@=6&aaDIyllbU#ZI?rzZ&MN8|;V=dOHc{kfPP1PqDks+HGZcheg2jM4+Cq`L9GvxC^Osc~U5ZRu z3#A?2&q)a!eCD{&P*I`2K%)+lj0|;Sdyg+d;ZgTyZx0@CYG3?JBc?RJlkP3m$v|rN z6U=F4Y6Cw}jzZh4M5Vx|T3 zsKdZ|)XyO=#g*>F3-JmsnXb0;u2`rdQ${X5?OI!;+*0(Nb2gbPLsYzrL*Nem2%6U! z0WD{(TBDYsxSIPY(Y6QoU3zxE$#;~R8TtQXJE%yB{ym+#O+y-Mu9H5KeGeS1hVc;ZteW}uHkl~4Z01TU z;<@4tisCJU*sbb2(X77Q<$}IPHOIRwvtISE*2v1v)AfadJqxzUA}1Tm%S1Q%)tIPz zT@)~w$rxPC!b~FjGY^8T#b57=^3l&Kv{B-l`qsSGJAbmgSjZg3vEE6q{UsYA{p*q% z>Szj<4C-7uN$34OJNlq6ccHNGxzwzJ;@R-Bj4VCEqBnaKM6;UBhHjI_Sd{S2_{{O< z)Rj1jJZ%r#N|d`*01HhLmX#EWIm#}qkvDY5Q*=BJW*M|m)K4r6odXZN@zx(4#>2Kmfm%I z+K7cDaN;_c%rAbbb?1px6)g`PcVTt_irk0rC0h5!jHOSDEO>mkVzBe!hN0@h4nCwW z_F#<@P(Eq9?ehLUY$Bm1Z6;I}kJRRBir9GXW^wAEEu&nF`rB~3i>aZFL4N!Eu(e<) zJ0VS`Er?dV9zLb=og|0=iqf{A%+GJvB$C&B*+APW$LHmUC*@W;n@^wdtYNCJ$5ez$ zbbAmzI>vgZnl#XlU#$$W{{pha6Xdz(pv>I(VD{UWzNPcX{lR0MQ?_OrD4rbU_8q~E z^57RA+ss`ETedM78v_Bl(D5s80RnN(Ya2C42DU^Y`~);9|Ha2juk((fRP{-FQfD9- zjhtNwdJnpNY-{H3pL4YCL_ph#RvJLp@ZU;B%QTk2ABdM8mrC%}E;v9?59&iRBbMjg z#F=ag-hJ2+8OzeMB!?0k<}o(r5yv*;m(M|&Z5ym3dw=dj1>5|-R!ijB9R>53j0ZUG zcF#02^$LlTGZi$1^9Jp4qDAc@()7Ymk;P&}i^Dic&ts%%HwpSEJX}X8`UF_IsrxeK zVopU1s*Rgk4>FIX>k+A660`{RRuazF-MvdF6*gQevsz&FzEU`+RjiiaK^A8WFRU)@ zeU^CgH>NAgv}hq^BxcK@#t2$vt(s@abe;=_I1ce%F>oH0%$txK3{_T5W%o8>vV?gW zZ3wIaohP6`A607L#3fV4rr?@!a~1Vo4TXr>H2IwBeYi#Bw*_rd_k0UGpr?$Pcb83= zxGY9c_PIE2pe$)Yi$j$OORb`4R3XA^y>(Pc-quGe6~rwpV(|#DJ6?9%UNyu^&ePLc8tO>^6HHWe|OY>7t=|ve4j%i%&BARU>Gd-l-iMDeriT! zK%J3_rI`JU20pqjgLgA(`rl%FAJPxIUG9D1^imd2?A2^%K~zSA?RD*(8LzkZw%}%A zQ3H`tB)v32cQjg%#mc2jM5Kc5tMm_+%UFL#>fb+fsHzvBEgEe&wr-woed{dm;5OAW z^ANMvH`);9pBNnbEgDZWE;=1Y5?Jc9LvqmWZ9#CK&Q!xrw8)XBxMCp~9e`pg1a-93cY%vrwK z3Y_a^pA#8}Ca?%k3^|=zRLUG1k`a3aoR%z#zLk*q0W8IQHR}m?3!$ zZ%*<4{wfctJ6-O>6fM-rUEA0FvRHIjGO`@H@QM^6T*2EsgNP$$e(|#8bRIs8`@~zQ zbs?G+td0*+O!syUw0XS>$g0nclh#DbnUI6P=>#LHZkB;E(!}iHvc6;;*GwU~Q1l7HAO$QRw^gwns=~4>b4Xmt zVDCDJ)2lK(ZuK6_;ho(ee+)F9#^zSCDpGW9Q1Bz>C33+aI@MviG>jGdU1Z>1g37({SM!g}QRCUi5rNlCDhEfQhEAml zP8Zowwa-|p_qzg)*`6`us~rqRm{xxqV;z+V(8hr+W*?lA9!*^!|7ayy)O50kT|V)` zTpc3G(nS)VVfWz8dwJu@G8E%gjglCR_YcRUaF?}U=;@!FGOJnW#F#(4hH z4FTFcO)Sl*>g6d{4C4Wx<{e#8mk_nO@L|nE$VxkgBr@M^RjAZqu>;G(SI@EPHcwIR zV0PEr*)7y34_JydB(6#KMph$dazU0~+b$LoE&J^PL1a%}jN8rT$m;M!A?LRUljjNe-rSYn(ybqBN*B z-8w7SMh@R67dEbH;mns@^TAJicOP%Tpu}oh$QLV8B~5EqOs$DG$XQ8j8Rh82f4$te z*A*6NAY8R(SK*7IQYT08++siIjQrIaabVa`ZfU8FwyB0X)Xq`J3wzRwUFZ%P-h|zz zj9vQW=6e5O5!e`mz?%L|)S^?d^ue8N4;*iG{KZ$U3yc9N%3)24Ass1a)Z~`a=>o14 zwEP4K#9fYR{9*hP5|a1EI^7~>xE!NBa1R4!h9WGt&ElSAA2F=qay`q)L#cN|`JlIA zkVel;&p54Nf@W`QH;;Ml!@_Jf2VxCn@2O>o$yH#FX*nKJ%qsb}T+o;O{$TQFIstwc0WB z1S0{vYnSTs@0#&bDwnl$a}N!4mJRreiC#Fd5cpcRZEmbPin@Q|J@%@y{HTEuHL|Ey~eBqiklY`=9O8TZ@lVBwTbls(b z6kMHje@|0%f&Br0=WyIEv@%5d(r3DUpGMTJLp_aJ*M+#A@IeRWF}O@#$|pdK4n}Yd zacB7j5Ax_DLnI$soW~}iLov;44iZE#e(dCk(un4*T+4pN#{w_wso+r21htt?Y4R}S zA#5Wz+h}tulEdpc2Z-0<*s35~-P$neJL5XED=uz0$vV%E-%s918BXf|65S$(9W4J8Cb|5TlS_CwA;$x5wJD-LO?|%h z5Xmn@62VH17WO#_58d|2FD)XCo?FQzUD^&T;hbp}mnmyA93#ibFf|IFhmYa)n!I3% z+n@}BbapBYtE~~AwwT3qLeYCZ;*JpQNFkUjYe;H4dx$9IBQ6oGFZ2$gjH_(l)$O*J z6KhIpPaLw^dEQo8k@H4@tSda0gvF8Rb5MRI(aWhd16XIZt*=g&cM9T~>PNIboQ!5D zBz$q0_WxvOJrs-la(q~KBH77+k;spGa_=egw2a?6!2#UTVW;AOElHK1d!eivK_=$< z8}^tEE>O&Iymsf>11z>@DIqnoQEb5roPMsz<@mD1b9Zz(XKR)ltfuxM+lk2lJ zb-hO^XEWlqcus-Cql%+FNg+Mk&l~X%sKWZOn61D5fbn`x&ng#&Y?2emK;A{~m7E1MB`* z1pAM@)X!XedOX>~+{7n{87?O3ZKnL5RqjY;Eqe0fykqIl@#t7h!zv(Gb=7!E2I91S zn8Vvn8=V%^J?1TX|WL!^h~PoK}y;J?7r*DsZR{wpp@3{VJ za@GF4x#;6Dj@GH~2GCz|A=ggCn|z@c$}te+fA33HpTIk{!3|L#e{mPFFXWS zX3*7y>i<>PuBr3_b8k#Qc^3poMgzPJGq^?#)^r5{Gln-={I80=Y(Le{ue#cADE3}a zR=>f=c4b)*FcSb&d;yvPU=hA!{X2AkNbPlYW&5>BTuD$+=sy$KK=b_X&;18DRsbV- zJR?KI1QwRcybcvF}#{INlVLWMyUKuZcJC9rL@sj2}RO zoCV}&umV2d7+0uovhbBe!M_*7_4Fy*FNy1a?=S&*5hW=h>Hm=TSF?`4apNCYnSeA4 zFp>cG3}9ioLjHGP*}$65|FtUnPr2&fm=lv$0A`%T1jPWLz~sJ^jJ(>fEID|A_n&Rc z41^mHb-*+j10V+uez|$;_5T`|<$C=K_FuBscjF4mNJ%M4iwO!Sipfap2n&cwD#`yR zPk^6}{sJ-Q_a)d@-tZm%jRpoMo`1Xn1Rj9B#=zHRG*Li6TSY)#=tiu6mD8Bnfy)fY zzTdrp`3m{pfdwSYuLXN;P7{=omsgU#GA&qYMDV&u`$J~??!C;w3!qUBmH-D!YG0wh z5%2%d*6i1Z8v8Ga?YlQ9D9XqSh}>-3ze;Y*K<5JRU9&-A_hjR}yN0f=`n>Kk!_-RYmmVh4W*xyGQsB(ndzXMei7fa^qc%?GOK#dS82BYX6?SVnJ)|n^$C8tPmP(*_>jb;j~zlEkTF;ag)|l2_Z3p z;I&~iWF!7H;wI0!IV2ltU1XFDM@xBJR~JP5C!fOi*1rnOvbAkx87z1-cn&#^cQ`)l zncr`2+^%m(_S{Y9o1Z-I8dtK{a2%N1{o2#!8u;=}bHn!5al`&ppGx4)$;P`F&em@s z_crMCOkZ@$mp=;Tlq)Vt=RZ%kp4tWU)Me87XTPOY#-t*r^SAL}bgC6Dep97(a)V0n zw zJ;w*FF{#>(#F#Hs^8G_b+mSzCdI98nM*%#PID^-+mn11c2J*hmp zq@WF7THeM^e!}x_`8Z6`Hf1a5Ea83cnM>a?QpdFyxT9Mj)Y3Z+n7sp0*Pa&`$90Xc z(Jo;t_O6Vu70u=Jv*gn$uc_ZB;}skj;ariav``~5DS#Rih&6R;4j%Jr3O;7hb${mf z&FM1*3qKS@^!B;xXlpfd(Sa^!*zxT-&JglTjp*Y1F6K6>$bKwi@{klPF!_$XWlLzA znf?vVBjDkYzz!CI_}y2%X^)F(QCTZo&}9p{m)qHj4Aiq}AKDYe=-&sSChv zCQ!%FMFufqbEe373$d(W3Z}&KMP}ZK zGF%G%=(?8ET=;0HWjomXnwDwj?$a6%y}L#!Hn9D34!h|2F%2)Bz59*V6OaQ2jAAhs zmgKN^ZA;fyy0?SK6J=OFH@>!Ee0q6AYH&_AfExGk^pZJ$#+QFHk4$yv;CKPX4%f>A}lLJ?zbmw7hIM3BZZ0;5Wo8{cP zZLHKOxR0Sw8;>A0Ecsmsz7*h2+>iM9`J&b$af6TP9cR~(y}hhZ|HjKj85TNU3<8U^ z5$OF-^~O)6!lI-GmqwN8FP`0I*Pk3uoSXOlHq5-r(x@&%vFJNjg9dwfEQZhU-ewW% zJrmJ`kpUzY-BGp{SKZMIG}|i1sZ%nINM|&k<+xbeI{LXN>2aFR9-66IRgouigi)NT zQUjKw!wD$9D8px5JrAp54|xX>CYL*R@{got3aD3vPSIjK6mG>DGPn%5z`AZnH@HBo zR!(^+uBB60}FuC~CHk8TL8Dl&WR1@$>42iYcp8noBc7OP7J z89J*sQIkOObW6j*s%rJj9cfbrX3lZ0BBXr|l~EZ9o+?(olUgc>Pb&M|y&u5h*UFnT6x zGZ`-141*HSVT~m#FND%M-Z0D=+h?!b*f`r4^xV8~wSj6$S;Fc#lQm*7*bBQp!TpfT zp`&l1nQtw`^@QLeznP?KZiO@?MI=aDeU(Bys|+*vv8Q#qHJNyDK3WM1wu^tbrVZn( z^VwSk%Tt0k=UpE^oQbV_(-9$RZH!dkVI0zhuIuj{7wz+i>Rt(a8nuugu(x=7!1^V2=HE{bWud)-r8E$@C&$0f#6_=qU2RAn`zOCtdq=p38|o1_SiUa~A1QBwPa%U6MIP zD_C{|NzY6MC}f zl$GcTzkBp-SnATN>T4#%KoRj#Y>%T`?*)A`cdVA)W@S3s-o{2#1lddX+z491ty)C) zrLjlQBZm<4?@!xTb3XTOnG{E!z)ml3bW%Q7sl3+7LOgEbaw4&LXfU##KSHHM_O0OK47`*<>21P}HtA z`RWH8>iV^maH%~J>1fxn$yiAA{H$fOH2;NF>sF^|Xf54b-)1B;>u^1;f!#BNPFaMo z%nGjXvN5yHJIhL+!ZJg?Rdt?7?1^P5IC3OTVAy9o6E#>S@wyPnAxkuAT2DQUXDuG* zDKUv2Y%3lZFDj@&&Wq8!^SR44iPmi}Sr5L=_4)RLje+;e%Z(P^M@;$U{^IbU+DW&8p^Vd8jcLw63 zh!TPk8t!%g+gpTfK(ni7cl%%Cgor8@udessWyORTOPjs7>xtL!F2ZX(X~QaDWPigY zV?kZ0Pxc#Y%DOFmD!=iN-j(0M%uGM90t$ zuj>huXD{i&HYyc2Xz@u;`GX`Gny~A@v?uYsFUKnHiWB8X-h$RtRpqeO+V416pp@46 zCrT|;m^Is-#bTYunOkka=BPC+lxZSnN;00z#zoxeZM=OD{a~@%Lz(2xSOvXjn6$8l zkiVGo$m4?Mss_vSX^eCTjJIrwNKSZ0Q4i6Usd9_ID4pJ#uat~#MTgz=as)<-Me5hH z%meZlx8ot?WMA*vs1ta180?V6rJcAs*f4WYV51mFrWG-}TIE0gaF77$5u9smA-~}& z(`7l%rYdB=@hpv|XJw2_1~W}nxx+2%X#g5Ry-lz zaf!1R5N3c>?vqvoox^vK|bCh3zkQ%u|LGDEXJjf z&i3mxqvLyCFqfd7l|c`ul6U`6=;_p%oWcVo$Hb_C@+!=FZBuKxAuGM{Su%fyO?d_SUx55}r#ix#JYna z3=zoa!$J`-=E@97uRui;@8|iyl+6!9IQByDlFQ64rJ8xX!jjlj*ZfvJeBa5)t^NbH zP`^EPqXZc#!;DBQD|sR0K`15{SB(eN?s5W22Vo0iMRz&Zw0!t8)?~NgK%V&54U(9L zGdy-&37fIp!q{P%1P9XP7MGDv2KDd)@*&?1KeR*ismfT`#NlLfwF<=6G}JF51G<_F z{UwIX2eJ4#9QX))p3i-vL`tKu7fFZ?7Zi<_)U}xd;c3c~cTXUTM;Es*3sS-9&6RuR z(%!GI^e2=To?0SITz&$mUKnL>5%_XsV?SZ7G!}&(HOtdY+F3e_p;NV3f|{uxrDvN+ zeowGMLS_-j!B$(xoM+&~YUo0DR^Ah4w6|a})?`PZn#nFa_Zf+u?+lN-x0|)ijwQM0 z;g7_AoK?RZ>v7h=i|dTL(Kujl`4D()5Vs&tX|T>ac|29BSc+%F(tyub5wJ+O|(M zGUh~a-6zKHA40f4Lh#&&@CeCkfleUAwq?895*F(zT+XoOW`@^CsnU-@+na1cuM51R z@K|{!5Y-AaIyx}!2^n)yN^mbqbs(Yh3E4v>;?ba~3Rg|1l&lLzshhA8Gf@q_;pdU6 z-9FK1-6+rTcoX{rN-^xVX}=ZPuFchY_mRs(7wq` z_Mkl#-4y$ms;+2njg{c1rlD;ojfY-qm9Px9!|%X^B^D`mNUxqb&G{N;W$sBG#?2Bq zqi6*k$dInk**`=n(A_=I)-R((Z%C&y#o8@4;&#ltU*9-XaR&qWpm9E?jF}%Id#~w@ z6*a8jzTZ+jHqXm17bf2ZYh&R2rFJVV>Lc)wx*Div)apnDJ5L%i7_9D$j6&B6#QL># zEWM*zJYE>E`o{V#UUHNvKHosM6{iE@on>%9h_nVQx;9_1yxxnE(afg)WuJz{X}Y#9 z>1Hc(VKqCqa3_fcL|2BVy%q^7CsURm`h_858m$W^A|;n)fs!mKffc@zU>Fs;74Mf2SCXDfE^ zpix_TmfU@@CM{)N;z#O22Q)y<;OEiooNjnco_w?3ULa-~9G^(2WR{U9K0%Qq)=vB2 z*QBuFNGkv>wz;jMYQ(&-=7Nj?#*sH`Tt1!%7Ci2EnJaq1S#q6?vPMA zrIl_e>68xX?rxBh?k)l86p`-k5D?@o)O(M|E698AKkB#V8hcIrYKUoWOohFC7aoJ* zH~o6f2W#mhj^;pPZ@_G&mw^PPU-fYs$A=c)b&kzt{!kAc=oPl=uU5}vWp{n}N55oc zTn;n}FG>JS%LlCwMS87^nW~b7oe@c1;WVrnQ=S{lL{Wt9HDZE)e7O^^=oU$lJQn~3 z{GzELcW;vJ>``OHbD0t-^IBa?{r3_>{;qBEnH2i-pE{BG7P4y`H_G2y*VJj0QPWyd z<172@lGM(&RVK^?!6s{^Zsj5Yu(g8k7^N6p}vRc`8Y8I2NDH zd+<6y;VmjOg<=vay~dUgylDQF@v}aO*2hQ7o4$RTP`VS3)NP#@Dw)TUnU=A~-nmSw zrSOiD376wEg8TRSM}bqtV5F@2Rmi??%1aFwnvXvrC8Uy9B&CboUN)ujoEW(<9a&JSY86QTTz(Q{H%5ikrMfz&Q-oy^J+S*7*%sQInq`&%%_>HpSJD94?i_H6t7 zMOppsVCEFMXfaau0qY;-k8IRrWN8R8&)KIV9O*|VdpbnxYsbv80<3%L(H@7LhYxK| z>bHk{A?%bVE{SNqKqWk^2cxH&T``Gb0MS_JU@~`MY5Rn^x?6F72@CVhLS+It*cvkbM4sA%3Gh)W5 zF(2JiBhXU;mEg^n%Osz+r@WGq64)4Oh(%wkEu+Q?hG+Ue8hAw`<{^+7W=R}qj=tM{ zxnp9@KGV9oYt5EuuTvkYbcw?ozgo{iHaqtL{vv`pGGn0Skg}ayHo5f);JkQK@oc%t z>FqQ*8%P5S8L7+m{*tZr0=!>R{D3iG`f)i*chxfH*wP-^1lT%s=lz0Nh)Z8X;gF>d z>JXpM$%_xVAZ8(FWfiCT_Hg*cGYdJ?76ee2JXF z2t?T7CZveOyoamSB*Gm;ud4Ll4b=^#c&nn$#J_Nd7p~@Yc$3@;yKPZXz_5#Z!~pYVFMy%tW z!dDX074{CJ2+%8tTu@K88yp?i_2GXfKG^`v!8P#-6z~3Z$Me7SM?mWNBcb?5h3N@D zuv%B1U;cme1VBx`6(#d^!V>={N)|>ycV_%cjXDtH`-S#o06LogKzp+NqS#!!3%;kb z%rp#54gV*j1-MCWMaTe9v4G{_x}_LUTdt)qdZ4qI?Rt;wP0Z|Xak3lot8BliG%ZqVq(7r?Kal=R=G~6;PRTsB zU$mHOpf@G+nEoQa{0AN@5YYQ?GVeRsn`ZJ($vn1Sn@ILZVB|L7>YUNd{^lm6i- zV`K&_O@Kq=hocNAX{Kep(Wvp8H;d`dDNMHCq?cbj1V5qPW+}Vw@x2xH4@=o~c`R@f z{Irx^?@(a7Q7{7fKYu-7R^UDMrvv`&1%ET_o2(DlE3$8c{?k%+9drc@R6i|c*Y2pB z_Z;8tE%l41;I_BawXxqCZMDja6J6*l>GpE)0gYt@NV#wvHx->UAqY6{_H7Z z{>y#z6CL1cxb`^w@RTup$9f~Wf8Cfjn9A6HyN&)M6y9bk1Jb~EIY=Pae7%?8hsOoz ztG>=?J2%C2{y-}cCVn#ve{K>cAVyB+D>-d60tTuj$c|Ngf6 z^7@J^NbZje{t$f1#5SRBS~6aDa&sHaeOv}v z2Zbvt3T+*0T4e@KbRwLD)KcP+(x|#hI!oKUd85w+9_sRu5jVw$FSENL-Im-nALu@; zUgE9laWs8(zPi}wndQaQkbb#n$(gd9^4N)He|Yk&zBd5R1)sN(1K)M40mjhxN;HlU z895BPn}~4H*PDUjph2n0MOfdl$c1~>vEnK^EHF`HyP-9VKue%~k2gr$(gm_=HYscA zHHb9v_(lTr?96t)HL*8rp884!*$}?!x61-D>c`*E2h#FB_LJ_k;#39E| zk0EBo4rcifL>@A}wHH(!q^_7FnfCC1N_i@kgVRE)o0L9 zK-VnM2=We17eixm|&-U}Gv+ij(mU5|NC(S}HYCdTkipft%p@nQQ9+ zk^yI`R4$U0=%Ox}_G1YCwq+?kKk~G+SBhjtL51$U4*05|5G4_|poP1SNUI`XX^IIm z`dP9c#X@<9Amdk~gqz2El){k&BN`^^$I0_npG!Ud41VcGWJsX0 zPL;P97W66A=Jl2I(bz8R__|kHF5FMim)cr}u#k6}@CFJ$;HSXzCV>NbE9VJ+H&J)~ zG#sgNc#GpBCRx=Y4UREO_%(Zoq6hV~b2d;#Bbu=-Sa{g^boQXM7f^USEt~INw}3yk z&PRQo0cIQiKN+ zzH=?tuoeE}vhZ(Id-G4-KB}vSu6sm^g~Cd@mfow{>whdH`>e$TBgo9GB`+-)Ty^Pb zvw~_LabIPq1<^5%SF4$rz}h&0Iy>9_T_|-(dk~){2JQV+6LE3 zu!x?zmn-g9xv5T=&2Q;i4u^dm!-cp(N76-wi?|5I$zP(G`|raZa5HG9V57oV8(fq| zs>H?X%QxP$c&U2X(tAETZSrl)5=Ocn$0w1rUKAsx7sm%$uNA_KF*&X0o5H5b!;63m zWG^14A>=FMq~m(|WXA`^NbOhjxDrEyef*dxHmeXWRqtdgv7kjEntYXW(9iIIrH9#q zE`BXeY~{ zfx%m8ea{qm)}vfZiyW}`W!56jFZx9NtqnqTAQj7W?9tLiHF_g71GR}(Eb`*O49*O! zsLxC2C^2;BHAW2<$8j)iY||PZKfXws-$eYZz*6A)jhpGEi&`^;mTgO~>HNfnz6MAT zF~oy8vQ(M<@Mt&l`FDP%)bFl{4!?#-wsp4i@QmV~s)P)BRDF69t?g03pQ}b6tzyrb z=U_n`R>Iy%T!`4gNsrDWzpxrHpGKk+1osptE)1_iVTUz3T1Z|fVc_sx9MQtb4AhWZ z-{HVvHC+e`j9f1p8)+FVt{v=v5DQ%)%>ldpRBH&%Sp=p{o;987X@%{4F+dyFXWDu= zJjc^NSSD1Aua-(uqmTIhFI$PVJ{L4{WR#;RcC=)zWw)l9k`;|G&`IRsB`TJtvMs_U zq{#@9I~p?aXKP_B*P(Xz?3*H4>C<40=1Zci(=@5tGm$@BriYHxvY+yaxw>=f|81*cHnk zKjt$BSJufB*Mlp`!!Y2Wqb?j@G`FpWD0HB|iZz)d6{kiY{{4K)4qpVuX=zkgWN^;P zdpCW2eJQctl|X?b-W@+O3tna2#?`bR`lO>f+uDa|i2+UH`P{VjE6R@!sEhY!@I0;g zOgms16Cf?0Axo?+s!8mwGFfVXQR6PTZkU4TcdIL8HE(A;D)0x%UbYUjQ66am^%lHb z+SCaFWBIc1vORIcWMo@D0CJkH13hA4zcH~*UF(5_xpE$&#<_yv*#Q=q+`4{GsjQ{E z_WPNhtfaOER9g{kL9J*({|>n?dR{V-!-My+&`{Y=SP?M}pEYB=kK3qS_f8z>W@x2( zD@D0bM=38$HB?0xu&>d8`w_@+F z4Z19v77!{H%2j&;b%HY`>jAzbr2xy_9u@$3p#VKqm>?XMj?K!xPb zMuQBxtvAUO-z%d|DQiy-*BbqlYinCshq1;e$dBYLL(y?Z7rm}=149z>pdcJRA)KCd zegx?QHPtT=9HheUm?<7s;WJGU(Mj4A3DqxmY(DXMlWI^vemvw#y8z~)%WO;-t^NLa z!TDTk^vh#sjO+uSR|a9$d=fdKtiHIF8fZKWZ7nJdhhGcaVq!sI<+>BPUL}S-YH+o) z$m>NowLG9ZUY`rROy{9blZ@~jnU#9&#aL4n3WCnOT&ZUt#7Y8XP>L~YL~<|PVc#6l z1ADB5_MPG*!p;P8+A3qP?Sgc$B6`$94lBX62-K(ubn)68l9g6CM{gAzPlDkY!%=- z^4h{Zuh@QZFXVm%E$=#kaQ>%(a%|kBrm5m}DEG{V)O4`^DrU8;+#sJjA$EH1u}w|e zdkB?RCJXc&+PHg3kc&G?)mm{l31*suLI=Nsr2>H3#e*;ldw7#YC~IDQo6avCcDFE4Bmiqko=1!jNGfS-;fk3n(|sVR zwcHZ(oD(@|T3*V7{9P&bGd5q?kdk>TXVWXFa(EBZc7@b|;@C9ZW>{y==K4$?%wn<_ z$;7Y1K9W17Aq7Ro-gym1x~<)hb#=CgS0^@z+8VQZE4B0FECR!D1Wq`gy$ZPe*ezX$ z8{6i#(qUW?vgZ1h9ug5v{Y!A&zJNCw-K#)!#&7LgUR3QCMzr{S;x;-t=`0hKTJJt; zK~i@F9(G`uVQw2`gvlho3Ko(JBtKY#jWG(FZ%q;JfA77S6*}(^f8t1Aj1p7GGAkjg zHEpUQ7%kfp#L3s0)Crv}K%YIzX`MBTlqG+J^iKX`=iC{C%r?cwN&ticlsk+kY9Ug1 zTAc0`K@_1Efp{X84jgCCTlqB;o*eJcUgjr~@9JLrHx?xiV{3=(y{9c*kA}j79H26F zR43DkDwQQeg43x`>)v=;Qi1sC!6Yci!->%K46Vd!TO5Z4a#+LC83qMd+_bbcPT%{i z1dpVWQXj7v(Ci77;lE(=Z5h^2XRM$*j1$9l<1fs((j?2ox0uiFC(*3se~WCi>d(F5 z`M_qSY~a2l1=w782AFBD)8ZCMsJ{BzRMr9VT$|v8j!@%8?(>}9EZ`S!u*nq>Whn`` z1w`8-9hX-xMeH$hnI>wb5l3_gt*sJ7BddLUQE4p~(H>xtJhv#3iXQP+btc!0=$nF7 zgid{m1@pKvX>S3OPzLP0U^_J5YCfAQlxA+KXV`0qy+q3F_3|lm7IDTfM1NUyc*#cX z1g4&z*b9@lTOMm8EK&nPOZL{j@oNGU=kB_V~R`Gqu-MCOk zg2G56w1d&cz;c7W77Q{Kn9|%syjUYpA&yYHLkT zJ9{-n6gvn*VAOHwel>BULBuNHd@+U1ddh91Ee$g zi=5xFnfE*{RlT^Aqx`y|^J>M17cTkF_lFAB#wlN@#(SL@*Yg>13>e!Cn+sREOgg-u z^KGAEEusr{X9zajFx5mD$$B0M_2?jXbdl+4Wa7xvWU?_bCm_;v>?ZckSb%2-j-gkAfM0Exl) za{mFQ4fc4)rx6#w&Tbe8sUnkQ8BGEp6_KF8P$9tLTGIoPv#QYah`3JM~AI0c-mi^9T^G&Sn^{(IBPW;DoumUU|%YPH1z}`?m z4Z8{Xzgf{65^LTpAbhW!_6`JW;F zPvrKdxEgR!cL557SFd{&e*~0RS#IR-|DFB1A*;sm8_WD39`~2P$DgxmK-=Qp$I1ePg@Fxs{~3kv$nOUBhO8RLZ~XI*X}CjH4bT?uf|nhTmVrFgkF44c z^f%(Yep-L~o^kx~viM6@4e0m13s#^|_d13DBdf;p9r@j`-jG$}_(d%J=bdm{R*m&9 zm)eh4EDO-FaJ}dCC(!S(Zv^_UiM=7K#_`*g_G1Wc%c`;d+#a`GW4L znW?p&skIgP^*ickOZiQ$?yP^gr5FJ>2axyu36q)rN8QS;IPcQx4rrRtH`M%NN7Jv*KK#>OUO9!wN z7HD1p+E=biix}8}vWJ@x{x*Got{`Wi|K-m44)GtO(+w5mY=60Per^+B01PkJUlibA zfnV=_;Jz8^zeexRjY>d^{y(Sree`au(D>7Tq}cv)1O41g%)rD3)K>l6O#I_B+=Tir zOE?(l|Gk+QXcGG6dwYutg1RyD7|902!Re!Sr+eVmLvq#C{dGbT!lCg%%n+G)-+O>Wu(Zt zlzr!~YG@QyEKWIRs%2I7Lq%%4zw8Woj3@sdI+& z5(%QQwyjCeHpnvtgijz3w?~{jq2!^N5Ybz@oP|$eM{FboUHY_bY#}z#Bff-6AbQ>p zbMX`O5YRU+HRfN6FmKc-X3h0{I&MREx50B0>Y#f=q%Meufb@VG}#L4vm1o zr=8AL-G>qX@x?dv97I)Nu?nGH5D>n3bmj;|sLeAkXCY%XkG_ijtjOW0sY-b`n2tJG z`kgw_j3`+lqj82BQRD()>_=TLV2&nr5v`vjxrrKf~BVp&Ruj!AUdrJ1$ts&$QGAb($hv zQ}Ue z(i6?{Jg0!jot7&5)K5yzrQH+c)+Su-kV>Cv;^YxwwlgFQH9yR}#pStNGC>y}3`@7# zJI%03vo=JqHX7pF4RPYukAOK8F9*qB#w+8sgj8KPsC@I;OD!j852Y7^N5)36-utj8 zBR?V_;EP)xy-}gMv;E)U3^*pZjBaJP?NkBj;1C{px>~tFTwmNAKZ>$97iR<|wQJ0V9A! zXR-7Co56uoWR!b=A1en~^;saF!;=ZeM=#({UV@KePNYtDqxS3;_eaWF8%)!$#z=NQ zoCSm5qzdGE{*4l{0Mdil%li48qaPfj0OC-6pKlo9(=uq6S+JK6FpkM<9r>~~rKZFu zsPoBt4+ijiExhfU@#jA5Is0GXa8>J5X0BT5AnwN77!H#9_BRX)4CuWj|02VtObysd z!c3NzKPegZ`aELaXvXFrdydg1X<#sC@-dGJlE3S?HjkHS)K6IrM!?$Y{PLuFZWkl=BL#)!(vF45!|rDzz8EV8ZV&rMKDirBq&$>)b{09c z-fgbRMM?a~BQAcx(quOXAvk>o{p*Yfa@wK30eYoK+=uRqz#J{C*kX>4Y21oU3A7v3 zpik__WYr;)@SX4Rpt(Jr-i4TbJv|4y+0IJV$bf<(ABVvVwY-g^Xg9%i@DX&|mu3q7 zk})S&g@YK;B{{fcpg1mo(DO8%<-}6%n7QXvrG5FONU3-hUt20*O%xm=ErRy%<@E0yR!}RO((yZ4`jS2 z>XTsRrwWC8qSQ`3rx~QxI}azhlSaK5xVb=%t8= zc(kGHK>rRO?jGrW(2`0lv8k9}m2Mt`N`W3B1+y`;Xa)zS!9D#z^Lq$vr*G^!l6$04!tJijAai|vzcl{Vagywu|gT#kTqeo6IWZ&Y7;8Y zOm6AY7*z(8T_b<5n-nXGa39Pnki`n75n9qOns|v<>Xd^i+!W|mCy%q-F#Voda3yj~5PhgFl!kWAYuy)cJUO)9MS>+p!IT{<1u+mZ z3R4#cdJcz^s1`_ynX_=i{u{u)-MO%o1b-W)XC+~FO#68r>&GhHSnxSPFIYXLS3K`K z*xYOEEqCNjp5Gh8EZxqY=`J7F@1P1RBx8NY^R8dQpuaq~Dosdat!Xg{!i#5rbgu>WG_iHHI^LGc zeV}dwB%08%>#N(Tx6khWrl*Ss37(?(fc1z=F0QH(Ow(Ax_$Qh%0eSTkX~=OA)vi^i9<88xk*j6h(~(+UojP6Xi$k0oLvpyI_i zjE;+!#fjC26-Dci7K)*#jc7=%Qr6YSPQ^5YT|Q*PSa=@$99wH6C|h>$-M5}xMslKf zvd_KftleWmt<^k>8)s|aMHZLDD$Ge)O6yzmJG4}=rBr8olos8d<>*JdWE{v(~ilR!59#~gB2brM3FeW*o*P`~?v1B4tX4r%KR)OJ>Q~)W? zo@MdzxrwK&j~mu3K`8wzoSm-NHqR1PtbhtHl!hntSxuK-d9xAxC9u^p_tY+zqPMD* zvO5H~!s@=rvld3#yeZ0RQ1Fmv%6qn_0Ba$Ed(w)bBP_BOy8TF(#5Bj99d3fyNYS!R zWL3r`&7-8^cx5|}Ty^jTOpvv)4f6%{jI8^o5h@xC!iRaGg%H*O3ovVN>{T-%iVKk| zr_vqJmbw&mWCiV5-di(|^68?d^U02Farp@B9Lk?seSYsU+$~g@?Ia|?6U=YL*~KI@ z9E5_>z{*8a045LbAcPq@d(g{G#BI=f)$oy{d3EI~d2K^{NTF65YWPr}z$SDDg~xjv z;x%2&PTPz8RJ}4RuFSS1{^}tH{|)ny%}0t6&gIWFNk)9ECVR5%jRR7x8-vi$$_-S> z5_IgJ_^1?A>^N|+wO$lZTh?NztL67j7Tc#by+Sc7&6lJLhb%;oJ0CjtSCvYjgd43S zY1ggBO&2vlu;!cOj@@c^9%BH+N%hB_RmQjyw&AiL9g10!U#+wlMT@9}k5i%^Z&8oR z(a4a^WcVV>t3UPed=ZM}xM#?fI77@fMgqxsa4x&vYFXEaU_NH+T#)OzL}^(!^mWO0 zrc;i~^?iVv#v?3!j+SLBzW@ffQEG2zSuc#|JkfKXW#1GFDL7EKR5+*`Nf2*M|LG}E~4@KQSs3l_BG*hx7+vL>nb*_!p| zM?S8b)}JF(h9x<-KbX|>arW)%O9^C+P$T9*sG`mh3GZiA*Jk-YA;>$xD5RY|fGRZ2 zE!Xs=Hw%+ONocMuC>F`_W2Io36~fT|L`6#Id(oP$)2&-1l5aB~07|)+UhK*PZd!c& z#xIW5ZQ{d2=x)f@w1s#h#STcaqT}=uQHURh_(dS}Ik_Y|_;!6O)t`VVzjJODMB1Pa zBE-{%iFQu2B1fyMG8f)_3Q1;YuBvG=7yf#|t@7!b4t(i-yOQ?}bmgIoAYz}G1&?S9 z5G!V85=$vo5DZ=&TJC>ASN+HjS+Y}0(u7uZ9wzX-c&bL;Vp{@R;*CEI*&0jmJE@fu zbCY?$g4u2Y9SHqeES0{a#*(KU)Z*_mwUUUXpS20x%RVcS>)_-%%MY`TIUkkSRpC18 zDSiIvnUovd8C>Y5Id9`0n5n>73ht%eTw0Lv*gUQiZd=G_oJ&2|7FtqPFL&_IL>f3P zS}Elc^fbdFFJ858p35^8(;f(hV8YgN=0Secc}$|+F|N+4^-45T3eX@Lo#_kqw4GcYKOH%HFy zvZ0WH;TO91jx+HW#`izVTN!}yWd=A_fbj>?eBXiJM6})Ulz&qu{~u2IFB0WXitu^` zDWFoZ0!I$yj$B4qgYo?fQ!dE~#(DG(C8=BgQis(PSf^*gAWVBD!$nStRK zD)|4NU;Um|y#@780{eRBBOplsB(Ry70cG+=j{QziT?U3qktd%$zcBge&Y%My9D~r0Zs;n-vr5DM)VE=&g)RUrskY<-1)@*EoOPOu+Kf zTX5d#W@7w*x|x74#6Kr`izvXv!1C{mUW4kU>0~wXH$41ZzPXDMG-E+x8*nt(%vbS! zh9ldo>l3zuc5D@|xQ!+Ec zFONoAv|eOqrm)(wZOj6tHY06EnEBvy>PXRaB}wRB_!+QtfNI^ligl?nOBnZ$(Q2nPIg$Q z(_NU9q*=cG{TJ=D=!1lHnPw&5Z0no8=$QkK(j!Q+-or%RiL<6JUxHKL&z^kYv_#@x zwoig3lwzJh!iwHZixx zo>Q5JTgJDuXRdB9QaV*Ez2ew+`(I7qg^&tgMe}HWnx5>luQjhxYlcUuv|{9&r`t#K zO_j5yD6KDb-$p-(&h>W3I#`XXq_=Eq=Gz#A9ALjdY=yDW9Z+>EY&`FfiFneg%;QL#^?&y#akf5 z-Pq=#6K0*uDYelwq#)7aO9E8i!DESr*V0zj&~1qv?yp)?ZPWEzH}kza8`Vnr7nG}F zo^Y_XAt|XLq_1`7-B6#BCo%;c!x6eMt{3jrWG~KFHtQQ z=>eRoF8(os;t96Ww_e&lc8kZRsS|x4KZ=k{O*K5AWu0!)r2o(+|pu&$3BtZ-TD%o(QF0F8hRj+6nvwc-~}=S#({fj>oE+D&hp; ztwBZ?O|31xnuBN=Ql1|Lm=C7unIF(%2d^Nm99CK*9~+t`y#a#@r!N_N6~r92m~4%L zQbQwS81G`Lb?y!uJW%yE1riBrES9sW8+{AnX~e^6PZoq zEZE|fG*^W<6nphazS=@+kVO<|23+7FrNOO)Nv^ETK78(z1^3b>a`s6BRl&WG1`sK` z6Sn9`c^6m``4qGhjK=8}W3ZOfX+mL$!CGyVp*c>^DoD$))CYOI1Y#sSM98B{3(<*5 zGCcgw_h_O9-}v~)=0)_UzR2{J)PlUf(Hx>yVRN|V*t%TNaz#Z~R3I1d3{3LjwjJ&L z0UqWssv^cj3y4F0s}@7X;dK%?);{&Hj7Q`}rshJbCkWZP!L{7^E7kR4Jw~=^*~ztG zpm~k;pn{0u?p9UQj9mid1aAhN*iY*U3_?#=yHL=m(k?2EEZy5jk>dzk3hrULFEeCQ zR!x||y<0Z$5P9|?D1`&{>kGPrhaC)SA3xhKc6pC=d6=B}@0zOfK*no}_c=gWW5gN^ zTk#=3;d|gY4!MGJVS7Z1udDpFG7I(%Kl+YIXF>8)bN-e`URn#?wUie)WGrtCiQfrB z7}~zTszF$a@KwxqcY-~{uY(tjpjLQ#pNFH!kxdtebe0Q3@`(B1WvY)qUQB;Z?`9(( zWL_dH8yacenD)DM5OdmH9Muy$d?Z7^Jc(Sddat?q>iVar!7kt{Na7#lhe5YKl!GOq zz-7nD3TA$j-v(C}!`aQqJ13K~tx_C#4>7yA8ug~0jJ0!+ksL=ou5&>atKUBb+;Aof zSwdV^`RGAHx?-0$-GPNSWnm#8(L@DK=g@9q+QTpP#4sbf%7j35X^sv6<3jU73ME1X z6)e<^oVCOz17BH_NM*wb<3nVDq^WN{r#TUrSCF4y!fVwrKY6!%QSPJJP0WO%XWrQd zl!99F$ZS5x_p<3o96R|KG-(nEzk(83q&=#s;G}1~*A$x|GMyfzbW$$S1gxD5GE~`M z;i8Nfj1u~+vRP6J4cX(IkG|Jur89>sA-OfeMTMlfua^2y2pWtRPKeQqt>nIv;`=$# zHEnwpwEUeM?X7-&LnMXweL+Rt2`WnMTE$P)?q{Hmb%S3_T^P&dE+mQt1tw5z!en>g z(V3QxySUD)b~&@OoAIP01%~a*@ZIapi7GMSSa%GU`(n z!5eIg$oFYP!Vd#I$FP#~d^zYS6H64O0WBP90t0HOxDP%!1#V-HBWIM!9;bEl$<<>k z?+71I`Rxa+gIF|ua$x#SgYx#XpASRvJE>izssE6g?=Dxhr z345#{lo=eg6q4=Y+NzGgUWnZMBb06t^3ToTteWfb&Pd79j@g^4ydQX`Xomx=_sy*$ zqQKYBovazM5hp|*+gH;xeFUp0@o^?7y5>wrMlYVXWX&n?7K0bkMTV+e$_A6YUV%X( zDrbBjy3YTK%!gBmKQp&W*hIp7GRM9-y7&!aXYM#cZ8-uMICuKHp_LgH@sD4}QehwW zCnva_xZ`=Jb;E{-VS)8ZBMCvuWhWU%B)pfb79raY7Rl4hH6Jyu5{RO-(Ot(7BLS^w3E?LoyJam%E)@!DbcNZbL zWfm+4_@?h0$!DPZ6f%!EMm(mUVr`J;H=*w;#pX5Z$^ z=gbTm&vtH^qdetu?yyH03VVR_))-bfKs{XzeqF@eR~ILA7e={9{luNwprPf^&hsOw zC&~C0)RR$N&hkt4F^H@zoUjIgAdeADxwhUkS!syzM_M(hO^znYX;8v6e_A>7e zQ}ICnc z)IHhuQPzZl!`$Zn1X^XZvuW>#XN2Js4=SS@w%QCoz4m-h*7gy$0ahYsQzYLwtMb@W z{^|HpDtg!Fw#W`LyEayR$*!}A8Vn^Jw%lizl3no!$`LGG%1W;Hb!om%*umW&hm8lH zDvb6V+X4?UuIbE|=WKz+9k=XJ#2v8=QBu|+e{NV4AFhJN3tk!x6nem|(q;w9Y_nox z$9NLH>xb1f`XcH~&e?_rPln=rV3QDMm_hD1;nBYTAepLidY9#~OOm=~tRB}RKN1|N zSD7=N92`fxeEgVeIHj9`Nc1={dR`iD9>!?x#=KZN$za6Q-U)W6gELY{e*lU;T1dAl zJ{2~}a#@afaPoZH)am>v*Qc175b>l2tmR9N8N}-^8;JzC?89#ncZHOs=$~_e`jI)* zsmpho!)U`yXd1Y`U2`b=^!vXep>0gXBMca+QH#2#i*#= z?@~jks0>6W^CM1ru%KOsK*-M}>Df8U%NuF;@vXEMn!nXX z${1i9J@bN9M6;Vv>f9Eo34UTR=vk`AizOX*B|HTZZUKr z(${qbd0U$DlKG`(Ax~Z3@bvbGHtq4+w5Q&aYG zbv-phR-*D=(gIFieQhY+qv8kZ7rra;&T`m#u5F8@BEt45>9wh0`jX3Ym6(0%<~niq z_96Wp<~*0}?R|DE~&iCfm*5s3F?B5P3VdEuf)Tc`OY}CJ(sq;j0aaBTT zH^rAo9}PHIM6&UM?>4hZTiJnq`MQOgDA2p|wCsKe2J#0Z=nu6Y>o!u4-pssUxBQ5} z)imVWZR~|hUX&kn58QeB8NProMW(lC1x^W6*qnC+uz&bNi3dK5?t81DV$mjXdi9Y2 zspg&*I-2Sj=jBwZ(8~^_;iI*P_#_~uam+h-Zi3KIz3`O>Hnp6&>7?3;(PM zr{F5g2x;V3ub%r+Jf~_+NOSczaW+p`zX^R5Zo-iDnscx+i~l%$1u`*i?{I@O!u}T? z{3nGE6p>wFE_(qRVd&AE}n|Bbo3iNe3$Q*|3__LIVAVPU-9-}aNj zXSuGpx}_EJ-zkVcRv9ud{=$pjkstjF5B`(FX929TKv3c*h5rNiO+@3Jn&N{baWd>CY#By$_Y18J`hwp#!7J4x|chjBNh) z;F+&m2!T)dTdIKZcVb*Z_p#mR0lf&|%$a~4VL%M(TKQnS(X`KSU7`3-u!;G)5bqDi^$QvPO9bz|ZuV)VU83tBhha`{}`rZY~z{Yl47U%os#Q!G7SgzUpKY;yRsr`Kp zHG~D_HJY2x=;x+R&Br2FRc1+!tj)$}{beLb z=x{AFk8E*B5Xb4u^pL1p2yJ0c&)j&%%PJdZ$HS0}GM~DGwdpk@My#=j$%!GKuhJ~Z zuN@p!V#f9@_O{Lp_ln+1FOYX!Ejx60u!p`01VcRV61G5=UmhXjbw%k-=5eq+Ir=ap zj`px+;&dIw1QU`v6#9a9LDbw9G)BX@%Ojs-ilI8)tmfOv#(IPXWKk2M&xbi1q|SL> zkFu-R=S$#I`DiT5hp45JH)YkYUE0Fi>gfG02q~`lMzN|S;NSOSQT(~5-d?N-3W)D zhN;D}-i(UIQd%@YNAT~FVrS!DYY-|iG2|B@8jJ^oT#OQyhPWBwE$_6&WzFiKBqpHl~CB1pvn^8pki7N6lrYhz`LjSlo zD=w9l!g-n}J8G%L>)$@K*jr-i6Wg7>L+}ZtxMa8K4!d_soVoZC_LV2PnY8EJ8qPVM znY0EkqV~3Yy9`JNvOy+A%Tiz)3SziNn+C)qTLRK^G`t<5vJ={^wLSw|RJiVmJu|#k z;d6?HGx%rj>=bTQGx!&faOWgWVyA%>VexO;JfsQ&L;du2JoP#-lzmB}K@zjUFZz(t zwv9Fws8aBaYNQ?JsZbe3%TSilror!XT`b?B~%CC~0I_ zlB-FVa+E(N)KNNHM}a;er$z)#=7%bHzjqe&4Lljv*<;;xJ@Xq;al=R);qwQ6t;gk= z-k7JAVsxEuL5v1%mhH6X(izcJ)l#q3)Rg?4b3vZa&zwEh%D_=!mT=pjbApdBE@bO~ zES!upaW&Jklng*XIp67lFtzY0XlStv`0_C~r8f3lQ)ur3rl9v;#Y#O}Rexd6y`+k> zV<>Eoyn47NZp4QN_oWrrT%uUc?CkagK{3k{zUd%3o}uM(GOa;tFJt%DHapPAAkQW~4_Mkl<0J*@&*gzFsswt=v$6LH zljGYwtSP$q55Kl zbj(h!1KS{->MF84O7blUQf}MC{ltQoF6-XxmAM*ZL()RXxzyD7W+^4k05hK_b){^* z#Y`O`skl+vstdCg?tHEPn`E?^M?qsO4&LwaW2IeuWN0I&u^@F}iar#FHP6m#vDBpH zu6}kTmxaq$scx_`6VyT5Uoe;U>?G`tJ2rH?_trpV_=jtytD9>MyStvZOdY^&o z{e$$O)8zDf?CexhA&l50g^^KA9zMDhLL>R4{c4g%^aQdsf{v7IYls>UrJ@fQ3^x-U zXlYw(3j9`$q&dMIXe$vH&jS~;?|H_3Wv4yF>{45pki@rBk{odImZ2GF7snVAF_SF$B`Hl~*fQ_Hw zGmNj;T7!Ow9|fR3S91nC&bA^qy8 zphYN3`psdpux4;)I3snRL=9rE1)2`|nx zfe^3|D|BhcDKk`7M{CPEL}Ld!$-4s4=S119~`RVxThsrh;0FYOwQ{5%0FsCTiZ z!Oc8qLu|^!xOoZNx@t}-)i_h{wl7<9ayOSS`c5a|mncudn_F_BTXxtCB6JlWkX@j~ z!NeIy<1SmkLLN7TM~>ZJ2~rc0V!hiomx~iKFsWs{5QBwLpeDx(i-nI3@Jglj~bqY zke5J*graJAYQ0pkn=nI4Pe57<&y`l$Xmy0>q!+RcFA!2=7!f~br z3Y9|C8@R0SF{c`+gfQ>??ZW}r4i&IG^gf~9M{eL!jLCKU7L+w9uISGp`0tvGKuDw) z1(*7MTy~03X>sm#h(h#i-z!L1#i@Q}IHvFUbnMQjfM?c^YhG#k_i6CfhDbAr9k=_) z`oA3iTr8P4+VnOR!9QC>iTRY#nglAq3tX*HuMB7H<3xAIK)L zKiItwuU)`=I_2x_=9&pX#GE*S(nV!v^rI+>;_?KG^t)~I~{rk}o-nM&3hj^SP-d~bxE_QuOlx$Dt$FX=< zspG5GOcLc6VD;Tq2)A3Lon%)YbnH6i`;7GP&lb`-Nx$5Foe{+O!!4~ zJ%?ae4IHQNR?liMVy6j@h43)e7Iq&vesmed7#t9haXkz@xJ-Xtyk-|~PhCL2!&=|; z<(9@J83$ah-t8JY+I)?^PjRtur3IiUj+X3o3LS*o5%y?R|{xf3Vb ze5+CwO5GJYIXMo~@et-jtIRC}Il-kL`5WXy^uqiONr=2SSnp z#__JR8he}UU?>_~_Ivhwun$U<^5QuiQ6GOCu$i62Byb2*F|h6m_cF$bNe*h_I7VsA zKs3UnYZE6z%JNJD8zu3E>^=>GxM$>vw?pev0drZN5b(^T^S~Be%kVa2&yJSYP(T$e zRQ_k&QB|ulWSC|%^4o;5+IAb&QJ)MrQv5#dG3Zwkmf|nKlJ6+5u+Z65wRxEDOWQUI(zgp{NXK>Xzt0hF&m1#5dPPcp z>rscn?76;C0bC**wA?@vyN`iIJo7RqBX*e*`a9D{u#G%Nd2nM?wnec)c1>P(`XQ8? zh4qUxQz}b@QauEtRpd$*FpNve8TuNWZM%yVXOiB^)YQdDRla1L?B0iz6FmBO3s#|8 zHRO3j#pfe@4RAvKgbi@y&LC0_WvICDvMoESz@{8i*GY;PzV$=q`ebDBJ&E0p5NwST z&u0yR?XK@G%54dsh}sSpaLaVTTqjB4&8}3mEZ` zfNuGWb{mH+@;S~t$WcFzkO-kcT^Z9FPwA2YeJg>qCmfrRu{gtDQs3CM^>j=_h~?3y zm(uVNor3Nbj*9}s63_EcYlxVomU&_=Pjdt9^kw979R*=>B(`;@IxB)+{=%}MLm2Q) zWuqt+yBB8}WA{Rp&5yK7=tY@w!H#O};;ENl)!Sq4R8FNJY9w98U+y=%3f_mcjWxT^ z1-5a|{vu%-k2P)opjVLc1g?e;f=6UXvrLZ>&d4kL9x}6Ck>>k7mq>QU3zesOTHDUp z?Tv7j1DlOJ1EdhIds@ZMUrcAcqv4eUi+U;!!S+RaO@*lkXBAdYOHndDtkexrjx(id zGa7MX9cnquc(sy%DIRh;H#p!EQ=Z&3{TOLf=`$r;E*fafL%(jx^95ox)7!5*XCet* zF2LX}z)Ht%cU4C|3&nv}ps7BT-Xc#(e1aNkM4`%zR%wcqwJ>tRoR9ZJfiFe@d-u0X3C zV>dsiJWL?0tZG~`T=*of+>-@0d^6nrY|V^ttsaAvQ<^ctsbuJb_Z*s=f5~lsR608g zickzUuZ%yZD`X}%gN7`=>Cma{_cqkY-8=_BQL^tfnBxZ};JKHTP2 zkm_lmJVN!eUzyxOkb>M!zQ!FPXjmy;vglf+v^`0#0tu~R3vk_2Jvmtm3j5B{Nl5R3GGyrfR8o6hTTG z$0K=n60}s~k+zWf(`|PQ%vM#OvG?A#5s!=p^b%X^5EI=E8zr^*bAIp=5ydD~>)77( zxby=-{iFMG>g$c57PRHymb#2PksH((Z|{9pt$8;b>84`*w3iP|x{S^Ds%K}4)!_zBS4(jOY1k(Jb z-TjGP*`p@WuZ}(=p^-$9d0{oBRpL((OAQ6Q#HvY0MV)wG7VX8}1uI1<^wuMnH})Rx zGv?u?rQ?FwH+YXRNyy)M)wOm@_LD1fBH|${zK*8!ZLU5Sr9v@yM$^?O6(B_IM$js~ zS7zALrujNZ5^T{QY>6YYixncq^c64tm!v3OmvBOf69TB7{Ejz$)g~OL;p6<`(_0OX zKQ7fT_&R@B7f?~~}yk7pK9 z@)gy$H60RY=@pZh8ojo@XtqONZA!P$r7b~E|8hCwpu$pZltS2J8_0R z7kg>DX-gKYf5H%P{F}LLP z+u14!wbzhZBBZQxM{-s%#rr{pC><$I>+T!Ne_7=()lsu`LB?PZ^@ml)Q+cayo z-ytsX9%nA0Y-f+L@}w{b=|V91d?4m%Y(qd+CJvAh*Z`JLfl#1v<->gxw}SKOM9Wv@C7blg|3Kw8jL0_V%%}} zwOQc86pKIDvA)ckW_YMetnG)Y$Ix0A^(|tnkqNTVqWN673;D6~&riYR;?F!bsIvyX zRB7yfMy0BZ7qnwOB-v*@enQ!EL`Ka0$~YlYgUL0FrtU(0(tJza<;0waGkIdBDl)}F z!SzclQk!oGH%M%m=uz&iGt);oI~gAGX+ zveP#0#P_MZoj^+C+vc<47!$K!0;LEU^l`~z^C5-aB=v83iXG0QEqdvm&k;JzIV7I% zF{LO;IO-yRJda7{eP;7odq{1!fk$ECvMSljpb72&_vQtyi!-+IH zw+`+wzpV7up=Nb3dYnA{H7o}kc%)R2uh2e~=^ZqI_>dH;G1E+Q7mQxl%x4$kvVtY+zez2b-^$r-E0}zseGmuEoc`q?D0BkGHqQ+? z-26~~*c;t3OnVUG4y1aMbkyMKav%5YMJ?vHkVp<10&1$CR>NQ`eQGCsAJxO}c_$nV zkvC}Y8{BVT{OH-lsbIdnUiIu)<^+G;AlC0JLY%b1K)L7{7hUd*Nq|s};6gfHamp~i zy1aJk4pJ%`az9mwthP3$6`I-Phq^I)dC;4n6lre>-BQ2ane*4OyqdY9K^h_)0rl1U zRe^TCvTe0iryxAO6W;ocIlpU2WRAb1H`y40Ik2mgA!gv_{tpp?zpz}uE&p%XgL2SMz@$F#)qPIv|AXJHYQG=FP^se`Qz2{KEjySEl&dur|P`>t?#+J5k6A zOws`1UEgcS3YdLepUB0;bj9iY%h0g01CQx949&0nCQw7cNB^lIh~ZC6=C>Mt2l%~) zHv{~;8vej!{;7t4;4qnhu}MJ1zygp(Ojk21tXDr+uBL0Q6*GKgq5fCGtCjwn68>s4 z_~?u5)MI&JDM>+Dm0#8*=xdbT4Kq^!AqUJ?g4n)>h%qq(sd2z>fIS(* zwF8J>Ilh0f0&|wX#rg}=DfmCE{IYzakENxgBs8TpWf}j2_fK>u3$U&K1q_gDS5k)m z3*fKI^}odh{X%#C02qk>`47rJ@SI<>H<^K8KERvqd-&!RRHkbez|RiJzYpJJ1pUBr zUae6ZTWwoA8_i#XOhLf0cO$3yJ$&;!KBlXDMqr}zMtr|)@~_+UH%0t`)Vu;{t?lqN z*izfTT2Idm@E-h69e*S<U{g0Rd0LBF90|0kFKmY=`OR`GewQ@~dkn2lt=Ausgm(D?UAx<=3d z`lSQ?n7{|<8Gcm;fUW{?ZvqMeqyZejtR!&$umAy;fcWbh=Ifq1Fi!p>N|xV-ZZd*? z=|e_lmKN5wS5N=fy#qv2-iVKh19;+q&GFSz1OfBT-(n&`fPm`S!Cl6mGj@OPd(8;? zp$}cHOg+c15H0PVni}c+7U_?Ao9iVDAU5`2#v}*1$F0Xd6>k^p@ph2Lz9s5_DjOJ5 zZ0*|;^0N?5E1_tKm*qpdpDH1vit=v$A{}u4dj|cXOC*E6;lz|y4+X53ncHT6qkE+DR?;W)l_%yOFZTADUQexReul|$Xqzj)lwv(uZ^z=T zyK}j`7(gKWs;={N?*47|I$hwpwiQ|_+1Y6g!?+;rUg@KY0UbBKOqsO$=V8<->_l?6 zVY26+snz&?;p;o|agY1ru`%eHbZEY_PW#1ZwC2ny#4qLEMK``T>|zTV zMYJ=ejV!s4-6=C$uANi?877ML^x0m*-X@AwqOo?;Mj8GTnSnb9ERtyv+Xkb6PT>wr zcDh^6=tV)H^M>Rl5mfW=^v-l?rO=WA5fPK?U4SBG)h2VpK{|u+G{-+AyLb|omrah^ zKoQb`p?}X`4gLNdFA=O9(ZOYY-b?s%1P}e{Pt=$Z9i)+4f_c;^Af{>fY=I1!jkrM= z)pWdvHiJ?wS9yk`;Plpr$9W0i881JWNK`UPvhz@Z*CoD{7s9#U&fao1FQO+H+K=qx zo+f-&dskW)ec2>@29;~55QmH;w6gXz6D|~djtM5)p?386)2U7k1E5o=fLt=Kv`3V$ zo9wUR*Js`rcW(GxnT$F;TUP2`TM-pPT1XnE#naljKUQD8@w%)fkRXXSLdTYGiZD5; z=wwHd1{(_iwN=1RWfE`A78xsZ3)!shJ;~ind+E{7 zQl3wdhYYcRGzt1(*T=-wsHs@Qljq_HM%h0xA42$9?J%y=%g&Vg?TC*hJgt6%>bqg{ zU8L&ffa>mN;BX0^c~Q9;7|b_$Zv6Nhk%xEI z&pqaj<1)SDTwuXU_Y*D;nC%&628WL=;dghDllVmLVihFKd&{w(@H#h#8;0}IfF%h# zt&w<5JF^SD1OJHgAf^6J;pgsXIi7*&+3uJZNA|{r?Ujk=L&x15M3UYFjwnLjPh^}_ z>RhYyakops*-=l!KQ%czfCS6hr)-L1uc(j4R|=i)A3!0uQ;M@8R~;!@y%!hs}DP08r21LJH& zV!W`wv9divo^Ttj>a5z{ASH zA*cB#*~USUOB}KjYppHYK z_zkKXi^5kV8EgliqDRXxw2SoTIV|&jL>C{}3NDVk%#o>yo58uS#5tCJeDYF2gekAB zh$=M`8)l~a76-$G@TjsGC}Q5?^V$KpwA2?5MeU;76{RZid(?vP%f&o_=@Btlrc@sS zc4UHfop9wjDp##pB!fasEw*<)xF4oiOAA-PBjde%LnAFq5-AuluDBGM(fBg(-YDL@ zAD+!{{$&DqH)G%$wsuj52jtWlW4uIRL5^s0OLZ&tf?cK)0i_++CZ1cmvfT?d+A#VF z8_{Bd1M60>p{EVJL%QUoN#*)7rK(JI58J!hMJ|h>Ft9=ph`ee6F1cbx5)s_ttrMn_ zAyop85dKaSH23rxZZwU0gh+4jyf?UiB)<>4b>E1&-vx=L#6~zCXZJ>7)}a{_`7x2s zt$D+tJU^VCxu@!SiJ<~RZ=oU-A^RKy7n$5OLik3Y)lN|S>yt>;ad-Pm$J3;kDe1}0 zMjumPZT8#D@bq=E=Gmm&Dni4LnFgzx5cg?SG=Bo7fcYS%X<7G!=N^a83mu(5&j&$U3 zgde*zd%jX{@f?c!)m*;sfuHhXo(=Xi-rfB)o1>{yf_uwMVdEjY+lk|6&`6fb6qDGO zPcv#C*z5%z*(U3MmY&5(f*n{8mz#hYKJ#9#SA8{en@Kh}-s8m3G8kTJzn9Z~%W7Q@TSKm|XX>BP9u(Q`OvG8WgMAncb>_1k7LV-MZqPB-Mq z1j9sxW$y3zYI7yoT5(CxkmF`n#Z@c5xs_C9i)eF4bfL-U{i?jEo(i$;+MD9?3H#B| ziVG~#4-(MzEAw^Gk;WQ11!lOcSOR?kBfI3u_@f5YMNk%CutV;N#E!zEDNd@huwy+d z2~_mABukHg89D}+=3{oHa*SibvDu(AYngxu?2QYxLuP_ay+ui#v__0A*4$=VA-8B* zWTLkW&I!=imA8aFo(V?=_`MJebR_ia)Ef_*-;8dM!&zJ%g8Y0C@#=8ht|hD#%=|&K z>&sKEIyTZJtYv()j&ToH7(pTJo*6nO>)Kq31$z6XV+?(@o-ZH!$9KS4%z}jIvzmo4 z&T=|u#t&yMyMk4-iiY|*J8GR(mY_~w+9Omy-RGuGGNGFfymfg;4oUHOrabOuC`u$% zE%&Gw3bU4&gnRH>!HAuRN)7qLAS(z@{)|hEN^#xu+x!q4u1w|y1XJeswuUQ$FtX5- zistg(uA$wBUOQm9^BaoeQGyAg=a8*w|o_9^}y%M>-3J7*8 zdk#$l)G+Ne=_?ibcw%e zWSilz%4dklPk;Vcx@KKz@HPfz#l=DCm>y+kQuAP<$B+U-q-MAi;o|6?#0zV&x==y< zojk=?7>X{GXICu2`}0bd!W~!W6TK2Q7Ln4 zJtdOyy=8U*j)JNzXR!METXC@|nuU+eiG5S*3cOD_vk_j9noyQ6Rv$+zw~1FGn8A+b z@?%$x4LKkf-T_Ai-tGiEBnOUUW39|%HXvOCi=Pcm=P*5jZpT|~3nX*#Lb|W&u}NWp zuAj8^Arx{-tnrmK0xDxS{}LAapu02t|p?nHoeBY6^3%ovremO zftXZf>Fn6))E)SxC+bBf!EDG-QD@!yw>FwzWEDA>8ON@KqiZx`s`R)*%o|BH9N#~i4?aru= z_d6zecF{(h&k*9wV~|15e1Kynn_o4SBJ{RSfnDa1f$mEjirfdga%EVSu~D2@Yo^Sv zMWCs32a8+DHa1?woY&iE(++4z$AV{iy&-y_!EQAK+kwoCV`O^iu*5+@;El*B>GB~{ z38ihEHO>)M?u>}0W=BmKeo_8uE*WZb;{!IY-H%l|`A?nI$9rv9L26z=bH&vKeR)tq{nSZbPIxW~#=cNYrI5;S*+M0}`T zCSxYw$(gA%U)o4-wz>HJP88$fD5=igv?AIxFDeC{qjHG~xBR@x1l*GQTiLA81-hBI zs+y@a(306;QJ4V4`%_92U9B~WbSS}bg=3}}FjM&u8YDEW)DQGD2I>a$*aGPF)vW5YFQ;mQexGbpL<`d$$ zW->x3#yjexVzyIdvV7#|>E3(0x_42|Sisvd_Oc-QO!6%FmspUm?ri%xmmtb%51#HQtjG^ZM_b=wk)L#x1c}lHEg#{_v)Ua`vW4xbz|G0LZt`9 z5A4}D#LYUL6HSH47kJ3yMQH|X9@b9?v*32Fg=aH7>gczt4=dQS)ucmwH50tx(fhla_#BKuBy#1A?^EKKLv|hz zLn_g1@A4(V7;J}W*s#7KFSLErmgnFmNlVg;BT*HV)sIV=(YUW)7(Z&$n0054_~N!R zTWDsFK);sw1uhzFdlg#{gUgRgE4 zoV6Y(3e9`SD8Zcv!)3}55E>9a4bH?lQkh{|izCG+z_Z2c990 zDyNb#RlkID(>{%58V;)Pd1b5ASfjk9U^`o5?--9+Nk>I}eouT$r{yk%YqgPsUSR=` z)nuab)SQXN)C-CthpqB}y0vNXeH(Tadr2ESo6NL9CS<{Pvo>z)v&o43WPa2dA0f^B z@TXPEyeb(!+`retcFs=JNk&yn#4+ALX}zKVFQC%@WClfB>luq`BY`1K8IbkvQLnTz zIIp(TM8#jZ^mNWm2sAKXYV5P9@P5kBxdA+nMOPljtY*Trms6FK%Xkd8x%chx4sGzB z7peGy{};57dvMc+6lnRcNRgOuVMd&y_S>;#dVnuG8%&+eYR#)OnoZ^-r=-Zqnq|C+ z&q)h(3ktzXW#8K;PTk)AQnCJ41@?l+sb%CY_|)W#^ZA`i)yn@ZR|`=ASp!O(wcn2`Y@`Rq?W|32^pw@@L&wue3A zI3&7!-1A_tYc^_;QY2}9i>X_Dqt9J~$vl@kB~-9TrtAWd|I+Sk#wa&Myk&5+Zgu8V zn_HYFl9QO@RSEMM5G>mxM(0>wCw<@}*Ov=-j=w#l_jtk(26@6JB~VexWGD`KN7UmP z8EZpnB+>_6m`w`|Dp~pD+!vo8G8N-=;d`8t7sgguX~||~F-IM-$`Y8ao8VHEAb)`A zSBr3_lQ0+e?^0*p3(w8XTGPP&Bxd|rHN@)mr?72uS`VHzBRHR#XcaK+D30;d$-C=5 zIF^B*@JHU#&bosYObXinp0@;U-fq6A1BTtM2un7=whov~V*xI?0fK`K@PcH%cHE2! zxY+yQ#*_7mllkv;Jj*Yf#((Z+HKi2fr4{5ge=|}D0z5QtzFq|G6#=e@6_`5%?!7?( z>B`JZ#0sRw+%!}86Kdct`nRZmU^%WXmaj#9&BQL~t3l=slotnp5g3(Y1spdH6AV$D4l@6G3{D$?qo8_P3G5>x< zj^zi+KV<~5Faejrzgen3upL+E z{)v23tVm|SMim$WXZZ#d1Pq)4&Vn~X1v09BJOQrZJXrpZ zoX6Lh`Wt|LFDbxm18eSEkR}Vj8!}#dPyr{zkLT1?nD1{M{tukTe;@uenW~_#vV%Wk z1#*G^h58luwGaQVp#H#p{2!qHNPzr?=KNMx5D-iX*#CYjE9fc!^jf0kYK#Am@cMn; zG9$~c9K5Wol&t0-+?GK=;N*?R(|3OEiv0qT=9s@8rT_td1^v3p{$00X{r~A!UuSM_ zSPcK524>2EkkG5VIu3vn`}!IF67@CRiuM1uTLB)xH`e?6+F$~R@PE^mK_G^k_T1HK z`TK;U=@V`?`PC;5)O7?fB*k3g+5a8j#^iOatut@>f*H!rE!{PTa#*D1L z^sRq7!=GY|K>*wR7lmc!V7{VmzsDGV1^;(&f1hFuOt$~7u78ta3<6X_e*+juEd{9G zZ>PjJ^w$FZ`E~2c$prXQIa_Nx9b0K_Ye0{2#jpRio&6!j7{vSs7XRC-Wd`Q_uX^vd zKx@Dt8$kYdV1J)t%*gsnKl`>A{+wbA#FYM3Z2?09ps#)phW&>ATD({L_TOFh`?PRI z*57uvn^TNIfY<)ttOG!+1&Cq3hXXTzMgDhKf1hH^$okvXc0-CWVE+DBKmlb8$G>sQ z%wJ(&3-qTI`}-7Q!1(!hTkM7uV-O&3`kRUZVXIe(_CP6tuUE`pVP6aMrw07{tX<%h z^LIe6%i0A2!Js#y{Fb%L{0-&ztldAL{OQ&Enyg*6A3E5Toa6eeUEsy^W`uz7@k%uM zwZ}36U#PD35(f+Lo^V|m0U;9bAOGD&favLWM--*zQyPb40JX~11!3WK@e4%lb-+8oC7nTV8 z>Eau?9H)+O%b2y-s5atMi=rF85o#o4&tqkDiS15a?z15th4r$z8lVSdkl0GF`KJXkz8_zz%5BIEcV95y-AI~N!%RsAx zAI~m*6ssUh84_S1LvAg>BI!tF&unJY+~3H*MkEqh$$M+}Wi|4VthCD^;-y)xiM$&$ zSm>Lxk#cVnMC#r4PRSyy-k@WT40rK*|D0KbWS7E1hM@azk?$h{J{byfP$aV5-+VG& zK3L?Zu_1i@z~d16xzN%B;z$8XWV3Y6RE|n0Rwcfnq@LM|OJz=JrlQAY;R-{Tp zz>ZcCalO^)CeWE&o*9e9g^n3Fp8uXY15W$y6b4m1p(ax$jwTGwDuJ8H3vOa`o~Z|$ zp||!$$%B_MxAcVXBH@hl@?Fk1%r}Tv9XvrK1~|+U@G6o=jr>he42OLXQzgnppY1CaBTksT zPYn$_!_wg|aP)Ihd@wbbjlF!}jg@DXdR9p8rr(jZ45bh5;%s?T9p>g7X}yaU1<7{C zbs30=;c}9NS1_xftrKLC&7^s-NgIp(#Hib!AD$_Rjj);Y$gB^M?|1|uRo)&6iLY;j z>TUMHLyGlQ*$thcG!h}KPbA_sK}p++bFZHi?lhS1|P5!YZ(PBv}uMNSGdP99~KK6j)bzj2NC#nu|M|dL+A8_>kDo5cc4IZd|tC{ z_lS<_%Ezs2uA?r<=7J~lmYUfvwq+}?xs`d4r+BGb$@9^_2fkJ)OuQQ1M>M5U&{)jVf8$Vd>31 z`Cc=?Aa71%Bu(HR8`atDf`nOH_-30DnI4X8=aSwNz*=*L6xpA1{B#Riab&qZpCCz0 zLz%+O_z4Ep{OYmF3hp83UDaX($`+->+j$KKSI7x*Oe=a?2IwNz4JRuh&_*T{tTt&|njgDn$_ zeehtSbz(Q7b9~E3H269od%{Eg}BM6pp?yP@+Ctq z;=VBq_*o6M6t`*I>W?pmExb3dX;STd>HbU*DL+D<2%goQ4d{cSZ2$dW@@?9n@1TiKA-Tc`( zCY4)-m(*p@=AZ&z2I)|aEj@x>Y2r)dAVG+g7ce?_@CGfk2l3omE%IS#Rh>oR4jzOH zSh9S^Rrh8gr=+kaaDu7UxZ)*?A(pA9U`U~3Ka3Z6LcFum;0wKny`LB@y`X)6=y~BM zai5WwuMybn3KwNdttkhG+ZEe1-pUrH+FT4}S*FW8B#Um<@+q4ZGR}7;EKd*!_E|uL zqE%T4kt%;>)wbUuw4M9RSu`+~1HRfSK&(NmFOpEG?loHO>$RMy2i@U5iU#KP2) zPP`3ml6`^t_TE$vRR`?@WUGRWmdGmo!Rt&zRl3vNrA!`oA<-dC)l{+bz#lzarg!7| ztl-M-=pc4CIG6|Dl}l5{QNuIWiZC@+Yw-4aw@JKhbEixzB0|v^t9aXTtmb<(j<_nH zg7AihO8g_k*9X&v>o|7h`qE~xT`GMGTi1+PMzNhPd3aAQQ|tzW;b zQ4{9_i75Qq794kV^To$a(hozZPv}#hs6{lP1t=~k`cjy~(A>ka=ZgwY+wnsiW zD1O%q*;`Gy9luugyu=1F{&}`a_apH547yhL(8NprDA)>c!tm^*%u~i^&1k9dU$cp8`p1@0G^q;g#&b&U>Y{ z2qh-wsMygxVdowqoQ582O~1gnV}IJ|)F-LsWAW--mdpd|y;uo_p|DmJk=@6|6c6Qh z0vwBiPjxVCR90FO5Sd3cObl}+D5^1W^4WM;rvG^BQ=c&St9=^CEisd#T zw=4Wg0S=A{?6`u30U0jp_!!+&L`buh-*9_{!q&`3wO2Z2z9~0Mvg;fj(HK)leT`h< zMSIp^Nb|if3T)@55+*vJyRitP$e-IOab|jU*o+4Sg_D7&Ol(oY=-xz3r|#H8aQ6N?M0ligxU4)^P9`VN0uY zmT-4djLem)$nSlm#z>&f{J11N>I)%@H5*QyQrWEq(FyG1&F8L+lofnXFPGY=w<3jZv$6U;ec2*=ctsM|B4Sg$9 zHEL(pm(D6MHaM0cxyR5a8ez@QfjbY~@6C6HxUSDdWqQz-n+unTz%k6K%YJYRfsATR zg{FjP>&-{si0pfJEtK*?mHYJcB#{SH_l=CxSd>B>1Nqg{$E8{1{4rvdNPC<%)5jUpa`cm9L0RlPfWCe7|N}{aJpJ zq0sk*&-lZm_1Oe?JsPKoG3ZS`*rz$|MLlO?qcomrl_a&7oI>lV)jBDMZ*u%CrW-Intb0dn5#lCFp7Ic(VOjK$~akJMaw`<(>z-Eb=(6&mGHLr_xecn_py zRKBTzPtS9TXbEVdsDoIQvY5lpFORfEOXNy(24yl~o}-1_H>+@s#Z1|z@p=|Wo$I>bwR?naEO~jw0ZLv^T=Rd_wvr5Ti@Zp~~7Vqj`7TCj8Kc@00V zS^Hd6_zu_N91!=UavC5l!j8BAyRLle&xaOF4ZOjZu3|AuEru-S9aZ*pFZ^G9eO8T=Quy; z{As5lEPjOZ0V5&#B6-a%Z0frv)3N>;eQwr<5`&cDRv3y?L!8qxv9=WDDFxlEVvj!3 z%vI%hK{hqpcyGMp{%mBGq~-cSXS9?u8>{8+Ys8RJx(`HmhI({X&!#=6vJ&TcM>tDZ}i9hj=^V<}=c9r>( zjn^gFAj&|maHi#Tp;i;D*yQvI_3_$~Pa{QUI1$!KG5ju07F#*(q?cMQv{D(Ypq^2x z&0W;68BTbU?KXPH=jFk!N|5juJso5k!K}4%&CJEs*xM;{Ojfc_*p<0a`qL_@dxP|v z1x?c(YzmQLgM}>)rkAwlPrGy@As+%?LyiPiE?TN36ebtzo2d%-tZD3CXQQ55YQ139 zr!{7Bavx50?&}(I#YVh*&KEQCnGciBJQdULjk;9`tgU@wCS+2M;XAr-*fMi@jw zzI=%Go+>9Use4{rupzSK4Kr5q+SEL=TT@0@ntduPx~ZJQtSCOI+v}B+2j&a!M;4W0 zJ7e$LL-2ZOZ5={w{O2RKrBUVqcb0d-MEY4dRvfa-ucoJQ3&HQF9UzBR-9nx(V`^+5 z)Wg|bTr_%Y@c`AqL?shelZA9SmFt1Lx@Rqz1k~xu`pF`Nz$g(_2P_4&^RSW-|vJjQeuhn8oKUn9j_I)jpj@ER(vp!BF&pJS_Lu8aytc9b9f(B;n2 zDO;(TnGSp(*XoUz=v>uWnIfB-sKV~hT@E*u6V)^VM^~7IiMOAHb%yUSkt*sY*cM?C z=x}(7c&YWSgA392l}57-wN91sINiWdcM#C!L$sWpv3E0MbXq>p@kB6UPVgpFcwDmE z*ic8e_r|JAY9l*W--iPKfYoDSU@{nv#!`c8l2Hc7u%l#NpEcb5$fLr$wqz8)I|5PN zg{+7K)xzF#Z7F4Z@L{z#vIWZyVcdfy-^kTuqlHM@h*+nYLKCo}vH`_V8Hw!fHv}1_ z`28i8w1;+2?a_T4qsrv!tSbjFfZPM9iw_KoF1$uKWF8kP0ag^_FsfN0hlzIwlWyfh z!+dUgW@esHpaP2gEaoYw?PFj{Z>fXDzZI1fWb!c#i$tnCnIBUw%UVo`3UuBFj9#dO za`+6g5_}3B)h@Z;k#XCZeO;tvc|+7){sD@9*@7w8J_asYZ0$$^vNq2KO9JjYu2nEu zUmu>e>3Hnl|%VWvv6PMUD=qv&Jus0cfEP8{b$L-HS?})KX55m_kPzYDwzL3oP3{m z{f_TyE)K|9ycyqLUQGVLo%~-fCP9B-P?!J$7@)Yng9ZVY(tvQ}X3#)X=a09k089AW z+teR8l;421u++2ucCY%MXc~v}sV`06TG5x9qU?uv7`?^a0VnKe5T{`FRo&sujr|3LlFKF;xBFL28e%XRNspT%*cQBIRF?m zK$-x$IsvZLQ2gDW?GaS3<3u9`|<*B{QI^1A6Iq4ds;>h~?U1{#DCo|D`!y z*YW}8`$l}<^#{NYc7TKYCZhZX_PTxkGrVg=l)XS>PU^|>hvxGgE1-(IlBIrA`d+y(-JnbTS$Dt&Y*=8W{PL>A@k8(V-%7nw z`d+J%1Jq7`Q&qr!1yCe?uj*IW*RIo_-s!HZ>JJ_0e?b4)QrA}X58dc{Re_Fvb;N(u za9ugaFkkzE{PPmHM$pIcLofOf>>mYvtbgc9-|zxog6IHM$#+2?(^vF=SKMn9eH=fu zr2palD@7j=8}t{e;Yw}>gjIc84d38j3;1dy{QGU`8h;j!Uz*gnJ@zL>A7EqiH&|I& z=zz(P@2lY(^1lOnjiQg^w>|4G6n(6J)xEBoEAYv_EBd~Q<*xny#CCNe{#)GZw%TvI z*B=ypK!DKS)E3bF1ExUV6@A~3Ut8Osu>M}r$Heg4_H~n@4|p;D8=$~@{gqJeYApb# z*jL!s0{v;l{$A0?#PCb+`nF`=vzje21L;OXwTf*b`w9m6JM{AuXN8JrC7;f*n8^u{-GDW_5C_ob_gCeGg z;R|zl5-f>?tf5Xwh=2J>rJ1h97iNS>H-QrN5-L!`+*--q15(fM)&2*Rcj+Sr^=chYb!iZ>w2?fS{^`hht>ha+1IX;6#bP8qVaI$;o z4*Q>9OPV-hhzE0jv-Lyx5uXrBsfs%cMRz?{4;SEHeS@~NYEUK_+VH91QlM#~e* z+Y^idg0E_y;$)5RAn1naQC?`B6HJb^oOlRAYmcqnLY^sg)0RgUC>Br9%zcT5UEWB% zMzOO&>HMX!umc3ozxAqOTy-2R(#qjjXvH+k-I#%{&=>ZUz|Gi4IAQ(7aan;Bd`I+t zw++16=<3;UAb}>=!W{{|sTv;lhWdGj(*++y|JGi5tOhJ{986vj0rZy@Y>)y0%#M=x z3ew}Er(w_4>!vBsUGWL^c1WPzUn8GDsX6MYR>x}ACacEokgisY~@etN& zkCgxb|m=--Q2|t8gZ>k*jOzsH&POo2YO|3`cbfm zr>m20cemAmubDWpr|FaZtU)>YBxE}`mK?&nag-x;GwIf{tOrZ`Gy6NIJbp4(hNnl_uVUU$xc$zC<93r?6KA)`9t;~k9gxmO1$z9h|z(&qfW z>_Ifp$IwBUwcgtDp{cKG(s3ej(_0C+yRs0GiASnHYef)mKBlp(pg$_m7rhuAo%Fv^E$5d=Zn(sq3d>M9CG*{qB}lE z#wLoxT{@tbkNh;sm90c(`~`9T;gr^MzVq6TvWc@+$6V#!wc0GVZka2%*wGfYSvbk5 zxn@G)qwjJ*Cz|FN zY>;|CC%2G0@MECdp4*w>EmNdIEO-n^1JZ5W7e*BO3T;&yD;Fr0g5sIGfoVh?2->e= zrtX+S()I@J;TFpvg5geko0$8yv5n#EXWG;~;C??WC;gMh@4~6TuULFyC&HqQ+S4LIAZP6;--3@|t9l8bSmhMhTX(^QykVd+@rKB6_2I=nZ z?srh{y?%by8*jXS49CDR&)$3O&6#tpIeS{gD?Fn5LC?oCRzpt}^CT#n)Nm8upUm*# zNuyg5aV<~4FSqESm0*&q4rcOaN9Y)uMUe>VBMdkV>!!|iBnT7Fpe2ekFlB+%6qpqx z8sW{y$&a^g^S6*V#VFxCd}vTj?(!bA1F$e$cAAGGBS2I7apKo~2KIv1NROD{k*`d~Cy+^M@yJ?f_hoLqj64Wcec4OUIIj!qPXAA&a1q~2wQ2c?b(gafP37C z;6M~1Cb5Rd%VOl^ULI*o%vz-a2CV~wDTEK7OSKX->{N|v(_hf8C<^yT)p#T8^~2w6 z`7m4;rCFSWO%X|eT{uiljxti*;8P-KW*@9Ho%eQ}2c9OSy`x)JFkry6(_5;T#LH6A z9k0gavb^~C`AK5%q*mb8%Xg;W_z6!x82CD#1DN!CduZ?+83^eqb@J--1sgTX>xXaE zQoU5UnxPh1@-YQA5bxQ zmNF?Bcv%prWc)I!igSuh?HR?04Qu53issPDcmdlBEBnLzhB|3zzho0~4?>3J2P%^A zc)A$M=iYv4 zb}E2ij@p5mu2gVhVz!Faa~{DON9o(lcBU-lOK=hiBI31swn|MUaGLN`g9mqJw-MZg zN#B6PlR?$6Ex(YH?+W1o3PuhqlBwlUX277cE<`y}`CIi|3&S!(I_W~`*#ymm@M0~E zI-U%+2Cann!MNb8%jT=$Bswm;lBhBq35;ipIIqHwk(^uev+9f&yq!XIN19Uv5CwzL z;NokR-?NzIsvf+oq|Pg-d)dhZQtWO%1+B1pbrvNh%g>OkBckrO&<* zdcH2|9TL41C;_MaI*PXQG;5@;Pu7XX@d@@yL}sPp3{PY@t{1+FS;`Q(*L*{JRh#G@Tx+E4y_~?|FBVy9QHJP;$4cJq4!gxDRhA@SOjTvSO!~yh`R?^ zhGp@)7W=6*O*qwN`)&E=t7UC|4#s;Apfl-F=-`jvjWChQ@X{=GLcp6O(D{-pC|r5L zSRAi>Lih~EcUOxVGYIWrS!x_8#M|`&L4h=EAajIJ?94IyvthDp1dJxXdK1ccTMwpp zO4`gw!0RD?`9X=9*7NX=OFxrCF&H}_}t~(|!)QFpgPAOHCR!Lh0 z-q4;k^!A-{cILFIO;%~4JUh@aYo%q*Tk)=NdKheXm(7!d%c5{>PoVU~Bb*(-lh0I0 zkH0i-O0B&~LbpfY1QprKt{Y+mHrsu%6^^?$hBa^vQsCrMeM_miTvb~O-&K(Dr%%=$ zQ-oIt*48AP4pW@OJfnfBG#?X`9E4xx7t}7C)lms zQ7HIlaEcJRsC4NEb%#Ekb$(OuK9Vy}Yxa>L%F^Vpg@W2KZz$Fk)3p}`G57fU5pw60 z6f7m}i1bS6y|@wb+H_I`rMcKXbr84y4gxlkm2w!jNywT3qK`qa(c5H<0TG|tmDtTC z$>}8Y2zBWzhni{)=v`Kj7gNlyCNxm4KE;n2a~md%`zA>RM?pr;dpPPPJwZ7fo!OV# z9=>ia7*UBoRBOYx)lC>DU#+bdQrH9O&w+~co2dCS{%o&JC+-3ClAWy_9BLBy;dS-I*RZ3G~ONYk;~-^ zhLw-JBnC@kFXv*R7BHt%N+GF|wpSzrQVt8A*U>*t+NMnym8^HWc>DNpB4Y;wZf9s+ zCtDMb$7ykt@Qfm?NYvTAFQ2QUu`I`dWIB|Y;))|OP0Z6Q_vTGH|AfS-rKo4n!5q2i zK#G7>I=^r2te9uwmFWwO#DRl@Ebg)AIy?kOO#o{ygPr$GCdw(@!+W(6fb9(J#6u#B zHHUL+iaDd;U~{Mhl$#n=V3=0IA)bL~3$ENHzvkTfGY;I~7F8}uX_?aMx-&!pAuqwY zI(Q7a4U!j~)a@O9`%*O#Ah1VDp>D%;ivGcxvvcd4Su@qb6-F2S3lG(_y8);5EFsXY z3`!ME#cg@@D%e;b^i1=Fc7kn86?Nz%Bt*ts(lj`iFOoG*7y46dz3{fB7dfZcLjv4y zl8{kru-}g8yF~)(X}LYx?9=WVLz9J;U2SU9Jm>%y!P<#8F#}&8-k3SZ^v+ZCy=GzlExFhJKEDH!dIa)`PVwoQ5 zh*x-eK$1x4dO+H}JEGC(eWB{um%F+3#9vf@I?=8t>s79%4`g>mQQ{qlrXi=#FWO#! zPTv1x8Gbpp&jtW`p8(yTzv?)@Z_)VY;Qr5b900>lN%CLnIA1c*e>403b#Cw*%5QUn ze?a*U9p~qBg8+u_NauTH_BV5bKz8#l){*sIlmCzZ0V^Xr(4FO1tP*gEfdAuvxjNuT z=uh~20K<1o^G{kGboGGF+CK{NY=0n`zXfF6>&8I+=3D**3lQw@0y6%=;r~3s9Ki4c z&3xZMaIfL~x6|QQ5#~S_gWs?2z0?hyDgFkT8R%6GWbJ+r`OA^|-}2rMQ3AK(pYjNR zf$g4JGqg1La`u>*??sf~DN4-D%=bzHGs_pc8>kN6H;Vv+Cs=KRe^a*i zyR7?bFaIwZ?{6vv08}@DP7?R_3P3WL>E0{?*vIq*@2^hcUv;to#fbl5yw?!^rjzB% zRq-3J9QVxj*E9s6Tg<)Cao;BdoVW-4(l+FWxEto5I{O0{f1r*3brSzoGk;)>fh{!m zlFWS%6A&pA&?^MkdGRNt|EL+@um0==GXB6D{|o7tnvoC`{uko!>EoYV?BA*!05rD( z#@PUX2Z50T*ww;F$NbB)3ix6{^52^I72+SR_P@_WVQ*I7b;S>%6uZhkD8FWdARq~D7C z8&anGRso=v^#`Q?DDq!CjEq0XnLjTX0e<;^8HBNa{~-NNBw}U!r%2SRxn+r4fpTlr zxc6lKI@CW}YxWcb4Ln{VJf2x7wvxg>9ZEs9#Ji&;xJ)`$gwyJ!kxxyvlh{i(61J@D z?YG@C*a#fT?h;9fwA~YS%ybjMe2IzgS4>=4s&w{b2XW(6?QkUA=fvA4d=F^F_rbXt%7a?ExIBJjhEVE+dua5(x?G2y0y#xd%O? zXvBP86(7AKB;@fVzjbi6BZ9=X>#L|DS`-XVnD<2IB5WXBHkHk-T7CRN-i=R3S1eWrpwPaNPKYsRci5*H*&r1wWh~9}--R#WCvZXC-$CM-RjOpt_M{$YNvHo9tMj0kQsu}yQXpWbTNx%Xka3$VPi)>f9^ze z8B@-@lyeZmiJPf3^TF4-(H%Q6J^B0;_m++vGy572PSEJ8SQUCq$=pjjb9lioJ?JPU zb?#9KdN{iA`SMG9Z$%6t3)~2F;Lv~ghyg{q+pTdWyq^&$fdY)$ibhslv^~6!@Jd|> z0I=d`rC?1!>h>Cx|{kXYs3M zdnGiE8HSrT1o#5(MIkhsU++$=b8jBssF@lB zkq;S@(c(4i+@McuCBv1(Aa7{Eb=MCgj&ly7Y!wQ>Vk0VW+~@G@Z{K7)&(hnkeeNWN zpZu_)w!r!N8C$JKKhycOD%f)7rVzBbyMoL0O zS_DaxTto#|ehG#1j-h-^_eJu9(dEKkuXW;1SJ!IHnYa^w`4JKcr-!Pb(@~iU^rE(% z=)=kF*r-U)Ef>MZsz-=NEm{Vj_6f!>PcuWF(jy&%yFT8JQ5w7iks@L(lVw5mGJe9?XVJYd??O2H*C_X|K@SQbsL!V-y`lNqM&t^jwkrv& zR9U76IC(n+nNz94k5bop{Xx@uA#g){&{DZ@acLnLRaq+FF~?t%+)4_RRb9-eea?^d z8urDMA<#cCfzmhJRNsI!bi@Wz9#tYo(c~&yjvk*NgkD#+D44S6574$RethRnD59MF4XM#p)q!t_Quq;UJP@e+E((7Dkvc&^s0 z0IFz|=vT1-Jl#A7Jh*J%*$EImIsc81kC+Wh_qPo=G6e}7 zI?Cw9JDB$gCHxPG!8#gKLAla6gfAVP{0j1r<;4~2C-Dh{7#-ut$n?w4AV=dg%DMtkiQZ9u|EtQDOrIe|A^ppoT2_n4}ilw@8Roi(qnH zBO)KEH4KYRvGgoPF8i2t*I+Nryewcx^%x^a@{6)jfizpWt2+ zxFW03dsL3+rkgCPj-D~NQewk^I?V^hCln+<5`>y(U{E|VKPdb5>4fESBF>`x($d8M z54vyGDCJ7ETd&_|q^Fp?&MGOb&C8hTS8>*1`y4P=Fib1xEk^!o!uq)_gZT`(2SFGP z^cYq&2N>^&BR{j}6cIhw=}zR&lI+IQRI!rJL^t?+(;KZc`s~W+T{0^JYDz{f<(u8! zO|vv>vpT+FoKoWvFt)3Cy=>tN{2pG?E*)Q&2%7Zs9LL8^J~Wm@l!aX<3!VBje(L!` zp2wTJ7_PlLlTi^T!T~P~4Hqi3o}>W?tx91T>Y^i3sAP=84cFmer}4ZLI-b@`>0qZi z>_JyaMOIci`OgfI!Rrtje`KQOOLb9^xr55GO7?u8UxHeDYEK!-w&3r?xbpxvNWk(0wpa_W| zF|iH?Z^F^FAh$x5`n7bO1Ww)_n5%gQkFTIEG|g+5@934JkGDj!$+ijx7QfCL<^ofG z7aDF;Zn?UBHiFMjyJ~{6&L2!v32jA#$_!)45iF}Sl1L5l$ty2VpOF|Evv$5LOupo(c#8ujY)l+2+gGlsG1}|rQMV_H zY_Zt$>C3$7IejmP#Fq&#pS18bd4C`xl8Fc|-48E#H{V9>$63~(+7I1&bEL+B33kYf z=CUFS3eC!X_QIaxLATHcqP(q45mnRMCrUU%@ceKwrnw6|vY;f)azkvNB|GX519=|V zQ;Q+eTSE*k`XCw-`46=976uy0!x(>iE#pTKMQ_#L;Je?3X=_o4LR>M_w<|br%l9gtrwH=W6NG{gAtzs}< z46|#S*UtqQ!6=x8aLzzLKR*Z4v;e0gqq=Q67x!(`nUT3XKQ@Q6c&~VyIPjpu`_|Ki zu^ZXsWso@U44Ph{X_B8_+6MkKP;sdxmzAJ)3__eWY@Ebot%)YGn5KvwM`@XP?xU_c zUISl9HyV`c!v!;ly;0iU)R4>1StCne;-uc>L=%zKe4;`TymR3S4_cs3pnTSlM<{+C z%bF+_l}P&d}*2m!=P5GjbHNLHtd1eJ4;lY0_S6QB#ygp6e-D zQ$mew*(lzT5(&YLz7T9QI&L> zKiN9VPG1RMt1f%U;B#0k%@o&m^z4d!ToR(RL5Nr@EMXmkG8!0W`-F)~75xM@qck7k zw6_Z$pg0B9L}`iBF#l)~0pwM>pdH9LIA>8_Fof_R~n35zJ-euw0112YSWGLR0{JM1+x=4NSWX{ zR={g9NODl!7gk$ZMhc_*1CK8BS~W;P!7^peS&0$^O3WlHs0X?TC^%2aI-~OJt$En7n#ST`9^0KVfHei*_(%8jPU0X4CH#3IwKH7j;udFjz=t}UXrjw*$<%Q->ghtOlzCL`-m)0BZ>1?Y}LoO*HO9u z!;>i^uaAk3Sp80CmB1{^!K1|N2O_+mTL@KeH10yi&15q*8x^IC7aKo7X7x1e$~YKw z;dfc*A||KF)hrOKve-XPLl^kaAnT-`qV3e;Z;)eZ#ls%UF0)UTG)tP?0>fgw<--HI`KMewKhp+11)eGKCd%WL!#RR_9-Tbik-Rs*BfrV#5yD!QP z$oWre@U3}V32U$`?4NEC>m7+fmL*Crrk+ge`-6|#%5UN4jXfXen|SN(*E&Kb#|>}G zr_gW9Z4BpCx&LChwT~7{We$5X#zuIrXaWRkgo`%~TQESLf4u`!*jkjTlM>3hlzEn2UoC*gVVH->#av~{h!iv#F?g5Ipx9I-TjU8dDAqYZ)8x-v$ z3KZ4&iCn4c%^s@^12Q#7!>tt`1qL_RA&b<|5^Vh%ovg>~-q9JOspJmuun?5QQH@?7 zwiNY>zq8%X_1?BmyttF;&|1^|^k&=MC=IeBF$e^*kjRB#2^Xn^{GheW!X&O9k#%Yg zbmsj|aiH6jUGeL(6Q*)mio@8UMq_MO7MW9^nJ*3P=t=2W4!pJ)I!tNh1>1niDdqDHOOYw8U=wgeZG-wJAQPcC=0zS zRBbM7;zmkM+OZ^*LUDftH5dOJYR1|^O5muFn8h<1frTWZE!d1TVodmqwG>R?Po!gr z;vd*Ll_+?U43y2wny`9zw3*?ws3KsH9}!>-#Jn$MOlY?AU88X;ypu$5;Y{b$v39rd z6RY=4!Xg7^Fntntp%89_z@Q|6-AWnDS;oS{kH+O59BEMlvm;8UlsnF{LMbWzEb-xm zo<-j9^CMrxyjJXCNsrRGas}}&I+ob z-J+vThpJajpY1ORqZE~~RpE%ex@g>MA7rK3?7fO^AMqz`ibL>)T!qgnfTGCnasd9(2Mkno zeoB-6oPGY|a3XMY>bHbG0EiSg;rk6RaP;!a!18Ya{}t!>wP*K#!UB*q{w)qB;7A`Z zxs(-1HUZ}^?)iESB32-;_v;Mnzv3JL-?7Vo5Ej_~#3$bma|7wn`;jCd=Lqy92lh|1 zFx~&-uQ zOY?uh;{Abf{*NLDjI0M5_A>&-E)Jk*19a49`3+b9kFo)N+MksT;5*LwJ3d!f_}{7Z z?0@2%fn+lf)K`d1>Nv9>+d%6yT{^BoB93w@Ed-eg^~H6{Q3y~j^&i_;j7oREg(0KFiv7?x@G3AUk_KC z7D|OrA~-u*>JFe7qJ|m}3X$2*tx|%u=Q#4$fa&4vy)}B!unYlh&3h=$UK6i7Frzy#;RL4vDP)O~1d^4l@KI+vS zm&?ga#Wo+k_W5)>pBM`4YAFMJRTvF4=^3cfD!umgC5w8k>%r#YO2E<{xWq*3@e1tr z22)e>gIgQyq5ux&2HxO_UX)p2vNIhc&{ns;60h!}i3>*9DtgbQp)}xCt?LUItLv4O z08qxaDYipx9VMb!(aQl^L_3{wuPly)MbF9_y{ikfH9-&_2ntT z+TJV|j0obnqO-_z1t$`MnfV=Bcg5`nEr8w-ru0D=)v~F16ZH#Ns{NPQiQbba)!yaL z@HrsB>ypeA7?sPPiB%*EG|5k8BZLDqWswnwL^9sl!Lh)+BuzA)OpO*v0sriWxv|1~ z=7D_G$>p!Ju*G#<(M4W)jt%uzb$TMV11TLbK<(>L=$19>Qe(AXE{^XBKJBGPZW027Pq{ zEILSBFZkw9bCGk@!-?SJcQy3o+9}Y^bCJLtKasTR%SO6;+_({ZGL0QT%+wyv(;Pr# z54#dGM)GJen~8lE*4+WoN2}a{1%;{p?rM{?s>i3P78qaw0UJq@p~7OIP7B2|uY zJN4qzDPf28 z%^gq7C4xqfJ;-#t5C{|2_7r1S=4U0?xdU9uimDIzL1)@Z$QVej-hGPgoeyd{g(|cT zol9F$$Ty`5$==6JeqPJ3a0Uk7XdRTg_Q(XuXFAHkgVPriI#H#4ETNWC5(V1O9QqhY zff*ngHhaV8K?@kY?qKP;0L32MMSgHFFVU!r%O1)Ps#&;O_c}VfLsp3b@i1)s_)&5c zUvdn4XZNB!M1>jvD=>3(>%l9v`HyHU=au*y=jhxA+q7 z!zK}>BNmL>nmd7F-eo#+i(?wD%PELh(Ipl()BqGeY4~6q;&bQ8+`Sa5dM=2%sU(8$>{En<SznndORS^4rE){ThMk*^lquolRalRkspr zRKis+1%MJzpG&5fQhsyj!{@99OcbmF_9ygkZW zHf6KyM4CPkOPK1Me;gf)eTN$6HL%|qg0xYiMr|7p0X}@d ze#JiV-i~$&Egbq1Yq}u%NS>h840{xrQrm?5Me@`bh^6{6bAuJw7y-|7(z2eM6*cwc zXh&xJ=S`!#M*(iT8r#)0Z(bvjJqZp6e_7B2Y-c>RsdG9Js=_0JcwJURTpD0!SHia0 z-QoYnu)I!>cH!pW$=E7u2Naxd2gqrOp=M6`i2Vvw z>1-hU!=rA(3Xl*y z2lpaItR8Zknx89K^wsNhH}KK#ba%q6;NUnI49D1{KrLQDds*Vq7L1iavgcl`GZsB1 zPm5^S$=e?&rvW{tu%X*Eux5G*mT9+OTx?25_Hrl?E6HL#PZ1im*!n|Jm>2Ave+wN< zw_jAooCKbp0?m%jiBVSw%O2CfRx_BQZA9$LDpJcniglT3$-!ZBrRa6m5|-AF>zSyd zUF36cMIfFbXOfUe=y375Wv#g*x zACe}X)miSBMx#AK_)YF(mBCW+xSET6gKIA~xel04Ca4%&-Dq4}RMmNMoTp-N9>Tdu z!^s*MN}DQS&$u-&Z04g z8ng%<=p8=-Et#=|B$(|=myc&}0%L=CmWw1mLc6ciL@XiYtIDDxHp(*Tz|04)uJ0`J zQTLsH2!?aOoK&V^kR)RMI}CMN3?&t5!|i%9b=~2^#4dt1@C@-~)U^}~Y`M=Vua0Z7 zc`>!ry4@)o@oo!kcRuu7d`vEbO^GK>Rf$$^o!*lsG`#7<-C?5J3z@*76u-^@pTMdY z^XRdEpX356nNsoDgPaVZf0_#%yp35NSK-XBkR*kM4Yn3WLEj|u3`_Y{IBQjYiIC7x zZFEVhnjW&D(yWtnT6Sw+>X38HwqJHe@3Rq%QvUc{s>hIvrGql9l);|~j?F@?Hq-zR z{2nf7umCq$f+s%6QPA>!{bV@1*_~UmMLy-UXy*K{MYIi~6hdX(+n;=j2CWJ_|Bzn6 z@C-kS54xvS%GVC^wTym9xYB+Nlz5!FlSuj{dtRpB-cnGmvb3~vV!2nl0lG+_qGVov z<$-|QT>9*hjMkG&P5=T{T3H@hp}O4CNp9MDglo*Y`5R)jW(-&}~|(4PZ;Q;5O=g=Sc%_QWD~sQM71 zqWQwY$L#4*Gk*T=A#Nn?V-qU$$sTQ|E~WQQ^8jQe^8^%OUH8hOH`P|TT3u8%kNeiC zhBZ?h9kEQk9umTC7rd9t^IBT94p+8fv}Jv`?bdbGWMxC$)CDQ}=G`+a5VA+-VFh?^ zGdTjcjLx6OnzCnN`<71NwAtIgJ+{VPA*{~G8ElTPv&O{uuWOt zfmjbWU0#Yzy4aV8Z!h2W2Kwvl4WRF?RVh_ZnEQ2)oxdZfpo8c{mquS1Hczh3${T%A z)EK1#dS>S(UDzk>UUzvAq0xR<&G}La)A;iCcxR&@Q`zof*YoJ}GL)I>>8I9gQInD_^0scrXv=%@s7^v>J*VdvIG{ra-)0 zF9f#Klt4Yu&jUGV{p2N$EojacG#M6*id5UI+q2NvRGePhTjXwiZz|HGZYg3p_3L8Z zme-!hpCM4J=(E;<7d%|dbpr8t57*lX@_0m4`D~%|{j8`yt+pRVMPcNeE}gF!^r?PC z0B)L-8l(1Y@}q(Yshq7#n@eMatGqb}|H{0S_)p@^Y2&Q&yJ;}~Sqnj~<2mnSLo@WG z9}{C_F_WRBT&F(Eh3KSbMn?gNRZi1Em>+ynMs439gvKCLo7dvac`gkvCuh>N%DR6I z+r9c3fyK<1`i7qs9RNRoQr=U!B>O>9p1_M$r!TMf`T;&lkgqU4TQ@@lV*IFrs(Jk2 zM|ngvu4)l^zv4lmC^6=}Y--xmUHuS7ltQ`=6KM9EFnbrx;K9v9i3WD~>s|pSzbvq_ z^!2Fj9uV@(2C27gFV?^^>biS8_`^O(#;D@9+-(6$-5>#yF%$JF+)rav8ARWwQZjAn zTW1}@W0smIcR}EX9<~yEe1e3VQ8s0$)61nMRC0Ax(yjyIqA#E>wo#gb=1h4(c7_HKWkR7nj4x z8%mc+yVfL5KAz%Y_@>I96ZB*H{EBf;z=bF&3uJai8l0bcGiz-jjOP4RFRl^WiD}wa zY1blh%W>TMtn%EmY4VzRY{is7hFBI+Jq*w35Z;mD9&xXB4-&) zLb}4fjm6#unZX2j<(kTM5OS>ytr6sBpUPiVL(HqnDw?F8wz%|&VUo%qSb*_JQt1^% zxj1_Gaga@~ZSa$dIzIrF&G*{|-6cvNdKe|Bq1sfJXZf*Cg)kM-!%`!)(m8oEz)6tg z1|gy;uul(0WTH-5&|kzUjK(N-V+fU#G^xa`?V{;@dV+3;te#qddhW@g%B2B8I6g#6 zepO+f*g3@+dl=)1p4*G@JFPHtP#F*;6(ul)RY28Fxu`|sv9rGkM}nc{!r}`o2P*oI zd{n);s?KcAW(p)9Bp!u5YyLGmldIATLgbeBswL|o z17b$}GTfRSmJ>a7S^X4w)T&mK2ozFk@{?*Ykkzy31O{yjfWcL))n;Dz*-R{o2Xr1- zZb@!W?Fer$h@H)@bT&H9?1Vbk9ujQGK&BIdKPKeCB7vck>oT9#-L8{g{Pc9vN;4CB z)yLw|38(h5p|H!$rNPA{sE5MPRnJbY!`L%XWXg9wXZqtJ<#!LGj1HZDAz*y*m;4PQ zb?;rn0HofTzBKp)O-bm0o{;yw)4w5N@42@BHcc}FGi86m-7)<@#M|gP{yy~S-ud!( zlL-G&S^&V|10c)I#(K{je}(;PI{uzG|1Z*?CoTiKi2vE=|1XK4!G&uVyuWh*f1__yaZnpJ@)DAt})948R5q(F6)bK!J_pmqwpI#H#*0pcEJk{Fg`a z7jfDw_ci&u;{Y79y3c}U0_uLiq;sZwgD_w&EN~)<<^T0Sd`H>;&4FO~G8Fc^`w6Hc z+|O|UnR{UUe6@l83j0^}^OsBf-2~FTQ1r{H|K$?@K^gv5`S-&ezzpkeLuX$;#;<_? zUEy>5LvdjF5-I(g_4{^4?>8KnRR{p8NI(-iU~$v2{YD)8n`@K#hl!(KF5pjs>REsz zga139zg8gt?Cd`z{MBjfSx&K|+z}A%HC`Ffvc41bN3pL^A+jHu!HZ>%tE52KA(6%B zV2qvA5}SQ`DSQ^m_VihhxnCfjyjDJbOgeMRg4Jzk8bOjlt6kVT*u!r6c5K{u{0iuBF#S>JwW6ikugI*VeV0G9fF@m@C&?i{ z;tefM_drFr-h?ETKt$xd6*TgNv=a7(Y`4Pp>ol=(di}_)`7PZ1t1eK$CB#g_jNme_ zFL{{DjYN!g13rN(PW;_2KDejt;?-=D!SP;;CzI16p)Vwt4N{Yi;+g>J7;`5wuS&?^ z`S25O>73lx;tdI#Sr1=GP^AObeIv$+TAxJ6tBb;~Rl39Oi6SKKQy&F=(%CFFu@2@V z+|MJrJNo?EI*DT?09I_NqdCe(f@(hp%_Wr8S9gdt?@@cY&T+jF`ZL`)bVmts0M3-r z$GG>VVKAmh4JL+_`nf6T#8dqx-pKG7-az#sa`Uzq7GgQU5zS*Us$t(MbT;J>l>zA) zN021!dbgMd-(%Fhw_9(569-v}t9jf)Zp z@i_+#B*g@2w>2M9$HZ$Ama_Bd=9H0r#@IT+r+DWf7F`CeXIu-_qeV_^j)O$h`kT}G zn{QGK&MBaMxJXlyk=Z4*7o3tHp5aluwJek0m|z})3d(7-JZ_@k9<{(~1qK8zPp5i_ z5LI>vY@#r`1jX{%O31f5UV&m$4(cZd$9dZ6RXWtaA55>eQ1tI(q!Jud;(JC_uoPcrt5bDvp zI3a*Kj}Lx>gwdHnNM8`|w9^Mk1)K-IDi2kWc_*9YV30Pw8C^vlKAN~O>i!tn4>I~_ zj8_8AvX>=aAs-j!oW}kU^Yo?17wV=TkxZVsa?mP_KtEsCNOW`YPq`Q6t9 zxN?=zO^|m+hDgX!)Skd*X&JnQvvb95`mrB-m4 zo38lH&51uG9>Bc7baiirsEx)I)c4i$HKa6RJfEQT^k`N1gpXX45EVr9hB`19@!=CN zeXvVoMR&!>wG~T?YCA{Ms?kfvj`@B^v$ckq*ZyyY*f$I9r%V!yHphZh2oFVSh$A6B zjgUq^*qfcW^>LfjR&kgpnND5NC#sTf$u0hv^&&tWAFQF<%dqQZ#`RpFR80Zejw-xV zOKN6#MTW(6MIz2fOXA=I`aHw!D}*LXCa9c5}_kJ-b~ zJZNF-&KSh#DWu?=1XltWxx>X`L;c#X0rs7uZ@4%S2|$xWMoyb(T9H-d(jAxSC{g^? z*=nR7I<0OAi+M9g7J@6So+fAaSJn9+OP^C!X_taHzz1D5XDKMKvN4UOecYV<Pom!;w2PzEDaSBlnS2{suVoBs|&FN$tt}ejppDZn^xYLUI2)-V9GySl&XKxUBK~>rochR}` zhK7kAug7}tEUC9B|GhrB3xw;_1HBae0G3E?X&p05{ZR6Xm!W9g*X1pJ4{VEB1~wfY z!swcyx?vuimhikbdA$ypSKo%$ct~J5Z>wkHUVHl*!V(JeoMSj}zRw;mHVJdE*-SI|NPKb*L@{LX4lPZTeHcA!e6PVjsGj~ZJM`+A( zhFl!+cvzkQYV&NL;2s5OuErTLy*Y?8S*vIHQZEUMU#mN_=2UfbO(N0g6IQGw5UJ$1 ztl`noZH*ojsJ~-k0GG7j^Q>s>uVVe|)5+Ab4zp&Aeko$ay9d91H~er;x}=4*_Ch1+ zb}Xv~(v>UII9yGeBj6LM)Hdu~DrhC0xEFM#le-S2&I`-~>%4_`k2FCPqCWG!UWrVU zdR`a5L|h~wtU3)_GC>Gpczp0ET&Sy=ch#eexXiBkEb)piY+EWr?97N;Aepm6 zIISm(qZy@$48V90Ai5ZTwD=PD#ai8hg=&DZGBvE>ke9?!{4k7eS{EWhg#?k46|~oZ zr@hz?sEXyrMEa;Y$iq^o%VIgJp6p@gTMj^ATA_5o2d8*&m^0?B;Wf zf)^j~D-uh=V4o${nmi#0i|<*jT&m@i5v#*m=EsQP<+-TI&oEqk+0F6Fb;vVI1(lUH zv-45pg!>s*WNjF|41W2R6FspT5m;aa_)MG8I=hP+n(Y&`C59%`6nfsJi<542aX0XV zu#Fkm?n5~ntq{|CPburSPdc977)|ru_&7BkCAELn@4;K?^9Or{CQrT+LCc-94#~Zv zCO;uS@AKF+&Cxgaqo}c?3N~+xz=7P#?Nzc2S%5F|BfrsMXottcBDO;@?4Gz;8BTTNnO4~Ig z;Q$FE7IZ0u=aW<$U+N@j^7KRxti(m{E^hPG8*Z<%7dm8f8Kh&8GY$s1QaMyH`&ee5 z<5J+*t2^adMB&;d?Y%Cmb1Y}bhT-NagV#bZ9=AaqeloKK`hMU^gz9g7(&njikYlVD zG$3XXJC2jRBU+F2>0Ekri8(M&Lyozw#2XRnz)iGN(gBgbg+>bP=W)TF@yrvHj_o#L=S0Y^eT=GO9iV_t| zzl*9U8^lvv@k5j~r5N;+&`}{KdvSyf#mOcCS9P24Sv8i=c8A*+@)2T@7!nl}&6sf( zwT-cmv}U}miX)VeM5gkr1*~o5il5&f3HRn9&N8bRyX4UlZE zcR=Ef@;@AZe7<_+qbbJHzw;uPxdeGqrB?hwdtTJ-oW^_rt2iJc6Xv)AgC67B8l?kj z&S^2id!OuG=@?mVp8Mlm_sr)vD_&jhs=R5l@c5Z?hu3RBsh@<_9Z409_43V= z+Uf?E3RT1zT51fom{Qaa5aR@Q0(Vp(FmK1L;`0$s6up)e!L zb`#-We3>$ZX5mgnr47|;(l=(6iA^wSk@sYnN+9E|7>3WBt?&dh0c380mq-+hT{b^_ z<&y7ojUD#qOcAhQ@Vmdsf6_wr|0OR7!2BKia{q<#7vTXcz~GPnePj3ux*zg_fTQd{ ztB>D1ru^_lk@4q#1%aP5_|KGspXV+Cn15hmez}f+AYi@{MXdMjazK0QuOSRy!Tue*pNB92 zn13K(ejdWW!uSWq|6r ze`t{Wh8I}mKq~8-RXEER^uGlBPa^;ziTo3ulKBUk`UVvk1_os1|8p4bf&U%WpWDU*SiX}4zF%88IYn6oF&SxX zK_La9rwT%X|2n&Wc$vPz1+v7zc$9CJUMye0{}S*0Uj4V&eqrgw^4-()KfJ%P^kM-< zz5RAkzgl|TbJ;+Y-z>fUfb#yX{to3&uLPDK-ltz%dI9aDevc67>3*+L+_$^~8@U0j zzzqj>oCA%3*nepR^Ut^G7neWFcW=}ELjLOV|HIS7c;EXDG$8_Jg#f8i0L#4>6%z;0 zv*wpl72}s%@4qVu;P~ks#q!bHfs!t>oUG zWT5f-8SbOps$(B6tVVT|Ib8BYm8w#9&?P}mH6*jDAu-Eq(WA(g#i1-V@$~A=cj$rv zaRn`UrMdMVa>tjOj^cVRIyX(iZ-B~SKU>_$;KU{SmG%DO^U|v7^R=dhwXKt;nvso* zmFKqZ_AmEu$CB8rH}dlGdM{V|U-fC#I>+414U>aY&o^Y|yi_tUR0mL&2tzAnZyVhl zcWNgYM#&`Avb$a`&r>IUoLJ}_Cbu>YJ;+zMeDzqt!6_xK!Cl)ptKt&1RQ~8g+s)Qi zmJIK9-NoZMWf!ZG)Q-Ct{M)l(@((BEw<{ar-YB0hS2O9oH>Qtcc3L32xA)guwB%Dx zCn=OLj_TaUyRB<-RdP(K!_o>X-J=D-s-0hgA2}xMMY$v`Oi9(#pY_>l?Ikqx_0LZ| zzEYmuHcXw*wt-eHDM#oSnRm#5QR+(Iwn(v}ewsEZvMWAUm-lQ$(npxgx`v9w>}i_X zs$r(4qU6UjXY4oAW{M^Ldq$JFv5JPtd225Xdv8dTT_!3n+%w?kZeiUmN85F-V;qn^ z*3om#t(Q-kgWs`pbe?%v9mv!5_P;+s-%^ikB7bE=8*@ZavL|bqA~IZ5ueqi%-hU@` zhi#{}$M`ub*`P(?BWguqSz2hXbTySwtN%duYzznINbt*qsBwI=3i*D==?a`#x+B7#R}${Al-ANII1w;c`Rbov_sp!$y67l$aC z1kpDUl&J*^2sQB6H@Pe(lyxqmD&1IVshyJh4OO@{a#t1>@ZS_y9lUoTUu%D9v5j#1 zvGa_h;`RVFS5R)4T$QB1pq|a;=F~6}zt;17X{Vd*L&>5pzxRL_a$&GS14h_;`8P@0 z+8<7ss=3Qep6%QuHd*x_W#|m_ylv_ZJ9tdm1*nO}W&LnmK=OIc?7`5SGN$vuSkmZv z0xacgqdoH?fl{mO%-|F!{%0Q zRd-8Q*C`9kYqqi4P>-_)PSixsCoaHEu0AeEYLt=?>27rgA{<~|zRMxi=$FAoY2#p& znmQc4T_T-&ZDPzZhJqdE3W>aQwdSK-=0b19t8HbYHD1GVGHkw^&g4b{&tm1{l8a~+aE^*W|ZOJ=uZY2??c=n=|d`4?g473w>Q+*$oxH&lF{Ebzq`p)^sRJ??w2ciUT zfcdp0{%0vq9LeSAeTm`j5xKZ<|glv54VsGN4_kFp?oQ`t=^xWn|pOWx`&f>$tV?3NBqof=^Qklls3Yem{ z3KL>#rH^l#*gZ#cO=znpi}_)1Ff|~&TE^@LW5F6-9ak?t1kqxwIgIAhbIf7wg%VYAjT|u#sHpPUo-_#Wx0oKjoPGv@aAV}A z_YB_-@^;?D0;BIW||*zLujI(W!fNq&?$JH5}XTY zjm{k?C1n}`K^_7T82OZ?zdB$1>22T9CwczaQ&E(VR8FVX4v^|TessML9P zd3cek!C{dDBrQn{aFQi0M`RqReFt9~78W|8B5g=fA2{KLc#U0k*>@ddkxLR z=FaCEJHOQCZJb%KVf>K6xA@tA_qBPA@{p^O3Yzbj1@EWcajAO`%+UPCwtz2Lyyb0d zI;CvI?mcTly^l#LNPb*+Euy~oWN%!5TD;<{#$ylVunj>?OiR}gDlXGhX8GI7P8M#H zdoF1I?YR9n&K6T{w{O>}OHNP^wms_7ztAYmF?;CPrclup&lw4yy~r5}lTD_+^}=%} z4-MPpCtT~_rBe~t&t0J?;pu+z(7Idf(>LoRENTm0iPaY*pIH9%W~{Er?$a&d`zo)V zC59Tw@2EKTA=}<)$Ajny-9~@UOvhFi zrN>YA_j`uElBiKhlCEmMd+B#p9V3GZ>r}Y8(^3n=?}p7^s|wAf3|5A2S1|luu4rXC znkMbQl_2Z2&MfZ6s~^cW3B{;aj~{qXY{-<|^*BRaT`5sUI4Ij|z2&_vM>o;mO?%$7 zZXw+_nkI)~=cz~i={$4o8wb}Kzm0~osWj>A)MJT8Dv?MA=ugekZxPT;ck4+RmWX zW6F_@&ux5S7GWC`?7^XAZFwnL;P8fRe3ySt4@l*?T)oQDAqCrWe3w1)+V0k>M@}Y} z%Tjb&>=k!hn{fyjSGy*&jbA{0>&0#AtXcuxe04A0yml(MqjarZ_&JaIqCoF&_4$dM zIDt$~b}N2efkorX$3CsCJ*28$XWQYxJaY8FdOPjTltAf@^`2*GZZtYI@TGZhd!Bvu zzN9lh`>OlBCqH#;GCyzr)z0^P`QaAhr@~vBz8-n{lkWTNjuT~PZ}k{)g{G{V<#WFg zkv&%;G~MEp9CgX^HH)6If>P;9QmWbb1?BXkuN0GQWN2I-+uVCw@OpoUho(}*M$5%3 zr#A`;Glxv5T=0D$BGyT?s@JWhbxdOx{XwEj|85K;Z7)-mJ_T`N}Y+ z&hX4~H_<0@;sO!ddfv#lyWOzVFt*s_r3d zGw@}bazY7!BZx^L6?I)6$Z zO1Q2f^7P8!@AzfDTRSuR8~k@T_ufT5+21$f8wv9la=L zgJ7sjkZI@2%*xZ|Z9oFgnAs93^6GH-+P3HS6gqT|gx)YT_}qK(iRKDh-d0Za%Z0-= zS2imNFz6%~b$1+n-r{WWM8;pBwnEr#Bg@Wv;qE=60Us_j?Uwl&(I*?f-6~A2h55Lm zfpVwBhj%{?M~z85QV*+lvhX{{kpXP(|8e)@+37{FT*%$V6;0sTw^l{1ss zsooX2Wy?o(Mh2ev#^)i=f$ZbE5iIJGv8@876B6x*C$M4Hh%FwAvK56ud6Eawf@Dbfdw6OI}=} z&d&;>*93Hd-_>QvNVMJJxY`&;-*+&nac|SJe58-wt&{PoPKs_aw~9x7LbN{b$&A10 zbKG`2$|F-bfx(dKiJhaV$kX4lZ@DsK^B8%@?Tcrrg%F3ozIkSSV7WT!COl(L0n=y{ znCIR}&Hit_FuD3Pj}5yDG#sJ?pVQQm5A&iuii_L)SB*6DAgs@cb<| znQFgm65Y4kApZ$7>v%BR_1u`v!8NyqSU*<^&|j{I*5AOq?~;D{t^pQZvFpKC54yG+ zO{qpcv??C02obd?y3SLev+^3@M^x(4B zy7W&p4%j807{hwK?zqX;NAX7l*?!1q7hM@Y^3=l@)y;QaB^l?B%a_3}bG~m41@p=eyopS0%LwMDC$U-?ZEGx>(Bz z*5gmz>tdM#RbIodoc}qsaZ03@S7XE1CqrqxR4h`@o@ucSE_X79K5sAeyb zaEKS{?Vjhn;#p#?Qy<%AVqWeSwPF9N!Ski0n69o;Kdm3x6#cwwn9+uD{f3#)uPTp1 z!g|#@Q$DHGEFO8MS)E(mkGyvnh>$k=9o0zplrQ46;~gB#IeRxMcsEjes~uY!tnsUv zEHcHw)4bCrTV`Aa7)B?b${6hK{i9rE+!x!D^oK3NX5U=6J;b-$*nU%RjU8{FPs)G` zW3J~dMA9uN_uFayOzgKGZxQoY)UgP^4*J<6ygB>bQ67EIh6$Jb`7^I4iIwH?-kZT|vs`r6K7w@)cLa`oG)@;f$gDYi zEQ)$B?cUa%6|@Rd>mGlcHw%lPV&S*H^W*w>lWmZCWP(t_fd{=?cKf8ftXeV=Fg|tt z-1O1ML9bKBllH0{zcaH|Z(~cm;mKETj`ms(&1B0l?vwlSp5-P_Wb@@~%JHlj(cG+p z5upNy`3?#n=S8Npt#FII@N8P9^X^R3N}28NPxt&Sk$C)wvhsn=3HkRu=YPbqqjZpt zJks}4Wpu2bwCU`ik7?7{y0hbJtkQ93geP z73ZL026b)vr(dC;?!G>J`Ps1><*#?NdS=in3=TAYh$u(?@;d+lVoj?n)?3o$75bk91i?uXI{FD`1#G!-~-o| z*@REWmFx%Z#};1}dV&;^^$BZjk7hSDePD2X%!v*zJ9^k+TFpu1be-+qtad)0tGCy* z^W0`(Hq|VOI`gje)Y7ffd*x;GPwEUPruXa_UldWg@as-PX}BqUNOS1nH|;J~#}wf0 zeq4S}b_q`o?@X|JVE*7#z{s6lVY~W{dtcQ_PNKRsRDUi`>d~~;k&MZ!l8iOE(_1%2 z8ENiVf2PYK|8b$;Lso;V(>mX~4%$V)8Eem<_AU{8z-siy%m0$Db%MQHTlr+O-kE~+ z_K#LJU(^H#3O;!8g_0m0>)gwAJYUr<*Qvj33*v{t6vJZr*$Fc3lV=oyEMo1ylrV;OqJ)4fstIpv@(Vos%y4k%ZDpA zlmgdYns8dGV&l7K2h%Q~WH)JDhhLV7O$pug#$z4pS9iI_ykoMHQMy8q0@#qv1qgCo)I z`9~7^_kUB%lTHx*MGIW$vvE3L3Q0@;@5U(%PFxa2# z5fD8sptM)iC^Gpi^39dOV;$Q&J=xP4_cQh-^-GR^hcl;5$XD-YOxW4~Vvy+?iaJZ_ zc&ib=f7*BWk(IH&>+==glXE?~3Qwl+^EqZU1ew4--Zt(tJ1zV!aB-xXJ8G*K zeHS!oO&?R@%gm8J2;X(E#1*)?s7M1<1y+uGm($L7$Unie633OnzF8ym<^8)Mg~sbj`FtfldtG>O;zLSh zy-LJkg1N~s&hl7rt4IWlq=kA z*Rw{zU(p+cNX_bqJr23LeX74LBluGtQ^$8d!ST0J_dY)7e#Pn8W#=`qf!prfB6rxR zSLKB*tv`M}U#{D*?RqqKxg=9U68%J>;;!kBE#XsIqqW~R=^SWqJYlub-CQu#OE>wY z<0y5IGj}Yb^r!8tZYtDDFxBSYhS#rV>l`fn@RbiW`E%th;#H>NmEdX-a7vOBf9|*W z{I1}hRH5Fp#9Is+T>_yqU2>Kc^p*8rnTF@D1Vvtr+nm98F_bCea2|__QvR7&@H^65 zU;pH+x&2D}mE`M%O)%N%t62%CrS>zYy7%K=G@19_P1BhsoZ^>qYdxo&r(V{#r6rpTCr4+x`_^5I zc)38c{;Bc6Hg?{P-Y!4JKV7?2(Rz2i%hsgm%{eDpf7R)q-@&j5pPD;%F7;7=kC}aM z(vP}#CZTh_ohgU9=A;9p-Mx)KA!FS`846% zuw>8`wZj_|UN!X`+vkZ08_(?3e%hA8-JkB zKGkQ>xvNKWE7tf>MTA_q`76w>$0vCD_C~LTfdT77o|_WrF1~!sel}3Ub0U7IPC=V@ z!`)?`i$?Qzn9HJkrUeXJgieoiP;&)s-%$3Nm0w=%?TMGi`mP^Nap2nhe2q<_yvLr} zLXNwZrD7YxoET*;o@D3KPD)*7W_4D-vGj~4^W^Q@TyOJgU5hS0O7c8qAH%;%)xvMx z_RHUkn-vmG4{)|5MUAxFzi)!bzOgrIs}rN_k8f|;IQN;0yZ%1e&<~c{<{sXSqB};t z-)Qjgb)yqA_E=RNut@ODt4{C{y&aU`$9iy!vw#+3E5FvLl0Fqfqq7a8 z)5zz5aKxM3glYDtEJ+m|4IFWK>`cM&IdiUYbCNE}sB9u_IADZ?0f!=@I z925*%Lrv_pbG4Ka651LLeu}pl2DN%K3<^E}Lt?N1CnSf#ft6H}Ac+IE`n3>=1TUrp zfc(`m06oXqIM~=*xt)TVZk*j*t?;-1fOQpQ2m=p=pzQ+%CLzE81g0?vy|##G!wp56 zOQ^p(1<){wuCPG?NkB?IDGKbA2k-6JPm0F-e|=F2^cw9yN@L)ynKTUS7sbLr0KO!F zjvPcAF&Hq^svZy|WN80>P>H|Z{UN68oKHD9c#!<0WFGusNFas=8frkl2lP-42Rnaw zF|dgtMbGK|c?c#lB_{FLgFgh+-pT5i%}M7IJ_L-8%wsnPf6&65imTwhkYj-PbX4l2aQ^i>gmD}1~edni@*_vhW-B$hVB*kk1#Ny zMG^;&FbobHVI*;&*Q)&C3xxuIDFMFz>Mn!qAM`(1*?4(*INP4~a`6235P+FMk~ndE zf%6HbPH}vpQU8B@tybMbA;?4k9A6k5NQ5}FbqP}Plp-p-2gaiRHZZVVj38lnF#saW z-oeB93?@{O2wDhoApsk-Ks*Hlu5cih3OZj<=s$oMbuhH};D6tkaCDXYt6>cHjsJq| z>E&>Wz=tLiIbc|{Kyws`;KC%uB*4rrgq#>w^a`avP+^dD{%ekscyR+_*V&!`I&#qh zgAUrICjr7MSZoE>GC}&NMEizT!$UyJ`Ut?oixv>P6VAsRyqr%u5CBOoU|>N?0cA+Q zAv&aC5EJDP@)CbIL`e}$rX=y=1q9N|=M*7;1vmXCfSQCW5YN3~FMZbae(# zq!(QhFOCrFMMwY5BuWh2_XL^%Ab*2P!l7PY3|eCNfcos;JiYL~q;?y39&3!}vMp7RiJNJ!*3Js`<61`IoY;7c=hD*`lw=HV<{L>Sh~S8WLE`Cuh(p6C2ACq^q|l4v z{>!eQF%ME75J#LiP<#fS7;ANCRK#%LSsf8ccd5Su#vkI8wJEbYGT{SD9#pi!fp^AQ z9r{lo2AVSRR_ly_T7e?+5TKNW@)nHMVNemn0YsU>zw=KZLqg5z;J5fz_g9!8Mjk<{ zBNH=l#DP*0d~6JF81%&OQpOuz$bb@V3XBc`sxK%Eh*&PNH zQR>jr?|-O6LS5nnERIl+SWO)vgM;dJQePTpaG?AEGW|GiCy4{= z<`5v$gpwt6(hgEI0E!q47$mv>-$4Z{BnZ(aO(;BQ>u4(~TWKn5s~W1|x74HWkVs?! zaM0opSr!H;5~!s^$~7dBQbd?EUR;2p9jOn8BMcNaP_~55&@rGWBn-?d5G0IHSilfQ zEC&H2S|p)D;6TcWz(7TUFaR!YNMogpGQ4O23IUQhaFhY@87P6nP=*FYl(N-wP7;K- zJV+A?20FUR`ts;GBH-Q(|FJSMaR5gd1}cs+l2|FD3@;E!P!t{)r6ju+_0rf?%vfh!b-9M!HJ!hRWp93~2QSsZWfvG*G1em)T*|AC*=QEb4Mu8kRTHS zaJ+#!6g(+n^9&67|BpAk7=V5fAQ8TCyn#XvK*naa(Df0V#O3Sit1U_JY5qB+2ysF| z;E1xmx{3)|n;IAE*4BnrwPz;9PaRs;+` zP^==*Kut&AP+419i6D2B1qv7_p~2l4jyv>UKnycQ+`;ey1>}t=F+LC>pl=5U)6-xm z9RfuR23Xk!{*`~~Q3S!48z9ZQS`-x8#wM?AVx=Z;@J~$zm1d+c!o@+{;)S6hVjq`C zL!_i70s+H&Y_K8T5+O-hsaZ^D=DdK|Ks@3e>w@MP;dpACV1C}pdvuX0I5HQT4GQsV-xQw zf)tw+1{F{fg7-rh*bWI0U;qWzMB+9b~h zKilo|yUX`k)Ep7mIeG(VE8mBc?a8JAg=`JbNqLvPSqQyg%y?2 zj;G#depj>w{G5+nx{}qoToUxs@6^J(eQcY{EZk`cG9!)p_`%WktdVskxn%|kF*uzmsC$*;of{F^3h^@6Ea!q>igoC zUo}Vctg=hK6_=TfMRfcc({i+0{Fc11Fh82%H)p(!cm7o0=tRMeh5TZ#z8Ag)AJxte zy15Lmyqr1e{_}xJQQsohl}GFK+PCY<775J+ErgLz>m6tZ|f z{UaB8>-3V%Q`x5P4f7kF>RM&f$6mzu?D;x=_~4sN ztIO|74}3qE*7tp8aCqTs=cWC9Rxi(&7C-kbn;UEU8N+p>l*aWW&A#x0o?o)T`^LkT zTLUb*bB&esr#cf`td5>j5WXy^V9OV5cd4jqGM#H8wRBrnpVhwH0~-Qel>w5y8{u8lHrJw&D;Ds~s`7H? zxSZ*N17nslU;8JCoeB=yS}&^={o3mya7lJitx$^}p`xkATYQtrpHp`L-U|myR-i^I7KwWwu@_)c zTek65%X??juCR?S8L@?P8Y0>)uP@hpoD8M9R_LMN;WDv_p4VIDR?-ze7pGr0%kG+_ z@1#+F5`E`uvF(#DG4^~n9G;Axfbn+Qig_F?KAWEraj}hyuWc;*t)lkM8#bMD74tJs zyB_Z`t$huPs}Z@DJ#kh0YU=t^h2>*~J$4(3W>OO=b0+%M;|`AX`*uA} zHbYI8jMna{QMppUc5I_BmDos{H|M@EOFp(P7kQ=YAHFgzh}h=pGBzK#%MFZ^XFm5C zp1SenX=W`yHYT(3ODoMunmQY0EiZi)lxf>!;i_&(w^ELL5ca*L?A7fuPv!3g>R-wn zz4yRNCd#)hZ~ZX7jmb=tbK=D!$FP}{ko5{%Md=wf{^f|GmMeKLLY`eR^E;XOtp6PevcZ9-J=Jq;t+bB*AklhX}{}6t75q$A3vwPm>LY%Y%g@>%^75Kuj%v}xM50#dFLs|T;2v}mj-0!~F?Kkr?dh)F9H+Ab1GTp@jF_E*!_qSv?55)zrf4F^% z>GO_i)~-D}2b$tx$4-4_(zj&EeHoE;ryTr8^g0E0cADCA^yj0Vey+>x3rG)~OmcOq zd30)PkW8S{yQI|6`bM7)G3(;O)Td%K&LNvh&Rle&HQ8}*EBssWPEUuVGrJd0RxI+? ztoMR55kw)@)X}Xgc4!2b@N24t;?Mx;)lW zn}4>Qm2MwX{`L%^m|p*MFADDa;q)xa{iqpEju*)h=LFt%0(oRd??Cehj4&-$l*;A+ zvES`5n1!F8Bb+|t8Qt!?DVZtNI_bgBX)`>lrVA_*RMq8aa#mFBlFnb8UC6#WQkT%B zo|%8%YwV=#)rHY*vb^PD9LcEIZpX``Y5LQL zr@>jMgvI^zM3b3gl~n4}dy`zzm2-g=-R0wFUK|j2xfx{A;dy2aEoZ#ZP9QLSJE%Lp z_NVT0?qub!u~Xq+rI-BA!^?ZKo8Jv=y2<6w+W6ywrXSVDrqHv_`avJ}%(!aB)UXLZ zecH}vFP_$JDOqYec5T|r@C}a=b9?WB9hDx2DN%Z|o9dF3PkKie9DE%kT0KcWne5MQ#xOtP8Fq_xgFS*;f^yK27 zUQ{{%8Qy7gk*;OOkNeiHakXx0cbmUZ#j2&AWB<@Ubtug$Rjv6QN-E|hm9m9DzrV`d z!sVG7i>?&YD+9)-`2B|q;uZP=BYkF)YdF4?Y$^%Q(Hrikzfv5Y2K#9su-~cuw3z3? zZ^`hlskw#9n-{NcJ!>tax&F+F(xL?YRz@|;<=Oep(?OQLnsGO_NEG>QuzBZX^kMV- z=Ei_~0s*sok0*9yyGHg$e22eG$rYDn$~jQ7;Wuk@Z^GmpAZq6?!{R)*IHHsZXw(h@G#8@H)pA#$oQ6?P6 zvn%uPHg8j*de0+6mn}_mE134SFz?!O_@hux)H6-Rm%l~Z#^>B>T~$+_@?ZMgbVsHw zIG;auiIc?xsi^e5M|frWK_0|5$+1??cnXttgkqt-9JQX%hJ!>U~!4u7m;}LV&iVA zkuR>+th2VyV{i_= zS@B9QZf)z9SV`4g-u~V4@I@P)ba-*>#YjkFU05 z`A9W$tnK`>!QroRgZx7-zKz{tk+speUrYQelce*@&iWX2M@Vlht3E9In@!?sWNp`U zROBh{?`#u1Iows7y%svhqQhqFYLOmISx3h`Sq^VJnAsS0HJ;TlfD2|4p6nV5yJuL| zA}#XEsmf4s7whMT-e=fPx@CQ*i;nT2nP)i9Sy0Fs+-MGCyvw5%)-pTGS#6F~*kpH- zR%2^Xfn{vOI-Q|H&bG62N9@e0%eC%tB5ryz!`Hc*ztdPUZ)fIM+ZV&3#5}1KwDz#%%}s^Q^HfqE$7S$35bQEn|h(g@2B><#aUMagy!(3A^hbwz3*0 zyT*Y3H*#!Rw{+YqVw2O0H*nVeR;_g6v>tJBVAtv0E!#GA}# z_gtFf=%Hq)aG97L?kL*Oekb_3vluckak4dJ%}PL){>bAkajt@fo&4!p96boTL4`vX z2hBx$8~UZZx83fS(us^WUL5YoDlCxW98Q)VznbZK%F^1my6Vfhd50`@i6FXZd&Ct) zt;*h4KMqfx2xk0gRgN^fY@d#_-$^}sNx>e$Hb27ZZX0pqUddY~1wFa-&0ZgU3Pndt zC+Os3l1j#oGKAY6j4ZymuA{A*Ew%Ph9*w%|8<$NRgVf<*#cNn{Rt=5%_ThmWU3M}so@274P758`HZ*B;o{h{eBv_Ht%Qt|W8*yA#z zFJ9`_QZ1Zl>;eBAH?d|Me_E|Je)M?iO}4ma2ffT?FRGxJWdq%~2kyDkR%SVb%DY&F zPFFbvIhU|7zr3MkyuzEY2KAaRIF+8^&~LXdSzbaxUo}{~w>UE-KaSPCeP_T%sG_5h z;ow4LGHq?-=WusM1b5p_p@i>Whb>u#sFp|M12{hiF7g}ZhP5!4~6Ek(UO z^|1Tx1~uD(hder%Ee%c2yhIs>Q{Rqt9R8w8XA6@%rTvw#k(l4%8}Q+ zcEcxnd)_u~_U63ZxY;<;^Xzl+(o3J7?JVtaxp1z$@5D&QnWPvWhiyT}jd=r~PL$`< zh4c0mM4zO~+@ni9SM-)Q`n;0&jU=h6{JhJ&sqfxy;O(Nb$@KI7KW~9Rp#0Cr=pVqt`xOfbBi4(hum7klBecWNQM@)R5cw;z!%a@jd z><8M&+ffQiNY6AK-h|@rH>S_u$(-oEX83s)F1By%b3u3$%C=ev>5*C+?YpCxMVQ94 zBB?@1O=n*Q%K@_;yB_PLi00gJ&2)^|Pao|Vv4{5cQzPSk_iq_b&#r4WuU&a=>TgmN z61Q&6&{2&t7gUk>Tf>*ME3>pJ3;`{oKQ00bpo@x1817Y8%@`@5)R7id^H&r?pM~m8*~h( z)~u`Y`;cC%nwTfU$INo-o?dda%K3)GJt}7_ew|TGy!d*Cqq{23QqPppPbx4iIIv@G zq6OL1#r?DXOWC-shz2vCweLY?g~vP-YfingN!YKf5J%6zOC3ee*mmg>XZ^8!7Ut!+ z9jco}(%t$tR2Vlr^7wAqkt^39ynjc#qfUA;)!yF&&utr+0^FMO42sX@jvE(IZE6#E zll+xuzQ;HB^0&3;eyo?ff?x_bs?w%hXgAFho@tkGKslI=s%q#p(ky(v92;lgH=Qq0 z(TxQhihK)4X@|?46;JJRT^}WL=#ukprD0x#>A|$^LxGpe!#tu-_;VXEZuu1ONnO@6 z{l!w?1NFM)y)cw;w{24TF2T%U){eUkFFaA*!c3~N4Az{Ech_#JM+UxoJj)X&p%;_< zp8Ls4xmQH^IFhZHc7F#$Tii2_t4wh9XgTGLi(=FL%}<4cPcblT-`J~T2>V&P{qoB6SgxY)F=@}dr#M{OjNA6wnFSV^W?r&vJ>+t) zOhwEfjC-=n6o1aRF^&r zTkP)bv!0i()-pF$e4T23W1UG#V0L06_~$`}hCIDz?2b|rBCzadU%H%*6?Ib21(x|l zr`AaGmep$Ls!WcHG1@n(Yq~sGKV5U^3|kzn0rSvjg;(+cibgGQ4$^{|s#_d*9cRv5 zaM7?;SS~)P)ZBUW)1_m>mZHn|8O?H?fcj>S_8W)yL0f~LR+rD*2_H}YDVyG`uTi!J>AN-C zsbN6XYOBpIWT}nVK=)BG`)9(_8PzkAsq;s^`B+cyP?#FNTccg)9lgcy2Jg_eQys=n zKE!W#;X0T5+EY65vCn)Xjsqfx*fiT z&nf1}(1sG8kPYKu>rf}Qeym-G0x@}G`{U~JTb4KDRE`?*?Rwhf0+(O&^#F_J;HF)= z^|y;zn^<%ksN>!l#cUW?%^Lf>Uqh2BtCrd`ZLQ|FhO0H>Vt#rxF|VsO)6m2VX3`mW z`DOe(v+Bf|NKqb=DnSAs)27&XYg|18=o(!H5_kq zZ`qt&u(R-~%&S7?hriu-_s8OqumDZ7to2KtY4x|ua@sV#u6)wayK=6lW9rN6l#q0( z<03W&*QP_9J6UaHOYdr{&9%l!opaJ{K4Q0PSfiSgM%}d1C^xOrdfeGCcXNL|>*H!Q zul=$~Co*jP0~Jgw^IKaFi`uMtbvQ_T`VsPq=TT>lFgG)+5%2I<-gN7}$GPgq+%)ZW zs!PjwqZiW@utr)qoR^;SdulyR*ZiUq+jgos8ENmqX4&t?8#Aw7o^8`>&NtOw@6WE8 zpBm-sQE=MuPA5l`iO1))GLCgy2RG$y*0g(cw&}_G5N-arz$JtG{T zk=1P5;$z}Qbg!2tn#l5X|DFmKYVM?$>p8DfHMd{%sj-Vpp6714Is3iN1upPwEDOf9 zb5|SMMEKd{55Gfxj6!G*I?#!F^A_CL)T3ZpfI?$uk}#5aNCx4+`0YZ=3j4YxvV0$TphD79Zx^N`d zgOxpgkBYPBU17nI^?l-*9C7b1CLSMg$f^rT$(%N159846+P73${Ht{3@B^kcR}uZR zXA&ZNrjM$G9BkirfUTHutE{QPxXw*YM%&5DO;W#XRCeCjakphG*0-ynY<7(MWTqUG z=7`Ie&DHN_Upx2Z|2*v0-Swk#DnE0F$qRS3k1ffaf={ajimv^mGA)MAOBd z3C`J6QEczQgxINY%5*31dhLUen=5W>8&Ox7pG@atZ$A^xE0rCd7E32^}W>H=+kCg))qn?744R1gaaA6Zqao)Cs94Fk8^Z6 zr_pE|7(#pS!%LHtUA+&U85zf3eC#FN8YX<(|jjmJ;^8%z%uQ)afCMS{vG+` zcB-VT6i1tAYg|q-+(4H{ z7kj0bb%wc}CEc}nnpG|2Yn6iTzM344v3rLeZsTbGz+B9@SUl+WlCNX%=QGc#QdBZ* zs`8CkoW!mkN4G+?>n%nO_L;K+bzwW!HpaDHPJ2V|x8wOxEj6+&tv35|DaVGy^ve_b zSR1ynOwy}MbNpOr=n$1qy*mB!-bLLK83~tOH6uUwUFGqo5cEwS+!>|z-SMvsc;~r) z@z8S}o8lWvr?`u$`;sFY*KtfF)|+om@Sgk~Gg-{@t=PIUZhe1O@o`6I!MRO8B!k6M zzw|x$al+wiz{a*s%Et#ecetN^Rx8t&^&@6n=y}l354WG_^q3g#lSTP%w?C|x;H2s( z$YvxPzGZ?nvnbM)&igv7blK%oK;Y1cNca7g-1hlg;WU%K!X2*LamFe2OfgjLW~=2L zjC#vEiaQc%b z-`O>tFNS5WAoh9}t=9{0+7To|drEV2^!ol}_voWL$_3#HMLTDBHueVuwj9*4Nw}(e z<4z=8Q9i~hD))4`jfhhF_IVbqLZ6>+M!d>MbX;`+6xZ1oN`^x};=_t&bZEZJY( zdxpC=Em?JGB5d0mn$vr7TUiUJdzwA#kxjg81(Bo2BgQ=GT2JwM1b(I2(p^pCu!dWJ zhGDEJg!YMslZmmoiKe*ZUAkk)>+g*OwsTh}Zq!VVsf{uZ>1}wnb==wd{gKDjQti*y z=`{z64%H|42e8-Ft&(sE||98E9_2$hnA||#;6<-&5N<@&$UG!oJkSN5ED$P?%Qr{dQW%4 zD`#15i=5T2(tvxJV|#RWUJE!eFPlEEysO2_{&`N|?b_3Q!K`#=&o&tx+CCy)&cE?sRAaf#8YiaW z8&}p)r@^$4{8ZqQ1RiLjvqOdcSfq4}#-`{aESJ{mZyrP(3fnNWh3eF;HF0ajEkyXK z?iMtQ*KcLIHYV0cEkO68L17x%5IE$@Tv8AzR3GtSx901O7wkKQ?+2XZ3UM}*zjWXh z$C}#aCAe7J&Rv#cdz$Wc=yL@rRtL2|9sk@JwRf@l_sBXv_pL8OtZMVjH0joNJ9oa6 z%AVtx-_rl)=i=ju?cogT0y13lAHLYj@`dX*EaGL`x6duVR@QEwZ?PmI)P!z~$2Axb z+DL}!(U62%ok7Dm)X64IW+NG14<+H5J_P))4l(phAJl!NCJ+7(E^ei(qiF&I10(ny z8|Wbs5@?}@cF+}yMT-D^SfB-l^!_x;IyU}l6@y0BN%Rd#lj$zTHl<2}u58eV48)|M z=3We7qD?R8QT;znFOtxI8yA(TKzAT+;4s;d$vg%ATX_gH|~mV43wDdX_3 z1~GCRk{Lw7aR~KfOW_)aFo212xVmu&=ok>>@UQ-`KO7qB|6_*adc!ciSCSZf*v28! z_$Z4nw|vc zW{1Wn(aoqBP{e4%Yo7#|30WTEubwa*ZOV!YR>Yf8K}$QybBt|9#URD@qLM~RnGOEc zdrZy-$@Ly%Y)}H469Aox7*~kKON>iE_}}f(ga<1T2m+x67#)6pxr8{m!4-@r#Nxwx zLX!9>W02xt0tEg@e`B0Af)RUh(0vNr4)||i@DimEOz{2HVUD&=@LRmzXas>^Lg?H| zfd5(2R)`tmmB1iGfL==Ac}XLr?A)$a&yoO|DkO2>n1V(a{`5U#P!VSe@=1UE9g^VQ zH3Wh{$Urj%jWytTISD9olZw6AzGn#xN^IXVX_OS19FpR|A%Qjz3LGFbbpiUGv4<87 zm?)8GHPAmq5?)b@KoSTXDk=m{EtyDx&0i!i0CA_5BtXhI{A+TBwBwT?yXF_`_&_!d zGA+zRIR-B=3SrPB*MGJM+IEfD=vY-hfVoN z8xor7LQh_k0*Re5ha`9bNCZ%3lLGMq%_=dFc%PZ@>>v^^UO=0PN#VfR8`SL&;sw^t zp-~aT0YjI5f5<{YUXK7-1mcC7hLQ??s35n97Y-DIfwP9tVJGo1oDoAu5lg7mV!IOL zR_tO~LO~-E|7CD!RK#$=5UbL1I8@UA%M$*UUFcM*5pZ8HGQj|135yQL5=nHFv9!8o zkRZ1+7snEinE*4t*fBs1Dxxf*L&$%&M0gJH@2$Bwf3I$Up5^_=oXAxR(5`e|Xje9X zh!bN)e^z1;DWeL{&4WQ;N{$^0NMV4=9y_v&K}8G)3>u^QFEoOE>I4mnKuv(9$_gxP zR?yT@)UZ-i*Hu%-ul6NYZObKaMTV93!D2>&g~OmwCXJag?p6!xN>He&jsm(EP)U!G ze8Zq3${jlV|1mQOf?9b96aoJZac5wnrKN1B50&&7{Wq}w8sF~73b149dMs#cT~8V` zW#r-cd*BBsGCUxK0WvbobqEF&QSMf!WC&=c5&RY}z4%*T{jVeXx4jV<+m#?EwvJ89 zP-wW=tc)~Vide%FTbCdwwvO{`Ku!dxIbo+s(V&R3w%V}~vADm**8gIS$oZrs24E0k zV*p8nlo5p&0)Vs^Mdk&r(Ltq(ElN;mP{f#mW+MOcYY0en;a~fbAaHL4&L;UAHwmCa zLlQDv3f%RBjRP3SNEDFt1p$I2WXh<+3khHhnIsOJje!eusB#CWK%Rv`MU=YL!s>8H zoreH*ghK+Mn<8?W>fl>J(Gvp^7d_F$5raq>Rd^AAoTNIADwsIBHpi$oU{DdmfoEkX z$f*&aif{xVcq2qkPaT`#qc9+`89r%{l#zw!@yY3_z{s{#QtZr~)^QN>&Eys{bTk=u(TsT^@8z0Yu-hV3BYXB=$@iEM=tO zxp=gw2?-q7qX;&yi2X4y3@DM1tE)sNTlJLNq91MB!Z=qM-E(1c)N+-w9RRgDI zsk-22aYvxM+x#wumuEKe}zFs zoHgig`{TXfkn5EDZ+kVU*6b?q(>tsXO7z)f&q*~g6m;8FKNJ(5r-EB z$jOvr&nEQj43*tz9bzOJ6j9#LHq#Q>VxCI8iez>&<5O>7sTGfyNCtN;C6ZZcQU64E&>!LvsgMsJOB%yn@f2~ZK zZ~#ElW?=A-k&(O4!OE#)P+~hVNTQ^SEW8*1IcN&PB?8=1gH#fm!h*{!Kpio*V5{#8 zi6j})gku1qx`>>7IVOk2Ld52v zuiKf1{5*MVCb*#CqjaD8v?!yDNfks8yM;<%WDyNXd@?Hj;)grXsp;Wi8NNq zD8qC2yz7km7{hy`iQ73~r^X|4)Yi z`i~=#HR4Vs1}E-RLgW#{Nf}*u4j-+UOacauE^uuLo-iQoc5pTkXi&s(z|nnje@sk* zpyWLGg9u(8V)-)Aurk!K()uS%l2a?kEd;{AMIunpBM51@l+lLg{K=`1<7fj{m{2i} zS)qXjMT|A@-}u|g2tTbM#R>aMR|QCd_P7`q#T#JVqpH+I0AiZVmK+I3(xhF z(;Uar1qWBuz~x~V0ii(=g8>xi|E3EpwH`71SH1AaC$b z%p|8tj(w5DLdL#Gl7>tfb$9`QobEWz*1!!Na8$TYh$fOk>JS7k7me~5NkQ@t-TeH~OvZpB1_QRb;~y*! zCTMd6LV=bN9N(Fdl^Vy)?O@>HzAKtDV(=*G;RN>{{{<>Cox|vVANgPkN+77z#J0hr z@e)IbM<5ak65zLZxd)6uRM1jF{zD*CU66u@B@hD-#~}2ziNT|cK#E7lB*-a?O9_91Q3870ql7^WJ{*H+K8fL@h{C^B#mU(q zg^>dWdUOA@#=_Bni9y7B4Mq`me}7Ah~uq&J0Q7 zql`j|r^h5HoJ{qr-V^(Aq+)gw7>ucFENC8 z*8?!9YvNx*2@N8zB9ze0Fi5IMetv8T0`9;7SZoDC8Z1Rth&P2SLE#iK7~VuLTE=eJ zf9_0JOyn9e4R5qqNt!(hbT=#j=qnfa~0o06n( z>=*{z3EB%|wu7Nj5#tJmZovOze=vfJTR_*uf0Yt012j;RM_9q(__c^6*~w$fb}$S^ z+b!_O8lENWnaK(#+maAdp7%+H=v$*PMh{%B^G^7kzw1VN=A=xoyDJf{j zG!`LtzK%3P%1ETR96{@!{BbzMS6WGevC7petvW1RVp%1hENN4(r0raEc<)}aTm5Hb zSJ!&>$i{@u%Kid2HzxK_Rd%XQ#7A+tugmpWj-{q|ZuI(a4)&(l97d%Z3Xdfj9y{za zF+X+7%~IAcplJR>UyeoDi*vJ!Kj$JkVqGLZT3NnanUL#jk`0h5o9*w;lAKDhc$H_f9;@F&; z@6)WwZTyw!y)}C9LaAFx}R2z4LDSHgl{*bpv_A5KPZWk zPxMj<))|i2Z%r`RugtIdv0=EM${G_p(3G%TbQ>S$@P%zVsbUjxKTftnlLB`MQ+Ge- zp>7qk=@I)lS9v9=U_xhYiB)Fi^Cb73(F!9+`=8CN%rpa^9M;+-!6HO}E zO){7*?cd3&EVV0BQngbbcxWwY`b{O&QCb@9Gx3wL$Gy+!OXYipLgi_^t%yW7H(Yn> zj(s0LjQNapYH8v~YmXA&#==PR10udx!lSE&O-pm8KsHZ7=OTl>FIfU!_HDzeK~) z6T6mTEqt7AXLj;h0PsNsQ&F{OCY5xzriQiT%-$gy3z+m!G)XSL3&ZZ}@e>-*wiC4#a;JA`F)z z!HMPyRYwa$iXCeQ1GmG2G27pU0nZ*FHua+`#=n-2`pq*!uO?;}{33-Ln(=TYW;b)+ zgbP4;rqa0tJhL??s6|0TOeEzovv=f?!d~)$ufK=nm2QskPSYb0C60w_2Zhw}wyWmz zb|2ncw`K+;cU?$CYgoJiQN}`#%*9?|I6xUBQW%m3(i0C2lmHuY`n#UKoRlAf)^I6+ zK?!5WK14)nWFsWZb^VnHi6lFR>s^PWNd)!CuagtX(+PqAkgeMgFf^h4W)fQLH7V}b zn`n|IBI>yxXP=GgwRbXm5!KCaNR8^@-w?`m#Sp^vdO=qk|4gkQo3>hu5|ARJ81=?p zvmv}%@j*S>ddK{CI5Pzi#mEBKJf=6*n3^ojm2|9Zo~488OS!)~-_*Z)+c@LVw>ZrT z`C%!8RN186=S}|2j-&_6;p5p?3)(Vp!vm?eg6(iTBDQK)nl%)yv%+bfv# zGIfUe7g;#9_wrF295=TRpFTk3tYahWb*Z_9%E>8}iuMEn23cWi3laDoI4f@S+ywq) z^VQDQkq_TlLGn@(c#HRMC|;6iFechhszYCM)llj$m~i7ya*G5%PgUvRj0 z#&!{N>Qi7dz->byo`xkw3MC;8?|m{kqqIlJo-w;^Mxpn;dk1(auGJDK;yM;VyE7j5 z-EOWkNW-n{3P@8C#EOrh$~)dxcY||a@^yq<=8(oGjFkVJ?6Q})_A(+L?J?3t|sO^-Y!QBpW#++y;iIfQrp@<1bV8A7h)Ixg&d(X^SD1X4x7JN&*%1 zz+MEy=#2YanrZX2hHvUkT8EiNX>Vv1_l^uu`^XRmq-}P7mB?$7&!rbR6n1EWa| zdCeEu6I(PXP*0Bpue*oy({$UL;fa{l_*H#*GYncpQwv)46avTL+i;eT@NT{%Zveny z_&gcMq6HAmx!v0lO&zP?x2ueL8uElY8wCYcC`9UUw%lE0p^zrRI$gdso!Zf7`;_hb zONY}D^dY99^ zAPml(qneVULf9D}l6Se;ks0%QeGGGLkJ2WkdeNifI<+-tzITqZA=vI}+?fU_z>B)b zs`a|pw8NNeawz)j8m>N7iG9WjXIH)zrlRmg?iF3XxA^Wh{ zNpQ-D<*;^Rku0+ch}MpGNjQHNj5O`Hp!e2)YAK{Ao+Ik?A}5@d@ypwKhR}83WRXS) zp(rK?@Y4V|!=&3T`=_(gSd)it=f7d&xj2sg0nK1DAV#gKHm>t z)P+#X7}w^)Hi%Rw_k-%yCZ7s3j+A-~NhhABiCxP8f%Qg zwH`W!1)_y1A7qNmAgRI>(#Jz;Cz&MzJmKl%H+_)Dt-EkoMM5V%X73L_cw441#b#yU z9#pe$i$n;uYdiVbj3B`!qkxgI0QqCO!NT}^U$VXkU-xkGmkYM5C$W1owR-t%5{rYA+EM1A$r}udGfmC8tv;POpXBu8b%|+x& zp*59+Qz*#V>0cT*3>oI0%J*2e;y?F8sM5yERfQ!`*{>a%6Xp-rZyg67vk#G;7?r|o&;tI9`k3xMSJd6Z~Ln#byD}pwRdJ99`r0ebx>}aS!FM) zy&+rC!49WO=hzK@b3>RG{$?IV<4cS;qQ|W6ymIY|@wHX`BJ&s{WL>$!aMG&sa<1Yj zU6AG(hGJ&kl5&(2^5YVEzG4>p+D^T&vJ)Lq&*?QFY)Knl?pA-(x2}YDXO{M3xDl#P zzg;QZ9)=KWG<%0a&`Z# z<#eOTmeNRRji3+|b#L=9L!?#2%w?o^sb_7(=pX7>i1+dx#ZB7fF>vMA9q5SPZ=k1I z;@jRLQ=;t{sD?3kmG#z|^vhVys+jhMRLR76Kj4vfpuN+u*DQ=!G;h9JTC@C$%lC17 zvj?m0R*<8`u-Q4#)WUpd4^k3T-|VMQ8}Q5*2)=fE!FTifxQ*&VF&d>3?oC=#rM2BE zbM}vlCL@eb8qBLp)a8xGed@Gz+tFvk3o|GMp2TL`%Dpno&Gn2yD)#jmE4bqaP$gHLJuAo7DgDJps7j&oJ*48t#k6_g)pNqCt`9Y%+$w)9l zj0|Rpp^&uYs6_Jo1v=oAQ&cj@6=6bKgxquQz2H~~nycnBzRa@pjIRxbuPxw}28@ZP z!f>J!{cfQ|CwiIr%wrd1Da*Cn#@BxC*Utw|7~w>%H726aQ3K)kaHP3BWced(jB=~u zB93k-zxAfo3gEiIhKizr?9lKYek-&RodmSLpVEus#5l$& zp!sS%Ua$0v?5e}16KC?z)L8ps7-S7*uC`SxA6#o zWE?-fsFv=d5bxmt7$&U>`s%R=7lQG?`naZefd^jitYA>6INNpf?^CWVA_qFS#+K46w zp~U+gS=kP4EfpOpUR{z$60nNJZRj`EKOJrD5ialeG`=w_fpI7oZO7RuUkzGFh!%f; z%#Bqn-*B_~(bKfNfVWxb4a`>eIrJnycT~Z@Uhknnc7iorDPGd|vujYtS4btNn38_d z=J;}w>|X8SwB)fW>kh6a_rrWNp_juqb$f(>>qTRM(vJta68A`nAVLF)6P6h|Ab2qK z@g;P|VS~qpf8y#rRvF)NiC~<}tF)=Lx1En?H^Op6G-}yD+DP*RC z$WTA`evBudN%kWRn=XH5n{>Y}Y@Y81cX4b$GGMYO^2>HgXM?er2t#b={aB}1o&-0z zoKKV%<)cW?M^{6JY3nlG0Yg?Ek?&UGqi>9~wix9t6x@$N80iB38)IaP|47$cefoHR zh|yxmm)uR5Yz<~}A8vT=PBu*DQD<PlOZZjm zr$<9njJBYbR{-#&!JX%koH|V7-jgp{9+*^ivO~U#=vp?*adf_o{OnNv==g?;#e$CG z(RFg;FfT_#h_%-}KdrPmtLERy7unj^=AI90a#*3~^@ljLcF{L6vYa|Tv|8cFuuj#8 zjeQjZOANWh6Mavc4=PJVWX*nYYj z8Ic6X6-J(9L8#w{yH=SdaNs&&9vlPRZTLIuV3c1vJL-2$T2aKFp%VIVy7kXY@;j@&HPYtexsH?9u)XrTxE zm5%r1*Nlj+*wEYB9f@CV$#dSTn?n$|ncFeXAf-{05pz4Oj5h^hoMh?qx?K8#m@C;R zN;qlOyLGo38lJb`9dI;nO?0t;mcsZ74eMrrIf`o8jYLNT==XvY^ymnAtC8vf^I$X@ z#=*ktZn=p$4r_ReurtBr=A8tOXD{reZV?YHk-g2pdaOvMZh#79@3-^?jq6DPq5D&G ztzSSve1U>M#fDXn%TTc6zd({DCHZbXj5bnEjPP#m!Gkx^O$WnWtb_h8WX;H3tZa68 zFa5Rz8+FBUW8bt3)U&`aXc^4j((@zd!Hx*bLRH}Ofyl3IW1vM?xuyObE%p9u)_%l1 zg7|uUfo~|BcoayopBe}^#pXHVBW#Z?W$%_f!=4V98iVL}Fq;nO!h>TMU>|Y84FEjL zdw}i!FaR**3SS2eIj^KKP=A--=7$7b-H?R3hwgnBR8>a$F>5FdK)ntmzs0>8i^dRN z=v#n5Thrb{4Pm#cwfJrQk}1EcAL4J8qh?zrgTEbiYn2=(zSw?<>3_>&wrI=|GginX zWcx10!V~Vbyi|3In`{f^Os}L+>ypLxTvB8A9um*lmdlP(59~q*g-?hXza{6SrIlV4_1e_^N6_Y#YhKNf<@afnSD$0thzhq8yvl%XZHFL zm3xnyr1D#WZ_Z)*h4nOwK5e`JGJt7DM0JTI=rbEnC9CE)&6L|5CERT+F#@Yq~#sh-0$Dwx_Wfx-CAl# ztmamhl&P&jU^d4^$r}~dv;sW-CJ4-1TUrhKPCvQ!VKxP=`-E>u#A%}r_8e)rxTPW)pCB?BR0C`C!$C+%&nT({Fl;bY1l4rskx zw3_vTmTRvM7PUX(`G~aSBSw)SU}8wJbelVyRE+ce7m9Vv$M>I9FeB#Iv16q{nU`cG zqK)s6Hc-KD_jZ)UbAD4yZPB4~jZZQ%kPe@ucUE$xd~h`5RfFOI-A9KS>8)f_yxV8l z-8+Nbv{D(iE{#_l&oDgvI)dF~=Rlh(8YLx2ya~%c6N%J}V*r!UTqQJ|5-ygEFWOsy*YiH&L8^m>|=xcw`6&lcP{2Tx6u7sDj&FXJQlUV7W#H4e2vdFztG zACiZ7uz(07D^7wqDyKJF*jrrrb9^gnq=TZd)p>6_CB!13Zn@xn1 zzSdaYIz}ke(FES;Q;w5rlU0TBHl>at8rhD$x?mO)ku z{qydv)MmDw|E0$!5?!N=FUQ)jvm4#mLmMF21&vg9VE{X29kXMFzJsq!aGT^Ax zXZiTM+0XAs*jM-Z0sQ@_>6CH)Z$dI%2E77&I z{F7S^E+?<&G@w>MAhhE@MnEgX3DCJUu;W=mdNu3q(IL03V0} zkz7|td98|cCi=fHCd}Yq)n}Op3we06M?8zzXiN3*6T^e__t)>nAK;J0bkqzAJBjX>#2U1g#kF_xc;yB{G?v@g28%$ zd&tSiOYrl`0XcmC(hHfvQLRD5g#Sxxo$Cp9T3@PTqJ6si0P>x#=@LL1An>KfSqmcI zvr?8z-%_2M-hltjg^FF^6VK$%lS`Pv0R=CbjDu1UR1cSF}=ZTXPQ6aoVuz-=t$c?-2j%O(7t7`f^T9QeI9m#3f4fnZ*!ok{q+Mageq3z(iCC;!L)zWZefc+NM#k+9Dc z1RlYhz(`pD)WA2hS9a8(`am{{MBLR_iw}mB_7M2?}Ew< z4yAq82jq9eXMI3Ub-Z-qJK6q&4Vd-si4Pnl`%F3DgP)Tn9`HdaaQ$(0--uJc{a+wJ zfbT_#$8yd)E>P|=(*Q@*2EoKYy)MrB^qeYrsdm@NI+k;$0gjb@rXBDs<7BM|8ndTL zUKR)7lpOfqM`SoTr~TKxSk9To?+!gcs`s@#7aUp}G-yFh9YCJTc=|(J7WTDFgXNrQ zfa7O_^GaK5{qS^RET08$Q2!-8ui-Z`@XN6h=fWG(X&+z}2cjwFk z97g+0y;D;Ae{q~fby*yMzvVma&wRnKJ!cjd%Xd-Ufg^68NeA2(opAU-(w+VQmxX-2 zA$!g(z#+BIr2CC-2c6ztjcz~Zv%sT`i)K95b8Z2WPUxh&y)d{X9ykE^88`iR)F4jV z)lpwdJ=Sx60S>HvrXFygcCyC%&6l{E-+oTLO8^tB7yHHE>Rp(3*V|v5k={XhcN+iy zQ{J(jvkD;Z;5zHOQ?B-ZY}ix${AFRBa|*!47aOb>JB5e>sJHX^hrr-4+@Mw6?>Ip{ zE5V@Cuj3D_=llU2X&aPizv0@zb35Rkf)Ut$6v&^yT&|N1@_+uocrnk8^1I}*e*+b0WXxwM~;os4MkWE)dd%el*oE4lp9{36Z5S<)k1y|F_&rN0* zzsd(LME~A$fviAYN&tA&3C;>mm)BQB4Kh*?ARJ_*U;yFQ$T>#Zb5;Njx_y>&K;#Dy z6Z_i$034qCOgP{!>jcmJ+X=43b6+Rx7-`QL z!RZn672oenH{d4g1QZ4&H34tWuI5Oe(o_E%s`M8g7BkYGH-Zx^n4}u7l!%&wpo}cA z1ut-l6O}yQ#hCf@hrC9-z}?jeZyFTuY4n#(#ec^OWEfxgo&UJ*KDkUj-58#WS4869 zc)@YHLHhn5fX^q!`oFYfI=TP(XC`E%J!c#O!fHai;v!;-YBECn%&Y*`^F|Af<9%`$ z#R{YZ1Je>Xl@jsS^N{?_0FVz zla$ZK_|-`26C(Tnv;>}STo~dxR}tjrKNFKrhF3&FN>WlxO-fDXABqV$*f;1{1r#tn zBXFdH1in<#6AAv4l>THFbAhDiE;@9yv@X{a40!J>JwbTw-#uZjW>x>KDR3=xQH+3d zp7V#MLNezY4>5y-fd6iEa>fAvT~Pog$m_R}-;hU^5oX>s?U8kW1e!F|4Ym($=5(%{bN?YWR(uM+=WgPQ|2EI z890XcSz`W<^i0gFBfXZI{|Em8%Mk}<<|(rIKQ&JyzBD!eQj_r{_y6_CKRM$6rl#Bl z!<+>SPW(*G-;tiFd3B`MQS(olIM{K1O%np)utDSeG~(;2NqKdh--od4ZZ&S`bjpe@FWD zEC>|onVMHedM!2o4;}=LFbCiah*;Oysw zp$&v}p0KF#KqDMXu-DP@Px|Z);WXIGrpnVj-+zM}c-(nWM$(@* zo>MLPCB?<%B}9OgnkUCdLcAhk@-qKsC%8QjGq9i(SReVDO-|1MpavFrULEnZ1U+X! zmkN4K^Eo9!pB;8w&CovW2lYQiPbRs4r%U?t<^xhxMn+!hR89dwIiRHrp6{^63=T{V zI_v;Jzt0fukarh+Uxnx8Fc%!rS560mkRk;baW@z4!}S9_kAO+v#NaSWrSx zMucDObfx)^j^JzuSYrZQeSrc6754rgBE4i~`6s{pN*%9fJHT6j6ErwzQFJwU`|q($ zf3owtK*4;3Xc;0uE#jY8wNJ7PKk?6YXE${W3ML={bL4%r9qzv(VF? zwr(`Hc%`FZd=JLvL%-^<2{!9{2j=fi!g0@08c0zdX+b@>XG0@yXQ)lJhn0cIUzO?DRhBfIX_+21~x9&M#2j?B$v ze>>RRTA7{cj;5KLQ{y^3oS)tw>`i=;{mtpu!QMe_Sm$FJ$Nk3A(yi~UVVk|CPDh)w z9iPjij>~Kl$tgC~zFBL^8b`*Hg^q3&Qf9v1T-loSJuWHSwcl)r4vu2>!}Vy-VYRj1 zd{>(P)k9o%={PKJ{DXZ@JA#@;)Xs}NEatV9s@HpiwNcE^aj}n|VGrDCjLINCs$|{W ziDF(|GCf#o$6^=lT8P>&MJX~LnVaph&;9zL!q&E{SkZ1}DKEX|b0x>n^hyR*)Pvqo zB}<~M+7P;){xKTeqe?XQ_G;_RC1tZTcrKI#b{o^9UCGTQ`^_prr<}mhCh{;jaaN1_ zrF#{s{qn>8=(U zw5|)mX1R_02REqo3YuM>o6%`4s41@}^4q`C#H?mG=Wq>r|`qce~y zm09_5U^Mz0s8vd7aeeyv6oIc}45mt`UTaa-Ax+#?4-eypMaZE{MrTUn>kkD0Q%wsMj(A zq8(qVCS{WBwI6AYA9UL8FT3X<1#($WeT7xMN5ECVJgbwq&Uj~ytAdJce>}n|8r_|b z#r_~%o*=oOq+dHm*W{?DBpt5{hM?SJ)pPkOy;af8aTgre{o7^UHGeF!9kXF5sz z>|`fM@2sCtr}-EoC9LTg@a(Pzh9-5ct%b|cSik1x%Hdv%`3WH$U1)n`kEUudc7JcK zwDgC{@l5)myM7nC-%quep^^S-$-Oz}(qCVSNBg-Ow`|P^J@skTY$T6Ix6w^Zo!DU3 zEqp|k?*;CT-p`@l>X*CC$>*SmYtFDOdThF1n}(0TPane+Q1WCZGp3F{)4%&I?J-L# z>}=<^QNhTa&6Pw$#6($5QhB2cHB{R zw%MYaYWk?Dw1+u1ejV!zBgr{z{HIBY-Lgqo42buJg8ig!H<<_fy&=trv7Dt-yED)X zJCR2=^X1{RR?t#zV6#7&^VTharT5~-6-$9Lp<^|#P_Pz#I$u*w+ZON-!ybKPBWw*C z{qQq{g!8a9_xbYzq9{+2m1XJUNWLmWov+G*6K-L#jyS{acCF%7bw8Egm!=7BYcM&m z3cT)Ut$dF;HN6ytIXaSEQk;QyTTN9>q7pIcORy=?eY9BD`IQ*^Ibcj1mc_9{YY8-r zoSX&LCQb^7SYME3Y#e!+)Y9mg_C-ACzmC|C76yNt4F>*=y*xIR(oAY4%mMA_t8F9p zNcx*I4&Hnpr&y|cJA9BltQxF3+4GeNDhQW|)(ZIRb9NsIkdb`VFGRc%CCP{KA|cwX z4e#qNmUJVbwe)e>-Ro9ys=CPPLPqnbbhHVakieKtI`7&;mO`HuI1@!3(E?+&#ZF># zSUUNHey0{Dt}yNjPKPjS@;lN@4oOpC_DKB1I+WUCgt;I6MLmk-?8)-F=jjbf=k)uW zrZsBn)Ma=)#%jDt%HwB0)=*^&YgXbDL)GaBUBm{9z~ey+F| zyUNY3RU)N>bTqF_K-Re;CPFO%F@i0@J9uFzMk3`W`OPHby*!Cd{p>(8Jmbt*9xL`w zLb`9-1joxGbZf*Lr{U};tG1F};#2G=Lo+G+HkaWM60szP7i>$Z*+*7StCWypTjx%9 z8fF6`;BVDeH{T{Ia%Zo7ROG(@0C~h6^8HZE&LOn4kIOMjJx~BIMIyEW%i^5DqDO3f zO#}{yb+>5Pjl_R;jnBRSKdJ$i~Ro1kT)HfdK@`MRH}lc4>L+xsS5(RL%vCs zINt_=Kr4ny@_m3TY|FQo9Ei_fr3J{AFiSP*w?YmsQjkxF>~O*dejtovY4%-#3sRml z9m=t%Yvk=^7Eoi_Meb78Q>a&&r7$1u97l<4!-F9_a9jOV&)+O7sY9a8x?AO6pm%qT z8`%~Z(lVurBdD9Ve=~!gT_cgQ zp!?X^35VT-Y1O=MmLLVMKk)fR@u=5R3kHhMOb-`U4yV;3Iuk8p2Y>c4%zQx~UDOcz zPV=5@!>eyWz7d@)f0gjHxe=+FPci(~R<@_`m|SHcX&ROz2}yh7TY|5tuKvYaozgWA z8p0(|@)17k+M2b-x7<~sm%^WZV2TlMXe9|(u2A`kFyP(9^i+L7<%aHji;~V@8Cz1m zJ^m(FLDq|-{KiD&8Yt~g-zMfXV<3}g9%ZQEG&rxcEjCr8h~d1#!nIrUYrFYb5N}#f zSnZc6Vqrpj|7}i0=m3Z&To_#hCS{+6LgJVY!f%Eg2_QE5%tdZ!KJAkUC5L&2De~q! zYsP1Zm4!vaDj79KL(0BEDq9v#89U=WCV@=$hX79tY8vg^Qg4_)t)Xmccb0Dr!`_-G z;kl3cgK8Z&ok?((SqBE-r#7djBRO#&zpLS9SiUd^^1OHK!Nvzlq|RGq5WG-d;|7>; z?MO@0{H<%t&OLzz(JzE-Zh6{m)vVFf!I=jB>IVnQ>LJ_QMY4A zBJ|4WzWDcuuf51Nd!ZyH3kH7DJ%p;&;)4V}LAVPr&zmY93bicBVUU|YK(@n>matb! zi%5MvTZAk7hUJ#0nS42N8bRwyzw`Z98}j=`sB4doM5!Rq^CE2nno04|Us-L*sj6A= zTfmiaHhm`FpGR(mwuSeb6#X?6ljVwFNK_%OL;r|>{DyqZNXjye$bg7BK7ug%2A@DU ztl~JmFk@I# zEq*coa=7owey1KP`Nqgt;<8A2ol>ghFHf}jIZX$9k`}Y2BE&rRpu;-d%(9&NlAuC~ zvbRx|n%v40({ z!4=*9L~1nxtL$@QIQcQzPq$ln$f(2%kt&ZSh+>0RuAt)tP({}9J{E4VhPS62Y4d)u{gEI`gCOD5%}oMu*!f7z5|qjpmO zGc%%9g?dvPveZXA3YwywLLK>4DLSq4^fzNLl^B_DD6fvG?qL!Lzi8soEK*6A1OSw? zFiLChWO*RS`b2245$%!l2%@$}7^Vy7Blof)`829EZg2g{d^UJ&n4~@&+6D8*R}Qfp zNeS{Lz6Do`!=hH63HRbhsoh+EbFO&hLsqjQ{P z%<%Mt?*_-Z=ob^(QHDDN7y;g!u0z3eAc`Qx$vE3!SsN8Ga z%B@}43YJEQe)#&;GL0CE`Mh^So0*WB803TLYLx2w9F~~rpN%`&UZY?5_pNIv0LL+g z%EIJ5$`X`j*|ykE8m!>oe;lp0oJbMZy#?_f2Dl(qH?nnk0_Gmg&Zla5TU z{PFIkncVO+k{(B?`dG2A|*nC47JE$=5kIaxWkn?%SE-%81dHHyqLsCmLcVbq0% zJ|zJ5X|sa8S)(w{!GTJ~-hP$!v}noxKQxRD9X6=s!o+4Yyb zFDFU=Qt^$mbhDctQg+g>W6WF3vd2g>!@R^HW_cJc$p2wC*(tWdJvz@j4Sgxl_4&3s=Oz0eE!sg(GUJvb@M-ag?=NXq7D zoUsc8BFY!JfXz`_^u4{8H)CM}8UqA%2X1dS+~QW4bn+dZNog<0n(A0+TVyQ@-M_UH zPt8c3^K@7d5MyFj{aRYPV%a^RB*=x-i=yE z*I-OB9c)*;2U)PzU&W{sW zA<2yMlquj|9jewtCd3r=m}2Lk=h@Li&G#RFhz8E;?1hZ2%HeZYd~fS;#x0MqEKo-u++tTcuA zE&%&!oh(d)m5?ZJxdd6)-8w)REzv9ozC2Ey%3>TDlzDu1Sm{>N&a2cPwo%Xsu)!ic zO;|A#Ng{RHNF`sPmPINm3t@-&tNWhC*2ZbrGLtVXKcJycNhNS6miQ? z2d(r#eOsT@2s2~o{kZeX?yT1U|7Jy6K)%jnF~(oEOsuLHS|(4-zhfi@FpoPl=l+O7d^l>KGcI8nb3XMe+Xj z6J%VJ`2fflVQw#&bs+DEQQsWa8HKK>G{f4K;!(K&)W_kOV0f9)IJv0O2z##c%|#Y0 z;EsX`L&5VF@qGb0nRI~87Y?ifUsg|cb}YCifwyj5PIs|5s1DxY?KK%|y52CAdiE_^ zDE!AXt%gIG3|ho$5@x;Y&t_l}b`x>>2y#(t^RBHwvJw5Ei9lo*qiAaIJf~hb**&+V z5j8IkAV0cTMk5$o0v!8y+(*q`V~ntF<-jau3Q_yG8QbcHvuVWOM&8z-Y=XfYP`i8R z-c>8PWlavhA_09Dk%yWF&HBrZ_rmB%x#RavJz?w5UGF*_MIyw+zB-RsU@AHfTibkv z5fALhi}jf9*ly=2KvZX?^qj>PUsiG|2J z_%toK{@HNXgEII&02?}+f0nsXs0+V!Wj%6_E-tDFnFo?wV_RsJPn(pkDi2&JV<>+# z6@0wCWxx-fIHm=eS%tD*z5kr%#7UgEHWxCX#qgjwkeu#u=?aI|q{k-;0O|;UT3Rt;g>3ofjW1SW zx5-NFYmrS5Vl%cnot7TTcU2BrKYyxrtWCo_<)__I@qquwS^z8ju@?KCqrpmn!(1j# z2uZ#tN@V!rl`>X`50rWg@V9WKS@VSqTW`=e($&^Zk&tb^>AvNOTjPC403p8P*A^aN zB*p``1eTtgQ{79}_Vr!KUvF{A_Y;Xy)eP1N-)sd~GrpUz#<%`}3!JMsn|?at8w+~9 zMl&#=@n;kfgCg%l2&FWH{(fivU3_WR4aZ-~094rWxf(GPw@CO{iQaL*Ol*O)6gg^C z`REU^F7(A^m>)jF?$dsjTG_C7Izv*_X9ueDD}O{&v)FK9_pD&=t5Ki0K>*QwM) zol^9oXp@uDR1sq>ub21JzVWN}^l`*o7^WD6w)u9Nt~puvbY_bddRL(I zj7eEN@=P~3AqtrK_~yA?5mXXh)o6XuGxb9tFn6DDQGa32CDo+GHM|7*J^{4;X5poTLTJm>W00sAVZxsI-Sfq^rq7=x$ zk67j#(me$$xB?%=;Ar~LV{vE;eMvi-RjHNjSwj-`s|~-U)`#pKkQL9WD%L{2#ytT8x`Awtm%|{`kAaHdWR7@_dQ_J4w-&Ine7 zm1Stke@`~|bgr1(K-J?+$j%&-%DgVsp$P!!hRB06@`Xftzfdd` zX=re^H=4V#Oa6f}Dogv(Yc2968*EdG`~?zrKjtRA4Ze8}mQ^PGdD!QhJE2Oe?Csnd zb%;N`@<<7LLpXJMZbV^ z?I3kn$|(Awb<{joENvAV{6`oI#^YV8b86xkOaic*cd=ulMqx@@9lsSp%1+=S-?2&; zShmbj#pm7`Iu1>Da`Bokv5#(QquDYo<$3MdRjdk?)7DDsx()9&^^&`Y{zs*%yOz9i z%2VvXaB^zgRo@7xu3}|91}ka?M7K3GInMA8B#1Nbncri=bG^2(XV)Q)gP8cS0RiR8 zAHD7gAq&@d$F=kcvM^knD4mINcq7WG-^9U@&+^4#$L!u9wd=IGcWb7imG)K(JYeeU-cU!^K)GeOY?T}ip)HbZ zS6yx1d@FefM}#G0dC{^?L4Nd)DwhV?ImnyqPF6-JZsMv(x-~xn?TiUG-G;?bmzQBm z{6`I2pCgPg%Zf|b*0)+ggc`?Fw*P3O$!Boe>G+b6@QPGE*bejE%Wu4|uy=qyxtg7r zu$LUlZ-KF)R5rVpy>VrX&{u9|t(`c)V~^7Y{(cj20KRbBA6tiNDCKF*DHJ~|{Prg&Fo zgxTyH{uyBB4BigkUtqVzPja?|I~e01aGpH?gB1SA@s@z$k?(H-1R6+aUW`% zTn*~rczpUNgHn)@*DWw=V>$>4tGHYDjk4&f%oLY*i@nQ8@s(u=TcR{gb=-$GG+N+u z>xcM<@jb~B_;lO}OjU&p2nIZ4diy%!QZ!Jx&>TL~iWSxS1M1m17=KdL&|(HmOqI5Y zX|`kvw-$v^DSyb6nNmxucbbk!72@~qlqH5rtYv%XV1utHWN+$vAQXNOmD-@KRM$rt z|H@{xS^2{*M{dGKk_}6=Du*;u1s|(5N;u?<3fZ=FtcvDhQOVx)1Y>NlKeoI;?SL#h zp$X^5$$vuE4{IMOnm4cYMQ+v@)uPqOnK40HqYQiF4u5@O z1W0)r{js!J4uA1pA4J@H0a-zfmc+ioJT?uR{<)-+y@afektDNxU)ej4uFWtK3F;C<`#c10eT~@Y* zzBiO!jWNATBKJn6-=sNHG=!$%ui+zREt4s4v}thA@!H6=LE0Aw2_wm2b_Htx8tW7Z zdS5k(y%5EUQYuQ1=t~*3^-;|&y>5~BX5eZ= ze!j!1U#(&F0UhX%01wOCe4hZes|rgr{+py?IOv^lmZ~iWj*M>Ug_98))LYLZCK612 znY=z$GE6`?ZyjyQV3(GAsw_hEsk0j#Z!f+;VqnUikutUbB{zDH3+3U zNPWUzRcL6p408f9LY92)615O>67p$?ezi&IvtspeWO z&^>7sG8a}3*>HYwK8M`=PC{CH>6%gL*Qj5r{~qXyQM2mtv@CANPe46F$G}*oFAS24;vkS#yUu| z9QSMO<$lxP+OPOQ1_9l9I}!phrfV!HITTXxI2zWQJ$kUutsduglUqG1VZB@Eu8OHV z(_5N(lmCykFAsf*B`K9qlq^Y6 z_9aoavLz}~cJg~><{57@W}cbv_4)ntuCA-A_w9bpd7amC&V5@Vw34|eRJT<6%G`fn zpw@F)s#v1T!71&WHHS!AvUrELoWy3cVv2SO!>=_G?G~fuu&eb(M>!5UD3-T>s{Zp# z__wv!mi;5uX^$v=TX@7UH*cIupiGCAM90g=^)wtFlQE@tn;fDO-L3VT=U}T`;gEM` z1@#bebkUA+B>&J@wcgCGhDfy!!e(?zDqMyoHK+brjLM&?FjxI(Pszq^rnoEd(0I}q zT)~Ycy@RW$$w|+sH$eWmcc6Sx)AK9}+ceL&UFwJ6ITdlu&*<{!V%~hwlRZLzN+O(N z%vhtm)9PAi;?36|p6@;>elOk1E4Ym*`IJj}OCGFeyq@dWCeHHP^$U^lEv#=k8QK{+ zpY`b^Pu>z&Udj=rWlJ`^IpX{E`2!#LhPM+x1B`p_r#;tT`s$+d_^9X}uk#ZrKAzsc z_Ir6JY)SRLoAfiKL0G5%rpQW$%8YBGnsS2o+u}rV)k|YFd`lOtp2rxC`U@SoaO%&n z(Og)6$c8$?g7!#MhcX%6@1USPYPtz%2!R%~#~rjKtmz_&Skr~}UvrYCjv>$>t9e*c zRmaE*)$)bkS3^pFA2sp~O!|XxQ3K3?dJYM=WVM2#SfPTTJ!;b0Dwwhcvu3M8&H8~{L%J36mR9jVBciq$_5=Np&4eXEw z0fQZ~Bmk2|=$bAyNJ2@preO&MhQ0x<3T%i%D#_y#DuL<|Uf=sAxuzwW2%&~Xx(3SX z_&wZ6;JZSuQP>d0AjXC$G-9$CUDK@w$ta1r9FS2^_#Wt>1cYayCFOAml|t#35g>F; zd)it;(LJ(O$_DDj+Ca|Zub`w<`oU&83|O$2js#e;xLng84aFrXd44RHpsYNmSr$@O z9=9Ax5^g${BvOtrTxuxmsA#PVOVr3aROtlAhd`Zvuvr!wDp^dDS&C3UC=@&_lc4-P z(2xp@_d@I6OXHLxIO>lC!g5Vl^!l*WQ&v&Y)KOm-l_Z9AP#X`FaytgB1d!W+`Va}Q zxHtB@;o=+(L4#ME`m+4K>wul#SL;y&zGVwNT$4+$Mo= z!EF)=xMa~uW(^`G)Q^o#;H#4*rmNq@?^o*(gvS zAFB}#spXH>3t8RJ5$Qc%E9DOvm}J%-AiYsqs_2e*3|R7ZZ!kbol0cG65v)BZCJl}C z^mGjfFiA?`AIl^LDV9le1ds=n7?WgH9#X>o*q8)ny@BR-P})NZjg}}roXH^~Wn7A2 z=>fMw#9HD>ssCfwOAJ`-dI=4dtOO^s_>ffp2R&>s?gZd~0krx*3|AMPur{2e6n^zN zhKfe3qpD_Di8BH!T}V<+0H8`2MnE6CCx&(cAWNo8S{z4J8c9mlAB;h)tUpHf3R>15 zhTc)FE;n#gn6EF|(lERcm;Y$fQ`R&frbCDX&VnQg4SHS`1dM=7qJ}M@0h31@dXi$* z4Ff4b-k}ETLx7Q4gZ3eSq4#&I#1YZ!kj5`57~=Gd4`~6jL8!1JBH@T6rTvdOc>(&J zAY_Duq$rT|(2&Wa4uKbQj2j04%!O=FI8bET}=WphhIb1Q3sk}5Xx9my8mFt zg3bxxDHhr}fjsu4aM>fJ zL5Be(DP@0*3K@t{0x5}_v61r4__pn#wLkfEHMm?OmV_XR_juC($EntQq!wZd)Jht$b ze^S!?Shj#mOq7oWdKXN>#sYnWS`8}+lus4`vhY@aG+B^3v`A9w{h$IP#wvmrfx6QI ziU9gE6Z^2_QHHnd13ZwGiD=setP&&%0}J%_WtB5P{F5MOc*{PTGecuTJyjhQK(Iw! z*Fe)qL)%JCQ&mfauv|2fOdWrW_W~f3fxa!k*jf*5bH<;bT$FoE6mCaO(Tg)f~66Vv|N1_AYmy%7K^xY&PZ~V{Xt6!;4uYQuAwa@ za7mOx=|rrLM0{a?oJfQ=4?~jH^+!MX0FIz28w}9%4-zw3D-fQnKayNof7I0|j6<&thC*1j1TT__F?lxFfXZ1k42>mrSf50tPUaH)taca$*io)gMWwsy_la?xVz! z(bW!t21SfFv_9XOg`42TF21Ng>TsiMWMrUu$k+(blpr9wjwGq;4`2gi5kaJ2v4e(6 zUZ~*;`yt1R|YW!nfWr)uFyZ)tYkIl z&_oi$ffsayFLZ!*72KOJg47u*YpqXLQq=(ybfD)8Hs~M`lgAvc)IXA3sehDh2@rE= zV>)Or6}+Vm*a;AfxizolsBIl#;sC2P)%DboIE#QS6QKPILL6n401cTu=J2WnnIisJ z`xng49NPW`cbx++R0uLhPLVKFT_?tdB&p^Ph8!Re38;*NAqNSVJl^mM1nP;1j7uGi zi3#=w5!zY>hAS^Gg%W8cu*~6|B=ABG`XEkHwjZMm2%-kvt)Nkp#~xmhK)+m)z7oS4 z!eG?PpbcT*XvMMB@=CbpK?+}-ACEm_9W71ZO%!m!KCG;#d|1bi2(MWRQ4{ZtqLjqe)ppgyThC{4WAaNet90ImsTFTMsp$e*zxAdm`NIO1>W(0x1*AVHm3EJ%#bEHp~8 zI9zjG1;rtm;`4iJCh2B$8C#hapA9fj|UN zf+Rx2B#Xs0?-h_Nl37a7jx>N{9qK&=1D3o{BrJI>g|E5~vSuy&bT<*+4?xT+ODrQ zWD4$MeSUxo4WKa*+UE!D+OUd}NHv5LIH0U@YND$JT*<6&@bUTZITba1e}50+q)nz=J?sk}0>3`r?w<7grJvKR6sB2)Y4C!3i8< zFdP~jMyw-|#H$Bf94QI|j`e7apn)|sM)F7`PfKI2tXnedUh5dv{yiG&179+L!04iP3% zPb?6h8oLz&y@${na|~RfA&IkqqYv8zLXtqWK{JWI{$DptKvGv9voVK*C@~u$Xqe>j zNTALT|U?5^^3?xMI zNF=w$$dD_lFM|*T{?A}vEQV5|(TLii{I@`&F7OFNBe5a_IEJdL8i7Wac*!k8Qdl4J z0)?@}0UnCc7qif4(YMp9XbHC}NJ-#ck;#xNpbuPW1Irp#K_AT_QPxoF)+!DO)SLTy z*68%Y&Ip zgSO?tb$W#pY)p{C7t3GE*?(QJ>sTXIMnIbujMWkN)(MT4Jl1d@Ph?OXD`XT4jQR8$^?ml2wEVO41`slnGYQTLlA==gst7G3b(VIC9ZRNxG zYZ-9z2YpYn zN+V%AXemizrwdI(D`i77ZEaPcn`k|sBx?h@T@4s?L7~N_ETj<;S-~fXR~tx;p<`JC zZh3(dIL1R81B%#Z#r1fHNdZ6T`jnL zUXFK)={7$$4O<%gT|PeEUUa+3>R~!pSZF{<$oz;^tpHD7I*;PPkm-eizYEjDZ+~B% zRkTc1w>n{IdAoA4{kF;NFwd~*O1}w&@2P*|i*b)quJ14snR{@v%x!3_cfMCPY{kXb zbGGT5fZxQfu(u}FV?)EevLlUlZ%vMjtvHLC3b_0H>C`Rl$P-?U&NH1U>06nZ?v-th zt60u4ug`Kf)izvq_MQ6n(y!vf?YYjEelyv3+QnvJY$*R7Cs&1I4|ST-xu!*&^2;9@ zU;Q=xsgvP-Pcb}$M5V2 zHLxqnE51=}B3KQG(i!&_Rv$Rt-SMc-$2Z@J>t*Hrq1LgNPQ6YwewE3$JHLt1|H*%P zcC;rbud}oCr<1Q!D4@`6?!7o5cKwN>?xTmu$_J(+SHpgb2#e{f9MF5Lb*1?0(pcHa zo{)c))3=j#US{p^-JU(_{0R_mJSyU#5*GiM)qR{_`hohHSj+E@3i+&OYR!N6e2+Wz z*oI0JDJ=P6G|JJ+g-wFz?$a-BrjK%E8E$C1_qjWLVmR!+@@3e5CJQ#AJMpgcyEILe z({jOcC)WIc)Nw{X(@7m&i<{ra&W-#yT0PJHJY?o@?-Q-ti#9*iOsVRbCK|+3d2SyJ zoL^AwFsqQLJYniwb1Qg>`ud)X4uOpLPLs-)3sZ}Wc^$v^o(c;NTj>@viIo;g32d>x zzvys0kKgb7&T<3BvR@_-VGY~n-h|a$ExE@&So>sfLPyN}2<(eRHGqpT8B$pAViYLB3t%dmiJ(D=iUn}=&pLTSho@{)M zCfs?+z4B6J677V1mGH~Wf5QiVrkd)zSbmBsW#hE#K58}gRPd+uov(Z89gOc=-8tLZ z<^RFW`2M_bnD$|v@o&7m4EDa=+xKd#MO_9SK|<$Y&;#G?YMMj<@a{0sY#uWX&Qd{H?uh(?wdYr{3QI?VYp)X!|7iX z?im|52HGM2^uUzwxFM%o+_^1MXuG!NJ}Ny|6?rc9oU7IB2Azvn4h^mwaoORpE@5l7qIhhl8Ja1-qK~scqm3pPvf$oiQBJuhZf2UN#coIJ1=lV zZ|Ab!pEEBm9#L23;_&d{MaEN`BQActcd?>*TCw8K#(uwzk+2jSS1S>gX9>=soTWXC zmtzpH_kRuc#y;a?Wop~#_iBsxF2vvK^JgUY1jp$2jUMZAJpV>Zf)PQ@LnEc;8`8_* z0UzPT zE9Lo;hx{a@$??Q#mWFZbXCZ@+F({&_ymEI^3S@mS(Hu}pei?H$_haJh&O>KuHr+~M z)Yz)&cxB_MptI*kuhX-7$V8qu5zZSfrW0u8lV^FFvT4Kd3s*-Ixi{M(c<49ZvgMtT zqDMw&4u$Vd9`0!t|HAiAcj5$<*hsrdKq4-l+oF3m@*Kk^bA4_a zBuQU;6SEb$rxK;1naDLlIvwCY6(Gq%2e&|H3D72Bxv5xP~XwweCLv~>_xNDwvEC+ zK%wa&<)pYn8_lcJr>AH(p8Q~`ck!phPVQ~KyZDD}>|JQTH0|-|FE+Oyt@n(Cd-adq zE_++cRoAi{GZOx3cMVOz7wXD@WzXTg+h>=<@6BW|O@--;t6wWvY$*NpJu~szSD(qk z&|AQN#T{OMw}vxr)wy}?>)(dB+BY-;C4aiai*KF^w}@yz?y6fi_18v|Q`h~tJk@9m zuVD3e*!zfgTg!*J^hFhH#Hpm&>gHrP{f}J{NlSSexxiy(ygOn*-(@O0;IBEo<04Dj zn=W~JKED%nS92=w#_Tx2rKnxYG?!Awn%pFAd-JMrz$eLKs?(hY`PX~3@_ShvuV)87 zG6|PzdBy$4>)R8Ph061>I+-<$4^5WOzxipw#T>T8SvZkxQG9lBeMigM z>*+d$w&7O|g91DZM9Nz;!yQ5|eb^~Nv!PKp;b7L@#Lbe5fQX?3w}Quwe>2K}OtDsF z--CvOyD!`JAx3^(G_qpmU$!=S`m;!R&|=0M?y;qeAvD}@X!GEM5vrtJMdhK4h122v z?mOLrXFV2G+H*&Ht(z8eO42&s?p&VETlvIMx-30@dXIj)z8UYn#Wag1=cZFZFGe2T zNReDE%j8n{`^D+N^))eW9JAR67lN6v7b) zua%Ux=Y?*u^Siip&r8|fojG$J57XFrPRV}Z9X0Sh?J9EVuKLjjGKH2qOBO%(ibUsd z{P>lm@+Bb(5WPH(kjkjO1Cz=y+V!f-#nDT&tRVUGm**_iUf!105q4+Gj*V1F1%4k; z>H24dVdL( zGbOK{1s>nQ7Qo?j-)sC=qQJvsXL>8C9hJZONA2>9{XU&7-)ty8q;&F4#-_b;TVusy zG+4{8p38L0DBW>BNvQHogn^&&VSASiF7+i@K0!?m{7-{v0#~g0zUwdQ1&eaJGC$W>8QELw_qJzOmCCBUS{!~fdqhU_k?CLiX1c4{#V2<@ z)|ut|eB+BbBD$wENb~12M>Ew7J{EmfFDbSeeywOH0ktB*jX<>0DOYN68>dC=ZXz@63_v-iR68uwtX=<&s@Tq&0Mo!x~Ye-Zj8{8A1So$NZ_^>*xPS`{^{ zu|u@r?zFdTf3EY-d95i|71yeBqo4cjnnLs9~QTHcz9OsZn40{fVF5k%O}D zlTEX0XS`HPtt?cs&Gqv#EDjo40>3k!o#V8m8dg=2NMYKY#zVvQQc0ED;nz;D`=-eq zhnoL*iN}x8A4sN6sgJou%U!nZ;gyptjWwxXrF~lx`fJ_G=qln4waT?TFI=cHd7~*7 zI@B6f^e}NC*)YmZh9f$vOwus(Q*>jQ19x}5>Ypc@qJ;J}%!slzQrXHG3EDQD$+~P; zM==~@cd~Wq!qKwnOMeFI0`BmbmAsoVyF*WJXA;LRp7euWG)Iss{L6`g-tS8ap@VD< zsj&F{MwzX2i26q%n;2^}3*H5|G$kkg3eCCmhl6Eud4JmvxzpPTFtimJM|*eA7(_KFWtuZrQ^2T!9I>8xr6_z7Uvjvc?&Mqqm#=02fy)x;&4S^GfF&%>$59MTmgb+r%H zm$xivzYlJS&@GQSBDSZvVJ6V|fy8q+Z6o>`frp2sHzA5_>2Hs@?=wivITLN&7M0a7 z_3d%q)&xr~c_sGGY2xP$hsu*#KI^29T$t%%6x{HF{*Kh=CkLA4PG>(eHmYv4ZJj%m ziip^;Ekr3JcKozoC(F577LUOo-Rymn(X`C!0aa6a+x_4F5d2G}D!Nah;}avtp=~|J zh1?s1V~=`ysI4?GrYLH^xVqI!TWm$nO#c34{T$`NsK4d<^9j=SbSk%ko5SCAF;XPh z%5VR~l=IFmK*XjlH!mZzsyY62Hk+B9%C_)#{Zc2>M>4-o+V@8&2Am8NOk%Gayp#Mk zTZSH^}fU!jGf@=m3lICM$J&_O{eDj11sz@!#dnzT#h5 zLnn?1wa#e@=bkp%zHITJBj;+`Ir(LkVKWPAo5`FPRqcugW2F**)ia0ZBt=zP?kk$x za=TTnsXVkrovCGbuBCgM%5zzXeYI&(jrG3^xOi)C-qktX-TYzM^@T+CGo9>zni;>Y zn#d+ImtWnrq7c>NA@a(vBZ+@-XihWZpN`?Si0N3*{kA6RTU5s{Th1{{(f#^Y;U&Gr zt!zFkVDj_I`|BazKOgU)pJl3e03R-xX{sm-OQPN7S*?a1% zIz}!khC*JlcO4{J9I8Y=Z%QA3?v`6!{Osip$JbJotpYAZ(e&r(x`R(JOlrheHFj>G zxC&!uH4&KHmL$kUCnntJK$kK{|E=&*IeQ^8<94OCZy=>ds?hQ6ED4zs3Rx!`lb$9< zv4+dIo@Elru4qki*p>R3PfU?6PRFn0Sy7%VT}`#MYh+?O(^7Myg?(lU@2?~cyX7M{ za_|0DDGgSbWYONxpDNIl@_WFc&~8b=hlR(i@bgQ#SJ$q7%$wofv|qbx`a!w#h9hbw z5qCNgtP$4@-tdkUUwb+8dKWECfU}(o?J5sS(6FSBdvoA~c!G2471sAx!i%>>^e%;A4 zh-WHGl4p{qYvVq>Xy;9CYB^EzD~flj#bDsIr?#E{iz$M2S$~`~=ybh=`K0r& z+PfGx$%*7$f2Vft8dsawzQXSsz^{S(Br+AfY-t~MZ@rHAp6y$ib5r)stCAD*3U6Pr z2c#;R^f|Jh{KEHEUiRjA0w+~*-OwMd_Hr9KE&-+~A>g0XOD=u;Nhrg&o6^IbQaglA z%;!x@NARG=!DF^#8gT{z*B#Xc-OX(`T!~P#-Eg(wcAe44tqeiL;Pmw&DRnlk^t__X zQ%;dlac|86TaS7>s=gS#BX?A6;iJmUmT9&WrvsK&s9dTTIRAY7``NNT|AI~odP?3s z67=l|oWdgKYzwQ)@2_VY7T83X8y(NEGg64P>U^c}++-!^zaLTIFV4BuN^Xk5xV-i6 ztBn(^jCbze9IU3a?RmyNfE0hXx2cO!=~n3dhbhhs6zr5OMo%|KwLcsA%cC%$XSq>) zZy?hfWgX{}l2<)G4;;1Ou9@-8)%F`;jC@Fo{K$M_*e!p)?#C`y7lFce`QbA1pFUd_ zy7ahCXZ5>v@-au#cg*zIi57A7fAAA<@REpf9Xsj>hf9>(9MKi%nricQiPUJmThT|C z`bF=6yyo<@N%F&i5bcnZ6s4*UR~(mIQx{qiwk9v=!5MAFwy~K`<%Bw=4qjrc?FeXv z6;r9yK6zKY^-?oyzUw*TloVBEpZ%(t{tVXwI3zOtOv=(PHdHQl{1DALU)6f+js$he z=blTvrxeHkF8%%9^hMfw>-7Uu=NU^s|NECY?L%F|HY3P=Jd8oBi$3eM$gaEha--?? zyhzn6{uTb9N?}i<@6FiPeZK@Vehs-w^~pV>8fdIG;Q0`t^jA5BMO``9*;tnH+9I8A zU;KjmsZ2kXu^RJbQI6aZa}CS+FTeMSO|8HyINM$v-Z8hWA0F!9FX{b3U2#7mOh)_t z?mkBT(Z64LsrcrkL*e=1OFu0v%W2l9_NjUzB{CPQ5sQ~nQr^Bxt8`?Bp=<4JiFrRr}^LfJkn_d{m1l! zgB|i~#0Mr$eBaR0BQ?4@N?fNTqdTu%w)Rw-mbTJ6OGuJa5>?_K*>R4jKt{_6Ho=9tuaLFsQsd=+J!rJsGY zeonYLIVT9%ef&+c?>+5c_35L@_OUs2dhwdSt^E=;J^5eT>UF(#4OUF1b*I>HDK{cs z_E^dZvqVIkk3Ha|UZ=%T9Ch-r2+a@A9F=QVxdWJildTG?70uz)nrvb1s+O4%hyC{i zl~_+3RXe};OVF2V@-vRK{&PxbWU5eQK-8b*AGM z7fqWV#5Z23cMKN43opESsn#)WbIm5>H&p2zHS9H8jsNQ0=-eKs;r%RntiFS?txY%B zn*VbMhei3Z^-w^#1hY;ZZ*GsIp%J9Hp)?`ee-#|{(+XH+h$(7->b9_n5Q z)wNT$bBa9MFd#&A>Lp^=liz~*@GtUthQEL5y7UXENAu1^x)P-<%yrp)$XZz4_TEcRA)K#db53 zV}lR!>f57{j^`x%q-y4u-+OBWCT&Xc9qFo}p%Xmh%2^loASZXo_sfLUvRGHoz3ls@ z@x4O+J@%Y?n}ahrUk7cuz47J=5x%qY`%kb~F!~1VzxhT4ZWWj${kq*uDXZlAWNPnA z{`}>p70EA+-ro|oZQ+}0I_hHSA&^!m99g@?Eo&s%#wF6Dy3LvQbLr9!q>drCxOlis zfm)Qxb5R+QEwmJkC9ixO+xkq~fAiMMhwR%^b9oBUPeVQ7Gb6C~gZ}|OFP$O&?N=&) zd~D{AyV5uuFc@sMC*jZbi;~%oH}~<-IPZ@ublLZB`<$?LTkIXFbdOud>bzSwI#@QA z(ap`?zSOpomUc`|!CNc7wg3p=Q%CPn8QP^@^WJg4{oHiU+&h8%j=PZod#PgVL%E*& zi@n)pq4MfRHn8}^;)j?54FyUf{9V4DaY+}cIYV*$-QBDVeM#E68plfkG{p|33uoGC z_cdNm5e*UN<~|SY>;-!0F+b7?kj)GqM7-;h@Hom!|)DEt0{ z@4~w#YS_mg-5)8@aF4fnP5h_H+5IX0v%{??iLT`KP*o%c`6TLx9%d8a)qy}I+@ z;wC=U8(o@AzopN(Z4EHZo@;<9r?=Le*>q0?xbILtx4W2UQKU~SW$N0w4lTFgdtv5# zCA5A7xtuUd*RroX_b2*O@7dauZnIYod~~04s9{&*9xst~yfJ(vc2S8^t|5E)Nb=Tc z^@lX43XYw;mhkn=ndsou{p>TDgMWuuc3osGIimq937br6^E}$;ez2HoDW|s$-qC%U zVouxfNFB|Mp@9|ZA9o|?-*Xu>hzf9De%_mE$^aZJot{7RtEac8L`F?6~Neb={>*t zNV{TF0=MnFXI0TzW_RHNWEyv2{QbCl-eyM=PVhf<|z1K?N%C*UmDgTUh$-pT8K)YlB^X)kOoP_CG(=?9%&<)iz zMp6VC)BXhF1>2vX@sh_Iu4bDIN`#J#?nJB?24;>J+FAmaH^M45Quu1mcwq+7I7U+R z85l(Zq5(vVkP;UK`c|P4lgAvcOs5R0t&1GyFcuPE2QdZ}(FDbr0svIa2qx&7&T#yQ zBi5owQrj6L42v;kz^XbxVT&+$Say6V~#6?$I)uEjtaC_~f3ChC(D)hv=QHZyq zkWz34`#LeU7GRGUG+44Y!xM0pL2I{>9yS3zAuyBlkd_d*ov;Xk)+$o?>dkBO)4&ja z_(_JOXfvh^fFQv#0Ev=3uJEb=&@f6)PGW2cu=;P%o)5TPh!Uv&y7fg9U$S{ETgEzu zMh3=*QJxAa_|=o7U^Au)fOx?w0F9SC-tejbFbzu1XdOVjM(SIZHJXW$;%L+kyv^7uQs6K5F3;DNlZ%J8Pu%7X!~Pz#h{G|$cjQd zePA;)+0p`Fi&7)ty(@J_BV_LWX-Xq!gaPL0J$d*0lp|>p<)? zlhw?QT+=E}A`rnv zqz51f1%kyI^FV?nkIpqsVl&4zud;pXHrto zpwkfu7bOP-BnC8G@(5kiX%0;&U_c4^$-%1utiJ;KYJh~j0(y#cH9iq2MG*q2PN3cx z8v^!vfS%W3jdc}=lpHiDuY`q(ks*V|iA$seYQIMSCV`6M>uqDdUZ6n+7@H)ENnqR! zq=clg z5s3kc4M|9(kTk2hw{PzLlV+p0*2OASWRzW!k-|SL<^28+Sv!c zbd%DR209FQK^qKkUkPo4K^~Fhmm5+l(pVyaIWS8fCB8k z0UT&l#6B8YWaPivOjxJ|cxA)QR1{f|GUGC&#Hmrc9MJy+C20>Z42_dKzVMz}Na{~x z6k4$UCz!)M1{E>Bfc?(ey^I9vtOopDTq6qUwF=azl?`>xh&uKus~f1QqU`ChuB=2O zjzrnOW+&P-W7R?fs2);8l?2FR5bx22l=?I_;()6<)Im>LN)$M8K>K3gF(^gw&@2tZ zs|`dMB;Z&iLrRnyWDnz|u*x3#XCU_7$zu=i%>`XmAa+wAdl-WUKs*GMuFwV#aI}WW zY84=su6R{o)i9mt3WpL>huT!3(iH;}%vNZa0KGpZ?!hX9c8!Ags@UiPZn}W?EUVcF1 ze|YBzBP~N1+)B^zsFjhfm9`=Jcf{%fDG_O~-vjiX03}wx~s#J(#GS7;l!wI=vo@s0;J zwl=4&Y)-m+`QWDpX-#OfoG}I<=;I0P+yRL3tzGGWy%a%&Yw7}uKr}*k4_hxAA4hk$ z^(jJ18XEJJfx91IQ-uA@sBcb;M_iD^@)z%_idg=lh2J1T5CsVJl`-%zm#1h(iJ^m` z4{fWpRSNa)LLhtBREt#(PurgI3h-F}ok`tKfwmJM#Q#s;9nx!Mp-~WtsQk;Ic3zN0 zAJ-KFwBSL5CB`A{IT}vzHC`HD4%)`W-rdX5$HA3A1d_OqLPsE0dl$3NV6=jX0VFE~ zCCDrxXpu|OAqe6F z1W1Ws@|GM4yn85;OAd+4C=e&8y$i057}Uf*Ij)xjVV4AH3B1}uIA;LmI8^&9#3#q% z!)Wq?_j%Adx8&svesLj|GXO*qFYoA_0R?cuRU2ATmb{$7t1X0=Z2%pKlLokKgZMDZ zHZ(jK?hXb{&@o6_0M^~PyW9JAzp1E8ieH46;Q4h zvuG0}+F3OAB#nI^fkBePy#&ny%YzmrP=a^p~)A>emZ0 zuXdh3NlWE3Yf;QD5uWZSHd7@pjwn2^#r3H9QSO-8D>Gs@wcyF@Fr(9ghl~qji+hgP zvAKKhInNw9R6n86Ygr~MQ|=o2C-r83Z(sVY3dNxAve5bEj-Nj}YAY*)r-v7Q4C@Mf zW4|d-!ftv~EbQOXmE$X;Os1wK_P0Y9yGIuLms^&a|JaK-FY`Fd_C1aLC3!Wo;K&mb z$=gloii;EMjl+NJ`zr(g{TSx)Z~eL|c5vTdX@k_+nk;!PHYL zZwmu_7Z%>__+b9%WNBmP!a{D%S z;8XCmxAn!!boq*B_fmfiw`AsU?oSqjq6(_dww`$gBJET9YR8{7o`?4uzy`#`K~Y`{4%{e|EDqnC+%JPx9*pYvEPYru=V2Qp>$BI8z_QN}-%efRLf4!aT z;28YIm-uW(M*!(Q=-z|$ z>R#Dt>&wgS>Jy@UZl#od|4OL4E#gLrUt*l{aq{`x}FX zSKfBLX`lP}ENoKY$ZQ1F?4;Gd$d#Ykf8&>T-mFq&r2coR(xvB0n7Z19;)fGo9p8kj z#+z|$zhAa%yA$=6CQdQ63ppy(H~WT}s=ps^dwDx;pz+?H>8q6tR6mV}8lPCw!966L zYOe0*za1H=`FeYM;&@udDA!H5vp);{?mQVX?`VBmCtgt>ubwIqHy<75v7M(ZmZ{m} zYt5tM-)5&{%m2E{#ySlieR^Nn=8fg8eafCpk4tnf+)bk632_S2Pzsg#-1jg&+pKij z`8=0Cr~VxOk(y6))~pG6`p*Pb>^A;XJy8CTLeyPQO-ZOkDDlF(kmuT-H7bX%?ulozQzVn67=Z=q58{~|8EZaQ_ep6A(xy5&JJeRBD z4K2IoPe!-jGrLXr>Yn~g{`h3*tB~PinhVdUtt-<*cAJY0&cN>phI8*U9@dIgHBPQm zKOqxD-F7|jzOZ(`$pHpr^z1IlTWor7530t`O=sy8+%hX@_7CUXJY0LWIy1X<6qm*T;9!6YMoE$ zxtQ`F+80I&1u>t9G&`Wu^zko@S>Z`5yJ}CP2ZKDcwb(u zbzOpXqvjp|Ye9o*cT9eG{@Hjdh<3i>q8x+2t*nPcrtpxqr|^vw&)fm&y(|J>7(cPd zP`L%48W70ltIuqmb2uX`alcBimdcxA2mOeVC8OP^$FCliUSRHKNx5-NjyJ12zb|U| zrN8<~_JNg?E~BSkosNn+z>u`-rzzs>(ZEBOvcC)}Pscd>FHBM}N3g{x>I@J6R)2Bw z2gj$5W73+MpJ0XgC2qP~m_Bja1t09GGp_fiHA?s8S`NReeR`g^TK(AD1GEA=ndFrV zZM+lfgd5&p>N*u+Q+$3xP4g$LN$XGb?y`he0{w3n8#UvHISz6kz7!s$IwTftIUjQ1 zOYj#>|9FLCuMGn(MC6+;_lTQ`e#yQZ>XxiY_5gO##nk;q1`z5qHV)5l6F^wrNVGqwccJ5xu7vRTHwKYIfC?1sTh*s$Tod z>9v14+%oa7jIK{vJws?jhU>Ch-&jtwpj-5TU)?v`HsABxnVPmWG5ceZcXPd_W~Mqb za|#VVb3(So1&Wrmn72uz(R++8S?{RO|6+J!_uSX(3_CZRt(!^trr$KA`NT2lhFI6# z(+fY+;*|n-b1J@+_OyO*(WtdiHEp()AX~@7nR<(JQ--*Bw192_}46`OGdK zhuFG8O^yY zf7hzMy}^`B+i%E1&3CO+&bDoemzwn&)x)y}0T(uy-{pRKBXpa7!G_ERd51^KCQ(R~TeQdz@$1E0Lrt_q;xQy3k+GW_i>--x5e`N4!E zlS)Vx4y|q5Y~ouN{ph_s-?hgh`3z=aW-pwrI@ayUXe@O>?s5;uk0g8HWXgT4?H@Ku zP^6{+KetniMe>eL#tydB9ft=DV{>Y>15Lf`I=REeS^x6g=}*2ImD+eKdZIiJRnNsOKYLH|m7Ni<^Wr3Ov3QZ#>B0Xrla}?Bl{`*o}$V z@_QFf(DH9SNZS&yNy%HM?X~DagJ;pD2Bb?ur=)CjgS;}+_ubDaH9!AZmL8YRLk>R{q;*16X)Qle! zri!_AOvT<(I%b!#DTw|>)~1GE4~acnKReyzc0+n^MT+)~w?P81P`}L=Zr{8VBVzIC zU4{rRrP^_!e5GzD@3V#FiXB-TuGfO7g7)5M7%MoK>_1FrD+fc=8Uz#!{!k#nNyO`U!3 zky5SV{H6N5Rr$9bF>m?)Xxy{+uxE|IJBD)-7X%iSMQuLm4zm?j(j5^##V*=$qbL3@ z{So0=cazj$)xz5o1Iwqola1>6J{&LR%(^YS{RcPVus@t>sVrb8+&vwi!1V&4m^a}>)#Sbl$7?^9U45=NEA1D3wLx~u|5aVdok{wn_Zshqr%t&mTY0Gb z{<8fnMR$RbrA_U}Jnygn9!-AKF#Yy=VcUlpj=w*nf7NeM?hlxKaK1vml{8z>_!<5nx{R#0yPcn`Uvz637&D&h}jDx5Z=~ zXO9yS>9=AvX`I_(GrFhH>6Kaa;X_*ukV-e}gdf{EoBoA&jP1C6rR3TYyyHy3&-1Yx zdyI{{Dk`4+UW~A)aGm|*#D9S64a=4tmU3m(`(ND7QKUui!cE6KnLh4`5 z-=Edm-oMXe&r+P!d-{A3kt%tJgZ}W=Gefhyv}xCM2aV3uF6Vn&EiJ!rKZ2lcWcv*3 zHO~=@cTiKZjZ~62#2p!PJ(gzc(?Y|5#^E1%PtQGd8k%M^GfT;Ppf2njd!jY+%{D@Ih z9ns4a;4?tQ;-^C1(bk##Gb#0N)&8WidhdH_;dfb8{gu$KQt$TZ<>cqn+Wu)(ofC(C>1(rwIyY@+N7G0^Z?@6ES!<|X}qXl^ZQ`D*C#vY$VBmi7_v^b=*x zVKy4ohv6F&gLYaninQ^bGy1pTPRPXpYE371`nS!CrtFv4`RZ#qF6HygSZw^LI5+Sw z^i9)&g>AWc-E*EsbR~cEmKf!;I=)-Nb|)#(~Uo1r|jXwvC?S%^`ojpS5bPXz9rb@2S7_ zl}?IU%Hn?6YmY}_{x{DrhBIDfVE@iAVW5%2xU|1hu4Ip*$+gZ!ks2p^__xSb%Cbvz zOD7S_hqrzm%(;co^zL|ZWmc2%D2moH<+3E|)N=#2+9E`g* z4pTFQQ*w*b7zQxVbPhc!p63Z6)uvc^?zs)32HCzem!m5F9-@2J)JOTX@r-CS9v8d9ILUy2U)l34OLW$D!@NaH9qg3IncZ@qpOz!A)K+mEOv-ifR3q;YRcN@ z%3H}VmejHlV@XDAqd76Yn@X-pZY+qqcWPjY%0qEzkgkpFcyrJP!TlWf@|x z(Gbd~e1DK{H$xuso>GDu-%^d=@wD>S*|`pN;a$MWk(KN4`f8US$IPOjkk=Mvz7q#a zwkfN$^XXA3Z%oSEbAD4}?{wBe55vyfjm+BKj6u9n*UnKz^Cmv}0o%0aU3r69ta3*9 zt*=HF%A6nbewrOh5~@97=+?~gT0y^7NYMoGwg`jb&o?VS52P{9;kfqyDq|LFpSj6ng?UDTlgPyPj>2 zqK)N!CXN8gH=@Dma-4(YHnw@-@2aXlytwH=iWNO>eJ{_c6Pcl>m7cPH2m>L?Q?EAp~7Xc-52zBiKn?Y zTD}*EKl{Z-^c7_ckM=MdC126OuMvKQO|1Iq9s{#Vq1~u}h&-x5X;05Yt*m5If3?o} zK(o-mS2=`90Z&dAy}v(8hTN{H_uNYHJZE?4yxX<$%DWDVdyGsB;dfqJb6ggF((>rg zE{iQW!Ul9)wo&1-w4E$>S>tDOkgA)cXD5|!y3b!7jyNlEj`r=@Z5)?@u#6ekIOl~F zAMRwBibEKE>A3Yk$K0my(80R!quZDBPF?VcpuPD+{D-i~JCFEI)xVqi-RF3e@-7Po0-MKS7yhnfsjfT6YIO zB0ttwbytgl+o3^&!ey4-BGKXUDP?A}V+YdreeF`cY$`wMOEcjbT)1t#HSzheEW73= z^@OiQe2?|zo_R=f^n8`uBX%M%EJVq*{YG~E4&KB$|Iq%&Uu~7%T*|Q@Pbo0iyoc}H z&*<*@ThVmIRE#OWN`B|X3EIXqi7wNPjUtXM7VpYFDW3JWq0Dh`3yeMDtbj=3tLHHP zd-3kYQ=hKBi5*Or)MMNqccIZl>Xhs4V5EBGu{-uGxg4h98$GH$(~K;cJHK}-o8tZX-C-j^&z_lD5LDRO_IIq=GV=Vj+F#dKLS@*tz^DW48;th31yz_vJtMRuLNb zU0vZ;(DNC;7mVT(~ZlW(5q#DvO578h#)B_P9XakK8 zhVD3By^og^C)h}WAoL0dK4}no1q6sB?-dY)ig^Vjg_NAegSAF~tM8RW8xH`S7auYefY74Q)dT6Tr3N5Hk#ezNMuS9 zDmD;HI7!<;pp6&M2mpb?$(aYotBO(twa28_8V3^K6UcVFJ}n@NNR%54rKrhZY!X3_ zTjLT+EQ#=H4YBP7Nl!t{VhK*IgX3=KDSKk25Qb_h`fss>p_=^HFP4({9Ve)EMxeLI z%Ei{r-p9ckKY>WP2?Ef7)@g8R9W#^#O(U6siC1(;Et#b31~DHS=yC(bgu%)PJ%CHz z*TyS7M87tP))R2a1P6q{>09V2X56n$WMn{+P~ky+ZGwv>j`JX)!CPP|SO)mk7#2}o zmniuW5-`bGg{1H%Z%KaawS6cAfTBM(IDCoy*pS1QWPR+l`lL|xk(4kg__0BJ*qL=m zd@$T@H#lmjVtsB);Wap-Y4r6t4OGW*Z({us3y&sB5^5PJ$z7UH; zRNpfh-TiQsOb0MaiTXu~7X$Wx3q-uiLUbYqAx=sn6&;8$V4MxOWCH^chPt|tA_kDW zNW`lw#8yO-@~D_d1o460{gCj0Cib-}q9oxBtu$U)Ipyf#VCzL_`VL@_L`lJR_hUE& zcRA1;!hpf;H79BWN*i^3x*+k&3J4OS`jL`L#e8gF(Ut@Td;w~KIZF(+|I^1_tCk9N zd?6*03YI?@1|Mcq3k?s377<+C=18HGJP7cJS5-hBiIhInC?sS~V>Y!|l$eVsXqaTJ zIctSdQ7jT&b5Io@YN80l2b`q=jXY3W4TF~0S0=0YA@Pa})S9#Q^g?`^0}y1FMyb0H zo#s##$WM;uqHpQ-{$$xeADC0#MH^(D`~O(`?s%%-{(p%iN%qLzA{_I`4uuf1XZGHE zhU}R%Y>|;D*%eutnGr$~Lb9?qzxQ#D?$77MIljO9{OxI9{J0^1x65~`H^gGG@FIk59O*56!eLN7$@ZjJ)5mtq`tu zul7)X4{USHxq59+r*Y`}ydA3Cncn%eHRP2yZ#V-gWKWDrf5xToJ!to+$sdru`=%*KXdb%QaO~2){ zYRRPUGs&qGh)hq4?tfKL$Jx4+m$z5mx4Skq)v1@ZyFry#3f?Y!G1DuWcd*PswaUM@ zyICAWXTH)p=T6`=<&)Ms=nX2+)2$S-QvIZ-EpAM)u)3hjBl>WW_M+TiW=!YR zVOe0#x&+UxS6|I43w>nIbnlz(H`399k^u8ruijO)a$%LJ$tSI?y@{(FzB-G03(I=y z)|ApFRh!SOa+9x*8U-!g@tnQHhm%BTvbKG2N|8~_s4mMVZ8&>d(aq#-0B@o_c31C6iSYODnOj=NlYP5O5?7I9SPlEV|7$=F<|WLHfcKO_{gN;OH}{xobPOl<$bUlh`D98-IGRU{6zk`K-p7 z%9Fg0Vn2Jo@YCIIWCZJUZ+q{GY-6~M5^wk2^8jzoRzIQun+2S`@Tv!OV%WUm+mdlR z>MhIn!yOvkH5ivl*FAl4z6FhA>V!Celv3mJ4Obu;P;lx)RyOBV-wCdAu*_$yzF zYY;aKKRwa7QTBs}ZhEEjde^T#%e@~|!s!d1y=Fqh1!pL3BnzI|n00wJ@w}y|-ZY2P z^u}98d%+ZnX0}2lUhp&JK+0>5^6j8@4z?AISnq|v-y)$Cg6lsr?tbj7TCw{TJZIj{ zw^ut=<-#GZbv}S|F2R{xE1TbJJEV8?d>*$_Sx`~>wAbj@9fOpW4_+MP<*!V}`=-Bg zw3J#^wp^ssGExl4dtCAzmGC;7?N=I1mo-D{N5k0lKg5@Hyy|~Vt9>EE*NJ(-Lu2@} zN8;v|eapJ$C75R*87Q_nLIByTwJHSa-eyr3%H;Cpt`_o&l& z0=*0`^0?1yh8xZZsAjBCXS~>)QDa~Zetw$){{cm&Y@4Xa)rEz=OX>aJqCt$EIfS>= zSef}4r|LGMsJ$K%+P+HpeBqb1+?6?6tILnpVjofSatQZ_+7>$EXtAUVe2|?sP0X4O z4clURK@@Db=h@q>++AdJwdFhm-fZQMmX)GP<6y%}TKthryZWmI-OZh>Xz42YRsdj5ZvynprvnjzwKnh>V!NDwr zGgny5jP4wbMzxB$3bSx0$u-R#Kbp%WX0w*hNw4QV{@KZBL=b*u3M9MV{@Eh2dfVh2 z)4QL}jqzL<)9066xXoXMt8<|owXR-VyG|yM|WWG8ap?X%! zOSCrXM=`g8ZRK*;83v=KZQ8cRYCh{vk2|m1r(St&IuTgI#mt75E-Z1@bo#6;5B}G0 z_@}1gH_yuUH8@oKth@bbN^YKFswGU@yC#N7%~)hmzrvcZYMKXi8o-|Nc%3o z>8=i%!b6?89X)!5yRI2;ko&&LJT8~iV5B6!N{pfvo@a(v9y2*r+QJgSErJmizAv%( z%R^_Fk_e2$9Su#TP>71VQfW-*S)WD^<5_wFtlw?tQ> z;Ca;}qk~SGmHcB>`4m>FU5B)G$_*S#nZ!lkyW4N3=oLR;l=3N76jeBy23 z)%8T0<1xCGoFO{OXU}Y}JWzDM=y}0-yh4T5rq1Lm?wSpPH+~r!lpn=1nH?IJsCg zgzfFdvN)Ybp4#s)=nuGXf@CNDHyA2N#(Je^^mX3RM#M{X85CV5^5jHgxM z*nLNU@NqEUlGw#Nlq~~j&TD~mgr)&8KMcD#ZiJEWFwZ}YA&Ja+LI^Uy-$B2Qd(S&# zO6vS8HHkA_9p7FOZ%|hG%0ESu1%K61)pP4Y&8o*G%ZzujvAr*>$lf<>9!4IPbCY1~ z>?@OBxD_$RjksjVp(WPx?tJork3#|lrkOtv)VG8M>Vr+m#W@w;Fw2LKtZC@@J?l*u z7SY~oxa{B zTj=lo!PZE&{m#Z7^bxa!kWb^OgjcXwr|qo=F2nlHY0O<$Cg)^|OeKA;yft91q+${q zjKyR0GllD@oN|-h3lAU1@FEUZA)AvJPKy8XNNv zhphyb#!G&)3)yz+dwf^El9-Y8vnfd{X!@PAFz-~9E)K2Ud!8ou;96beM#SU9p?lFJ zgSd#NhuE~t~*W*AV-~jKyzW-MkkmCVl-crU;zAD>;%S;fR;Nz?G`^c;T8= zW@YR*kCq(I)a9jt(n@XY#XR|snX#2Jen8#YFO12F0kFJQ`0x^eBOM!ldey0b?~a@IYo)Se1to&Dl&DwopFGG~^DbH$2#(DAB(ptKE@Gu*=` z>v@tLM$MR$4|$Ekm@~~A*$MCn7sGkIbm5#I%d_@E{n4&ZQa>v=TqY6hn9`N_vRFLW z%Joi<;nQ3iSz_oZ;k%_6q~fwf_(DwhPrqZ&2?X#*kpEU2sv#wOz+(EtFG*#+j-PQV z=p%~)ra3WdS{nz4TJ&wRfyR$G)Lv|A^G2`t-ZkNKN-XHTbj) zXzQQWSvrthzUFmC<+Wz;ySG>0%8M3@JA`w1JvV>&_QDSfo06hf)TCBy1^URRuPMw| z6)O8_Z0GJcRR{)bXpJZTC}R+2yeIsVeqBLn;&qELqx*t&m%iHgW#vmb7ICZ09k{lA zQ(ydbl)VN0WSBT5!!Tm&c1B!96nw4t(PzEtpc(3DW{l#)9FsCiS;0; zjhypU<|nMCC6881HM14*+p_mf2&{%?zAe6qHeMe6TqQ*5vtf?cKFt>pWlPH$XzHS}0{zdk*QOz^Z;kO!+mBqpZxSkP%@V3-W+r8=VG)@# zLLc9pu;7SRan6k){1GQi#7gpuNON%HOf0#6Tyn`-@Z%fQvYbsO}#jDQPA(AFXd@SNVfk%BV*2m|*Da0DVIKHH&t3KWBivIYX)@T;) zwA&mD`E>I53)apoT_NpH`186OO|AeV^mWUT;`e$7UptTva!1|-#jsmu^&0;W`L6PK zrR(Y3+Sc=_b{4fTSuAYe7ZX3NkS>jZy=j~_ohj11UfuD!(xvO-@;V-4_-&8wxeram z)R;u}FE~9buSPCYMU?7!H7l6#-~C6_HnHuI$Jsk<5754ItzAzXBYLVM1>~DGP+FHbi*+Fk>f|XudbMOM)cMT6n!n2N zx^1()`PZuJz9k6j1{%6HUx6hG$6h>WH?4O;k(1wTW+ z2!czAANfufbJ8{BKg(3TfsOH6{6MI-#s0?n&;nADiydSIK8OsKTyLdEKx3+N>3S86>bEb&<$vB$;la zIFByDTrT&GGpMQZ>VvRoX4lVePAg0+Q@N3Ja&XN1sXCR!2>yukA#!`Obd_1T$|*C& z@!ENCubeIy$?J=D9c|_~A_T!IuAhmnTvg{wQc zA7&;qx_XLC@#!xyVYPl67ff$0D2dP!M6NO~scO~#Yy}{{M!LRP#4Ql^{ z#p@nO$77cK-Q3heIWm`R`%P_IoMFCjnNQ^HgzljxAc_W>u5=HSd=u$l+BR4#tiG_7 z-LD&DmsJ$bXLtG8Zv4lpQ0F zbtj_NR8KEmUwIeOw>Mv(*L$DBX^yl{GC~xaEd|9DoGW&Xw2z|mN)KM$TMdOi$z=!j z7PkP!m=T%LXUf}ZEdJ-fVPeYhsAP)`nk2%KmzOP^cyYAL@4rQ3yZz&Ou8W)d?~6H4 zneDW1vkS{SC0g%Y6e(vJRHt`t_W7c^|0Sw|R=1Fv;8q`J1a)@?@%h+v;nTDgnx0pA zTh>TD$S6!*ug(!n*DLKhB?qK;hys-j=h4-NelJ!#ai|4c{g`Riyzl?MZP7<~f z&Z{eqtO@SH<=BuSKt^IO3X5FRc{d1CZ%Gx(!mXEV;$Wdvko|@+ZE+Ip5`KeOs79X72 zG}Mf)tII!{4vnV5yWn<#hOrqfde>}5PyUQ|S8cMU2Cbv=)RRZm&th^kJn|a_YD_sk zol#>Z^8cQD>TK|B$}StBD;l)sA);f~I|<8i1evUC$xnZ>MLQLtrscvd4i37yEQ2zo zCt>!MyHx^|%v1B_dZX25(ub=rb(6ZWE`B(d*Jv=rTaq*MDnE7TRe0RW&=nFXUfoA~ zpGU(4(QR)Tf~7{i>y3n}^FuM7g_d_yimmO0hUkU`hK+rdw&J*On&|1sO1W71d{Jz4 zhQ_V=jiqa`Ut*laH5cj!M1WvpC%>T;sD6)A)1sr_4uJv>bL8k75bLFRnsDzz#&gj<&Z}2#{;{{@wVW{;s zdM3yT;m6u{l$n3C?d?X_bh}6&<;{85tYKn9e))Tx&+9Za>4s`+n=^MT9vcvTz|3(; zc{@GlC$-GpyV*gT_10u&R#xJC&g;jlui_YQML0a2oD7aKH>2yElA5;V-Lc1PcPI&} z#;@@@XKhWwqOecGqxChQ5L9C3N0)^0JFqd!0i|HL_?h2rk=AF=atGcS(|KZ0l=_VRuDO`=?qTaUEwTL+KV$oIeLX`{<*fS3^n}~@$Gm*r8r@+aGNdvc z$PVJdlMh>Z=Uo2rTY6WBVUfeYg9|#v-M)#g!dJ-_tWkZYn3-7oW#%0)hoh+!_6Yl* z>LhM}z82pnu(u18zOYe;b!y}Kf>?8tS@~R|bVAz~*`{3D3IAI?W#(Wm`a3Bx4;?M* zFeP5dO^BKD^b5^?$fcQ34#d$8$R{vxS7J|jVt%O`uZW}x6XR+Q=R4U}d)yqkhwGTd zeRg0!M|IEQ<}6i{q8|LMEO2jrrG6sqaMssubA5@ks{~)`Gk%1oX9a=4?Q|t(nI69f zYy=w&>uckvm+@pYZO+!oQLTck|E6R*DV&R{t1HDC8wU=h&^7;^A7cCH(`ESL5m z&RS?prGDvkB0YI4x4w0mV! zLO+GvZTDttw(2VUPAd)H+wN9Szlj#o$p1m4sXlALb^K+ECPyVD=<5s(X0Y%`vcIRJ zE3R*UEZ^x>`bpu964SucJ02Ne22R$NTg;0qjIN{7D*BXkUa~SVxyFAK4ul{fZHFzYuUkz=>L2b3=B6vaNP4ZQqeo;^Y`H@ z7*y;P$$}L`H}F4me%ui8izA*y;RXo){UmzyG8j_nI{+T=_B?L*#@193wbx7$3G^1)F9;ykK>r(Io-6A+_UjH!_X8LnnkT(;W(RBb59F9XR%% zaTZ?gqumg$xWLjO!bM(WYIm@Nc(| zl*D6ZPX*wr%yEH(Oz#d}O7|dn|6inZk72?7r`{bTIU)!g$ZS8N5ut;o2fE~UI0lAT zqV^<#1BO?*J2r4mHU$mC2a`ELj1P3+G=BmIsN_fFZ}2}Q?jR=!3!I}Ddijv;cLEA0 zFo@jH0*wUXNm?B+=g}nwQMe!(SA*L6V3q2Rt$|6!|8BJb%n4UzjP4n-2R&A(NFc1;fFeK6Q%{yP;mXc&k#z9G5V$8S zk`7fDq2f@8@qu_D4c4EtJX&=T%z5;vG-TKF?;twhAwhuhK*kNGvk1+a$RM61gh2o2 zL1|>lcu-qIBL2@*JYs#m6WRKovUrH@H^{{B4s8v^2dj{X@qrH7)&JNUa+ml!Yl4n0 zKSytRB2&vdur(AStU@Azc%lmVPpP~Urb{F>=)l%cu`*a#BNi(=nW^FG&#_^RN#A+Yy$AyX6?!*?T}n&f%-#!JQL9Km&^5>|B5f9Ux`^ zh&%HEYb1b#4j|CT$$eZ_JjpE<41%jQ$2H>zS55@*V3%yDn%cp-8c=T#YQP;R+x@gzQ?u3R2uy+Fy zhJ)^n{P)UhU=UnoIW9(!3FsZh2oxV|KNbnTe^7z-#Lnn*h5W zc1I@~B=;EDf-&?6VZxz^h3ZZeAzW}5nPVg5L`CFa9riFl4xs*b_B~+{L8h*E7$67m zP9$LWZ`sg;>-FC?gbS{Qn7G>m;&n$=5o8K`T%7+9usf7aM0kEDGwuni2r_-WgXrY~ zbUOKX|3oi9SpgFG@2m?~M2<^;$W--U)`j8Yf<_28LVTcquZ?pGkr2OiSz9}O{dNMo16_VqE82H?d{JYq}p7WuZxp=|A7Ttek zW_WeIW6gZB&tgz`&`nsx=s*Xwd4F0NF5orp2qVLb>;3sca+H0MeG`LzB7s7LX~H2q zz!NoF@alRH>mq8lkg4p!_H_@p+o5V)2bhnu^NE}gUSscACp<|dfo+V#N(thP@e{QQ z@Va`(dg00LBQShiz;{JpJsL4Spa=igX9ma`@ZZS>UQq9kA37S?8r#{xr5X@2T|H>Z z2Hsw{ft1YyW(PP{5DO`uB$ywH~2Q`-mZe4roOG6VMPE zha(OWuB?~=A8HOl=8&x7ucJhwu*U`FKR7<V9cmSX}31ZjW~y}7`uGz=dk-2kkcxgl&zf14X# zWbco;|6E7^vNw`K1HlG-$NOJPW`cP@{}$RlCP9Lbu{R&$gGpxc0&>DIu*VttMD7Sr z-;C59kz7~+k6;IQ?_i>jARvfHs{wLa+kFwFi(-W@GMSg5`)JV{Kt-;%s4K0xuuU1O0T0$kG5T z;E4)K?gD)7c<^sMG1GJ?um;gOGJ3ugl z80JX~4o~BZ)Zj=84bQd*YwC;XV4+3eV*XLFw#af0VV6 zTxTGdfNXb2K6Effh8Q5UE&UI|qkR&d!THeK5R`wJ8cCIbO`E_lLSLm3V?0s*hG%a^ zYU-0*YG9N(uyz~?WzN4$%?%-Z`#VL#Q#V6Ux;Pn_9c61I1qRlRAF}$uBKyEMkMl+l z=fB=2xglIuM_`2eNOov!C{9yr1GB%1HZlh1!|;akBprq~LaZk&d~UV z@({rqa>P7DCu+!f;mXc&4LLI2=EJHD#Rn_f2S<9W!4LRO{}bH+d)83~hpRZ|22SQj z5{rR=2_l472H00o5ELPd+z#;xf(|Hx|3KtFy0w5OZ$5x{{2T`e8GSR<&>&9W3GmR) z2bhmL$P?Kap1S#1J0qzwhju=I2QxE5bihCOXPMzSa)KTV&)Ix%hDO$QwtuB?WUS4H z?b!jq!}bg@!V_5;p0pXMm64Si=tp`10f4iTpZd@pA*heD^U1ssp1Bz*&Xd#{;A1@x zaKVPTBNX#-Fi+-=a5tJ`-4R)#fxflD@Ik-hB8CS7-q-)x_8dvS4~A!MhWewOjlF^6 zUml5+w;6gXJj5u#2l-Nk803jQpYg#J7zCfs{>9jgfI^O!7yNGuxjA7AyGu77k6>?z zuH5*fQC9J4o_+R?AH9?H8SZ;+jS;(daL#K!Hlgb)#G|O$j#<-JQ0@POF%zcx!z&{{ zA6E%CujSo0pQ@dC*X8LC(*xOC!wY)8V_PRkSmW*Tram)u-u2wz5`lfcpC%E_8WA z%Tt|u+fpt7bKH7Cs;Ji{liKvJ-jJ!z**N)z%M9&zd7t#=-Q?bxN~`!a*5PgB0@~@_ zuHM_(8JLNq+BYhF%p|HNU%X|u`irA8ZTFM+xM-@Vpgnqu$D6cQhVkC<#acrgM7?>% z{Y*X)SFJd#dNa*@e3VBOdi!L%*)EmdREpKG17yrLlTQp3&B zV1LJ4pRafSo!r3MiATp7Zknd!br_DQr^CA{3_^xUtU(P;KIP+9@OT7B@W z^K@8_#)p!|6t!ux6r&3`W#Iz_%E9*Ks;s{{I9s#JJNZjzOXfpxyxl?Gyp5Zrq4`O^ zR`~gR`Vp+x7Zc07oZl$c3OdgMn1-4~aBckGpFz9e;8S>*l|9*CP3c&$o%*&5)F+lBDQ6>T+*_(J&O#vg@e_XTSv z3Jkhlj1#PVsl&osP!Y~c?@n^BO;XgI0KD2aoL^#s4Jt;!ct3N>J*F7G?(>RH zxk}jy&ni6ClJgrBUG#AOn%)*9advqr7G*NQ-ve78kFrZJG|*opdg}Ch9TZ{i6|PH@ zgbZ!m1}2+KILp&ElyVCW{V$?^7d$QXEh$bLB#y`>I1BJbpr6NeKg%a38mVsprg}e! z?#bI8nIrAN;p_5nqxbg++ASHoWxdp~Q(BVll)tSyZb{x@nw)6=xU;#yBZvNuK`7ph zn$*u1HJ0+{xVzt03mwYmb*JZcF1Kq`cxbxHO|fGGzdSNu9+XiV)?*vl>>Pb+Cq$5Z zLGk7boWl60TyYaw}aR zvpY@iy{583=Aj!rIXxEV>Ek%F*}^C`lNHiU{(xF$UgzeFb1NODG%79UK(0~RyuN;aYIZci~K z?vit$?AxB&v(ZoLG`)BC7Ute0zg?QhMoxK{nZt*mwMLW#Sq@Lyd~f$Pqy;VD=kPrFI`K5>(g?WBrJ_IDYT&L+a!OYj3`*>NI z%g$Av7y9XXA49^8oWp+LHM(=FZR0i9Fa6*!B9f=tyw#XQ557%Oo+;bB@!KS;ky-M5 z6_Jpbo7h>c&y9=T5oE+zV#K<*q)bYn(@(K>wW-HjbiZLua(q4Kpx*QGU4M-wdEW2K zH($q5kgTH)5I(@N?;d&j)9X?5tAKiud0r}%wcqy#Xvo@10pR^wzjiBMZtqB+R(P?V z%rSPb>B1WUle6UmEW#^P3%Z??%*}?u)PGW^1~0dg9Pan<$b5 z2;6MzsD@BJJ#)CAeSLQ8-RUR6Eo$T~Ap^4Hoo1|txHWx6Wkj2cRu4~EUzxEgE$O%= z$MzC*9w{GTjpJU=g0i=$H))TdSv2spGV0fWk5|-)Q>jlUS`sr^Iue*axe!b$qUa5<|{)99GWCO;Ev66u_}$QR{r`1nuR z%mqSG1jbOdm;is-57gOUQenFJr80Bn*7H{sGFwV=i4P>T)*0Ie);>04h0zQo@T`MZ z$m1qo7N6a`F(<6^stDDWA&h!jKCy=IM?4Qhn5KaAU4kcmw%rfuyF>UbCJiti$l%A% zg5r5%J82pq)|(gvr*ibaFs)V7QesU>OOsAmeWj(k9@DfSpCO!G?oMQ0)B8|BjTIDT zxm347()%M#T9Q}ZyVor>TC)CW=;_$OIvRH$_p_sZgx5pCdVUwNE>$bn4R#gd26Q(U zJlrIx7-^2NnZU`pAHTU;9^pDYH*1wlj%&G8*mG7i`btPmzn% zfQg&1>}?J5)J-X_7d1Bu$liX>g)x+C^ouWCI?VoEyR(H#b+dVPKiZT+cU`XpUa2zE-Uso#K4jM^Z4GlB zrduWxAK}!J^RlMpU(43SWEH1PlL*fh2tLhS3f5DMH^dbvKug1XASiU^iph^kJgzH@ zLY1bamm19R%7jyrC?yT*_+&0Rj|S-7@SIUD>mQu5#!BN9#>A^)OSj@7?RlTyz9jxr zB1YGOlxHA*w5m@M?`=-rn?FuL*ZE2!P%IlX!z8~cpHXCGk7kQ4e|YM1 z@f@Mdk1GZ!tCS(BS7PsC#+)f^3&&gFUb{(uN)TUsi_DRJIhrwakUR9lQ>t_5Z*NpZ zC`@>xO@|sjPr;!EXjhUO0>tB@3>~zRYIJ2;EwR~6CUNVCYP{(D?!EDA`9OZxAN@CA zb3eD6H(zZ&>?nB98>{7*@SIc+g;`2!B%gt3&~b6@Z7Oqizo*!_jcW?O4S9l!>oKy# za-u>EFYFi)M2w>|m+^e%Yga55ByNz#F2^nyYQp!DJ+n1!GoL^qvThuB@$|1shi9}7 z_Du22-)r!%`vabV8u8o8;x^+F#ZL;8jZ$67Wia{AX1&T<_qea$+9+fL9BOhW>0dB$ zxlSr88+R~}bmT?3e=POqr=#gjxEFDn7Ey(C(9Dx!v_j1JD3#Bcx26u% zk=!WJSa~R=WH!WFq_Gkxr349!hz8=E#ZAtMSoQgDtV-f4H_r6{neXM#u-Tb=gh4;> zy2k0e@T|)DQKo>Xut5W&qW%WN2VR07;1oXsr*^7s1<~k~?aEaSjW*1%V2^h1_|lJ2 zs6HinEfu-Zyzx1zSRDTm4n>LA@9f`qMrs*;qLDRWg|~5h43VXyA_`RzHrZ4h;Ipt? z3cMrwzG3?w0h6L|U%jxN8~X3W-zX!e801#Q-A{eef4K6{(VRO`S5WMB-^xSfp}oQz zDvUg_pXVQj0m=L!rabK(FO!U&E~kfK`bJ`g%y#>=JKpVISWOhq+oKD749pI@w1^fv zhS&87Q{M3Ng^!X%u6J-3R*Yk=CDaIq5a>JbP_g%cL=+YCB{*I-WaK4zTNN^v5@Ff2 zCza3=zRKw~B`Nj5x_f8f%KJ?6_dyv$=Uyk*?SK+rEPS6EO)rw*(vXZC-=xjZOHA^x ziYPOs(-g&faGH=#hp)G!)Vj65Tz_4V_DVC0SkHjW$HQE96wJT4|`@D_k}I0 z3l)AQU(vsDS}NmTsztTSF0`bi$wB8ZA3X0r6#@{>d=*ay{Kh`~N_T)1hXk7urGnBV zdPG$zW@1cqT;{ESZVWELu=nSvcksGKXDss@H>)Hc(OGJLwQP;3$!lcbN-07A;ooAY zGOJRb1FCovey%x5;nVq$4$k(_aRweE+(4esQq8xD?_~N!O7#zZB;QWbExX9z_*h8> zmu2@A+9Pu=SKZCg0nCS*Qs!E-o~MkeBQ$UQ!s%39pj~xH+xigs$#~_REJ_Wpu=lAk zA$Nh$a{{QRZl{Cw#DX^JHmrJ-J*pNSILM9{m_M=^v#)Rt>L9G)+tK>!EzT>knw40#y+dE~GGg-|mWX54s7?fSaw-^wyXbvC z?SNKxkE&9nf3e8j$L^k_Fjjivz1I5C=#gH(PtM^bWy+YSctxS?39n^hYK#m0rN_SG z-H@y0HRJ+g?8FLfkO!8^*9^;y07d zcTIHSvhlO05+|Azlt$CtN#nh@X@#m5?UKv>tbcM^ZfZi39^TeQ~OKV z9p9hBOZe3PN&uyzd_{D>al4mZZVlhJFu^uPHRev)S>cr5+b@}W(Ih7oSraK!i^lI! z&_rk%6!xqb-@u+%&BzmY!y~7#5YPFOj(J7QNfJP>3sQSxGI|ZxKKq%h<1-rG$p;Aml zudIOJy5r0_T2|?8^}&xk?MhhuoZ>2=J%#l62grrg}oPy{pD>Zrx{^3~Ry& z9J`z{(pUerYWtn}7ROdV6$*)oW~KR6&NJygcXx&_>?XeuXkIM{2G@=?bYSb%OWKz?W?)+^LtAs$>)(3;|f_X_Gl7qv@)qKt=W6hAg3lX15@C)i{C7g$@*>` zdaA=@GE?_5I&rD@bH73%-1rP3%|1RX*En%J^JJpbz+2__Wa`R=&Rjf&y_UQzcCko? zAW%+&!?Y}vK9qj^v~^m zMIW5<#Svqejq>qTwD7fg%sqFWC>+Uq>pw`(-s+`&JggV;Yne1TBhq9labWCXQ_1ir zo_nih6$5)8t=+;U+a1d)grg}0XwR1=KgwL}<{?~N{9Q9_LfU3N=)a`Uuj>Zx-odk& z+gW2At;1+Cn)8Qnpbb}himqYU+9{J6V+WG)f9 z4jU>@rJtLUn*HeYNw4NU!Z&-dRfR!?PlcaGJg&$^k$=)B#>KQPbfzJa%=~pNbwx$s zyj502d4fcWHr_~#bznPA(082oFZ>B=bg(|qR2A10pZOe>{j-2BigPz=9DSu+*LiBp zMwFnXC99gp#^CgBX_)SkHh;7UHMKltAX8+IM16W>nvhGIYK>N+R&s|v7AmHcF7cfr zO+Uu4u)3#NYG1tMaY;k=Ib*}d86-_{b?Q~si6wu0TJgZ<$+pQSyDPVirusp{EG>S% zpiM-)=S%Mp)5jQ!0g>1?x2m(@LvQ!ro-fuh(PLEV*CZy!)G>Wr8<0)P)<3v~w*J0j zwMg+pX4RKkq6iX}_wGD1WENvq#`^p=j0%)O31g*aFvZxm>XOx-s$JDubI zR+EJNj_EM%o8Z=0L|kb}E)Q#Yb$-1Yo=EXr!CR)J<&nqf5gX3Vk-a(GmDQ;CkVCY; zCRRq)V$AN%YjX@#A$FG4$CICp@t-UYPwt!#_*oj{{HhM|98{R-bDl_dZcTYKa4*`MUd?*zJ)Q@Eux~>|GRfQJ?@?}NeU1y zSFgxw4pyD1q@E2ZNoTiv=UJ_SUsI$VZ}Grfl9;NYAuPM_?U>1S%Fm>Jb-Q9TL%jX4 zPNzins!Y7`!&yYrWr@73rhzk7mC*FIn5<~4bOA%5HQVkF)}0;MY5 zth9`W>RS&PUAa05CI#LZQl|YzA9$P-7?pjK!v;UniN-7}+l3EJ*!}FZJvz_Rm~nI> z=l9Z>rYX$0_EB{=!|tcZ;=i@Sr(;oeuBD?D-(4|YS6{5qS0s4O(Mn<#Cxby+MB|J=gVVCkl znA0?c{94gX<}(}@1iUo0+tK6MJehxP@2}M{W>VW-l^P}=4g36Zq{z1sgVtllEm2fJ zo1RPCMt@?P4lKVvB=+q*hVUzypyyGq_;cmT)J>JrEzD-FTy6;QeJ+kZP-{m?+)xpp z;5=U!@JTDwK_L?#e90Z}zN5}|a<-c-=aYq?>X^RbP7AWdGo8K{cxxPInWj9&AH3Y< z+*W@7lHg(L%yWZt&ns@Vphp{gQ1}E+T_Bk7j!mj@=kE7({qn$kkQyV`FQVz`%AJmD zV|j8^J-b!1exGQXE}!=ZX<3yg$4e@(Q~Of)4oAfghMO95Ua6i8j{ypM6hN;6_ z6ebpYa*}ZuFCC?nICENYm9+T+IklYW;#rf`C8HZ_z8#Vi9C=q-?YE?X8}Fn1QomQ1 zZ<1wCx3^(;%*-p2YvydV=g0JCr1m&Vtp#x`U%b$|osgRUT1vQVxRQH}drctIy|?E2 z9W}yWEbt=@lJ?S9+o%dsJy-(vFM|7LzcF4~qjDS_3)bwEaI_4(eu-qs;>^1qjRs+x zWXg8El23avQCStgGuw&_R^z$7-hS*~vCv{1n)H&ZwfAG4eP@_aW85>I0g5bl5cFBmbmUel(4E5kMl~j^sDE9%(bH^d(8a+(UZLkrAI2@y z(GRsH?_$ed`*^;R)NJ1_!Kl;v^u{dq4nuUuy?pu$Bb~B)=u8g&_mAdi10mDDJa}G) za$&*V^AK}ko$Ngi?wS6$_q>D0U_>Kf(DytjJm_;CVsy~g^gmDZJdmXs;AQf*v!jcV zvm)?XXX^}XsPe&$9shaG0~So-XN0&RbHWH9!WJH25TUPmh%uh%H4k3(647fOk~ey& zg#mdyV5AFXVm@GKk>^;#t`nIUUiR`>6C;}ggP9nL54IkO7$4|BUigoZxgi^7e;XNI z?()FMN7B)NkSbn+AZqh`P>3-7Rb&t$zxE%9$Bc@=OI{*-oIjE7C6p=WU^E&S_D0N& zbg~%&ez@0pq%e`a((`jeCZSv8iK(1P&CGr1vx^hX2_+#J}!NjjQ1x!C-b zAdzWcLU)S~*_;51Hh_l>37gZ2CUE%SY7CsQo#7KXGBr%7rGY^|fLjojCV6>*xIgY7 zPnIR&D$TKmMp9)C4Go0{9kfD-4lc4mM^i1pi(np{AwWLkV*l6aAt^GjaXKhx)8YKm z{{`VODH2}(5~-Dul$%4GP|hwc@Ih5X%rtePdJTpncR^6Ek!fH;9TAvO0w&ZIU7YMqZ2#KH01oCPJsB?) zBW&>o3CI)W95CVn^H7G!!4Sk>EiH54r*Or(xuUY(4%R((ug47B~&<1nz?W zJvEmA+`R?a86smwh5!Sq5DX^lCWsg&q)|rdjBxb@4(3t!KxD+o(BlL)6oKmwEUKZX z|Es19o)-DIs76MM42x}-$T zyg^2g4BM)Mf#rehIDla;aNJ=6>+=6JI}ha6{ufvQc#dQ^un2Z=fLk-dh7xLhCqVS$;VnB$(`oV`cQm_QG^g5NZ?;h5RhJvJW#kx4cvi3w(X1z>6NNP800t<@7|_4*Kog|0wgyds1y8eS;z$7sg#fP z0VG$RLmz;$kU_7tP|CUEToiObvZ4@v;M5{{jBv&-h>4 zZoH7I{}FlXh;sE0#7@p8_J7y^6A>!^uW8i;IN`2E$GPi4{zK3_!QAzbR*j#JT>z*7 zh-uY;zwwXK&jsnvjyOxi1q#*T<55Zv1joUI{$G%#~CF|h$&R{x4ABsB}RY7aY99$tX-5#a1X zc&I1q0YHe07J`^Ma4AG-080LGKxjwJ!^L}$6A-fSfev^Z|CHHdO2AQ+%t%YX!H4M+ zfCaeVA+6SdsKNpA<6QP+0d+*RIx3(JF69W&K?4fPdj?}!N6dS6LfgYtC^&~jWP35g{0JskR`Er4npXy{j z0C&wg)(1{jxDNP}faV0a6mr8@-HuCAT>s{A+7XkAR02gp~9dkfs4TR47{!H4ity)d`p%;snQ?>&en9 z*Z=qJ3KxA_R851-#j1D+#4s$7DmZg)$5nQ=C zE{+bm2n5CHFqcB{!Ez~Ld~hECcp)xzL?9uqPY|V=e&~YAmA|HTfi9Xf`kX)e-ec%8d>?1H@cyKKW59F)h z-!5oYTA+Cc;HL?biXUc+Mq(kLygdt({E0o?_NTX*~=&OH+y{$|@L zvb(pQSFr!P{nuUnD)Xeiz5aCy?NV0W=huI$a(MK7?9C~D!m&5i`)hI{qF|)bdvWWQ zHE%vZ_~UIbVy$kSmAP3x>bN>N$g{t>ZR_G-C*t4&+UwgM+1pua7>cvoH+mn-H1cZD zbvLFrsT%m_HY@D&L!TrTYFZS;Mu@!n&9Ewlgm`?Vq^o2veDCf2X7 zoS)IltJ6-0Cp7#Z|M@FPyW+0fOw`p)!)hNbyZV-iL>DIFwf>m3A=lMTm%Bw{S0pHi ziC>Ujy`v*+t6pUD(EVZW>Uj;K!e31*j#iHeARBX!y=f#}o-}g@Rl?)ds z%yCRj&0tgMS87EpPECgrnyt5g^j&&nr|BVy>m>HJTsRurY~9SNad>LqdauoOFooxN z9<|hn^e*#jcI>XuJ*9WbI{a67@)jC}-*L8jm#KZBxb$UuiGt(p8FdClOY<&<$&C!P zHs6O_H80h*cv5g5+t`iRT^hia5Z$ZY%v*d0>g!ZA?pYIzyA!pkp~D-_uOl%$s*JwS zR_7w7zHb5E?sMG3woTjZDmnji8LU~+(_8a>`h9uZ(gJ2=|x#5*cUxM{#T?9-EZBKT~X&xDPzvk6XYYLgHtyruztb98$LD1TY zW~EUbPa+16^Bb;0v}*BesCHw?}4t(j=FC>a82#zb&0swIpUuPL=^RV}So^8DHn!Jw(v zeCASk@fS!Ifu;t&gMD!B z<`xM`<;BYyH@P&Q-L*VpC&bkwJM#hcsvt$XO))j`+9fW%vy9jghMn9PB+*F*HKB78 zezh6_ByB%=CbU??^awBB!<@O|{y5Yh9c`1Ps+{h%jt_UgkGkH}JMv3yr(1vdsGQxo zRIuYWu1)8Pri-1l@|MQOo-967^Z|q1X8PNJ-%{5$Y$`53QWlZhq`z$Qbmy_Cwq}^r z<|fNG4A9#CGXn#QA$-qkJ#m|h?4fnsot(t}6e4&5!X*;!1Pebw_je-6g8?Tk_{Zc-YQBvUCnV7o&!sHBRLx@Q*oyjsa zxM;rr+Y>y!8*Wt6msHW#PyavGt^%mat!sm%NK3brbe%(YhjfUb(hbs$BHi5~NFxm* z0t!foG^n&lhe%6f{_g?2*Nebm=KE(HL5Df>u=a|*S3E1Sfpn({o@|Vf?!FA&oxSjb zF;$dL)B#2rwp+2w;&ddM3~b}bu57PR6+0t;>MOeABJ#-w)_)kru-saHWmu#qPKD@- zv_a5~CETr7QU9pP)xgGbko&2C{A+qN>yjQ6b+=pzY>-UGP)fN=Q{<11SG8yoc&K-j zjJ_H2fWKgur0B3N=-|GdrVgN3?za6(BBf{0j>Imk>& zj`EEUwL(kYR}Rq%#_A@m1krEFp|w$J@WGqcYMMAz+UccTXpLHM2DG*x^3aDQ|0Oy+GoZ7kjT6j&H?&l$3^#7gkvX9FttU|*a)}dBIW_#M3#4H*p{(6E6?6@0un zFuS4V*-IFBnL`b27ZdaCH!}Qu(m}JuXvroKxyD&$={+`^)?Jhdx%&NV@v@{UnY8_4 zn}ID^H&>FO&b|W*-JHHn-YZ<~t?qI`ly;Itqs@q}V;lQ=IVwqLVh#xSIq5%da*hiS zd=y^6jmjzgIb@b0UO^AOfmHuexOIF+hg(}Sa*;X0Ml5C|wTYYkv1+`H7RZ^_aZ8%Q<>D&wfPM zP&Z&o-g`C7OL-Nkjuca^l_5XJv9Tz#lKxSj>iow(XX?%xq_oyf5_mr0lKLxld@Zwv z>bd1&4k%4D3%>kH(McGNT(_@rFygwU6Ao;AM=kuM=27ce`T-u~Ui-Fh4}KMA-doi; zZiWf{7dD%CG+h}iXo1lI)1*71&@Wa{=ek`0lRZnGxX%lfzV4D`7X-RI8TFg%6A0#5 zqlp4wxq1Fn=C;p+tr(V$aAwVNiCj?J#fG?1ucZY0D5_nw=E2IR;-%A zPBHvN&&&ptndHI7YsF8^b9iJC+f9?C2K=R5!j{4xC9S=s7k<0vkWix=DB#n>#*evt z&6E#wdGZ!n5bm@SmKRL6J^bcw+0hPzw(}v58rOHjw+apz zgoRMu#M~TiO);7|ecA7PC(x}~QSVcR-J(i#ubL4x>^mofak_hZ`5H_>#9VoJ)Fa5lx}B*L%4 zl|KnyozF6nQT54L!`B`pbNL~Xj7{CsXPTuUm~|OPghu#a&p|9*9yO#LpUtP6x&2*N zgO*OFl0_GR#MBf8du^{B{GxsOhpxN5;xTm88oJq2XmP<}s?}~J-xO@`dTw?+pa}l_ zlc`i0rW!30izK>v=K6EZpvTm1GMyD!R$pjP;EZ>p;(Y6)KVMcz^XBj{W3OjWGo|Pz zt!4^3WfJEfsYTcN#TWs-Et1F$!eaxLGj9z#U=`nVn~9QA(=hsrRyhp zPy(7WU)X42=PG{kW;f&o*}WJV>e}bS9C6u5#wk&A^$KA>aNwp<$|kTToiL_P_I zvrO9Ru*dnSEhAe0G&dVd&tw3z$d& zRUu@16c}6Gqm~D%=6fYtd?)eFRuKn4R^C^L*1(c#1f2S*t z9Hryue(#$WF%i?ytBN?*S`UMe+)8;XrZ9;klwR+K@a3ClN}0=4N{!K!4A70O5on-G zGGXE-+8O8zz2d77Q4@X}>i^YP>9ts0?(DB2{!gesW*)nHf9Vh((Xu5DsGE%es73NI z>aRslrcu_4sy$$NU5aiRIy%!vCDtEYsFk(ngckdDAoa?UCswT9J`=nzAC;i$d=Cm> z?Q?;?&LhP^tGFfzN*o0K(E;KI$qZ6zSNggz*d5W@c-41;u-3lwy<0R#SH@fRD+$6A zLk=G9_P8m+mm%{4iSK1<=1SkP7R7ZVLM9xIl&<2a;cLF^=|4onl0R6o(ei52x)a6> zcCiI)>Lr&OW2Cn=J#FjDf~CcnD-BMGdy2^v;Xh9nDxLA;^(>Zj16w5EOUST-J(L`? zK6hbcv!}R+drR}(+ai^5h2K+8QSE`j*mK)5@EpJ}eWq}SRv?!7uFJJPG@iG5_>_zg>!T!iBfNuNxvV(|K*|gUHf%^Sxe!Hzn@CEEoaFQ_@reN;y8tV)f z-j|DPw>Y>a$mDNrit1FYS7jV7b=|*QtCwcR+cLP#K7v@}*N*|6=~wu&&qLVY3b6U& zMj3{xcE)h|4myOpFW>N{@~Iom*>h+_D!#l)_UxG^vv+E68%2b(elpIOrIG5A0H&3| zmU=fuPA{B(0+-X*-a@1A_dO0WU-QeT8Q3E;auLr>PiIs*$uwQB$tZLWQ+cuC$|C;6 zmKafpEb^xvZPrJ56lZ^0zWLIDt{6pq$B;Y*nolL+UgRPy-=4aFZd1mP64IAa8cC{= zybmn)s?WTv1)GK-i>)N}vh^yj{qBmKz1cm?@U?PH>gxg|r7g`=&oz-Tl8L~N!lS2E zr$yCPIFK<|thf%oH2YFN!|`joABA)|@*9PK&u-;xI+5&sxskgcF)SL4Ih?naMY2%7 zQ9oNTiErjK-bsVwGSgkL@mbbd+m4LAdp(OqIcx~r(Iv!}G)a`TsMk<=xr98<5yXiy zhVq^@Sbs(RrTl*EsOIm5A$w@3TYwI7U z1*6<>7fDru<>zMziM3zJD)`*~GV?Q^>#L~sR5I3TM80fc*XhiwE~UIy_T{jKYF1@U zdFp{+6xdi$e$B)z?seu>I_(J=&pK>bwG4K;=q*uf`eoi$Oa zBvZ7*i*4G1TDo-QEMGeIo7Hksfql5POgkN+q!Lslyj}XDf}Fb4bsUx$4L3 zS6=Bn{3FXmQTSBX@kk8X8hcR7>+b}yzHaYXA(dfUlrXQ-AXV2beP$t-8;?=^d50>% z+O|q7@Ma_RTDGQ(+v5^qIZEUpMeoN*n@MSx2IUyz(SlJ(Sd80 zHA-EcSR}=zkS82nNa&fPTEzHP8^ad!nAD5mzWB6^SLz+N)Pl`4IaNBJZ484A^KiQxSGXS7mk*VxSrwnT?M zzHo4fw5oje!TRC6>%>hnKh376yn8{FXcjY79#wjbW{#4Hy(zhgV#XEOyyTyKss}yn z9p$>3KWoq-n8iuD7?YNBf;ER=(_ohDsE5=p5Lq(H!k;ZH1N%k zuUE$GZVunt{V0jGH!7wTuRfNz*w<}=@>FQr_RRsc;*`xQG!&w=n^M$kRl1^|Bo*)2 zbVJX^%qLOAw2#&`xQ>8Vf~*N!z!5K%vG>tVK|q^Re1NoCHZu&zI=N=cSf3);c=S?M z_oq-ly4$~QAa+JZdPKMsX+*fwDu=T0lbLPH41N$trSQM@k|wvL0md;w=5`@P73@2* z2hF@u_Q;ot!Yk^J5yU$t+A6FQNS~MGtgq!b<}{zL(O@VO(CA~A(CJ@FWBWR zT$=HA=Yv|95qD$O6dgTQDfFkLDa}!&W0n;BgG{#vH$v(tQ|#};J{>D{6H1g_o99wg zr|hQcwPLr0xlV=LDH!-DkMhBJVv6{ruLoSa8k_rL^tyF`94BLo>UoqFdjw)8hN%o^F2Hj>!0mrn+-QQ9YbXe4T1XXAZu~g;!bcEqF z9E5+p#qmdhVZZH{FWlB;jv{f8f&6S5hduhfZvOsMhSu}4gU| zB35fX8A|Zpg^%o(M)4~U01sojsp^N*PdwQ)(ZFQf~AnJPDMox|HXpvFPR^OLWL#8A*Ll3mQJd-SN7-+cTtDrNbLS{o_ z16SFWW?|fX{%&~`N(sJq(W3^6(j0zo^5!+tP(HQ_lT(; z(fG06%4YaZ1;)jM8^7}IyPQ+yN_QsgYFzPCs7 z8>8JLBD>Cm?H|55qN5+TH9+@iRTXAMWs;{rrMK0OMd>PU7X1_frS#Uppk#y@3hmc+ zl^;(NB_c|xG$;C=cOZCNp_RW{Y&Y$xM-`GK^N6;6#+q0-297IvRz5zLkypX3X^Mbl z28OB6wzM+&Hw5r#q?n&#K4q z@W%Q+tsx}vxLc`;HlMCbnHX1g+4<&8q$*KeswN+2y^cGO{3>yrF=ugiFexZlppV2p zOdbtR+N`uGd`|9GWyk|GYh@keF71i({5@o!8gB%|19L@o^0I6Nc5<8B%#6d7x(V|V zo}OlERvkaKvquG_1jVB0-qv(iz_c4z)CP3Lyf>>q$k?1EfAoywL!;F%rBy`C}OFJ(}O9KP?f2oqjL^3L}@ZYudg(L-3j zc}s@Vsc3-m$^{x#xPi%RNa6peTZtR!2H^gmHbL`(P86`utY1OOi@(b*YEA}_g;A{X z=GK<1s>X(nw+|5kRrq6k$1{@W<2z!P_@@Jm6H*ZWyS#dG$t0vaWC-k*_?wId=rcMW z;}O@wZ-_@-)#pRJPz%KcmrHU$T`qaZqrwgJ&jYRY$2|&1VE?BQ>dEDjXO~ccdB^hw zcv#=(0vb9Yv-dzJDlinm1^ge|*NGk@kH0ue{r7DfyluIrN{S3puo^B&{=V8(?_t+I`Ip2Oq^UUd6rEd?(~Ij(_BaR zju$SUkB=R)Vfo(5OF|XGReULG^QQngp8a3%rMY!UZgaA za?Rv_5B#svG-O8TJRf;<+CWb)Pze8h+Q1wy2=u?5_QiUn0Oxl;y5kN6t|NTF=4_z# zgzH>*z>>m051aE;vK-!%8zvz_JUr~vm{d5R?w15`0fFKeB?y?!1~d*D%!{1$$qkdx z&Kg>*Il_6w+w|L;AE7?$v@aBFPFpc~N`E;AJCtrH$oT?tJZ6~!u>m9a+)(JSF4VAd za>3*|(FPc2fNn1T-{exfC)Z1!=^UX&ng5bYu>sr_(1@GB|LJ%?Y*Gbu;Y4@#$;FZo zJv^2CgM%GPaQRK<15A&yL&nFBju;ro=l&n#HRp)|5-6quZKvd+TRf&lI(CcaQX^d` z26CPVF=rh!v_+D~Uhx>-MX03?S;_vn)q*)s?ZH2}NfIK$Q;9!-*^l$B9u|o!<^N#zNiRPGc=&0it3M$^Y>_sofHz)+!F#f}5u zktC0a70*X{p*Ph@BINTd8A^0Hj?o}q&O<`3qc_2kXwMSn#Z>V`a5+;Ip}bjuVO)UI z?1(mm;)p);eAbi0DcXNe8balF%1NJiumDuOz+l$lSvxw~n;QVR>ST$WjRa>{v%SZ(}#$; zPehl01Zrh!V{h(gcJHK*JPiHkT_+BGg*fgiHP0K>vOEP(er0(=%k_QTPie@`5ewf@_P zPO>5YK5+wc$G?pSO2mP{0`hi83^D)6@ldK~fxOUhpX5V^dfZTA&$0C!5v}|#d7MuY z1K~0F_b$$LhAdA|hy9kN`AITgfRN(+<328S93$j7dj3N}co9Ezk`NiHB%uVJ-#8() z8GvR1C}RSO{Qp2;bCMVtg7dUI1vFCR-zR-U5d#eWLP#ObXInXB7Wl_%PUlbMJ;{mu z`=qVRO^hAQ|Kf}1fX0c;&I@q5asniVfL()szha3Z$2fu4A%OO1 ziNO)*GYuRVu>RL@KoGjIQ=HI=umgelTa{F zp`T<)hI;5wV$U&5;JE|(*TxU!dzM81``iIR9#p3Y^h7%V1m=-2|EjnGq2%1l(BaGW zn2qK*adAEy&4pgJC%KZ(N?btWNIrhq9^*T{o1c&GsH5N?l?0#OGjoz9`LNsyVeUTZ zeW1}KA6<8U13XGxoDc9quf@}dl1~fT&#JZG*Y`L6<=kvZc% z5oFG}jbDfu`G~pUcgdgqkkI2S3%QsAo(wRK`i@QxfBVD>5+fhuJ9=)P5AUc&=pX$% z<8jD)BDx&v-#udoh)4WO1))Ti<9GINjK>^E=gRN`ItXSvjSl%#9fT5Be&ai$6*;07 zJfEuL0y+r5I}ugR)4@L&Q$mTT}Vfx-%t^Oc-mX20yEL*k4j!)Q`beV&=k1?9N8%n7=*@jq|D=kEG^ zu;>_^E=b&Pi$yvge-`8@aGzI~<&&mvfOPfn>~z~ZBR*p0{H@WAjWOXHoGKCfb9vmcN}LYlU>yDj5G zhfV*zl}S=s^X-paHt|@5?jYI)h0*Hj`uf?QFDGL}KRgUXmTkz$p7ii2(|@B>Ur);0 zu2)`YuOCF5VwQ1zVR3Q0rp!pWkfGHFtR}dYU7kaYXHKG8Cl%6cz_D=6iEa3sOB$-g zubaZwF|g}OS5tPbf87xiPFQ>;v4cegrqd0(^2n5|LH(90eUp!Hy9J1V_P#3GrC6VL z7&ICIwMqcA`1KP9b4@zj7Mg(cI*Tk7llcL72+&<4l!f`gG&tE+c(`oa5M3QHB&!3-v_ zWIwx3*wxOEgI6uX;CIE5zNKQFxQg?>Njo^GXqp&ea%{oDN`;Xok+kLAvl4!^s3zAf zY3m|V#y_@_KBa7H63io{Ll{)M%=QsmHUeauAo2MNe7;sXyRzA$$EQALDY{K291a#H1YD>$hek!ITqCG zcqe%Q)iekjjV$mgf7|qq*-b_9z;)@$%S(}_zOT?@nK2k#a7YXgT2Lg`&_WxDJrNJq z(2NZYF(z@fUE(6KNFQ+CIOusXnY=riat-0tqa^&Ug@$t8*$k5 zYGQe}LyBR#N3|K!%QR6L-6vG~xqLnyH#zSOr2A@o4VTp=-z?DDN!C!y{}N_Ef7?q(-( zkMfdC(Kq(1sCC*{=*9@}-{}~?jb$^HWQM8A-}aS%4No}Fm-29v!V+&wCu)@+Z~RHH z^(_~Mj|Vv4#%~mT1BEKgmat4E_FWe6L<>Xap~Eb*x`w4cFo=OXJWhu3Gyq9#s7^6u z;z|$`Ed}!JQG8}O^ggECMH5wJs==t}a9KR-u_EoKx9EpIl!9gR4P>NwSE98O zdy5zq?#$cO#ANW^W~%+dUBvlo?b1u)D}xUEwah~wFWDMZFBnuliF+LtZ(g6*K)V0Y zrb#ny3n81f^+hYK1pC0<(IJpksFfQV zR9i&pwBvN2m`BLat+eQpcdpf@lz*k|+LIZ^Vt$5iX~Ko5U-qdwhe>0)WdmWt^RP%` z;AzQJ{GJnvt2Ap^<__T*GHU88$|Z6Mq`ri)ws=sri=#<;pEF*?PotLQv8#&^o3+|q zo^4FxBOn18a}PTi^DopkuFtBe?G)CM=goBDbC@Sr2mhL@sxKFzLxN-rl$6H`KaQ64{uRP$c$MG(=LG<&}pH&er(vRlF>K^^7#rq6jlKCarX zje)-Jn<*(<<7}LuRYVCIqFC+-k-5gub)5j_Cvgfw1snK3r;1l>$RBXsE*4UCu1ztodq5h3nceIBc_Wn*JllJ;I+ zgSn&u2aCm1lrS{-gBOpCX2F?_!dAWaAteF0>vo>{&C7{$?smD8c=%m@nk@W8+qZ01 z>kO$`r^ZTbmvre&3w|vrTIZ4|Q;OV^FU>I`y_9l|L7U$Pydcbo#S6di{gbGd^aMqO zo|Dpk`fDRIGvr+M>G3yuZ_DMDozRMYqF2vYUKhv&YapTW)J{Z(CLsxAQcQRVNS5u_ zm?i9a_LU=dhjdqLKHUtmnevFIA^8eJ$i()Ht}iz&;6#TOS(JkcyH#J5Z~NJ zD`bn~4OKzdvWO`*U@N4$ze_oeJr|@puJa2+FXt`EGg+@+7>hbZ2WN~XKwDRE_{=(5 z>-zha%gxRXbe;VVw_M-~bmAR&)-#I>$|LajnRSfs_h`bo_&EMs0|A;P|9+?f08bRX zj=L#NeP}_cdmWD^07-jbKM2S1Xu`P=FLud2QTT#9rBA!$LfuAiwBnT);Gq7U%=@3W z_yY1fk#jufjtg!1z@Y{nEuH;s>j_YTJ`I2YHA^c_m4&-RdOUV+n+MOu9mZ3hG}(syp>=YFemp?`@OcC?3kHK$A@LqK+xnJ zo|mH^lDpsJ`%Z_|-LI_zrJ@CV%D%d3Zn@{q^|Imnz2*Jo9<$|^DXaUON#SK>&m*jb z`)r4cmX}A(p4KZk@9njdrxLS=e|aU)M-Uv$M2-7s?sC4J7;Sb>_~TdCG*gLRwxtr^ zE+e3C|MGbOF`e+Ll+mSMYUxq4H+a5(rK2)ctD)jmyIni#USIpAz-6Cy>3Y35cH29f zx&6shVkFzPUsl$Ra}>U@TMYOiHCeJ>T@6Je0w24(EyY`;D-(_tcrIbR%28#AWy^Vu zO^?_-_fgbho#@j#?NZl-=Jynd2k(fbnU>S07kE8;+J9x$NxOE}ZMOR7NG?n0Rt zb2BV2ZYqtn8_NJwQXSSf1ZU9uog)r=>H4qhcLF3T$#xk0CFa1gZ(elUoV?mfkURIsNvI&5~J>1n=z5T5L7 z!mT?-p~1Gd5nyIza{s9dpHMJ|u}ckS=+`jw`*j!$@1c#ao*?XTxgrrNJ^l{|1x!Pd1 z8$PZGVD;TME^{XKXg*)BR_3#>5h-M6NlQIxaPbXl#gyLJp<%0<%_YSW@%cbrbfiXBly~aV;u~LaRT>rhIy4rmUI3R#VeT;Q0ZqmJoAh$09g~$yw!j zCZe*0B0@H5)|XobbI9~o+BDDom_B+lF|Mm+k%qE+7GDWnuyso5FXp|wUZ$UAf&x$U zen|ub7p3$_;x1~#xi#KU6R^($Aon692nTaerUr9@+zH}Zh%d%@#|X*`1X`j?^mvXcc**D zryv?+O^io3Q;}n9GO}ztY&pd8aEg4V7yZ6-rl&DRqqg@rI(qo*)LA}WkwJXd5SmK6 z;gl7ppR!EBsm`+T`c++cXUL*Ou7c#avOh$h?>o)7A!$pLyUh>4_XOG>`N3zh2Fzs0Ny!6lz{pD=ZyvJA=Ybl;R zK8v^##m2sK9!5uJyjunHR9~t3!zlQPqLI0|kNiFC(d(r!y!>Ip@8b4j8T)7FFqOMfL0SAFwcZ40t6 z?fT;Kz1gi&SHq1`Zrwmv%mVF~_jK82cye;68pHdB66$cI>?=KtiPI1JOpuE5Dk*pd zhw-{ehPG0h1Dh18{w+F%N4w&F~lHc>8Kd0|_cGt$iz{llidvgKA`#z?PfD9l~= zMjcrcZ6+G@TZMA!$!VqvzsOA$)}N!d4v4Y)NA*gwi>ztC-U};tLB8C2@FO=R;7eL} zykz3TQgu}}wGTQocz$_^H48PZoyJwX7T4r@lwPM&suSAk5VT3azQ)IO@b|KEaCkgITV>eq4Y#{wu7>DjiRwCKz5XGXo3k)V z@&m>-Z@qLqUJREkh7VwbYgtUe^=~;NKGw~)&KqBG(#KioZc?xQnNO*^Elfi|f$K?} zkv65iCUaap6EnHTT|*^nnX zDDE)+7?+9_Ez~0K{^~iL)Y?oE=JBzmjB9sFyKa3E<7x`qu!P$X3Jc2pCrzR&u)8q) z42|IndMgI{7!Ex?toJap(gc~tMObvz#w#{RCU1vz@TKb99KBY88=BTPi|tCfeF9siZpH9T?z+x!^KR_r?+_g<@G)LUo%dLACL|D>Cf zP#&f8X&{4a%S+8?@Zvwo?bXog3GYFi@wh?k?D8lo z7|Nu`ta`fiq?6g|%@B>#4&(@XuHfr}T85IR7sT?HHk^!iX9z#3?BR@C7}DS5A}tm) zknEq|snBFf;qs7)QNY-J|kCtdYQ(m0sP5uBe@r&XbfHiVWsd!tz|hZpU#Yr zePBiPX1#z+2x@~S4t;pN3F)`obwRG5SL>HvzTeAI6J#=cZ&+Dj$|9JQKlCk~kytAr zT*VUo`K1lgC0AAD})50EZZNdihON&>U?eu1CG?z=2&c%zthquG$@jC~JI3clZTNW)M9LQU7kXV{ zDXI5VUj)S~XjMH6;^s7U(jMr9Cz>c0dyS;W4-YzD( zT6o>dl-*g{b(dzn)3XlGse)SGPV`&M(qeinsA6jewN933HucF1_gF8+&z$Iw8^8&E zcVw%3-~3Q!0jHPYAN;zS@sXv_R(T>MUBgg}*>?7o4CQdJ=}nQ^;iMwWCEY!()Hb(Y zBUyuE>Il2HgZR1)`1`)3`BY_sEv)r5ZzbXEvlt*<>1zxR^26)F4-m>($n)@CQIciZ z>G>e1KbTLjy7P>u8|RBa+r!GnYnOl3`2CU+Yu0{WNpz#!0%3pEh%~aE<8>Vd&Nkr- zF|*#0@NN6G$mq|*2bls-O|5sEUY8U${;KdV78BZ3i5;ebyVCH$`v(4%KA2lG&70Vp z5j8O%eHlG9$+Ud#+U<(&dnyLv$|V;+TWjl>qqpVolV9`h;F_~aU=^>bWUHgZ2#Ims zWvzjGd2@nrL|`b&)Vx=7KiES^>Z|@V#**W!+#1T3o6%KB4{L5AY6}{R7Tz0~qm)S7 zlGbtKymx?(mrho!mHzgl$^*9)IyR3iy0_PY^)`kg(g$ye;Sy=#sg?Ep7@E3=HAC3_ z^%}!u=v&qVF#&k6Q?h7tf|DHKX7uAiM>77o{&9C_^mN#u_U2ui0!R4h%%>i&N|{*W z3dRl|AZt(0#obk#U&UgF`rZY0{Kgf6Els%BBdP~?h z6KtVR_GB$J@QGmJa*y}`;M<-myOvi^F7R3q=7{wfMmQx9?F~J#&@Y+5O)_N=d{()E z%7&IYMJoAbD9Pl(%hm_WUJHC(W87W&)d|)y2TW~Rc2ZMfMdC!)Y?(DI-i4%dB>jSG zsA0Q(M%J18&${+0gHxOUQ3^2V!*w{y0L}Y_tD-i_r z@&QaMU`{ZEM+F$gIQ|{ZM17dx{s;A`TfG3(e`L#lqZSue_zN7gWH}%}AW;YggCLwF zkPbdBu4AYd#K#WV5p{}G|45eq#wUFWJ}8NDc3`hOFh>vO;5|%I9^*Sidp17EXZ|C< zQ^{Qb`Tdb9|BX*vMiltN!KSOMB(KE|V&gn1&BOfXc_~$(eftnNSZo zg8qTZ31L$?MU;Q!&3{8xR8o}u3mv4x@*H%>2E@(-0S0uIu>gy{kIy0A&_-4qzh^KxT0W_bh}!hvJ`F3T#O`O`w0SLHsSy(?tj+4*eD(;Lm{pZz{J_P*&sXmK!3@Du-m z2Zk`W06%+DBTtDvGB+fo{*oVLC0tEaF zpnk^^Jc4@`LUz!9ipm_PtuzF*@RUF!bBZBDboe3?VVkeso9U-~jGBXSTSr|92!B@b;(K$)8&bPe9aFQq&cbR}#OWD=w=nBdPiq zBGV6!(Q90G)HEWjKDq*I^!OrAU7Qvavt;eyP^{B7ExQ-Tdds%lya3XA8KUft7d>p~F- z;NOD`0RlX#N6TyhS9<0xnEk(sdzOe#c?1C>K2;BZ;oXZ^7dtyZGzUzs0f7iuxC?0R znG!u>DE!B^K#+cwQ?%fe#}5Dz`c)WUe)$9M+07du4iNi)`{a9o=8Z8Pyr1M0>lr`P zZuxRjO;BSe5oRd#gU9k#-;C0~_?*%HT$a`>)e(E$0FiF@!7g)RV3t7#ts&n+w8nt5 zd>0>n40+#y>zCfy)X(z=pWDoLXCwI|^ZWZFU!^_hRCG?iqm)0a`*581=hoP0Z)$&N zS5g1x`JKVuxyfHCV(%)Kmp_m8^a-0PrLUR1va!L<@p>qy0cPYVpqXY;^NAKS;x-+- zZS%0b^m%nUiH*&wKz4F(L|=9FR3~M2GR}gqJ|+K83!#a}>Z7eCwT906lk|Jm4?UKR z95)2WL*I$s#5pJ%{WAHydbgYOS3`YO9%6j$t*WZ>=8|qJRPKe*FKw~W46$+=KJCq{ zJ4SK2xEk2>wh~`>RR(xsE4-eJTRwSZb8su-r(b^R{ch<*-V!PNja_cn6q8?FgLH-n z3WfNyF^dctiE@l`I1-yWbv@n297cmY6?6_xx;Hia0*ejIC1vFt+Y5J;O;prn{d7V& zm?{QTV`6sI?iowU5n}G}ur9CtiDx8MnXe35y-EbR*%xx z@e22~b?fZYeA?X^FlZfR?wIP;{dhfD9A^SC?sk-!FwaZDF8ZSNU*ubynA+hos;tPR zL3AG8PWoN}MLH6)H)AM`28nM=A}-1JU4Hlle$HSo%md%ypyLCCCJ^_ zeV23ld(ktFcv=Ls_B%GkcQJF#N9rQqjy`%|@923zUuN~n*QNiyym@$}Zj8lih5gsY zGcP!YO*{f$YCQ)XIJ+azw@AUxny9W z790GsHi?zDP`{_f&VVekXV%w)6E2Z#^`#G-hc~?!x5q+-C7Dv@l-n?s5F>p+d>p-) zM%#NW&U*4uyQ@-i*)#qJvkw|fs4{Un`H5uuC2ooMauRiZNY6xczu~L$Xi-w4x-?lZ z?S<{kB@*LDMwhN^xfLXEn7;?3hVdP@`l1ZT}C5s=3PsC zk)|iNxLv80pJc4TF<6n|%9R8$3`_X`a^`cs0>8!wc4D&=5)VMc^|W`fq!QI5)MA_)}) zYv|W*W&A+A0;`mPaK&!({)61tKJWz!&Y_5x`^Ir&Wn`YPUCX?;6hP5b)(k@-n)EY@ z2n+9$KQ5*>LN=O_#0K9b3`~R92YeyT&2X_(s)P7s-3^;4DCsYJg1>zb!fDW6Lk;&K z!lepvB7L7}W*M;iV{y9+0nuO)C9kn=2FaU%cAdH2ZP-2p+5d93I(ESecfn%VRH?o9 z&l~b!UrOLlkZ^`q*M3(}V+&>@@h36#_c|!B^=G2o(++nM73yb$C5U=O>&Su(`T=X( zf4z8+@zuk~M&*#^Mz+k$C1fAaZ!<4@QVYJYd|nFE@QbpnHd&VRMryupH$QTrF_QMU z0#!zQmNNGpjT{s%LRObqpRo0X$o1VG`$3iWW=(`fP8d%n_+MCMy5B`3tNEH-VP!2J zW;9ACC&t_}LftCpWE}TsI<%w+o??~|D>q{UjpWgn&RGcrv`BL=GuhjjvMQN~=3dkZ zZEkq_*DZ#Io;!(arRw_kwCSlbQquFix;@AE<)y_>+GpgR+*4>^Pj1EZ>J~j?8&$h3 zPD(cF@Oip>rvq$%$Zl(9jbt-<1As`)$2;-e;a>Vje~< zi<g^!XVm;@~S4!V0%3G+HtdwJKS*VRbKE(OxLvmTl zck7yO<9aNX2FZvLyyw722X&Bw*kvE;GU-d961~^kvZauBSA-iKHJS3VK}NrnF5>IU z<2KRY)0%`5dp*%L?6Zmxcj%7~`hMX=KR?fen7DhC(X!s8+9O2oC}bFs8n#pFlSj;^ zEsnZ|i|9o~`#8^+N^3l2^qE6ZE`>iT;m0kDaW6bGE9*xBHhr%R9Q-@p(~zZ(c@2#r zleKy$JV?Q!7YLDV%GBfZ?O7znXHFJX#JJ5UMO%Pm)}g~ z1bK|)>|F`{I;5mSW0kZSBJ^1>u5iJo*(1dE`@*awkIH6U+SSl$Tz?;xI&Srpl4ys} z3O)0WR>6!ZRtjQb2m?!IG>Ft=`XWA=Jb?Cr^51Tx3~6>!`S5SUYS-V8fG>z4GDXr*1c` zrXfK<1@x}H2CDz#cbVjgw=_}~qY{Eg$|uBYym(z@2x$7ou2&>ES!V>zvM(1|Bg`gQ zM)Nj~DYoFk)2l{QxrhY`^GKdE*-uTRrq*BQ}I_PopED>w&>%SC>dplF8vD0PWsd8js=)THk&%Hlptvsv7BN+Jo@ z2;vgwm&@26GfIZ8=|`pvaSSV)z+QGin~w<5UIWLiS#OisZD#3Iw%@Ka zF(l>F%HsUci$}=pa#b#-Imc_iXf_YegaSV4eR@7AW)P-c0#3jhkDJh|8^xU0iw$h; z;Z5Wm9#uOZ2s*zT56mket9kRS?(#tdWu15JYT0bG&~?_Odk=NK_#&^%6AyJL z3WN#Z9GEy?K@#wO^BHgr#Wf3f46t$Ce<=~WiRJ~)o>UT^xy zRyJMNx2FYOgT~JpWBM%(wy!boc7%?s;>x%Uf%j}(GOLT@&AI!v5+5pQVKSO`%6a-` z;YR1x*H_~1nSKTSs(y))x#RFA_=(t1ZlG>2^+pX4Ami^Ce9`fOWBQE2HpmZBXnHw> z`;AP>@`o1n%eVK8ub2c{)u!Xu@;-a5KW1d?U30JXJ>uUkoGonVSGp;hj-{** zQ`2~3zh~0JB}z)2yq5#bMB7fYB`M%%kNT%o(v)%0haWO;;`xOPI>A}hA*NYxe!bq5 zzwm_^=e`rEDbe&jlF~N_H4TV%?@3U}si{9Q$@j?QExt9X>yH`g=C4ggNw#sntA8L)W*YdsO3jBtlE| zR5K0b`nqthbPgbs zeA@Hul>8g;JOdKzCsUXpXbVq{Ap*?W0DUz(=rGO74ZJ3~&rE%sctLWWUf=z5<;fp! z^3!tvKt}S9H{+Sb2`(NEU@+!5fyBkj0Sxh+l{PpbMKFXe>hDMHpG!~vfG8z(iWD!D zL@F>T{1u!{qa-9W{{l7&>@M%PKKt=110rfv1o|3BuCN(Z3L|~>LNZ7G+ z1ND4heFMOy2tISQ&C!~Ge^Lbii~Xrm{G)(!0-~;{qJ*xRtn|r55$G^Ya&BH2!~(1z z0MrmNBLna!0;Diphse(o=Lx0ch7dlVa^j~aw^V`t17$U}6X`6_VZQ7fln~mmV~ikR zXbY%^LBseTjwp`P4F`OBGV2iI4RJO0o9vvY%M?mB3k+x_P#`%5%n8hz0VPmqfFV`b ze-+>iz^A9PPPKGs%TSKI5f^ac!0^#;J33T@GY|gI!To~~4DdLgcJQa?vreg5fS~O` zIfBRuP-Gk~7&-LmoPakvd%?(wDjz4L=5UH`p6=66DGGp~tw1@3$jNnB%sn!7PQV*+ zoa2rDlN$z~o^c2NQCIoH)Ne>?>559LN=hn7Dyp9}B4`UyjHk$xU zO@~a*XI3qMVeLQN{26iS&y^{E3KbGN&x=bydFle?K@gy_kiHHuKywDv`2i}!v-hW* zP}wtL{h#|&PU8JL)d#&flx6C;gUT_Kr)`?fGf_E$2xKQv5*eA9>3|;qWS-C9BAgg_K(7DP>^!|NK_H$+ zngE~YrE)|rJka0=)+k{01l}1Rpay0JzZ@qgy%GrnH#fa72@}1bo)yIQ@ZUmtdUZNA zl#qSR89Te9Py(8J5L&_!lLz7%01e@ZNV1$>Kabm~oEU6P2_ZQ-K9Q5`LhyOEDvZEB z4$v|Hl*S?a1Yo5H<}yH`1aL!x`ftHJZmedEEkJZ}|<&;r0{Ji-VDn8bit!`T>5 zkoA}#f}npdo5#IXeqlT)L%_L1;z&+{x-4i_m# zAVnc1>2Nm!k&Qg7Btbs^@9~F1PdIM5a%}vS#KZ*!_+$l7rs;XkD~Br-BQUQ3O6d_n z=@2y3H2o(YAIm9a2?~!7e4h2nQ79n`JusD6fZ+$0{R70%FoF)M@$XPF0juw61Aj_M zI`g!2o(sznP$nQVf3rP+X#~A49W2hjVFEsXr@}nttn>#=O-Nw*`Q-j8Pr%A^W+6Rd z?H+8HAob~hNe(zEol&3uiJo@Slm$9H4Ga+3&xCjsQbvG74&fEEL!P@F;)Oo;kYD*b zsNmC!{c&fOU(@LCp#Dvo1Rk!O4ft0~fvFCBwqG$lzz+@azs2-ep*owpdmt(Nd;fF> z$%lo7;bm#nV?kf77mvyn6x)k8k0jEVeG`A} zOY=^^e#7*L1JyzrKniL~-kbTV9Jq;fw^uVHx!Tlh@vG*K;mv+tR7*$8?!G!CR!|7z zk6h6}$>$X*$ehp5bO+mHn$y zXozF$n>trO68j;z$sTgJ3iNc?lxr^ch16w&G07BrhScLz`HKida9?%aSID-!$zL>S zAw((MBAxv#v8^KA|GnjnmX-IiU?EU(lxeGFaE42|h>@bimY;lJaQIiYUaaa}_~qVa z@`xWkh~5=<=yyOL#y*jfuS_h^T(h#89FULL!g9w6Aq=jecP<(u#g!4nk~ZZ{+R?TI zi{Za<`sr1L;_>AcW)V&bg?F1G?7S>o0EObsyQ}_P(%ER@#If`GaVb>A4^TNuHFG(P zb=C7SNxSiTVO|HXKRZ$@SD9{ZgD=Lop4D?&s9}T)z1b_r@)Dz>qsx9 zE0`w{eta|Fg2D8*G@@}@+&!G+Rk#+F+s=hYCAk9ZcfBmRSTqpIQO1mi>&a8S9)&wI zrv}wNmmTH{%Vx^H*x-2$rMH0@hk}{*75=TNDz;~Q88%D;5pz>%j-832iu4LTxy$CH zD-FwE&}B5TG_AW0hC!@0pLmAcGCg^vAHLZQabyKKu^^Os?N5sTv`}m(mYFAXrV`6c zlfC{hHBo#%Bn=7q@x6T8Tu~aqw4u9G=`YZfDqP$&o>KNUjU`^#m)@k=)~?>Yw)f56 z!jB^KYsgGlj%ik#ma~@@@zWpXaRRd>2?M)%Jk-dtx&nDT_4Q67wHrFlf!=$gRY=;- z{dN0%x1MxdzDkBN>>~W*IUmS%C^<-+)viiLg(OH^QS|06-u>1fe@ZrW^>)mQ`j_i2 zmt@}m(sifozI%EsVvLL-C2hh-MCpt0H;1lUn9V()pnLN$A2#h z3+Evvyi<2?sGsR%MLj};!9{xv%!RLE-N@Kg>B!@Kteg2tUs@YbU8i~s*jK80@%-#W zn2gAC1UlbZ%);%Gz*j|x>0Uw_x!^SArn~5^?(8P8T0vXO%sg^o8KLQW@sG**fH-*Y z+5>wG@jj#5hFYREnz26_Z?7rAK5x0xyhg{RO&e`cNLu)Owcn?8l)si^ugTbPA@%Vm zqAJ&-HS&!GN4+;=i(MDkf)K(&+{y#GeEl^>O7Erx7U9NLD@S5w@R$84jr(?0(Y^Q1 z9hgk#%a8nci9x zQ1j<6=u#0eS?NnZ#doNH)ruos#j$6O3*_WeU)D|iCjD{K_GgJ3*M6{sCC`glT3ANm zDoAd9kg(>8NV-zvtG;}tKgr`w8)DY$=cohY_3rf|L7(81Q4%T@?p)`}X@Ae!uU&y` zTjRA?s4DD;hVaw~$Ks-k6AA*o9HaAK>#jTlU%X2By4^+Lcg^eR{v2s4L$#RWFV!5? z348b?`Y+95VDN--hcvW1q7ORMf$gqEKX-gC-X$(A(8b-{^vs3WRw9O%T*+ati)b_d zrp?IA(EVmYhwF}pq7vCu@)@qQ=?E(?3sHi{%f;3@(MZc$xhkDhGFji)p!Z}kok zI&BpYRFr)T9DN`8EO>SkC2OjkJhDN!a}FDmX_~%)YY}J6XG%}s{{=7)>k-NDkfOh? z z=Q9k?Al6mYTx!7o_=HLQ^5##yTUsSHwJ|q_alTn#>ihOAWUOzzv$)0og(lyXxjmMt zwm&LLVrMPD!kP(99sxC=ym@VtLQ!4dODMLZe;AS>ie`no8x@I+=k>?)d_R-WsH}6} zAxM%W=D&+gy;PU4xLF>XWV?e7qrh_ECHU_4I6RMQ2&Y`FrCdEyE)jd_bIg9thF5kl z%@*0VwXE1~6(p=tSAQtfPI&?!l*@Or36{P_L*R<-jivQO*d^?O&>Uv);)m7cPlbV4 zD*F~wg15u!;C&|*6Nln@3ofI2I1akrCX+-;ct6o78aOxV61KX7aK9!qNwk`PkT-}Q zgC*i7nWU+tP>=*_c#`Pskla&;*8-FU31Je#ix`E$Z2ON@>hM-KMQ`2h^H+&fj^=Qg z`L?LqjIkIix+<2;u-2jJw@pe$0rzY`{6=-$-adOvraiUfc-SPxmiSOXdFzthE8;Vx+9)-v}MJ zEX+84J}tAx^mE%WH%1%Rd~|ZJrm}SsAh#R6-k>^&vwNADbihtblsmm3@l!-F{?zSs z(z3=-(%=vif4wxjiY^n!QDSdI@Qg<|WT@Mdq|Kvi61)80*3BDw!?Xu!v;~Jc+L#t@ zHKCy-zTgzEzcLDAVW#`_{xk3LmDi-a=DZCXGBUh3n5ck{#$la{8zm$;@woe=ysr3u zy>+qNOm5Y57+2pBctNCm12rEKOq7AX6b>JTGiprvNn96u}BZ<`S-x{!} zC3vD@8-JO@@)1)~3#y^XoruqfBMqMj>WPaN-c~EDg?t5V)!pv^&v*S@q0cs zoUEsn+euFwgU{ofmVL+n)6h^__39O|%7o#MXx@3RVrI;L_VRwdQXGo>uq!KsbJ?38 zxnNd|lA-tUqDhk0pG`TP(Gd0u%c31|zEhnh5 zql!`Mx=B#AUp9$f6+3O02CsPM5`DWsd;f#&jzOHq=+jQu_#Wr!YGLV#4pX*`3Z+HH zs7$C;)()5Bb?NNo)*@drGxi9GjCDsPbS+D&6=t;?Wp~A?n_?$3c^{h`?t)4&l3k-^ z(O}_b4Iy~zc<^x*W`lE98DTOMo#`|RXx9Q z%f5g{!-thH{bm&FutZ!*S{_ScO^D3b7f;2|-FJ#nmB~@tSS~$|MiPBeG@i@YX_Ukc z!V3@ZafxKQ0t~@hk{^Y|A4)?^m>+BPU96#HK`!@R>$v!O{Hg)jN0E6?Kitowvkf=Od3OSYcsrN6A8x$k%H z{D#>+vA8FrS`B66{dm-p9QY2-?nLC73bf@cgzx54CCuKCQ*1FY;LT!HU;0?TWT)6C z`!QszeeXTt%;XRaBuxB3m?B+pTD4U!g=oEcD~(S%g~YLF)n?6kb?FU9 zn5K>`S3(nF0ve}vgWnxL4m5JC07`FlfPl#QQ0>NYvOQ9#aQ3yjY_h3hcQd*IMqAeO zrJ|-qGwZx23)ya8SWLLOYxB>^a^5@R}u7^EnCBZ~;oIx{;q9w=V> zZ0CifXd93htV@00Iy+8B8#$0hqT=48wnd7~XX!1pi%Ol1R~)t;FN=Ah)iu*+^}`W; z9w@mE8JYLU*W)pf9CC(rH?xWhn@7}b5{#x+3F8cw=~O}2!cn);9Ax%d0Od0B^~rvqP6XeVgUpI)|1tfw-Hj(dpy zI`c#BdQa=(L5K>!&(Noko{o(!w|k;Zaf^Qrmt7@c{7uFNVi1AkT~8IX8}n zIr)o;clc=U93~$7AMI}_oPy)VoWFtywa);wj{Yf(2lTt&VLV_D{=edQ(wXy&Yf;Fh zJ9f)>B971+A&|E8Sx|o^+j>C2JG`)GhV&Al za-0|stQCI8lJRt%ceWE8!9Si4AAWHtM|H9TcAiV;5n$kTIYe9KpsUCX2yZ}V z321MfI`qft4rJ&dy#;v{X(3HP(Svr4FrS2&_+M@C^UOMr<`OgTkQl-TKWx}AA3%pT z{t&~)|E4`N#5(zuL_O9CgRJnnhMM|XkBm$JqshO*c}@*F3?~!t^8J7@ctB)6#QSdu z4?04pAUsxsPR0`wTWLPAlaKTPahHFZO-#Vn2*PhWU}qcxhX(b}$#kk;ClkXz`*nhu z&nZMlu>|xYAcV$))I0zS4c?z)4T3!O{yUQFC&+@wGgDfDUmVa70RGos!+uUdI?7Cl zpc{nWbQH`3Ra)i2kt$0kj)VP0(Y-=#Qxmi72$Wex8fxuXq9)90y7)hm-vPIyA8V zmY>JU(%JcWo{{HaG$FEM5W>(e(KHBLXaEn?aemiL7GS+SZMs7%M387gpYP|HdLG3S z4CsSE3eh36?EpJ8wEq^)6NL!+bU)A6^C+Ca3Iw6q9;}@QV4=eMgM0&m&?JFxJ#kh$ zZtD3*Y61+b|1?-muAPv9IcryU1QnRv$2hit1P^qMEjwiO_&xFm8>qj)G9GvLJPG#i zH&l>q%vm6R4LC5rfo}x?CZE7M4^dNNg!)41Pn2MQx$$>M8IPNM{(%(;ZKR}v9k0BY9JAS9UjzG>Yr*9L}Kfph#s(A zfH#6?kc9t4%M8&yIt4AX8g+>FzexX;x#v`=!{~y5$14yf?h(liSQ4Nzo`7#Vmbgri zntck~6THFSB^7`RtXhA8Jf}<@WiCY23gCeqW$qzns5$V*{DPLb(CXBG@jNSY&+{8Q ziY;)cKPXs`cLIkW0V?P}VtcBwI1}*Vg$$y~b;hy_(WLr~^z^FivZ<8gPglSvC);Qxj4+)@T%~dcX+nVD(=-&s-1wsggmY#2~an$Z~M_37}zyNKpTm24F}r2EO&r4GrT-o$upI zt%4*#DpwGYSCAF@i&p%HzBhD=As}^lQb$bvw~kniCY&*%{<~;F)GuyKkA@aVdrc;_ z8KcoIo6V)v7K^d0(xmb-EEkxSdST|I^tLt-L>}S@WJ4;A(@3*>WzMt$CyG&S;8x}2lJ6UP8iP_$inq_6>hDl*%Q9-Auknq)EwN!mc zJQ>V=IlAUqtQaRd)!^2rZ*P?rRu_KXuzWgiV!lE}*isAAyteQJv5^@m6Y5m zPVi_c8@xV5dAc=#qk?AWdc==z}1Gf*7*qonA=@b}ku| zM&*uvUT#8xsDw{_G5pKS#WhBk zNePcNE2%QPH+<7@Ug2eHSI(vCy%fTcSEMdNk)kP*E_|>jt|rsNFC@6AFH||gqi4yB zR-grgT)nTiFG;@KK1rTH(o%N4G^(!jDTsxKjxPU32@a2b-TpN-4aU;6cOyH=90D=I z7!sbAW~4({A>YLsZ5@C9tkV-VWKR$i;kzuM*X^eoo?z&)BosP{(5_Q?r`XE+Qaxw0 z{KMLW$1S?zyuEGiS zsMFg3HgJzr!M<|$-@SV!gg~z~-r}9Esiij-5#}7Ln3`kQaT8Q-u^620+fe?*6gPT4 zow^jW)EEW7^!p47xgxf)itX(2^HPP z)N7Ff$HZ&%xTcKxYLTC&(y_51e7SznJmziPK&tteL!ZLCaa5wtakfI{iFc#-t0PT zXncagi^PX+_Qt{wKmV}s-_aq;QLq6*RMGM1AMKX#uN8M=#wj_q`rgz^SdJ(BFMGBxXN1E79-?3f1QV(L2q;r#A?ruLc;eW6-KI}xY8(sBdh~8N>-RBWZgQnnn+w;iy=(D+(aYKpsi)cy7?AF*4!5}~ z9-aL|Lcu3IEij3JMaCT ztq@LKO8$P!;d>qeyfi@)Hv)|DFn(5Ijq#E&)$&Of3X|NWaS0!yN^HL} zJJ@hzwQEj6$$VN=uy~fh*MP<&;pQDm9}E(YRP}crToEvK>8=ARScz}z_`?fdOEU*O z>}JI#m*KCR?IUe;4ShAJl+TaB2)^#wB#=$q(@1`e*zzrvzG~YyZSO2;?fU-E5n}83Xs)u=q!lItj>s0G?;K6Jq?@=?OGg^&1u=37<+4 z?@0e3Cgv9nL|g9T?7>s}BosJ_ij+aCwgH2f=s}j1K=UT~E%K$o_dQ!iU9~c=4V&2| zE~9xNv>Jo0`vmHSBbkUAQeWb184ucC9^1KV%Nf+)kynm ziafZ)Eb3p|rrk}8kJ9jE1En9Cj>ywfccWITG=(M~%g72%Any&A7qgoGJ1ubgG(*e$ zM_y`0EH+nLnZXnd+bY?Ds8AMH4BX-?8R`#;IO|75-Fuy{)Cde44v8VVU1;!Oc>d(8 zFK%?{l~`Gmi&ZttZ-{n^EFzQ{VWb{bIq?{pY3sFzBatCt=kSC*rZ_4{w3;@bHDhwt+Gu& z4Ty|QrNBG4^nne<<-)`#WabrFvLBhNxG5Cvltk|56){911cCuFvw~EDxe@So-7CCC!HqTqC{vokWA4ExkaWPlbz3Dzi&I?_Ebojdk1? z)gL&Yb4UX_P)NFel(+p&gTt_Ix>~ zDo>5IPvLbJA8parnBJs!UF!F2$2UZ%Z{1B&?$4(&eDxIeS)adfp$_qMhIL=!a0Dlr z@8D8%!Qdo)JXZ*Xeno4Xkp4yTr??oK5nR10;6}p@?3lri6X6uME0Lv5k%HgW$G=35 z2`M(cb=7>%ZGtxB31&m*6;B4o*^B9Pa(Ed1E3D6G z37R=Pwb$>hRb3p!qEk<0pm>dr7N%!^QGS9`2w3(9C*LqWO*41}7P%P^Pk4fX)z-Q0s6`Yh>wlvUNHK&c3iEUwVnO8HzMfk71{GOZNQSNxK2bYXmjn2H`?IXp!}kdc5pOE;H(Q@P zV!ADvczEEaDmq_<7PQFTW2uCBgdYu*YsGbR9u)ZaoyM)9Kvb2)^Lf4vAx7xq?)^=XEdMd zw)3yqr)Xa1>v=F}!|S$2BUVfK6!uo@9OaIjFL&G(Q-P)@3XPMOw6rKVo-1W&JbR!= z7)f;}_3J0T22#CduMdhbPdz>Co_MGfP>XRzqPTL3l#vpJ$GkNWd#cI-q@a zwnEgOcV5g8FOO4p-O%o1ew`5^=Y;=G4S$_){_Vo!H#h0va`u1WCY|2c0`%4YJ2Rer z*L|KR%;7olh??{(uE5C#x~$coafNat!wBtiQZNWwYJR=3rLc<40iX8`d zdPfHM-2V+cKnkOwFYn!;j2;(|xM7blYz@|yW9=!{GU$8i=g zaN7xaJb9=p1^FaUu^&ho{1;r{?eb}J?Zia~#K}rR5cC(kb8a?{p2;7<1De!yK!@ZY z(EkVz=nJ0)@3=_}B(#U{nErxy&Xoq34R~e>QMfvY9up8YCSd6QhvTl7M!J zC;V3s&$)dE0V*dzujU9P7`VQINQfPT6go;sTK~?$(|g2>r&+|viSlVO{)OsNoM+ia?=ZNKr2}Gq;?56rtla!sav&JNY=4dQ!R_q%^O_kTB0*RR zfSe5w#sk3rIMk<0ZUGmYrw=s{MomEcg%z0#xMF_CzO@ zod2lgz-*F|1$>Vs&N|=%f{tfL8Vu}&fwFvrof&ehU?%yWutV8}Fr7F9{ek^ocOgvY zi#{K?&K^*?nEaXronUn@Qg<4)-7n>wPq|E$`H|J~T^?GTR_ifBqKUcA_wVJgEjfS>1 z)b7+PxO%T#MOX<MazVLuIej1(?5oZc8HR{P;Qfx;y6a5{fU3h5SjIQ_9eBzMNg=lO4v#AhQO z((FYn&*U}u5Z^=2(4klC-RtlZUNA5ts(+^xzfwe*WAP1q!CO$HsRgm)15FcpK_n~M z*Sb>jS-^XP;$i$m?947oulLO|7uj1vcVzm2)|$=Fu?b^QCj1@AS66)co=;ZR*u(SQ z>ZyDYthI2lSSGd`Tn58fm ze$)<3N!Lhw|E8$k2zLdgBnuZedsNuKef~8x9_G;qE6?XvX+)RI<2|f@m`tcX-fi{B za|iqLI7L=)Y1OW|`CcIs=B!HG6{Bz%G}zwWueyLwn-f;#E#l1Jz&hBDnSyxzExb_C zx4hvLhJeT>b0fo45nKG#7ZciUS97;0RR^EW)Me`}lZQJCfKNWLH_#a~55@QONPw?YkRI79$1 z&1q77c3#ECDV|;t>mJb$6w!_gcN>X2D-AmHFI0}T`yeW)PF{&P= zZH1<-${2o1rL?9^KrX46ruivuIcRKclKov>EZ*zE7J9mk(*)ByWy^TR8e3SN$(DFhk`N|jmwXN&u6;}Igp58y+QI&qGum)GY z^U58`lT>@bi{=Lpvn5olM9Ls*%@wJNH;XCoqGNmvJ}Gccf9?Ind8S*;jjZImr?o?XA2PM+8Z+rH0ZWUg5xlm~~(B$0e2DIp>n z$4zD-BiM%LZ3(7U1cp zuDH63ZWPyseGw#utGzYtpTt7p_s!=U%!MJ%byszT*ZDH9zz7H*8pmDk5+Wg4yqhh- zxW3bF#eL0=Kua@GlGM`SN01*Sgxchq~hm4uh?EoWh}( zzlyE5(4s-@eLLOr9+z^Sw>OvrD|ALtMBXpxXO4o1V8TZ`wM2 zN)C^GKKcH6@G>`tnbsQhpk0%Xc5H0P3P}9%D8C8)pj~uVd`E{LU;bL4rz!a6ggFa~ zuLrTy@{S#H$nZzat6>4;3-q_$x1z$qaztJGQC}r;x8rn*V|gP|m93E9WZWH`S-Th( z-0kxnzh2x?LFO%AquGT{4)49tVYaxW7EF41s&q}p2QP$O;#De1<6}yogRiy$#xL`IuB3dQpIjn&8kEzzFt-8$B%EK zd}=s%nKbBERxi-db1tG%#$Q@0fKz9eFLaqK9Mvgrw|On@n=0;jA4eH}x3-e_YJ(H@ zkgWykJYA-j3NfYa3+<8@7b?LnUo6QJ@m+j$1iZsyrUYS|0u`w9+Vd|czU6-K__Mp@ zwzFZ#Jh6?+IJvziob9IBE{TRkCcUQf2X+Q;6vqrc`0$9?+E@G$Uo%Mk=WcSK+>E?% z!(!cLZ7ylyLnm%ClIstQ#=sGis&PEL2*5`JRSwY+VoI^=%bmwnykOuL%VEYO70>ZAKN}be6c>zG|d; zi-`<2nuf^OPY*lM&twj(3p?cY5^7Z2G@{#WaNc6#rOqGx*_cRo%o9F{c?zqBU35u) z(WB;$)QTjcH7U{~z8qY0&a*or&1`kn^CX?^-oX}bw0DH&{Mwp2--v`NMO}s*^+tT>-$*j&M~;%xejf)Ad}s`u=DwXj1%YDSR4>t=G8 z-?JcH%`2=-rKr0yyt%0?$0SFTlWLf_B`C3KwU6Lu6>nIMj?O`o_aXXo*!Rm<9B#Fl z&`_nO;wZ-Z#`KTi4rJmO=hsymr_N(1lHGF9l2ffsaS@gnGYWJs-fEFE2#`~SVT)Q*6G6SQfjM6JI|(* z8v1agFnc%V%03K$rWI=DSG(Ele|RoLn1az()oL-&$C=q>w7sGy^vo}5`2Hx|QmR;4 zk^aOMM-+f?jr`f|W|^c;(r<<_uR9C3CYz|gZBwPFkI`Jn(Y%+`Yf0Wea>1(SuFdPP z84ikz$mZAdcoIdK=VMeu{W9Auo{+>>uH95!+}goW@XEuF|3ci+Xym!Z^a0FDoHS38 zyj~PJCgrJWiT<;Kzw1FkekNgNeP>Il*Zd{6CEvma?ByNNG29>eROGnEA39B63(u9$ zwB^yz78!&!{vna0$T5j_BeOoY`-26hlw6pSId=6hwu|Tnbt=K*ao)TKTgr-WjOR8| zB`G=Y_m2rtU!YZ6@X0sL^fFqLwzKC;pL_XUp=8E=DJ+8Jb7rTzJ-MQeoUE2opKH%Z zz5};rHij%Ro3#~;O&T`y1iRRE9x1;l)gk?CQw9I7_!J*n?B^0#tyc%oSR_Cfh#hW) z;9fEc$jqojl)p>ZDaBSy|B#AI2gFYXzH)nwx;E0 zy%yrVw@cf{^5J`G`MSgedFO6+P)N`iy(kmA@EwdhRoHduBciN`DvN#mPMq0|_UV^#us;_Cb}X&7 zQa#}(B+kSMe&nXdvGJtGV*u_>+<0)y(s*^w-Y12hHcmSk+m?~Nvd%^0#IM#8MsYXv z3L3g%NFyc2>u+Sfr+K~^=9?%ls4;f6*K!j<>4S+N=Zb!1DZf)dM#XKVeQu+7PZG;9 znouwA5{ixJjE71w!umJQRKH1&kLw48QooXaDpoT-93*QpC>-R`SJygws=OdskHk z*V-tLVT@Wu`gFVsFTwJr!23pJbd=d9{I+#*W?HHr4{R2SQoynwvKwRO=P(sASS~BS zPhz{v@hY2%1G6kJOtSwKg~FuU0Poe@^xXCB$60ryW)*wV9X8VMBZOOL%8CZf_e3V9 zFyH@BIErU%UL#%jrQ{l_Q_Q=l5G4=% z)!krD1gYiIrWPn9HGsqmFQb(2MY0NW@H|t`1^-*7C6xq*mv%DvZ61-VQq2t@^-B=T zq)F){4Iww{77D+}LG8;f+#v&F5#`v6PPe2)zBU>VZ1hdjeI!;isES|P|9DEmd(G!2 zRs~;(XDsP8+wIL-exYtrisn>oMk0i*542}Bq~kU zQN^J4`N6QC%Cx=tpm>xs*XT_;Q>yxetCu8I@_uTj9FsCFgReP9jEFWq$h3Ye*snAo zPN)2ODTN%j*1*&SYM!Uy1t2q29)lUJQYEi$^hcIu&yOzMEYV8Qc|Jn3uEI^8F2iy2F(1!2er_hRQ3aV-bVK@YZLqMJC2jH@J~M-D{A}(-Tz`cW zn?^l#1?9C6q7{4v{;LT_=O&w;Ya%aL7aUb+_Q9ZnrwbgXvd)v98|JqlE)U% z&vv_GSJb;YT)HitM+}EazN&!A65CL&*j{hog~Ig+ZB~Wn)E4n2J6F01_LegAXmVs6 zKgQO+mF5X4tfq4UH%ydm)2;{3Tp;vTO;XBb;eN(fhGRa~uj}4mmNW20$jNcXTnb@m zp2&uH^ha@QGPAq^tUjpAWMN*#i_haJo$BmYA#|mWjvUcAIOVB`Uv3j$Ae_X0B4fpA zK0IaBEwBR5;^A675Wm5QNpuC@e|i*#4m-X%{WT6ESHw3STjA{2%`M{bqD{1cH1e$*UpXJBs&U zokU9RnR$FIU-IzQAtsVeMqz1-(5W->=NMJ>sP1DfDQ+$ZAH>U13mGEcN_F3sBd^PJ z-&<*SoW`C~y@2c}JL!vyG7+4_OD~YAklmO^b$6x6Sa*`7=f79273)Kj<$u%<>p6(hFLq9K+Q%7Z-&iVr$!5zD)mA5n3qZc+a zwWj~2@+EI+qj&IsCAA&_{{*n!__eI`4!(t7Ku}6Zh+06)#7NuHh?d{XL|4oj_(F$X z$W+Hn*T~d>UdhOm&(zB3_t%i01AJ0+ERD>q%`72?M2D0xVIxZ`YXL(oOW-b*UR>+w zzZn4vo05^PwV@RW&|^CgDw2iV1L~RT9^8r_{rImN^55Y9`wIu3LBcTP}FY#IF=$TrRumYA>klzUTZ(0z<|4PeTRL{u3@bI7b9vd8B1a7Zc z=_Rym55E933K$RmxYE&g0`HHNkA4dBJLIhO9w`Dpa_~L;{ARXlB(wmP?%)pqlJ0OJ+J zPou`-PMhc##SK1$vmw zBmnaZfDJ9M2hRn6BL!R-Pepp7=XQvcPaNQWlewKWV-J^#6{{;9v7r+{o0J zURF;Bup|P34_-@xnc3+8H6bvd=)?{n25|oyQoyI>RHP^99*0PQ6+uo@QcC_1>R&-U zrz->ko}dEc5-{Ms0`M##E|8GM)&Xv)SRn+g-%({b)wB$Fd--Pr?hvb(q@04Vu$X`t zU(zc8wmHn^{^z^lAQrcn)C>!~neJ{S6V!05MlP z7b0X0JQmbb*8pIx6#y1fU=_EbfIu|RGu5-yver8d0(?3b{Xr)|N)vHr9Gpf9Yc}9Wbwc)#p=Y&{0A%0;DN`iV2w1LY#gf&$^)} zB*fYGKb(+Cd0IXmD^G`meUOaDu%66IVCJ4V*8#pi#0!iOVCw>L1s=x(dNUAn7-p#J zJz&an94Y8j2P;PAW2Fg#R7+1wSJTE^7s$-NARcEgoYgI5IN@aS;lFMvA8|I^Ywwiw zaDgi|Hus}GRZY(=(BhVR)f9d1Gn||@DJt0!+oFFi5LB##s?qdib_sXBFZKR)%WXq_ zHc}ChN;~FQ6cGh;2Zz3_%!%21>}XCr_G{7#=vzP8%AD+Jp65I(=^f0C;%*B>9OG7! zw%%Wn4qFQe8E-e@*`AqKvcRr)wu{RnLDRi)tJa-!LM8@&?b}9{=1zp}0rZsxWwymPy4;ddPGWmX~ zW;$tLilNYudhBhD>^b{qvIZp|GHEb#6fLTygM~b^6ugWgZ_5*qHJ}%vZ23pEQ0OgM zt3?TASo3bw6*`S9*Qa1rAeU#@ugq(%m?;EKOrVFly`NiiGkO(B>vrQugm@j@0QsmV z|4)v-vLtmun30_hqD%h581t9)V7zyEODO~z=f68Eg~J&3`&8V$fngV#lAXRGNJ$V> z0!wB`(2%33@s+zwL7PtCE1_~mEXqZv{XShMEj|}5jf9&qylaze`%dm^jHcp>_$4|kUPo!EO*qaSaCL+o zMnjvcT}1XHUYxd16&Rc*sgC*J$iRAWo+m3=m&^S>?5=hg2Y6Vle;leXf{z#($X%(xGif)rh>bAU2nECM4(SJWz%-0M8Ruy@2J8y$H}WO zTnjgseRVf2gfixiCj5f{a`Xp1?q+_VZ4|`~F*V@6D|vF_nzVUJqyG&*S|yc7?T)Of z6p~b7bB62UA9PRxYZ+YTXj_^l9FP<;tdaR(OBnVkHYP3=3Mf6f&f8w?X)bob?K{!s z-nzZ!r93~C>o@_8lFNy1&&QD|dAulRF55dOqE2`bR1fSWL|I2Pxqt9`mC0Y4d_Qgj zF8Kp`9{kU2i9MH_*VBpfX{RlU7$mj(pXWWqh@?7n3i?|HYyH1pTA%#=%ov| z743R7G}$bM=qvP8ag#k&RCzI;`RQAssTxoJ6Jaz(_SxLWgOP@>CK5LkWC#65hB})|BJ=%|4H`SktJ*>75y?(19UYDK6pDQ~7v}dG`mhjt z%%$-W8D^#5x}K zxE%9fJeJ1#hp@G2jhH+z`Dw9L9uB;^yfK^FC1U0pHwSiilZ{u^ROPF6r+nLuP-WC8 z1nbU#nW)tt=|?k(5O_5`dd3bdF>s14NJUOaXBy}F`{CL9ao93dGVN@^Mv43Smyo}d zM3cpL1^#?kw%NS7@e$jQ#U*g3YIHzO0y$BkE#TGrsc)FquFx>qv2>0+K)jv)&MP4| zPb^48eLM906ra9Y91>h`C`3Ih)$le=Jg(8CAznNwsD=yWkrDNFlb7~Z>q zM}y~_=qoNJuRF95q#-|jd%}q&bhq7dp%2>-_kJe5v!-Pm^(&9}$?6pqFySxfh{ch) z?Q@iO0PzcBRzc(axh_2f(VX{Szs0cCE+2MAQV^Rd;I z4unguC)(U^^x!rP#IQ5pUwPb;a6^&UiedXB7u;97+u>O_+&3H43ZwIblN!1?&_q%` zndeHNzj|yR@JU@oSwZ@HWB*qLglasw@A{vdVZ6S?maZ43X7Bd0A}M_tt19Xk7{dRS zv+@mIktOK;RRvo+g3p)$mI+2;i_FwUYTsuM?k_cEI;pYe*KOw+>!b`lS3scd6o1XG zZ`@~RV7KD*^%eeZ?6a&JQK@5Aa}j(W%{VBy=^3%aS3h%Fu9rGj&fJR26Ixy+rHYcv z*0o3Xy4CZP?PDscrr~$v*K;jFatPoy&>JFl1qRTT9n;UiI6E7u(70HF@Vk7sq(=%` zlawcIzf;{ImZ5uBL`~pkS8AMQZ;sQ)gfPW?r!Oa#iYQ8}rVkB4ztfNmC5u3v5kb!C zSzyf4Qjgswn*_RR&o7UqSTff&B|P=hm&?AFzsW=hglLchetRAk1`$>-DgYFl7=ShFDd0BG(VgJ+dUmpw@jR%>uusvzRwQ=s+7EnyFI(rkj!5 z`^@or*^?fMtm^jpvCod|S?dElk9#;r?h(QDa^`v4eu*Z`QQStlX(Gdw zYgJg<@=|BTkE_ysuH4XUiz*zk*zg@9)MgGec6LaK#m_AdBSxyx+9!8n* zNjD<;l~5wT7Me98am_79(SOm858zOajHbIk4YHuO@S*i>rO#5&UctEaG3hM`mvJy| zvTni~`zqQds6pXb2R@%1gX!-5P%4SrLG~14@ILe_%{M#DD;yP~!u1H+akzy97`|r} zGGDbfL5}N0SkCErcQ=`k8(&<Xwfm}*)Xok#B_UK>$Tv=X$GdHQd7`^1ja+8D$0n;FBjv$35;6i%IR2P7eC;J z3hL%E4uh4{vlBkK-xMOkp$#OqV7poL%w0Dzkc2QS*sa8EUr`qgeBc~ci=RD-=^JqAN zdz8A@UyXk6eMRg&b&m$_Y7XZH<+Z_$TK8O|lK!b)?LLAGhs!sLm}7;#N2G64m9~~}J??63gCVygipnkx zhP3pcy3q?N{5qeTN+$!3Qyk{LapvcTO$%&Fh3gmWjJsL!$s;_0m zar8>Fv}@7aafrJWwt8cEpSeEsO>!u+5G+d@c4f8o@Umx$B?>ic`zk`3ON8k;s*b4I z(Nb!#&ZIQ;NU1*PZJy>jKkuBz#j^XocEoN;YQxq>N~zq)q}>vQ7NVKm1n8xqGIi>< zSlI(JFr+gd8nqG^+f-$1?(W&;7blXwCnv|mWi&wG%KGWSGNpS{HsYqCTzsOp$1Y0K z{21!Yi!r-zDFu=Wns;Lj=B##v(jNRkqk$vl=Q6Lg#sz&=ckp`G^+NmZURPf)C7ydw zyCnO-Ahk_#cDFfSE$2tn2;3^6S?&KL?XAPA%--)|C6(?j>F#cjkP?vY?oKIDx}=p* z8tHE7?gr`Z?vUp9p!1op!<-CRXC%zVAPutjjMa_-q%W^QQOWfGWg1 zS_|>WW*m1ma#Y(?qIj2`Z3

  4. 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 cZ~fu_;BVaf02qtna+y@*+el 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 diff --git a/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Validation_Methodology_and_User_Guide.pdf b/tbsa-v8m/docs/Arm_TBSA-v8M_Arch_Test_Validation_Methodology_and_User_Guide.pdf deleted file mode 100644 index c05f4e48c60c83e96277949c5c08e2bd32258ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469972 zcma%>V_+p+*6(9=+(}0rn`u)gz%j8g5YQ9Y8dxB3a|5KzZH)DS=I+Ku1PlNv z0%leY4mL)BECCZ6GeCrZo#U^y3;`28K7EW z5&Y-!>4Tm5-#&zm4Q-8#<@ABp4xb){Y^|KEZ5#+#0CGTMBXdJXTOa`gBQGyN#KsWl zX6N|nn(^~m1%Rlzm7_5bAZn%WX#5Wo0107DZhBT0RyGC}4n{T(W<~*40bw={CJrV6 zW;S*K5msgfCSGn~0VV+sb_O9vW_kt=7G?%P0Y+v~0TEGAdL|AI26`c0ZGeQ0k+G}h zUy)#C_-oI^_R}r>-)^OhZA=}_2-w;F>Ywx9qh_H8DA?Nm)ib8Qn<#$9i-4Jl5uoH| zXADqNFg5|GYBCTo5iop4#K940tZ$6~XSQKrV5Envr)Qw2XABt&uPQ)d$djT39y>19 zbLNaZk^rId3|7vFC`{)FJ?6g@5f10K_eZ%2D+Ln^GquM86B9Q6d)H58j{K27@DY|a zpb(fKYt{%Q2ymYf|EG_C#@@kEAL!@`G&Vtiqep-vB^8ksMS%OyeEffIBfv2;{YPnh zrk|bpzh;4egPtDn&p5HNFnpE^J1aXtk${bj{omuC=oBn{$`!r_qfxcHJw$!I@g}`Q zO@^5u58HKi9Bd^An#QmdYx_{;(M)8L7ULM?w{RYF-+WN-g?5l$*3L%gZCDZddh_4f zy;Y<~f$<>l))^A`CTuD(Mn?wtt3jd+{|I&Pf1~9Gt_1QzlJOZYB5GarL+ln{WIG`>hLMu*IVs0T%-qjko@NiPPw+~Z7Kc@@gk2gnH)Rda$m)2s?r=(Ekhp9?Fo@FfOp#bLTE z>rH7WXVnX46y1wmGk8C+N@-(v-2V{oZS@kMkAj{b-n9YF5sGk?4EO zZi&NpBVEi5&GzX)GCWJpOXv_M>z!-aB1EBZZuuWoymz0^_VnVbD>rq>lay}^u=S5i zKc0^_oW_A4tax9wx3$jjc!Gh_O7RFdDzNixv>EZGp4eVBpEfovST^cT2a$Jt$8400 z4E+|w*+yNs+`O|vV$Y6B;V6jB6VwR)lb{EqDHg*)WF1-pL^#H*B)}wu;PGc9V4;opmCG3EZJ~$6NW;rvD7n{Y>A0Y+`$JB z2xbgwN`M>zEdxChD?ovO`O~wt=s(8qdoxx1KZ#DlF_#| zb|7G4XZd?i*2&T8Qv^N_aQuV2a{8vm(x1QvC_5Pc>m=Z>gP%=U+5f)gZ|(_w+O)DY z{ZIG*0ewL$V`C#hTUX7$sLH~@LdVF)!pcOz#=%I($j-#_NnIgZ8^_Nue_CbxhgBh< zt=<24g&5G*$?h)+Q3MDZJDVFCD~JgK6ah*=eH#ZmeW0<8q1!)@{CC68BuRe?jQ;;< z@>7*Q`|vq1j=u+{VC-P)1T-}MOQ=LY`}fz1{xekn=%DB)<2n8!q{63dIiRhfqOqeU z;8R`!O2)2^014~QAPId+z^7U`eu@^sr)vHs5P!w)Kcn3fyHOF{2Q{nP`llib`YSdP=!BHsQol<;3{6OT@m=S)(^L#iUffmV};{+Su1l4qC%&72iq>i5bWhV(A(emnhS~$z76`C2MPb$U!Yv%3sAYI%*dIm zY1Q%v*Gp&=cX#%KTAwTJHI**e?75c>_)*D^%-|v|g*hD-W#@H1xYqi{hoYCAIdade zsD^8Eithf zv#ai(Sewpn8%KCI!&|2Ecd0QE1ya_xyI!K7$CP)Wh8U0Kl;Z{uk=B-(3as3|$QzD{ zP%hPPB>vJjWUsZgyEO|0?SqTq-G|IsqE=ztIcjztcCw?P7eKym7(l*0gvproCrY#}cXzSB1Ocfum$R+Hr)yI}&2%-PdtPM=GjsOli9idMv zNMgGa1?e|l>_Z@4;L_th(6YyLAYS%rEaIe*aqO~yYnSCcVSH1GHm&(V5LUJnLm|ZY z&i%_k@AVZYKV9qGV;J(P&Rw^94M+tE<#uV-Y;#j@v+y%ZfX5dvoDr#|f1}oh%&BAV znb1Oq1G{;QWtlCA@A@%%1wzCt&X_LTyij{ir|)$B8*U8{PU)`M-CvEvI&uhrfJ18VnmN7IM~sCSe` zh*^q*-c(pLdB(HQ(8T^!N?nO{%0>1^x4Mo=g)DPXSUmYl5e0)AO&N|lQah{(eElO> zF-0}#y)e|4b6~_17BcD_jSNDR-;lx>W4J+H-rxJL;lyL|&|_Dl!NNIpei|7)Fh&$m zwFRRf?4KuCsHHfyt_~yNe5Z0fui#{=0k6`T!R1`rSZY1IOp+FbgMpak69Ryr1vej$ zcZKu>In+?|YTk?d{3cMi1_R_!27UntZ2VYL*GAo=X!>O`wUX3?Np|ZJMSe%JCFwuJ zgjT-I#$hg@wP6hyeA)6*t{nrF-Ql3;4;9ZAk*ZE|z8!{(>wlgcTR_uu=#==jt$so@ z!OTdmaClC&1UgDl{6=%8wvU`W$k zZnNx7eJPK#LMqEXuN-vwmn0k2O^M`xjqqRS|6e1_z`*{g!~dH4Gr4Q?;`}D|q@{u( zhYJ$Ex;Ysrukku&FA0&H`17M~c^@rxz6|G^{hA!o9qA|pO-_#ckRR~5&Dp&kOENR7 zu9y>0sxhHY{_(=Lv4^OM4-ze|2z9g85a>4f`c181yCH6?6m$z_I~zMHvl>+@Q&JgU z()8Nq<3tdt0M4i&b10WUDLcY7MWb_OFvi=C{>m*ycis@kw{BEUcG6)wO02TIpz;^c zlkn*Kdw1sDq}s1aBhjqMpuC3eE|qW14KQ(e3i0Y5_PZ0=E2iupj$}y}n!*hO=sY>H zAyfb+&rQT<35wRGI@;)=)|)^!Ol>@fxH8_KoPAD*D|F|}ZIjrIVD}$P>AJak#Pz-c z6#faxj4U0jH%01H3u^I08h)O*O)vz}9#L+L*5SVbYokO1U)f*aPs)j6$8X?wwwFUM zg;2e%KcdwL_e29jYWo6guJ4uoNkSUQYHv;M^&UD&m6W%zb!u}AK?M|gjvSrewBcBz z`SdALlaRt=dBqp-qv&5h*0!DU#wtBBZl>~D$gOY4cBf_i5kyD|5%nIgw>By7_g0+T zTNv9xvHZaMC8$bTr1mgm)?V?KOeon$S^{AZ;=f6MXROToVs8`k9E1LwOm!!WaAV49 zW;u1@tVTyDG3h$<6*cTgSh5M%xuC`dgTqH;*g=e8wv5&h~{}8oa*7ef>~wFqv9yIG39p32&;u7#{P@aK>r3uGu0_r ztxc9xwgRKY?~brta$_A;IB3E1k_);(1JI~8rxavieY!ACNgXWYCd$*1CWRsYOhJr& z?4IFt8!2>4{fMObjVk)ALQYJXevUy>2afP{L%>FBtSU1XR|9*|c&7DYAw|t5uyAoq ze^eEIw2V{abkMx9h)oq>fN`G3Vo=K<@(FrcCs$16_E|vI>RZhCl9Pk}d?>TLS zOIxmRj_2PbZ;bqTzPL!Dx_+yIs0M9kmmFGr_IEAKCFimz=_3T-A($U3dQXXbk-px_ zKUgkkb~|p{uOpr@v~wTy!pHr+O&ysni`y@;mo^%Xx){p0AZva#Mw~IqdIC2H_g#O( z&i#+?+al>VPm0VhW`jVf7Am2j!)^#yOFz=-jd7#=V+#OGSr`1}ypV}VnKI|{??~@- zg_N~n%)?xz;@tX$OC6`VM@{s9;ZITSu`)^(Xg)X5;Jv1^k0=u*$%j}h&3RGg28IR@)v?~_{2p}4D zD2q?7HBOu+?1%JVhky0C&J8_F4=?Qg*(Yy?00Z=qFj=PV#8V?1CnQ&Q<(EWUlaY<1 zKOLH-zSs8q?{$H|3yzpJaIZ;U@G0wLrd?#mTiIi;TBr-oJ|gJjO#QfYn1Yjpd+2Enbov|rm2-bhfd5y{G5!bTY`Hn))>L$9q}>`6sU|C@F8zn%jASL@6SjQ{t=0s{dD12YH9zo9Cbw=ngsc(vDe zP}sX`EZSPs-*u@V!XM^3oyiUWLA@nj?M_RZcv1PR`c3L|=Azk+Jnlg%Ol4n_!^Vk# z;zWY`Cq7=ZiCn`Ho4(&7*>*IBC;N*m91aRq&Y$>^FABivzM3_-(Dujm06iv?-+hF; zFB;OUrsfLQcsLvF-K{1Qyr(r5BrkBbMJY}3{A{TFmE91IUUN)yIz5<_6$Ol-z8)8F zEHi}dZ9S4Em_8YtB75vdpyN;X?5~mAvna*X4QG~o7o>YIv$eFlY^Mqr=At#AQeA%4 z9LhIN319&-O+9Gj8@>w5^kb%J)-)xdOab9Jxg zDUpL%-g6DUC_*R4DX>o3wI@18vZAxiSrN^_;P*zY1htCY4RA{yneD&9mJRV#fro&M z6`Y7*6QoXMWjQ=LBYmC1u#?7qyn`l8LX~_-l1t+rvPs&G8LEth1Pueq(&+}oBX-^m zp!{;!9>hcu?FUunFgr((ZKbrRSRxg{g;rKB;UhpUB_M^sJaxoD0t&IWqYN?!OeMn|PfGyB zrV;4(Wpx%!?7QE&IZhK4ZYjRf?c>d$3xjx6oYteZmj3sg)PZ`lx?G2t*yAC>oZ9?C z6S%zk3PL)T+qtB61?UvV!jRaSaMFeQj~=RnTuI>PkHHh@ukD;+yc7s%CJ{i&BsCS< z_r!J)4wNh@;{X=9lC*e7st1hxY)jX!vTa}_I#lvQOa%(0ND^DM1tXgzGrQV8a9gy^ z5H+zjWaY}$Lg06OKf!w;tu$d18)Z&8B0T@NIl|Y_sY2%BLwwNY#C5>O`=S~x-}USt zRdMt3>ILm2lmJ-7a|_ciSz2)+IA-=Pih3NOH9$%<&8@A58A2}V^^iZplQcH@_Hw_X z?|eVFvH^p}Uhb#?t~`g&dPw;at50`9xxR}cU{Y7?2*A9eSxzFGQ!QJ`U7LzKT&t(l zylwv(L$|{v6Ccia*CCWQEGc}Y1t81As+(NlJ-SLdC>I&$v2!F!#UF1FjX+9x=dvqn zs%hy#I*7ZT;AscYq8Pz?4kQCY${csgmFTMrGoux6ZGzw0pRN=uI}MI}dQj4495cVRKSVewWuY-D|G+;>}K&B1mk8zNPUg%{kXY zh6NMSt~~j*ATAV(J(x>;$L6!a=xO!72?w_AT8OPW>AsP_veCB~*b`3mx+*AXH z(fHnso!uD>ud)MvULd>J6~F*~St7pxY8|N?wGxe^W66DR4tSDNycC52&)Q}sb5JMW zAs*jk$!)FDkUNlNPr1YlA&hpWew(h zzw^%0Lh;?~EByrs<#aDXWe-9_a@!Vkf1Aj<}gCbz>_9)T{`&HgU`3Oix(SfQ>bdlqkQK6O0q#@eRkdL`S&2v24sBv9X zxuSEW_uXMx%$<--W{^$WDG39Im-7OP1)e`6e4UqaC7Vdgl>J+7V3lA-q{wBojEw7r zLR@%AmbAOM5%>9(jGiee7Fm->6qFG52c&hgAgW8qwpU?Vlu^TP`rU(@ofWZ)FF8#{ z%k?eDhvLyg)L<$J%w$q+t~XPD29A)(pg!rp;t>2js;D!8G)R5p_F!rpMSA!ZoY zT|0%D(oG=Ccgi{`l>h|veHdMHhCMwnr-GR;m@MFLbTB2+nse_(2kF(9%KF6W;AL5qC(#mW2uNYQT!c)QdwPPCc8pSX(`Y4ElnE-}p|63xg>8+%PM2 z1~5`~{eF-4tNTw!YQ{C2U&N{(QvIk#Aa`a%S?YeUUv7@rL>!`xOuh_^{fgKrEV*!V zGyxCYYFhnb^;}g^v7r2H#8VlcQ#OXTU{BjD z?fsUQn-LF%c~9BRaZ7Y?F32^(G_Wnu)=0W!UK=q&BWd|N64LrIfomK<{s|ZqFqT1tliVNPB7z~p! zfB01|9(87-A@O$dR*xRwBQhM;=jOq9P2}n1E~V?2(C{#bn!qrIg9`Q&4r+ZTqk^;K z?^u0C&aX(ZA~{7>#Xo%~!tcYKbL>pk1DL+C@c@eD)_c>(Q0uhFJlh9&LXcSc$&5r? ztTML=S2AL6@HjU{yITBZJ!pG`ey|idWszr|Jf1nTT0yRnRdg53%Cce!|0bXrqhN=x z{V8Dif?Kb?o7jA|lxkYPyYC3D^x=(&G%X)h?R}&q-fN^bC?;ZtRO=m$YgO<^vGw2= zv`Q9M zj?O#M`!fYFYo4TW7F}tT+f~X!euA%e{`>m^SNo%Qjq@#_WmyV#=~kddOnU)F7*CW= zti+)dG4O8lmIg)_-w0d+UA_~J`;hC$@Q#u@{4|XfLunnaiIXO>gNKfGl;&Hc4LsJ? zi-3!gfA~Q>Kd4b1A8%%D;6b6@68!8F?A5$3PoWt>s@vn=FyaCytV|)xwvdwm? zRh7=soq~Ol0!mBTwoNxmJ0)cplEtc{Ay%f}8V7BO9p&)n20fR%5|b_k3>-5fa?>40 z%9ff^YRzUK&1s{*73Vq>o7mWVsSdo+O}`i{LEh}7WShfSp`qn^C6A+QcCvI-lfyu) zvDq}eu>aIJ+|XfQN+$z|?2J#wN0kqLO$yWV$MeJq)8ozUoLneKHl*C^nZ4UAH!Il- zCb@U#Jl{6DD`p7${G)R_f$bIUdKq@UNJO0Ive*7;;>3KqZ$Hil-Jz`QMQsnJ(I(0x z{rOtTu+rlVQWzNEq+@d6cp0R*#>kA(O?Ib$fPhQH>%Dz?>1(<~JH$v+C|!-Yi?Cy= z?9vc|52d7UALcI6aOQvV`1SOT%DWq~@SLH!LD)1Od5WH)0XMCRggG5-?Q3d2CM)+j z`Jx3ywn$j>14c`w#xv1Db&TbJ!kB|D1T{5<~We;Wn!DN_8_U3xI|%{b}^w)x}|wmmas_*M}G5 zp@>hIHanZWRt4x6J*6`)Jnt$}#ZHEXP9NL3Cl{X+@uWnzbDpU$D$pDkO6(%_7o4}n zN>l_Qa~K%{?TZc@Cy5NtC-T2lqm=|>cw(m$BMc10GVcWhhJxMEVbE(5$lKf>cT1zB zmmu;ng7pQ7hvX%3>~saMrws23GZb@O64Yn2OpeSI&D3UwDQ^v$!wSwtFk1TIu3>YM zP0XnYyrFRdaCIL_etqhkDaK3G~7g!LA76}E#hX${}4xwyc zd}9=QAyD0&IC9m#_t-fgt4;Bsn5gji+(M7|;P{LBw1s-x;xxvfcJm0fYu zK9FoX^Y6Fwnxz9| z+S|E}-^@fMt^vgjXGGfK^x8kXqSgXDX#?_%u&3XG<2UX2ua$Efzc?$a(sb3&Omm+p zeVfPnR`#8?JhsrFlK902PDv41E~KVb({a!C&ISP=PX+f_aK zZrk2X>!`8Jd6h1}q`+{Td>Nq~Wi6Jb7}(nU#RUIiHC#ItrpfWHI$0az8c*QTqaxQ& z-}sEQa}tqDKNTP}g9m*v+DC4%rX|_4v{(Y_a|L?)tA`}OZsA9M>L8Vz$D=Vy$kY9veV12L4jtw8D&7MmEJs`%9~l-NnUP}0Cb2EZ&nUKSsX0dga7 zFmqeY`LWLpr+a@)-nt4u1~630U+U0|*^^bX{B~%B+)~DHEc8sCx|gQ*TegLf;<}oL zJ#{x2`l{5C?rHF70IA=2Yi|S|)Ub9YkEqZ2cqeTef`r@r37RwGI{dB@f4WrR$puWr zzi)yE!)(Q+V_WyQ=FjCE^I1ynr4mQ)iKO6fVq*O;51s${U z10>C0$kNLYcH1-Ge%ouc;I-I7K*pMn|pAa1lc9R9Ruzwv@#UX4y^V6z(icj7ehGy4c)sP#Ofw-B(z{6CE^ z2P1_o8_qX>Y%eS)MA>!5O7&}T7R?uA<$;G_VJ<{G4pHEe9wZ<>sQs#zNJB>DlJCut zE8_AOWN-%yJ=884WO>@Myb-P%4PJ4e3;um19x8GO(Hu3n_H?${Z9Fsr9vY zX&}=X48|;J>@3&9iCt1u@20IjVZizNGUK;VMR92?u?cEH`7>f^>-Mf2hN&B-jn1YbZ*+U?*Oz_?@`%Zo~>%+Z<7>W^tIH8ijbn#-y}Yy zX5~=2NmRU`6<}_hP1DT>f+n8c&0#T6K_e9D`@volLCtdyb7PTia>it@#Y!sWF`VZMk4$$k zV7*f|YavCdJqWPXzxXJnS`r*t7YP-t8aH2525UqrEA{#1mf)_-)a5IKTG-8}F`Rnz zRc&+}a8c&=P+c9R9QMjY>)6r|wX=%+wMWV)2yla)3rY*b!+w!5pfB4w%ov{1SL?*x zk5rkNM$iXsS0PlJ>ML=Y8^}%lK(|YOXPicd3u@ZD0%^HJUMIYu1?HqzonZ)DjeL8w zf*ce%?aheC(5!Q%3H$m27c$09q}nx`c${Ohd_X2Vto}X?vUXJisS-_EimdAv*{xpG zAZb!2L?MWbgTPX1HG9_SfoZUsvIO-ThXr8{@ppPsb_f^D6>sc)vi&=5%nD~le7IN6 zxc%ETmT6>~dJ+EvKiX`*AL%@;Iv!|2CTvk6IOl@o&`{e(JQ!mG(!&=8!y^BV_q!|M z9QvKBgl8Q)kfbtxX1_jMX45;>U))OQ{hXG1KbFSOE>HPn@4`b?y2GWh5hX|!jm@`~ zE5JLgW*P`0;u$-)xr2kX3GoA1DsR%cNA=D4vPwGz{$NjEiB844Il?=)9gzR(u8Juq z;%y5tuUve>sEPOffDyq=;ULwT!d|<|oezw3*Zm0VKABUx1AB@E{n*#02BM}SOgHd# zCeuC5d)XSeuaXjK&HbQ1uDlR4%N5se9q=C>` z@Xg3CLw#%#?|EKokOByae5VUz;AjrZs4MiguE-*EH_%E*!I6$B_G(v(V1ycMO*Higz9=($ zaaH<^D{V*&pLxilaB=Jjrkd!q>CfZcM?K8^J@_Ra z9mTzzI_N#!wKe(qKn_7bPY`^V+;sXi5A?&=xCi44{v($>q`SxOX_%{k-e#AZz(vp| ztks&XpB<#7>tT0YW;3fn)qhbemcnZj)fNR}XC?hi8enE>B!U+Xn_)^W8l# zX&zQm%b?5!mP)&ux#Y!VezLrq3y$B>$YYC$H4Up!nd040Z z4*o)**yMLR($iXhC(SmV^MLFakr<(S#*n5)ZJXSWvO<@;{0)5Rz7mnHU z$%3V|WEdemr2^Xiv z)|19dcl$w&!~XG`o-<_=f@?d@N0%Skwqc9rb!PMf1I^`iY)$hV6Qzel$KP9DCZE`w zmR`Wru$UFe1#1o?^tNm1dAuof#2vvhS=4>>yQj=*p5{4Av-}lCs=uHL%YDo>+mKGt z(`vu)H0i~Tq?g=JT#zAaE|OIC(1$Z^=|#nysK0WLcU~A5SuuN2zB*zmJe!aXg5dFM z(9>_}DUcjBP@y87C^Vyp+Z z4k|R^P4`rW@!P6n(dZ{}v5aUx9SaaG=Vds8^7MalK&>a+t>7JS8=doP>J$6-^3}Kaa6FRe z+JnDoY;;Se3x<>6Ixo5zSaDR<=2VAT9VlPRXxdt*Rd!A<@~?3@ zR;_HqD%_gKcb8i+-2Bj_i35i9Q*dxkzxE*K9R|j!48=jc_RS5*7FbkI+ctbhQ5pn& z5l>QilVnggkbi1rxN+kUu+!&oKM1m;X2rsv>2jELo$B@GV8|&l_IE@%c-Rcnc_X>{ zl%Y(3++Tc@kbJ)gk4NzN!Gl7eIs2`ostNyg9j-TL%gAZ)OX{lvo{=#OZia=%ufDGw zy%S4w$P+ILb^TR5e24S?u^`Q8qlk)^?1EXghx#Ki1P*f=L)PR8=aJeU)~BE^fvS!{ z?_Z*;?VJcQYQJj1s>j78?`bK$IEEHE_UPC3OcPZrPI_hxf;%bYIo(FD*huBZ6VTX- z4#!$Xg>pk>f=|;th?yj&0$PflPZVdLbt9p@=OCaQm!(1*e!^^w;ej) zKNB;>d^f4*V|-gW%yYYR?Vt|7P53?Cmz0$--pR%ycI5I{eBoc4{hH&Y!De!X?UvmK zo&GcPG>d^yf4_H)3;RbB%Fu3W#6H+5t{Tdgz-u0tUgYRxA3(&=Hn+CzYOfPTw1U{u zbVpSo3Opch85*ote01R2Ve$7?nMGDE5G%b8JhWZvaC20q&ti+MPQQ`-9-0bviUYFl zXv5C~VldZOExy!($@284O?NL+|AjLT(CMiz^U(fR3J2&V>4rx&v=tb&3xU{x(X(@2C^lB0P>yrVC!;)U(4nq$}9AVr{U^cGYF zw)>fAA=})Zssr`?<*mV^DOmCdYy$T76yV!6qmRcB>YHb7J8jiO%hX)v*?pRsrx%@r z(-h0kFetE~|l$S?{&+z@c(E8d;dz5gHgl`C9v?#7h zq<9jh@-whxi5t1q_78h^h(w9)4((|C+6WZ*>?IrTQA|m$ zzzN!c{ogXv)wagbnj>=N+#4KhN6IO|JWO9(rZfije1BlL*1Mq{DQ%PvadNwPudBYy zok5)6<-Ebz#Tl-yx)eg5)HoH*c_T1}mz+GzpPFZ~<&#CLbwpb0{NO@4F*it22f*yn!wr&oJfTV)ubHBiQ}E1 z8EG9t5KeyCNKLqVUe<^42VE({P8fQr?y|8cRT1h{nQ@BbB2g`zZfG+&qNz2k9fNKL z*+B%+HvU858>)mng9*wtKzn1}?DR`1y7MU7QZk3lN8SxzI_~l>kxtED5RH7nRL+oi+vIoKU(erY|8q)y9`=|A0ZEk4EJAHEqEZqi{u}~l25xc~E7Nyv@NrQttDCAY z)mJ5vim>3|aU@$KiUcf<7+!G&Mk!6bTEQKJ_xc~8q$TGo{?6py_@e^SgA6H}|(E(rc0-_&`3XW)oAdbGZ+N#X;OHJQ0uGMWyxu-q&*4s*14e!+n zN270U*SkF#)|>pS7W-v@8YtLi+rX~4+F3hG#cu_vme-k_t97Q&{rwBJwgrSaJ|NE9 z?3qS4+T?0{Lmb50TTX@0AnL;|cjzEgklxDh#rLYLuwd(z^7N7cry#A;KLC?f38 z2p*a&5mh%KL>JwG+r7hsU3Ynxc`ljp$qtW%T4J>{T4Sfp;BtB6A7jGDFpD%b8;yFp zWcKhA$5!7~MBqgMv>MZ7-`1Li)tzEgkhkr!>-qDI?o<`61#4x76boY4nZY8@7Uvfw z!GdwI?!$z*=U;H0w8dx*f*6?ll>4s}04^b_eghG!$qGqW#%WX9n25u6SfP zD6h-}r(#~H4f?SPtM*rzSDIZq?tPuM33cIBpBviOpj>E^>O%3t0MlehoZ)Oa-BAl}+$xeSPss_ZRBKwE9ApKu;LBGOK;s z)#|gJD=aXdaTk@5ErMeCj{v3Rybuqx*4&AFuzt7M6)#7n;omPt{DcE+0WWfv-0;S(Men>41h~{VUxkE)=JlN$6;8KtX7@=8vWCG_-L{vL{sM6j- zvIO_*!Md2HVp%^=YkE}-(65J=D`Y?Jq|Dh3Qdl)dntyJVL#O=6;cJ#A48MEk4%|*? z`CyDo-Gb&=_9d9;(XncqO<5QIS#v8bEZ@_1_GN7R?v^JIN$kg+Kz*u(tv&hmGMA!q zVAxx7kxY?kelbS4mFc*t9j83U$2Mbq9+Aw^R;y#OZu&HoX2bwST7dPsrS372%gF#m z#6^;@tDsVVc-Ke1b&B5~nZrD*^Zf)k5P-ZzzWmThX1C)NUUb7)$DPVXp0HgbJmt^q z(rh}fP)Bc&DKPX8`R&`$!O4k(%QB$&H|H8d-M!Wt*~a4@GyvCxz7r6t6w;$GXqid! zytqzN@iYVTXrBe@2bnS$R315`>~{gsLZ9D(YvV#17p?JQu)F6aFUH^><^?q&9QU>w z4B%yNipnk0)XjAa>HQy04SBq8`AJ`s;}BNIV}fF3v_?DcmjuLAQH zU|Vhr6F`2UWJ~CDwGPw{DR$Hg18KMRKv(lV%1BcmTF9*?>El_sn;e8hC|s(f3Kn7Z z8QJ>Tm^xPqEn6y+gP7**fh>sTby};Oub|^hc;8eIAsHRde2;8Ym(Y05O1TDNP)wnoUPdW-tGCL z&Dh;ARU6H=(XtVBP82^$b`|{#2j3XzjjV<^4k*hoMYyeGhFiUlzooNU*KDY6RRp^D zVSmlJFm|98E%!jGTh>&sUj!JJco74A5FSC6q__dx(?Rc zeN?92mU(wl#Iro*X3t`Sx*c<7$Gxs4+Jk0BOZfa-4_7iSDY zE6|hdW%L4m7hF%zU|bBx?CKzhQe}OUlhLb{0Ol(PecF7`J+rox9cYo>8cqSuoGUV! zB=v=AUCL1UQxpQiU_L9N!g?z?z4xGp(*tOhP9QBa`}|OYErVOcVt8&waWfT}6Y;%~ zr`5JHw2frF3`+}c-_SdNJaTL~K`Mikwx*9_*JnbJIRGF7?-J{!#h1ol5SAG)#=eWP}W)MA4v5E)989Hr4VXBKL_C9W9G zf-#p4>=uQ?UK;;NV1;0`B?9s36>s4JjM{-mr&-K_=w2o7Ta)ohc{DvOvyz9Goy(g% zrnnDZZ7Np)_i>@pXjArZGrs({3;&#EC4`FJ6XlXOe)R_A87cotcR!h}5Bo#@Itr&P z4A~X2@@?v|ePR~BRu`Pe#Q@Wc^}tq#;>rlxnU*lr#EyfH9P`wBM|_FQMY`9)%opVd z!hA-evTLE%bKDJQDK-pa&=hRhQ9|;8fCx*+1)F)WAP>N_JCQ31X%Mv$Vm$7BkxW&Z zknfO0%+p-{vvJM0qw>=%?W~Khh_hH7>~Fo&J@pUf2eVmCEv$|~_8CEf$_=>sBp z7W6rt9-bb9NSfe}Zdsxm!?`DDxFX#~Eyo&t2rR9eUm`SzWy`@*OWwMM3(4 z?TaPNXZDn!9IIs%0)4vyS~t^%9&ICGOb%u`HljsFI%~LquVB;4iDFYVtp$DQ zt2IBFrj~4XNIHakjxgr=pRLCJI6Mh*Z>&YmLPQ4W?A;o-r}-=zQ9R$|^yOrk>J6I~ zIrq1efdYXeA8j}NU+IM8nE3kSJHEK3Qh!heeF0e4*|iSOZuOlW(L+}H&gDd6aNOl! zst?CG05%L$(BEpCzSc*>gP`~FB+16%0;MTEoFeu~_rm5SxC3v2hjxg{{Sr6=9*RojjxTL$ng#l4yJ9m07 z**rsB>Q{gbLr(`ESVmC!m}Jm5+s_$4@%Tt_5vH zWe3Y!Ze3C$akfn=>09)dQ9-a(ukYU9g=MefBVxi#b*$0d$MEg4UO^?AK0l2yM&ruK z9A^r3Uf^Ck`F3%vC%q0DV4J=&ZW4_y18AU|vR#(4aFik`Ru zr;^j>4s)lS#xP%7m&!8Gi+YfcUBvCM{%35{CL*|Cq(!{Wqr@9ilA?wGj~N%(w+z)c zkVu_baW9JBKkq{#EZP0u=6@2RRmW487fQLFZU4|fs@aO4aXT_}DDG3asIe35h3FPZcQ9D%Dw4T; zqg&0Q=`zz?>yq5M!#Cz~N;gwkKF2(9WY#4IJK)OfE@%si%1jGHtZ9a;$ZI|7F^cV- zm1WTA@>Bk6F%&ri!*@xe)!rBBD8>$9&__Jy7-U(aAMkeGcrj5ji=7eJd7`Yu5pmND z7|b!6tC`0w(TLOM41x&xUvKH76V(Nm;8(>-p9iANT~7!ormF3nlL+TPIuV|Tr6)Z# z@R>^WTCSgc`CWBHXM1u35MHoG97h^0#C)2wHSy!e7-<+{Wx@HF^6cLY>5vX4e`$$9 zB7MxEe|fyQebm1lW6@2aLc9swi0!WUZf@%uBbL%lWi%iLH!&%`qMmO)FP#6odk zUj5Z!s8{1l;~gDH<4XTrh5<%+bDT3_3f4t3-6-0-qlP)c{>z3`woikVU$n{^O6r| zL3W8kdS!lwFC9(f-(XF=7zly;(+Lx;{<9b2p?VLtj|3bQeN8<|Z%>w4=bvQHUf1tnj`saWqO6Zvu32)fpmYljxlkzZW zeehPt)$K70+exKc=+niWlY-((N7#Aj9VzuUTzGTCOP)2%9b^qMuK_MOCm4s0mK*|0%xV_AKBVyjCfGzM01Xz^Qe%B)Wk*;xi0)UZE(wl) zoPveSg^nfyCEP(Pm1fg*R#X|doZZPHda1Q^X-^%}H7Nf@Ax6&XaGUovMRLH+ zQ%*7j-N`rW&_~T}8!MP0>hoKE<&_0B*ABHe^|&2#N1gUM_J7>cDA@$$92b{Bm5r~3 zLEI?~Ks;6FhE75VRfX{!o5NZ~2_$Yqb>~(hjZK%#QF8g4Db!gdI^=l)OWC#L z?tjXRQhEsVhc0=Zkk!+ln_Lp!zuDl4wbAt@G?Vzki@VQyf zn^|1Aq!`N_tamn>F+SH?u$4fzr!A%YzYXKSE9hmSWgQ~*r}L_DQr?dxr!&CsB;}7nm_l4iUJJBrq&9i^S2TM?l|WOl~EsLlTTeX8b5;#%mqerJjG^2eXl-5 zp!d5w%j4Zw8{&)CnU5p0#SdG!o-je^N|SVd=@)p41^uNs?UjG2)!TG-7Hnw&ToJvxY#IrfT<>LWsS#w}@;~%9hV2h(uw{Q@ zn8`lVJcoWZBBT{IG1f%WardU*D?QuQf~MiaX;$4v1uJ_83E7=WqW1z*vYgnLYsI=$ z>A#he1k#B8cwyCM>kq;lKfg6%m2eAWq-MBK^tA&a zKBs|sn%&m41YeUr;Q@zuWtmn1rCgoM*?`am;Nr;d7`QL z@R~gajvvJ#CC?;-&ancMxXTJxAkSk*CWM3q$*Ax?c`8%R;YKNdMa-z3d}cirxmye7Q_&ji&S z%vx()|FHz@_WG1X%4{FQ5GGk&jl{(7M3X8F^CkMT>IySnFJV`O%UrK)__d#f8r8xG zJw~sZ6~nkdLRmT$u7Ritz33&{X=M>rC2}ZJ9Hy(AVd$k$WpuTZpr8iZ$)oX$PkTlx zkiIr;_xojy#phw@USYo;8A@YX|BPGlv~E5>#s6n;t@`Ul(eHcClR$69I~v>^ssj?r0}N*2sL^vZht-K^#}BAP&;(U9^w zKx-yIY@4ba^-ZE7_-NHb^JzY#ts|0-9PcHQ;4S7H9t=8lVg`h*3)xxU++?1H5|P3_ z*w=Iv+sOcUHk!sQipn+cw$*S9u9&JrGErBM1Z~#VAwz>2x{=#JffwL1?O0K2$EEt} zxJP2~8yiRB*oq}G7(iDJ{Zu;L8kn0Msh;7aaSnB%*$)+XW3EJ_7yTXUAz6r}J#48` zQ`Z96*_vZ-TX2>*qqz4@fJ=@nHRMNKD#^wehEX(8TR#s7(>LHyJAcLboegN}@R+Rt ziHbi8zimBa$210enWuE8~3m&hmaJ_ylc`;Ancl2XD5 z6y^Zx=C?1Vs0TXZM2W^aK~3*`D)zP@T-uS+C4|&-6 zTSrtCGm4^F?(DO(C-!n-qWn_&=vjp$NMOG9-I0gb=f4nHQ&*>TX05){1{2*j zJXkJ6DbqVx{gUxa%m=^Kykd5Z&2OGw9mhjiob=T7)oI?lt&sg2AW8V9f?GL5RT7(o z5LgMjr@K&k2a0EWEgo=4V_leImGd9f458@zCwu4aE1rQIxlsWGkw{c2-5f1h^9$Gt zqTyowtQLs>v_ouR+;~_iA3gayz~VZVNo`8QuVhl+l+FKDQhSU1BgFdnkt#mD0{)QfBqT~ge?^WYV_Q@Aq!r$MYwJYhC%79PRw6-+uv21Wf+T&4n!{!u2NG%`N&{|x&H-DX5vTi zsPB<14op`EmS#R;*OLRzj;2OntcoIh(yFFFFjx)CbUL1yU%)8Pgcc(=iut3|q^8Z?SL^D^9J6j2p=s*)bxga>El zm#rLg&rx)?v|m?&zbZZQSGKeyFzBhMO2VeT1ghLv5R9Xk9IR92M3;!QJDF}8?5LYO zGoZ4)%!;R8MGi_l*SgNyz5qDIy}7z3~s z7y~MmRS0A#H1J^+o5rmQ0y)~kmzD??L)oVZ`Os9AzL4Cik9QT2#OSI}* zBz+HJhK!%GCb5G3*!x)!RLmA!HJLBjikAfoev`{|BJbvjBv6>lxJk{Bxd;7__w^_Y zak5Ig%FI1V9xY&7tjZp8cX@pQy{=NCvez1;s@Fbhcn-)pKg57E+Tiq*h!FZsPUs08 zBxywYb<3{E*YCEc`L}_d?p_5hwPnC6iItgB{Q`A%cA}TLIu`&O3Voz3FVf#GGS^)Y z$HGtiA7DE(TOo99;m)>7TRApi=%SuUY=1mv$?FIqj_k||xy}e0FW4Ke+MjaiX_>^! zs1|kT;x#0sJ^0m9OhlwNOs9q?hchxmtpDq_AUFRn>^k2XP+a!~4+63dq9&duC^6f+ z>$1+^FT5|fCF~2muZMJX(DLRnOXV2|+jz4Ac7h0ru5IC^X4|&f-c^gJb_S|>1RxL_ z@>wiM*kZy-{2A1LylP>1D-lOEZ}d!is$~o_PuXsd57hbA5_C2Jx9nC;ZDsK3f|A<8 zo3|Dl<=6M(igAYwG7PkwGMM4giBHwDG&gY6#!*KEni}W)Am=OU^y|k^3aGwC{K#@% z@w?XlwmYe4g2s%nRomdrCRsXpj;iF_)xT`F$2X`-e!5!6c}cJ5Tg(Qm0rjPZ*C?Kg zRLC(~7m-Mv%R{4A6M#YEKwyERMBmn>V+?T^DOmJoPC{asN4ad#G4-$!#^xi^kK3Pt z^QR$9gKI}8aAGgz=t_k-S+?+@emY)AoJrNh2;=IPq7|uJbQeOdegj$LOKZkF6abmoftg-)(MHj@E#>a8@bISx|rLl$0Sx5)WEJy~-?co}LV zBX+M0>~IUZ7-ua|d#vxJJ-~muE&hXWenUZ}Z;5E9W4HL-m4P%o0_I;i12ALScv(Jc zG2)nDDyBCftcxKm$JR8!n}z*vr$)N2^;%9+ zKz12ZqKnWwsADoK7L%S%fycVVu3;r0P29zC_yty@Z8VVg$D*8e;wpOjf9O!ogh4fy z9I|dE{{MBmNI&x6x(^0JH%9Y>{sBfKiUkSEX2`i|w!UO;aosj{+l&SU6g z?|Qf8il&-`or-f6N6G%KrDO$|rV2?}6Ld6ae@x|&RmQJX6_1G%Ki^U^G%m{jAC z9^Og+7v-9}znB~iY;7N69q=JZ12RE6)`nc%5=|OgVU*7bJ%?v7i|h0zSe^Rg0!F{x z6{S-cL8cpFUUoxEMo@tk_axTVO@%`&ArOlpGeW#-mX?>58i!*R)9st{=9)ZuR9zfa zPD2!xTTMwNKY?jN?l6 zE@h0!<|*3w1fEztoNn3m-s8bP@{uR_i~sJ8)r%60_O}eXsMij1F1lA$CU8_6d^2p( z_nkT2XTeKrL?R1k&(#$3+Q+VS+RV)nL8zy6=s4cw<&eV+W5L-aK8+5sqzo2Lsf$Lz z`X081RQ=T_IV-|5GsdcUde%L5dC+;AO=&5qebS^m;IP*O`@7m^#T!1akls?)^pRq2 zUvB{vjc1h8LV2T+s+y^Q#Z_kS)47>^FLnMELi{|)+tYBODe#%(TCelCnJ|1jzb-CS zTYSkI>u*!n$ld@R>~TxRhbhgq2fzC=r3J&8+%ww+&EgiWs14ye=_s~_7&=rMoR+Kb z6O+EeT!-NXm$xJR2Pa*DzB{1kgW|+D;_fTRB=ITYaN;+*nrBYrX>jnZ9&=Uul37h~y4wGs8I3PbEcOYYJ`M*@QYRD1qf&nAt9c`QSo`o3AQ|5rzJ&H4i zeM4uo8hJ(k4p7(-1I?=`ht~Kt0kPv5|5i)JbLafjTy8Hrj9K zUSTBRHdTbyZSU`0gm4t!bnK;MVVXKuLSN{P9d0HiVOsaI)ZFJ@VEpTTMHvm@vp6v&;77H7If+O$(- zkb@0uvICx9-c6s7_LtflU_JCB;54RO7;~a(4l$*k!D}03l{!oLtX^cu2;xcnDHUbl zh((u`IwsTz3rc7`xZt4erD zSG`MofhFyI`)ZyP+kJ*ch&WnUM36e{+Sqqiz}Tyqw#Kx32CZAD>-w6c$trVn>!#q5 zTiRXCNa;b_l2U_LW3Gb7mO?7nsg0#po55^MP_+F)VGu^~n;)$jt^ACGapgZZECg3Z zkZ#qQlic)&cKKR?K|vaEdn%nYL?D#T82%JffD_rI%as^@_k0Ys4ccd<~bK$+4lzew_G&NHU z!(()-J*9;6luEpFP}OD|R09T*W9nMn_5`Sy)sg6om(khWe&!M9W^k~oGcJFuBGIRx zo?W8E`e5(|sc2tS@FW@WW3nml)+9Ur|>2FQoUO-db{RMJ;Um-~w_VchRh+7!4q@|pO zOX22k1K8<6f!k;?!psvP*tjF6< zG11g!w6H}EJZR|VB-*3G0gt7*TD-<-{A9E&4=V#m8VK0fEsehNlbdIz>JEG@5`WlN zzGc(oR&}8~=ZQorPlJmiM)8kV9OWA&>?3uf6HBxzaCWi%yZyz{){ZNW7)PP7F27E+ z6;UpCg@C$j?~^W5Zv6Z$<_@h?ub|x4+O}^>CI&*F8JEx2`W9kM1Ii0|_VwR<26tUO z7x;=gSLht?Vq0jxmL;6?h%e%UVwuuIbkudP1@6uWdvw>WWwg(E^2rFx-ZU#9m>c#6^r3VS5QztC+x~1@h_j}tcrD-L3u&eRvtvhn1OzC2f%CXR8PF!yM3I?( zW_M(b6awzBfohuf4>al97-4*4PtR?ZMSBqHi{{Tr2iI9APG2?v_FN(|+^R!EjMk1- zFv3!73=>*y<{*-J$sycd`*0_ajUNnQIYnVyc(7OV2SdV@_g~VbV#DoSHY1?E(Npa| zub=yz7f76lFKGoT0ON%UtRuM7U4k*v3_C=>new&hS`-)`2Z{F^LUjlqqi`96Zj~=l z3^QO^xA5AR-Jh585;U$OJHyeaGeZXN}64X}v${O0*rxO$uO@$zcnsBd> z9a|r2z8N-F%I0N;2(2UY1(xjs#~HSh%6>V&dXPF6L)oyN5}=^og>;OCdYYzcLei@QThSk}R{6GSD;E^?>T% zRbBv>lpgL)=jj;5^Eauerp~~Um+n?53}iNg@3dGCzV=-OZpz9Nualedj{v;~xiEG& zCIwckgqqo&xnTcPz6GAO!--gKkl@Sr0YKjb6;n0Ds(0X3n@rwSYEQ_=#?C0*0v`9c z!R5I_f0(ZzW5Tz}0h7(P4O$e71mz0@dw|HdRy~ z7M|COB>MyIP8?h-Cm=xoRBYT=Wu!ebkax=tYErt*t_$Hp54peB?es)4t2%h0<9Q4c z{^f9Zy)0MbgrNl^?R*JXe)Ue}>AOGWh?m##qZ#-l5AN|Wgl{(GjUUhrixbKabTip) zRk|O(9TfE7`Ytzx2h@XQR-5R!2DbJhXKUzp0=!#KIDRQ1JMmSd3)_9n>9oHm=^4D( zL4@$E`yJSA7_A)|W#WgUl&+}fYQ&~}W5*b&;^ikb;yXfr4yLbkfkM8EAvhaHqwZT% z{_k~dF`4Mb)*4;^YoVGUGz+j!WkY-59_*Latx5gMf(Ll)bpX<7H?4m-V<-m1Xv{GV zenZtyLf-HoykYB@RQa(^!=rW^90!-8NPbK6`88$*DYyR+_?zL;_|n>lG~dqw;NEw; zP;FmDNzq214eH#OY1YuroBDH;+ZX|~Ijt2&Brqh$H_GeuCFy=n9MBgcc>bd=N~-4rHlh5c=tb|)P2P^IAh%UF(n0IwgZqEl-~LZ%i1 zkqeMTxmJo(^1cFCgO|mOeRs_CEAeNUde_R0?V%IWvF~eb#5K``DxveL@Ja*7WD+UKHq?#>o=*BLSv=%A%@HrAyKTT6tZD9=}Ma z(JdPtWBsfy@Xz>;{MXZW%`TYa;7%HCMp8D3ypuFO|7-xgQT8$C?eZAs`qZa66K54a z?xW~zZ)Y4L3yr+4m;l9kKmrhQKwN*F{ar+~reJz9SRC}=%rUnPK5kI93Q*=J@#7lc zi4RZeC$u&_=_2sGl{r2donhfN>F$B--eJs4pp0t=Sm+f6?KC=PjeK$TGC_dAGMZk` zd_JLKUBg2ITN~?KdgO#$#0q_A3N}kQ6RJGFKdJ{1L5;Z+Jrj~ym6TeyTu8i0IAPBc zno#TzllK>TIJ~2?ObjwoJ-5yQk6!pZ+5#|0GvO^MY+?usV0dz^n8OHZ@aa%uGZ&eg zAboEp`C^5x8`Z1@4Zb=&Vk;8a(E0qc7^&Ydv>ZP(6UU_{N_>#1C{QlBx=fl}7(&zv z5ZBmz2ERrA?zL_UGy3r~%)V2Yq1wX0Trlc(^L?!|p0`oI7?aNUE&i^iY`{cGWk;dX zCmuEF=Eb{)MF}Pg1cvi?J#g*;pJWZPqqq+^XgChZ4K7~w&ek{f(<9gfgZo`2*Z#`G z-U&mkUzn$$cSm=)Ge`vsR81+$WKPLjyw7*uXkmjp;^sH*BHJ=j@wmpnu<;FkvJ0w_gx}qBPFSKL0!rIxPErB zUbO-WFtN=}Ht|K5;|NRRD5<^xM)~5dOiri{7|gu&Z$sA3&=D1?D5tkQTg3o>stk@) z%(s+~9KsDR7Nc|jXziL zl(9^nB|$9@tmEtiz=_4Grq)NYAHT@^2KDI@nQLMC`>d=cIs0qO)p_6fuGtxrNU6qe zS%keLj=u64bTE~k`C^S&kWG;e0H0`rv$!tyy~BgVOD7VC&pNQhAanm;qrS~TJ0xT} zy=(u!zkA|;-L_MJ#dG^zfZ(hlvkl3f+GuJZ7~oSBnQ-QaM1V=ARP-9gPHvpHv|o&^ zxk2l3C1v1m1)ueUlm3CZ6?3@-f3Ll%LlxR>7Hqr#I0>Yq%~N$arZ^60`K{OiEpj#84+6s_w2GU%Xno{S{Y6`3dHSg~QevhrvCAotNLWB1+1 zU?Lu$zHp!925I~SV7`eOR9|}Tv-F~TLqSS}9fcHW4ZO9QaqocFM3EI|rj>XT-g&fp z$`#HxFKe=Lk%)mYC))YaIU0Q!VEP4`yP&q&u|J%6hxfwL%>l^?I0F@T7Ro-*-g8eZ zwOx9vkav~UuOmLZn@KVw#=o=&c>xrUw5qi;SvDapQ?U=Lz@I+;l25s22+xHv*&opE%QgZb7*yH@Rq~cA*JjhV z#`!+<^tFP7c1TMRbJbVsb<*~V!LD$A@|$LTJ=@%2%d$30`s0m=lpHyIE-70Adw3#+7_=TA_tOU#Fffy;I7eue z3t+mCWq&f~qatIx%|a%LN?rxtxx%5Dm?l?ne75usBt_$Vv5kh` zoNiZR6?-i@jjp?7p2O8^`s`MI!IcOm>-;0L*%8JBu0`63vIw|lBP$}6p$y`y*D5Q+ zJG&i*`weD`uxcT4{}-&1g0nnwd=J%^{ZAWj{MIw}u|42{yNGOJ!DfVjIn0<)idiGS zK56prZgY%t@8*AysZSUT<9Nug_Wuajj6?#6Wj>|B=!*Gy&+^eOQ3?AUVb+5GKF zu5ldmo^;M9mnPGtajjSCt^~1i9jXrRw{y6wh zkjs`XmNu|1J^dKt9fOcs-6h&bWlab__Zhk-t=yT<{6Bm*R448(CSZ_yc=5|L%qi}& za%S4i+#>00_N-Qoo7V&`(10%EI|Vi8d7_Vmw4}63k~Ra@?y3Ce!HHBJ48ktGkw&VY zN6>yKZf6j{$hKr`^z;P19$SeuEe^dsJn_@@7y(J==Qv$YXqy0Kn=;ZSfM!TBkZOZ} zg`Pv?BdmgOk-e@fRP^%J-_~%w>W?zH5U_|x@NM5puC210?W!3B=qV_& z4sow(*HP%`uV>ehc*2#LG0R$t(#lTIt966bu^&w$f+O|TsO&Avr2L3-err8kiD^>v zFC?;w#{f8<`MM8y3aa%B()+#UJKZJ<+>|}`UwX{YVfz9RM^o~I;gDHQCt8=9T%jbh z!d$v1q~cABYmTGN{jiPpY>J1n9e&7aj*!g1ftspY9JnLd4j4!x)Ae^G;EA=pAV~O( z+$qjnjl`IFvdx`3NS%Qvp^qX_Gq z+v9L8(K5Bd5$VF8ndHGAd_3#jX*=;sJTOWsC(d;^SGoF`f*|9a8h}U!!Ams27YNW;DeP774=00G`0p11qo_(-tHS=fS_ zmhkFu%m=O`Ir9|W@m!p@Ky9Y50OUB(^WN;Tawk{$h57lLTe(>4xzLXF30?XWjs5Iw# zss6O>H}${<)JqGTxcH1xwCk zkxr7Z=mDtfMh;BuJfKK^ffcN`@e1^&(5_JR-Ouf0%7UKFIXT_)+=sZ;HIm&@CXNyW z)Lr5}h3}*Xqny#Tzl)fhMSA#OYpXKsZ@W%T>%P2NH7DoE@Kt1iICD1&-AJP3p-pet3O*?s>hFk|u?C8ut2H zRraO*&bwn=*kg9rs+Sy&x7u|ny>`r7v0md$v_bzG61p5%(UIJf#65Ft+ zL|F#W`_Ha+HLrTyY7x}eWjCT`dmuRG9@54|*T<)q-F$P$TU`5K5enm}C#_{hgbVcI z7A7y#`zL=kS{8`Faml9s#W?CJFwiU+iE7x`L{w!jwEr-K=)x<%5MG*!nFZ|JXeViD zwaN^4T|G~5^_}*#NRk|3zEkk$>hyRtyqQGWVcQy%CooVvs5AeE{ z_Iqnv6@z+&&pAs(;WA?4*o0INp9u(iDkNM(FV%O@X(V07AX00I47*3{T~e?#h(XkG zu1hI@NchT~*lamiztPtz)3S2rume!V$!9j~`9A&Q^n@P?GfoJ7UhJEwQi}-4N7dA? zlAz{c+mUhf23xj9NPvUvM6|6Q1AU->C3Bo3o#)sFMB2X|G)Int9gV%<-$W2NDjoBK zn90P5ps%=xfvT@NZM=*)NDC(6eMZ~K)&2RKZfo(RnXK)#$R-mT=^3{ zD0&8FoZq5ZsoEM+AI4=HpV|O?G%bZokCt0=l+6z8ZAxzAtXKN?A?0l?5YBy&!(ZWk zW+F_y`o-Gl_X%^c1w=0LG!h+69J|zB7xocYJ1tpJ!DaU~a7Kx3fm6_q0`!})HB6AY z+EVo5<17MjK=4s#EE~k{^>@nZecx)%ba>>Xqx^$6<~lb+oU#8&#Ll&>f?Q5&1u$wc zHPU6VtBvHbut?RG#M+pGWMPH(0@&#L>=VNT#Lc?_8qbX+PHoVxQS1b~<}sHio}yWr z=B9xWpz% z1ow79^22k9X+;=BM*Q94IuI?^r$l2%@#@m1g`=u`Ems@3gtH**quDZHgOIJ>`!J_E z7}PL2eR*vFxOftc0N<03RdX5iSEPvN?6PM~9O53*gjBEAxxy}|n)5LS0rrSCY(;nB@I$E-Hen)@r`w<^q(Se+g05S5hxLf# z?ruvbmZ9IDm@Y{*RQ0$b{-Fp0`2Ai6c<`ug4`7iq1_;})exI)l<&il!D-}?1>NtA*O*Rx0B`>`Pu1+~y zeb&?yYWch$ogY;0H!lhaq|WGgrDeud0H8#%m^bO=a|oGnUowB-bp{XAg$s;~tt$xc zVe78!bB@6=b6{A1MLX`_+%6`}>8`pE#iit;{P{2^^kQmnvsha5!M+DzEC#a2^z}E0p070&YW*aCf8e>8l`?Cm zmomQ_U-sBx>HsP%m{;D=Lv?ruIg!Fy-a`w{_yri*XV?rmH$=HrLRrn76wr-D9~tOI^M3? z(s)8$(}*NMsT<9W&v}Z$^ckjtaHdXOkDl`BByL6@&8=w6+w`;(Q={Of$-Y4D?-hv- zZlPU1H1zg>C>v}Q&uh02-7~q-Ult=<(1Jv}#5vVGz52fRj*J#GII>En4hOo|9N!}M zUVIT0s<XHPA91)Sj9vR**ZOx#P+sb?2doJnGuY41>RKgFf~YZz!8VLj+n z5hBir3{VG45z!uFk>_oa`M-mG*Xpar>xgRlwPPN9E*SqEkGAmGxvq2Lnw*L-Sdu04 zYo^0H;Gka1XdcxMLUuQ(;Rn+>v=bkt3p-dJ8uY!}V`If5ha}J;x+x@k;v!;3|17?H}-8CcgF1L6YI;mcnR~eI#W2|q}4QSN|+02sh%d^ zU};zSfQ2BMUBJ9?L30y6J+fHUzN>F&vdY!IAcdnWiAcTrVJ4MzC4i~@Q2x@@$V9AL9Y&*9fRq4w?JBV*s*mc$7!}E@ zA0iMycG3u7mY6y_uqM|rjS%yEXZ&z~BFlmLii`l-$Cos> ztqNl3SzhM0gv9$0L>X}^@gUng6pV3iIj_98I=;!08)@MtK8!D+uB-XFMKvy~WK3)9 zQg$J>*d)%>hA?AbyX;iC*Pcl6#vxxZTVZRd!zbdH7C&PS_lt-0k${9ak&)azL~^(t z0=1}vbCxX)S5`6o+7xP(^IX+$D)+|qeTUYRNc_J zW9g=e3(Pu@nT@!D$0xnk0Jj*X$C>~7k%K@>-3R*`Eaf+US)$blj&bk4CEg`725s@& z({}lYIdL5dRYU5%_9YVl8cwgKO)P2SoqBDWD@GAbLRsRu6Do@*%h z|19fM1E_2KX7bh<{W-0mTU)jg2zKi46d|>qWnL^ba${zO=STByDCA>qv__VD^9b#Z zo9ab4&e1HpTd0aO@9*d+Xi0qGL5As>T5P2zU+YL3W(6~DCYjGEW>+u2T2*h!ONBj2@Dal-|?y;`t8q8 zi|yLY*NerV9cm~G9b%PAqD$!FiebseU}tqIfcFnWr|V_L;7 z7|6yUYp-v)_=R87)>8El7d(pG9TBG(4V>b2HqS_shp1&g#s!1DWuThjj$+gKpOOb5 zXdVEg1?f5P3p*IsP`V3G^kgj%lu}Zr#s@&vE^PpIL)WQ+g-Xw`>OkY<8YJZo>1UvH zhU|Ty?w9el+CyYDQ3lj1>o84>bjb;ZYb~ax84TQN$xNhL%MW1`EA5LP-Gn%iB_N*A zo=BW{$tIBJX#QR72YP7`8@GP8wO+R#@!yZc4>QGwP#4c^DtAB*Fweo6Ib|{K+je7V z7noB5Ae;P`@WM)96MC9=$j|1y;4y338CK{?9NH<|b=n{b+G6BIp~Qjodae`JIZb*a zp`}ekNza;PdQ{vsAu!xwV)5VUi__H}@Z9ja)0;_9CJ`5M;~@$1yOeGS@kS~esIZ-( z5lH?EawX+1cn~;^)g%KEHTi+fgWIeC+3<>b82YCVrPDa6KA$BaS$0<)oHx; z@Bz;l^W0&N9GfXEcedP*F_&3@4r=jPr`ovKm;vjwxE)<(c!x<(Xi~PifaA%T15wu;3oTsoyb=`` zn!wnUEc+)+cFw&5NiKlX=Kq_u%hRz%+aSG#WR96kt_W&`ftDlwf^YBoD|fS3BGq;K zWv{WI0}`>x_0|0RtfKMmK8_2mMQTxy`s#C635@$qQv=6BXlkr+fhtU~YqS`PxFZ|w zBa$nQ{0@8=Z#b{_?nY}0z>|#ao6dIUf@3TT_lQ{vC86ieknmWlI zmY;+aW%-ccbe-i>c`5((;ah65;xd4Q~paFJop zGq28P5S-bQVHT%}f}WysNrVEs9`qot+YIytRf?DoR<$=jjNI#3Y>O+fyZI@Nq2vohbZGdC5%looPbO zk=fus>Cr%iwumfXC-Bp{mv(u(#t5q#7VeoT$j*|ci8%4K>J8|Hv}_ZxBUX0qsKTgJ zBYOX5!BphDTXLOW{RBLn1dMFOlDjKI;9T?YI!D0zF;RF_S-|*C`Duq-$<$+-IK*n& z3AsKX#mO}4bC^1|4nAN=95G%$@i~|_CZ$q{1I3URykf0)Ub0MXx9idYe)+Y(8j>LM zP+IOwp>KcY=vsZM3giMa2sfscaxxzidEG{7zgkh}Awn;OBBrm*^ZoCf#g;93FsT1z zI19nDz1g`Nre@SmujYuAKn6y^)zx!GhrL;?LI#bH1kyF~p7~!pMfmW*Y2h2b?FWIH zlTN7$yf=YwTz1Oc_7QZP(5|H<{zqnb20 zh9scb2BHC|C&ly^9{22SqeaXpBYL#eHeMy5s*NgoWQYHxhUlpjT=VQ^hn4|URACO6 zE&o`A#JOom4;NcrrGp))^sd|v=R?Od9-!yEnU8H&ej!GzVl4QyAN4&!H*`w%d401T zfSPYjUktA|t2L@5+nSxNv`A3VC{t7|(pmZ`^+asZuzLueOD$yw@`y1dD4C2;m-8dS zkT9#@&RCDZ+W<|QZ3EkYvw-?Rko(K9bZAU6I$8#wQR0T|nSg+6L8zp{3!O2Ew2jTA z)JsaR6$_0MqB@>$gS`-+gWcz+tuu&-;K&EML&cPV0TfUdxIJehCEillvE!s(X+qX4 z_!up65f=51bmsO~H=q@mx?tljtq>ex4V~?N$)#d$IuZ9r4ZnJnR2|wQ8s=tl7?@sG zhrH9TUCNy9lEHk+vJ(3M?f#_>5id%??*E5I!uQsPTDME2EfK2U;evC(nxvNE0k<*N z7JxC1eV4kFxSx8P;BewK<{ zf|@TBnx*kiTin#gt}=MVK@-ClW`Q(X?JARgNq>$~M`&zsFif(J@YJPBRM?ApVupPp zYcUqen1ge8br)hK-*der!T5zd+cD)+fd1fRYZU(YtJ6o>`nKR}Y~efIzHHao<-yr{ zrd&u}F)=9Xpng%qk{0}&H;?vgZHRja(ugr}GRtVEQ@-nspcto-^ADTCD;2Tj)SWQa>MfYZ*b7tj+5 zj+5iRTbez2sB4;g;1L#C)5X#Y@9y0%g%b>2l^Vvq14r0k0Ix@aZm;2@?DVjLHlWtW z9zG`)kgN{~AB0;({rwX0uSY}hTQk9Xt5457FPm)gCvtL&Lih@)k2M+ zaD9%t5K?CA;Jd0BM$M;g{g*I9Ba1$+@7;7oT3X56#sSSA+G*6{4SW@D67CO!;5ziB z+J-#|i@H(LnVXSg4V0S7=UT1XgHxLTUJN+IC%cx`@or1|v{q`Hu5naC_*4@Jq5JP= zA}@l|+1^tl=g&qnjYqp#)lN@$2X7K_&9bWb&(?fjJ{}*PDi3FHI=S1EU=)Tsv?(TB z20%QzJp_HaI8iDg+@Zn1Y7eG3Pw6w;i$y=0^O3*xE;rRfiA{foJOfv$>O8YhQ=7Hb zpjiMof7n6%`|Ez2a!C$_aHmZUGeoUr5s^qzPz)*JC!5L7bLC*jKa*s=oS_~2pZbZ( z5NGilRRj|2LNc^NGu6R}Rq>DjUxv=otin~G_7}q$E(?&3WBztfB06DojXKoQSftly zQ-RnyGx$P)UdsNqq1oOUnio*$r)`T=Pot-xL8?d%qx2+jjC@!HvEqI|*7yuku1$95 z*M^M-7Q=)PF}Np*@m3%Mm?FB?w?p!P*#H||tYid1rnUhls8c(<2^ZE9xh|8`S`(+( z?!MgZ0q>G%2Q-YGLy#~^ux8t~ZQHhO+qP}nwr$(CZQK64=e~#+F`HS;E;p6As9oh( z=NP$m#t${-yL~CZk-GfH*G)y|*p&m0w&M={B?4E_T9#>%fHg4`U#?+aj~zZyZ9U$!;KR6&_XDXC!~9x{{vXTmt0KZ93WJ){kYvFJCkjH*OYHL09FqZeefpU=Dved1#kb$udNulqQx&`ZoI5v7w$&Xj(_v zZkGA$*{|m~EvzWsakpp8qw>)!NdXgZNLTFHsKhHoue+k84;j!DHz)ruIgSWEU*yBz z`xOc_Hj~Pllxt550WgOFBtrRbtA9CnvaHVh6kEnnnjXzak2!rNqpLhP{t6xsa zrt1LT@O@Z`s>^*P9}lzPNJ(pR)|#H9T-&HCy944?szQ&_Ws6Hp$JRbxs!ghW-Av`gVM zk20l!k9}cxZ4C>h$jMlVy6Bg(;D%8CE(WbSr2vpx2VPd~ZhM79Y44?3tz0b(+k&FZ zk8EM2n7TWCrCT3g|fKr2o(?; zUj_vGVJbKxvpCfP<0PB;Y?_awN)qL80~7_1b%*lb*uvTp&`4HjY2AF2>YjI94{yKho$X}(=C=!QNb5wx~DZCtaE zjv1F?pwq8Ig^Vh5q$r(1V%J`lu$J>U3|f;zC7g?dYR#OIoGIqPq8Oo(kVh!QjhR6C zK+WvU74S`Y3tek{Rbc($F~Ghun3IL{q+xd>59U>8U%6YA&+*JlcxopGMr${o{=l_B zfzTG8xbrz)ZJdrdgF@73GXeCgZCgCN7Jb+NXFS!>yB2RctlbLONIz~L&kjT zyLzx=*0v>Qi=7!+2>egs^)m#N6}uH)+bYw3CeSwrk__PJ#cUN$EyJWJy1Bhe=tTst zbWX(l1~%f-%(nZBb%rk~>eH}#DX-@=3*COCZ!ScBdgVX)nxu3rZ%AN1=V#@??u_xQ zKx;8djQ^I@HEimtC`3|I+>ckrUt>a%0`d0$F#;6U4V&T$>!p=MPtsE|4CQXYGHD+5 zmF&Ph{hQVZWXxTE;cj5Efa@gGoST}MD(56SlrN6%wPgYH>0-?Gp}P|N4OFL3xQx2X zWFj3>b@Z;w8^|>dvjUd`*9&>8R^oda#Q;}AG3-=%aF<3-gJodBpKM)VCf|&v=Rkf8 zO1WdfoXyc%!sOBio8%6BvOJ`Fvj9O4I4OWYD_iSM12LE)n>ov{55|8RfydkCe5ZHl?KvyHuL`qG03#7B2fghZNbrhX+kb%T`};Pn2R~|GbrK2c*0`t;W0i+Ql<*1c%Lz&sU`U7aF^3|$sj z6soH%;3wLN+0)f*iZmrA4hjcIoziTTV&LmF&Ji{M$XX z|5rp##Fc%S{!xp|V2@7kG)6#c7N?aI3V-j~cs_M`xziH)eb`VgRISs=q#iaM?kMA& zVQ0DQyQ42TRFZ|JdzN4K!P_4&#UQaF;p#zotX*cRoUHHnk>IDNq_1IwN`}*Q(>5@ zeZKH!EdiK0WUC{deu(rGmS&~KvUv(8=Bis~tE`DAbE`~jOCY4=7HGRi=% z(XKK)@}KxZkITO?D#tbg0(m}8xhcU=IMltpuOfM6d;S`+OdSrUr~2HrZ&quQg1vl0 zC3yKR;x4bSm7dz{fB=dOLJlEA^LcjHR>?IK12WD(lJmG|-A&aN=;J~=t4j}Y4#hoV zC6Qb5R!!j_MSDo%7Isa>+kdDxcUM)k4x#vt*${h)@^wF8jS%=4r|1yB7jLEG_sLE> zk|CGp%uCVIm<@fj@yLo|F&EN}+l!gQH){mP`FR*+B<<2g=ew-eRdqjmJ^wm?4)yNJ z2sFmHWBD0pV(DwWPk&=PFhk&SwJFGYyui>DsCN5T;_l))MB3ZR252Rv?G@%X+d;*e zMNovlbK8)Xv`9SM2_S4;+G$GLI`BK#r=aU3C&F}$)E(Ua!Z2x2W#xcudhBMSW!@1^ zKS^s0$Rtv9sv_kAzfmmZ{R2&63y38I2xGr zfat^y{$v?dfuc$$smPkuQ-317?%Ews#gh#pIEFDT@wIV!6c4xMxWG2!?@CtTpJ$+% zkAY_!%Go>MPtL#xt*|h2VRsIUY;^{@17F~-(?gI(Rb$4!OO}Cw#OUG$JkQYXtqT*l z?L&O2MLo6MGZ4X-bDX}W^}Te{O*{?MzoSd0I^FrSjze=n7gNr0h!BJ?6~wis+8Bz@ zXs7Kg1CZswqm_zH6>H)OR=Nm2aD$wbQVqu`5Q0Kz28J+if}XBr2(u3CEJK0P#%T`f zP;19UEN$dPjUtP`4+=WfR^*KkHxQbu7 z$4q#i(+O}wEStg8jj)igk-|C95|MQlhKR^WZ;>DFzFGux9AO^g$9gFdgd9)7T2ws5fjxT%u3FuMB=;vXIUE0^EI7^8E ziOYRBuL3q?WL|!9bMRIhII7AbeVyH>FJrs7^+${fc-Nn9j)1m0SYbWO#{Lr9fBKdQ)%wNOf!2=? z!x=sl%6uJsqc|(0RBY zu_Vg}$|-WO3^~+)#@hnN+$M(408?3R>H3~B#c`!56R^c|^BP}kt;ePeD7Wuv=!YF_ z)5K00%eHigz>A`G&2nNS}C;8Pj&(OQzn~T{2IeFvz@Vqc0vbg8>)J}eZPQnZ;dtQ zfEZ@gMzip6DIhTbkL2oR-QhgbN(iP{!82`IfMpY&mKhz`XfNWa^qY3nX^|qiD(XsU z_Y}~yz5XC}$^e8sF?MAf=K>(+LLW^_r^DI%ghY4;uW+!UC&I`z>=3W8BrT~f^>40= zH1J)lfg9w5(*?rSiVXkQHNZQET!nUOU6>j-p)Me&p^xi`K%U9@cq@V@Rds8;yw2#wT(F%Gaa;Hr5Otv{;*}) z-8REQevf9!w6Nz&7#e!zV?DJASu+Kwx8#gB8`TR zXGIU7@HVwW#4>9NY5FIs*>y2-&3O!?>Oemaf%$YhzBv}(ni`hgBamyreiB$f;Fp7k z!(sa1bayTXz~zV_hT|yw!>g5cC-@d$+Aa8o%6|Kmr}&s=Qqu$z8Dcd{*7F<@1NXUA zP&nnbiX9@Q??2eMwj%n@t;^ci8R${BzW`H`mgcF@Y*Hx^`yrYPPtt}-liWU6d4>tZ zlsz`tC@$1aMqVbBrA7v*l#@$Sj2^GY-0f=;))H3!3UwUjAgb6d$#kWO53BJ95_TwC zo85#`ie9EGKp32s&Z-`rEW8SN_mM{WVGvFMXhBNGA7RsrEcGQ3b6}9;SZOqS=e2;!X3;9k0fAb*$o7TvSj~6*yGFnAXJ2f1Y3~M;lY~uXASvG4$;_o zj!?Kk^^|93s$nb-V%VL>`H(DA9XHNt+d3w=7Az9iL8nKQqHO6%ftNp*cheUHQGd7I zJ)pfhGjny#(Q9ZtPQ|Ng^J1D=^?j0RfUSBD#`mt9&(XQ(Gk_~dDN8)PXhmmIzq)L9 zpKt__7j9ThB}D1`v^DMEf&DhgKqt^lYRZlm%sW@YOhrASD|$qhTLn*#{RM;RFhdGI zCC{hfojE`xhh~3#C#AH_4&m5MadV@g^r(vjxFngZ%Dph+q6VIZ>{Mrq2^KyUvq(f2 zx8HiHXJc6nnKO=Cqzw8R5sq?S;uLcNH=MnX?Cpye;HiB(DO-2k z!I#V?a}3^%lc>Y|QqM*`VMh$vnoob*V(BA034(ebN`eb;I~5z-olA>9^P*DZ&^@F( z@W>8rKsx^ZJ5xMHPm)^^>*P!J1LSF+gat+e0N!O0xrU%|>zBQ2KPpE4D3SP$jAh%3 ziS9(H%54~ohejot9==By)kGOXaJFd}DLk5wNcvZT9XT+-NKU@U$iUic{-a7*`jQbl zfZyquMEM@Pm=aOEi<`2QFjr}X+<3^=?WCa$$HsL`^kLd8^Rm|DsWG2WTa&Fl@=k9x z2yOlE%0W`x>A;@0h%EJ@)*1L(K{-lV65oCCdSf0{ACz(r?(~=Dn8H)5+{=ijS4an( z1xyO0SZFw+8kmIDK|Z{pp3>O2-IWp{5x7K6;8bFs-BT8|wp6W{wn!VhGv~{K(23E4 zil;Z2DvGwi`kCVaZy(J@m7v99=d6$!obICo&yF$^Tm(vIvbY$@fkjCXP|5e zPY5||ydo4WvTef3bc?kEEoFPq)pRf044m=_DBV8{r>1tWP_4TXcc=$}anWlh*9C;o zKCm%aG!6k;H zUyi6QXXC~$L{y27ooZCP=6aQ59)xWH5-)5tT!Z+wtc}-q69?^(5ef^JY_3C*XYM79 zdToRp+m1jHyf=}Iq`urE8ySZoFlUD}Lc@&no*f6BoS5fnZ2r2EWQ+XH6RX9`mDk-) zLo?bo4FuQ&A=9D*wDpY)*#*!2{NUhO3~Au_E)}?!$^qr|5GCy#lF8V4l9qaum+&7x z1?XmA7a(nJIxk4bAYpp#0&f~0HZK-HIUfkB+1_RYT9A0yxudPM8I7}-H)&91yNkA2 z4RX_pj(e)1`KzA8S_YMhVwxnXjb*fY%m;|?N^@7N=C;~%xo7k9esW1p9b=iT(ub6V^wY-{RiC_#|Hu&Hasy0t zqd!^nQ2=PJ%Ayn67+v2HqZOcfexZz{j&gIIG*oY;ie7Ald+1KU?H96O#cLD69bUXG zPVpuwW10tU%4U=DT@fj;nHA2UDn5ujzq-h?B5f>4o95`DPapmw|2T>uvKuKSY|(^@ zqBJZ|@}`kY7IHs!!KPxJ5hw*@ebouLfM`;Ovo=AxarIiyWwf7iV4D;5U z`uxsmA`3`xA-f2&7OzQLA(7}BJRXsx8HE2q{Du2VE!^$G6$AM!B-pRDOrJ<4&#ojX z0DY}zQ{ziDt@}Wmln)Yvw&QNomw;>WN>W!ZNAN_Wn&3UF@BUlfA3YfP*Mt{7FX&ik zsCd7RZlI-6{dfx)R&vqZYY3k5XxCXU%WWZ&1H9er^QK&YiPP%&j=X@j*H$+G}Uu%J-x@eO#hWv-aex&rq3EMxe>9op=X_*O~ zsMCfAbj_x81q!|MJBO9bnTBBn#$KG6t@I~0-J-SEK>1a)8oJ~gPW?X%>NOf3>p7Sn zlxX%1N_GPl2!@KzRU-;J-w~rr80XHUi-wnTiZY>42MQ_<#qOdNG)ZJasZk$SOcfYe zk%sN@SW*_9Xi--j;T(>|=Zfn<0f%lVlzr47p>eaTJ6%t9eqag?VKN_Y#}Q{jYzfG! z5A=m&&Z+?vbYqwKVvv3E9x>D(!(4#laI!c<2$zbgtL9;AFCh=oreO`zI)ca558&jW z5|B-k*{4pVa9@{DPy`)UMTs9Il`IeS6QddIk64uESl6NumzkEwhF&Lp0v{>m zGLfdM+aSu;fP21TG@BINdNC@Cdp;^vqxe|df4U$Ca^xo1n(3pAaRtalMkupQQ$P;a zJ_lixC}-_BM156m8!Jl17zSN^HHuiz6*QC7;Su(_erF>v9)k(tTVSG-Zq>w?+XBNI z=pqIz*5%l~jFsg=o~1yyy9CACFy_BWu@y3`lM|lEyCGtrUKrHr<}0J^6aH`)UgFR^o$krC8Io z5esmYv1$7c$w-|)GVBt-aD9`1QYK1wuKd-t#=i>_f2K+gtj$0kSS%=F)wM(Ji_5T? zL#X*VYA-h|8Yuzc&7*=8Nv-%bdkZ?U%^HS-4r7wOPC+8NPCYh`HfP?>KeY1=XoVxE z>1)Tpb)-U*mY| zZ_YPeSNAVdMQlcosE5V~1We+As9hRr3fD=zUVCsd*u4)?@I9t~Xf<~s!Eey(tub@i zAhr`%-eUrJW!;ar&_q=BDaN?1u!uRzJbP2YYJomXjCdq(ro~eAgxBT4s z*(JGF{>i0mzVSRW+3kQVc51E~v|{MvXUI#qG=&Fm`i{d^yh?~h|x|hHh7J9XV~io?SJg+i@uhE;`@H#E&-{~ zGv{zE!wQt@abP)DY?ai@q2odhVajy9-BfbvZVpyFj9025syfpt-(VB$G5Z;%lHRwk zVc>yD2SwM9xbvGZ%r7S23k=G{qaF!rDR zaP5NXsqxjxx>g*22+W0kn2fENnmA9!U$Pag@-Q*;C7K7BKSinyCb>K%#}g@@gdT4ln0jAsoLNHsYiq}2?{^oPjSfQP8%!T(hJJ@w z-rLT)XH{vPy1IP&wo4goR}^sh6XIOn`Z8?X;d6Qcw8Wzm{j-)(&cv+?6*s?px&7m~ zsDyHQ^ozaH9UQU8uRLZiu_d7${_`X5HFBfoTq5wZj>9P^L?w#FBDOot%0yZ*#~PaH zg@i^bEQ<$!VBR3?UDgr`H5M+mz2U;0@%@J?V~A1>C~b}1$!u4<@I$tAgc#kW5&xOi zl1Dpgk|wJ0-`9;RJ3o~==>qIk53q5@{K4be`qo_9_}Iz8lonzi3oW={82v}&!ipkt zz8bXB5W|EzKlEsmEy{?}8(t8j`I?oU5^Cw~7eK9Re;4=q0K;InHBc(ni}@ z1Vehlr~l^pyF-{IFs3=8$Tnd+f#lb5qhNVTnt?ZkR&0(LGJChX#DX<2FqKPTJ# zZSAraZdO51GuyS5tR2jt6z%p&h7DH`jIy-4!L_ph9ZeE~X<|+m0+OC3q+jH$CcxoHQTRl>=z566w#*P&e-2`nZxMRP7=r9!83`qFUzI)Wun?Wsmi@mW*PMLmjw0H zhDi-VFqMr(^(41(?wuAaE_5QTx2MIsqj(>^G>DFhHg#!^)ZA^&V=T@x{pm#6tJjkb z01pnq794`RK0T=a+Xshj04Q$uAw)4CN!C>O-#W(T6Wxx#Q645Ww1fY2P2ux+GkDBU z1e#HsS^>I=B7lKL@OLgW>}T;jG096qprUwdx!uVqhxXARr~ztN4xjm95UAygA5p)X zMT6ew+MLvshH!sV)YKzAL_ZiBeq%;-K~JrCIaF0YA4>_plQX#^cdbk7a(JdrN1wv3 z1r%`+sHTTSBrD8XVYo75eq-qwh4TRMr-RQ~$6k|uC`v$}#yjH9zkGaqa7Uz}uo8mj zZ%mlYzljTHd5aYp;zbNM9_QyM^~8ok(1_`i3yS;(Q>SD;hmqJK7~?8WFuO2_n=;D3 zt)-Nieu6km$DMOFUA&JAY+ZM(^RPhWytPkJx~9D>_{l?Vq*LhqFo!$m5Y)_W`ir=# zi>%9!1PoIc)bn26WHy$}3~HJK<7Mr5(5c$o?=sM2vsuk=c3bh_QnXx8wQBzlO8su) z?*g4R0jmlhrQ2B`jZDw4lVC13cpr*`FH`fr-0=~R5x}YYAw>e@B;^a~1c4}NLGMva zx-y_&T5y|r&~9iKBQ3sVt2^XBQ>|5Mv{CmiG>E>lovVcWFq#@YgEO6YCYR6#ym4i~gc{5e z3)8W?MY9s(=t-tV)EOSa($P3X90{wd^frw#MS1#{VL3<>B7|(xhU{VaD}35FN`Erx zJIg2v7-j#19lv_rt-qf%0-o(!ieps0N=kCa*TVR0P><*6C zHzmLmb*S@=xOylJ+i)P(APhlMDSl}ji+NotjG#kaG-I@XGvUqos=t8hZhyB%xY2ux~#d2d3?__-fz-ZF&BPaL{c z3=j&bIM5yt2YmEtDKfrVX15eH`&~wI#9sq_mmPPrmObuj0VzP(2O=``M+4+K^~=H* zn&8oa;z}-pxyNQZ6I5N9?;Lc61+AF+Wy@PxYt7P5={EB)pnFS3?eXo>kCi>sH;G5tl zrr3EH82JnEQ`*anKd{la+i^crki2x6%U$m`a!HLQ$2Lo+8;b&Et< zjsjH7@dP!1I*J%^B4M~?s9fEv)L}$X5XATk6;~Jnbcvc9>2y0&1*gO4`SmMn- zEl;-sVCpKcO^o-z&k-Gct_xy1g{u+vJ1wBv`6mqwde75iz>{jLUZVr=Y8$2nnHN76 zeQfSaipzmeVHQ-jA7R~noC}NM;O$Vd@up3~%oeGx6 zb+%atZj%;$F&l!t?n&B}n<^a-0y)z5oL{jqLoLu4MFGgAJ%*IF{c|ulB9aU_oQrs5Mj=`6$xn{) z#+08@28v&Id!ndSy)UTIGzFLU&XrFKH1xV#RNiH^!sKS5_ek#_y2DWeS3idpm&*VH z@9J$!mPKv8H%;AwV(Ok)sn?rZPw@Cqo zBmKgR#I%80O+;saNt-<<+B&6U9d&CwO?yH z$n^5I?eEcraNVKrrVZI8vk`ZdF2K1>|Ge`yP}#_N?(f5e*`_0%!NQ~8Q<1Fmz*M{g zpU!qQ`DoLRs8rIbdOBg3B9J8t&3U_aWN~iBGxprFP#=kZxv-YTB9&W?3?cr)JkIlG zTC)Xz+qniuGA?#_Z<)dQk&&myxavlVryaOs0b1^Q8ek~Qs5r#jWZP_%w33knl^SxT zEOCv|BLtrj7lrm`Cnpk5R0a=5-B;AC@`<<^IPXJ;WXJQq*+DIW4N?mX^fx_}}ca!xRZSI?O)+D>k9 z-v&=YxU(C&0PZ?UrJTU%MpJDo$UwM9QM=<=1_{hE&lMgcEVckjgE4)tqqfB2VVC3f zj5vfzgCYKwWKWIth(aFJK^*RI`C7NYP&2VL0LmD2)lYEMi{%%a_L&}Y5|(kvRagah zF$Imbp{$Ckl9+fxsTI1mp$O7u#$~9N7{udXZ9t_UW~u>G3nIGP5&l{S-M35&{k$19 zv2;-m;58YPb8iT_b=_ntAwfUo-K|)O)^)>>NI2yr+y7-$OZT$U8DH6)2sF+G!t0;l z`w#k`OXw2fZ$$|!e!5SN{tIg`>7>wem;ZR&RSZIU?rzj_9ex$C;Dj0kVqf8Jo1RZ6 zQ#@Id0OWhE_9A4g<{VG(J;BSc*U0GX#zxTCJ$tl|@9lkqO`r06{fPx1-?oGAV_XJMRiZza>{~M%&(1TtG--c)<4MY*m z*CYHR{&ZiHI;l|x1=vh}iS$FTpNbhDz8rZE1bs%)d5FXf=-}Afa6FVTb}Ig*WKbrG z3Clp?P@#nwP)l|T|17Eej|Z2H_8)l=@7kz|b8AtLWQxx&TEcG;>P;AbaC+y5@Mu$3 zX(vaL+~eP5ve<3GSUqY5CjnP)n^w34K9!pAaP^79nHaG)l(qcv^6KL{Bu2-o z3-0@`9O<95S6uZSX8??7_V)Ggwc8(im{DpCvNbp%@4A{I>#LI)HEwXwuRYrN1<(eA z!s7Ph;b^tO3Ln`#w;GSZwjF{FTKjv{yHSjK8hSdY4Vb~hq&()Eprfoq1{7*Tl`Und#jJDwvr@uog^#n|G@#RNHn0fzl=b9{+=q0AT z?rMQH{7)xocIEYDi5x+H+MQghbVD+8l|G>38!v13idtacYwiE|n-- z8ApduYTrr0Pq>++Y~+?=sQkuG{+U##RS87D@6{yrF#QOa5y<+ikw&C7e7dN|5wvfR zRuLWFI<{Nh~tf}}rv{u5^*HwVYypCD>JzR$c1;P#CN?u7WzREKf)U+(ZfYo|aIDc$ zG5eQu5ceA4p7i)NawZ98)s&Tz{^vT_a;Y@9m`5j%<$SDog5pH8jm=15}nM&I=XV z%#{75>t}v{S5h*3XBNoD@tV1UqB*xwB}Ib+4VS|^R*X**QB%1LOsSsX zN}`R7rWGJQ-B1j-|BOXvnnO9>b9-Qi*t0B%z*fZ38t|;;P#|SjZr%*NfB>>8I8c`xmj6UBuk*nWP!!j%+WKkQ>v*vuX^fzZ7Z=rBrc-f_)pDY!kzm z^=bqk0d?yZmYISKx%Kr}sk+PEkrm**I}BsN6mMbRoMjqW*tNR3DZ;gEHFPbkhnpi| z!0?jD&MrTxrA=eI4X@DPadzI929fwgrLV|H2gIK{tvAdGq(VeN$%m}XmlQpUW2zm< z;q?iG{h>MsC^31%H;Xx?P`th>0hLiAd@)|{8+2N+l7t03{ zaW1$%4c#~jm3^k$$U!Bk$Lgmoij%@2G}=#64r>}X3pDLIGtn$JF8#53mio# zeu%^2CDSCDo^_j_JJR{A^_DDvb1WgrU`0jZw-y|?zTo8&|h_2jRZljn` zv_ZsfI2kb#!*;k`|GnA}-&dLN4wY#GGSC(obdOok+mDh?!vzavYG>l?;$&)Q3;SPX zZ)63_%)v;&K=3~m4-dVVrHzZJ6TO&?p^K@AsjskLO#U*b<`|#6Zh;j=Zs!tt7X5t;ZaV7QZ6I{2R=O3j= zCcUZHl>H0R+I+laz@h;$PS+PqYNi&67yK)db?QJw#J6*&(e?Z`x!~ZGi5P(xrswyb zm5{{wQHzLG+d8$4|9KYq)y9h=IB%!hg@mH5<+kvCq#e`DCp}JEtR5qPvmsY(BUk)` zg}Js9e&yL;!I(I!$OVo0SiHCPX-&zB8u3gGh@p!J#CF$_cn|KhYY-KoS)pke5zus% z4pVd!WZ6z;tG~G$358*Xii`{Y$)r;e@h{_#54tw1z9TVDt<;=aou9i`2xU z4g_Gw`>9l+r= zF3q~Op26UJ=eE>c#1Vf) zGHhCh+s0==S`6DIopPF4@5H>bEx$T1YFumk&%AgKfRyg+|3pk#)_u+n%flbaA3p;w zkeJX)EouPSHK=cmqa(mZlP8O2)dASz*=9vq$mCufoW>4fB%HmsmvVu2VrZ@bR8Ptx zW$W3~;uKOfwYDk~W~1FX5llZ$GYh}|1-btQi_Eoz*bU??%eZxe^A{75khP=(@4-g{ zE3!Vsrz-=^Yw4M^g65Y-DH^M2F9}>X_Z^?#yqHG8{5CY?K?R%B#zn$djfwK-_t@m( zW5oLoNx{y~qEpQ z`9{aPBnuGAWU@Lu%5$&NsCnOgP)oZEew- zW9?k$kFfP0g&J?kg`(QWxQ}`+1En1Qp>Q6H&;FAooT~#wwc$jPR=!L|xt53Ku-S!!m{h+nJr-1xGSmtH#+CmQo0AFFS5RMbRZ z2wkBdwd$qJ4pVsca0^vkl)Q{4g`(7*K2;Wc3IP*NYYY25c)mmuZRXCvQ)iO? zB9?}AiOn){1yeKBbytM7m2k?CWz<)_f+hMD()y1kUy_FMRB_PE?Wq1ZkyCV!`?0ERvipeR3N7)^)$oJFso|T?uaJ>`8Jh`qtihMDtqS}W z7_m!Eyh}1W@_!tf>E9W2#A-IuJxc-2H%7g_emw+}1>4dr&8Wl6+D{Qn*dkC2oCLPz z*8iA%Muzwsnq})B{QsrN+)YQ`MC%#1cOtmw-yFbu>G&WiHj@`>K z_5=chJQ&;KfJj#}=uIMPk;N#%G2iQSF1F@~X*qpRAE8ZK0yv}|V)(S?mOsc}8ei-u zSjl*{A{&Mv)gD_zUW@}XF9xg{f7ag+&BlsD|0h{5qvH@#4?;6{*pa=&*TCND8eT@g zfJwr^Z$zS6A28m*O3r6T$L|B@5S)(Ayg8!>X)k<|iK}Hj<0osG*Y^b*S~Cj!Q|nV| zy1(a6lUG%uJ%{6AgkH()B(0NP53QMz;{@M&0Z?Qt@c===!pGguEeD)j3nq1wFCyGl z`YZ7}_-taoD$UbP3y<{FUP7j6Nb_8MBFRB!p)dkwXgklb72eIA*%dQ)iyx@7+gFR6 zjY#zaJL`{u(E5$8-vCIzEHoZ$t134?XLvbYDKKuuq1gL(T_F)5J%{F@nCN(hP>Kt1 zwL5H>7(m~l6yD3JDh!3&MV=qMuu@wd6nKva9EdmQJ5l2Z{MNDUPn`8_gcmcR?vsj) zn;bZQbM!6Hy%$l^y}+w3$cL7|6#;Z0SWM^+(ZHKK)9$o2Er1o{{nq(yP$!4eArIkg z-BI90pMc_2Pt;5MZoh9v4S?2{=e|a%ae287O5sUhirVdM!0qbvFVJ8Y4Z4L5;?XT0)CLZ;o(2C z6v@!`lVAyQ@QCIrSCo=8v$(rg0HuN<_4lR_0rDjyXZ}%drMAv-R<+7BtZ87TT8vE7TWFF(u@HW(sD5U$w65O^4Iy!@4- z319zD_Fd!N!qq>Z!3+k>u1Ozigvh+ak^V8t3z1*0vm&5@nO_mD5p!wW<})Fg|3p;c z{e23?q=Z{rutorRZr3}Ew>M8P7vQD&0bE0ZizHd=fD-f3&mkt-9!7aZd5t6CCi!5xW$o!+fX{&<9AWtuJ4fLIGNi!EENQm=$#s&*hMV*1Gp4M~Kl!xQ@krIhdLj2mq z8!J4bC-i?vK;`fUgt)yuj8jez$<4*FR;})C_Jg3UK@ooca2#66*CXlk6?ET=@%K)9 zSRRjWWB$S^HZoMy$Aa+_AsJr;s8DW%%z= zf%!sK)8&P~^mEL`O~+E`V_Tb}9yi=pdlR_F zKIM@f#<(uQlu>Lyj-kd?W$$Wq6a*I`msKiKTrWVLq}GRwlw*Pa+7XH?&rJH0{ENEj z-zESP6p!)T#ayb3BMBHYP{qdNlLZX`YV_E|Dop5Skm) zW9ew0nM~Y~ai2-`ukzlrOmA7CRX#kdkJG+ovO_JZD8!$U_xyznh)-4dRY9NIIg(&r z8~qfh%i^p!JR0S(C z-^i!ptHhp#yiztck+uyn{sSt|8MrM%C!)T+k6zduJZ;MkYfH@+kaRnEAaendoJ=Pz zAv`}Mat;UZtkTGs!?z915E505vBFVEh+j?dK(mnarjpTK}FmRWV-umtcvrr>Dg1B*ath8qSuV8(e%5SD#PYb9@f zXlUm>u<$`Wy!cHC_G6M~HmLYCXr0{eFis zJRVeS_)(H)^lsj$J1rDfc`aoM5 z>fEMEt}=93H#kw5Jy;SQZfj4L`>RzXS9z!as%4IXR&A7hwW}jElC3Su{%mEp=QE=!vAW_K$ z`83BQlf~AwN^bFXUAD90i#k}5EjDu*vH=jnYg#-}8%;4mz|@O=@i%sm$X?Oj2Wd}w zp+b1jefcRkBJsJwjG+pm_NSvw1vF<5uU{xJV%a`E_-^2n#eR7LP)1BjPBfWza`{MwB1RT#}xl6E`*5BZ_n1WmoG_(4zb z$vQoT=vs5|r;u5BV)d98v=2g_u%HXwNQ+BKgG(5W2-`&Ai8?~rsu+`)Bppkr+OjK% zi9Th&klc{dByUg6{<7TBoZHrSn5EbZLpxW00&!dzTx_nwqTGMegN`cWpH(OkC`Zau zGFlv`1sbVQhx91we`b(n=9 z;!@^Or69O*1UgZV#@}BDUGIxX;^Q&v zn_)dib@Q8-WdU0U53Fd|y{#k)?78_uP`)0~WG62>qb*tj_D_$+mG-pS+yxmeH-w9L+XN$ZI`tT8O zMe8c#7hYG6bp3I#s}cohP0J962jq^r zlsN0tp3HKr=4)%rP@tUf{ib#h0KLU=M`_LDo(Q3RFK> zbJKY%C50SbuP|N8sugmfocHF5!X^P9er7l!QY&LBa-JLnJjcdW3v&V1UOs)nTJr07 z2OF7%@t*cu*~dc6(cWxU{9B61udv@&74#uUk28JBt0ZKc5A5-l)SU+D$I6_}Q`~l| zUD3)2QUQLGZnPBOfEiu zDkbRe%PJYaFF1j3(7LM)?R^XoX%&zVWb;xp9 zqBXtq7K{Zsazb6jiJJrrGw+bcfRJAOM&EJdl_*G~Rdz(i$Bf3L#gC`pBFW`dP>1;N zfX$gVAWBoPu!aPX`q62xr$rg{?`6Do)A|c;Yx?>#o!jr{ZSG7@1@M*Nj-`T31B=O< ze({mU^r5d|nKA?~t!ftyKb$7^w~+xN{5vK&Fc#S}(LK|Ct`VGW z`j1D{kn@z8Pe{bKo9?^b(3vI~@&&V$wWsh}2!jq)@!yVOsL6t+{2_e=9=qU49&hJWq_$KD|HW^=?d+xA^a ze0KMd-}^!%8#|!inNi0+z^ArQJY0@TKLYH_>tW4vw;-JG;+2TR6U5DTJ|x6VsWcqU znmxVXqX59rBj=+;t5IcNVVlAstbED>naaI7M3&*iG?t+ke^#p%Z9WK<=R>&bK#n%x zM_;@CDhacxk<@n>gWNi)A0JaHO*a(1+$eSvx0EC~4RLePbjI=6jP12hMCc_V3=dIJ5Zhg&LxO|aWAG8ymD5RiR-_vb`>u?fU9SVRAW zMs-{PN)Y71&Py<<4i*A$J|~6SjBTEjCTF|Jc8D9pDSIc;La9BsP3ml(Ou}f3>ntRn zf_yAxRZ0)@cA$E=;k;VI%4DGeZyPrLx${CYp&|JJ_vrku?W`+evAnYLme#G%Vt;K= z=y~qzmK~zh*_&iHH3_bPQ zsv>zRy~%7d{aV85)|w+1-zA|tB+<+b2ck6o?2T;g+&&nfa6;8Vaawa^hI9a6>7WKtixa%;0_f&`zRAc$^?^+AN4k|k25yJ&)3 z`JH1ZL-a&`#ruCp6N;0HT=i-Dd66))x@8hmN5)9K4WcOEG^9i2dl}>5#98*PW!6=| zc+NaD`f}+}ORK5g%1WX@wbjuXELFPnL}Ft_EmNgU-@dlJ7p9&tRjkc9=itHnY+mO6 zBmm%EmNvevwCH%Oo^L3gfH=+84dN1!H>?$ZgksV9gMcyt)AF&y(r z0DDZGCJs94!wzb`R51BeI-#UDi^not4ryR)bw;Y)}#g#>k`}>zQt(W z-t#p!I65sO!#({-w5F&IDOjV{8S!!>RH%iv!8T{&pae$H#8B8PjFarJeSB~jklJI9 z)mEGH#bdaO)C9YF!)}Z=PH8+pdTT2_Xr;@N{~>~g;3sGd^&_e>iTjt2+FTTaYXJX0 zH(GqfF+a;SoHMBjD?QlEXvq@*IM%F0igx3jPKa2kWrLT$)@JRE(zoHzB2sYCk`$iK zS$dGuuF|@p`nS0}ob(rj8ITlFvx=5B@euAZ^ zNY(@8GVaJ8ra6BNa~KY*f~IZn@!(DV8AuB!#9a}Jn-IJj*9HlL)49rmGUu95n#ZV9 z?&aZ08|~NLLO)2s-9$TTtL+NmVeWq=oK)QEbKsPag+ZLq!~Q52RqUkf5#zVk|LC8 z`kO(~=`09XFhmD~{WV49>%5MR%hMumy2kT<`GW&L9d-H{pD?0+K|9f6uMw>~u(Ddr zsW)ur!U3&Z(O;5T!K{Ztm7RuTQeK3$;%n&MGs@Y>l5MmO^R~wCX)QCgJB{tyxuzCQb_KbQF_mxtCLeE>JlZ($YXG(q%l{=m5Q=~`+>J%NCEv-aqXrW8fp0cB8HV(f(*^}KzGxR)=L0M~_RmHcB`_3k|3 zhgVWm@ls;e)cAgDC*K$XWtq_W_d``UF@HoSjCY5k!{=lInB-`73TO4$M3CCw2NmaMc*=3jq^MV&JJ@9XvuL)rp%>8rg|nN*L=rUc6Yl! zSc87=C=mE-u*;cTG+}9F{=6a__+YV_l5Ge}vO!jE*vXzBxdr}S5S}ff^Yj5#{_+_@ z{>}t%fe4T*LloFmCB+(Lg1xXByBEI>$0i792@9r_fP~G6k(kWt3hO@H zM$&}f5uaPK`JUN)v_;+uOSvp3B3e6mJxDR}czOa4;llohE;-<3@j%ykPP1u90QFHB zil-Hpm{Oi&kj*FlTk2&&;TWGPNTvvRA6A4>kp+MCg!)!>7q9y>t*u4`CVyOW{2qd| z=79pdx0)(?(__;rDb%w*sR@T*nG!nB@dS#NXLB3DR5bo@iY*C@ zDcW(3vMu0h-I}uXSyacU{_!3t8{eLEJ7ohQrzyJ*b>16ob9c*mYBVe(XaKsK{SS(> zh+JWZI^~g6JY}7Of?ERhN@B3?hvSij?q0${{L$%A(rPY-liPwEEQy$A5u+EwWb@XG za|MVM_J#vPY{%~v?t$>oO3W7p^Z#|<;0a2F@j}1m-bMG5dOP^@Qw1NAV8fDT$5Rs^ zku3i^MYsYV@1}%BwE?HR4wUrCwiZH#ui-P2BItZ*+%Ah^a0{@nuVOw__96p3O(m`h z^8mgY#ynho#X`YfWFs0OK*7qMn#nkgTYsRLqMj|V-13;famEy*-jLNjY6b`8pjjo$ z^(=;TDRw4M@vv8@V3$+?;H1tbc=Q#lN~VZyPb4a+Qo24K-J^glJ@IMk9CdpGpW;!X z*_joq&>Js7hWRm24@>N!SC4tP#9CrNJOM*3H?Y^sG$WGD04X8mDdm&Qm+K0ecK*+c zq5XM}G|DO(ZFs}B{i&_=&#oEdqsS76jb$)qcvH|cp8LuA`b?fcz*}1~N76q%FoGY7 z^Zb!5Sh@ZkRdMa(&=8X(o+fF0_)?Jp#A5@v0ZdxyqLFwf#hOsw|E?nosl7qXI5GL8-TG7-Yz1?RKH6ahpGv@-(Ee~zh1fh zGglXv=h{|KL0mRVo`M1Lk;)~HW#fvsu-B5l{ktZpdyb!FUTkB=FqsG8NU3o6fvU!b ztP`3JJQyA9Lw#d*2iEO~&E~T@S8;Z&>UM_)5_W4NeRWoDlNemYajVFuM)_?+jStKz zs9mnr$0SC!uMSzbUd2{8FYl#} zQ#HE@Ss8x35Bbbb{yFMZQP}$2-rs8M@*$Jg$ztO%$Bwp44kOQWe*<{p+FnBT;lsR2 z4fU4N=)2X$u`~v5>i|&v`1Hxj$C=W`wx{tqj-9$ZCCjUApMRyu+d8G+03$?=U^pAs z<%}wGX)1IBzCh2ykgKd|&3`@15JLhcQ#tEDOH3_fo6C>TdI1HJ_lHqZUeiAkS!8A< z^ZG;`b~G-Gv>{m(Xga8u(Rol@Mf(#>|9m%M&N1H_L-!wU{Uh;6qjM7W2o9Pqj*i7p z{99rARQ&0o0-h^$B`7mpdYmyw21mfzjQ1V0_Qo_Mm%0bByi4r1Zlhlat?WD`|)1%u^Qcjl$*zK z+Hew0aSXL|>?xyD{x3?I3C#9dmNF+Yj=e3q132NVV>c#Ws^xyNwz8$yR+CHO&p%dgCr z_#A?=m=bA83cSF#4l3r`8}E)kcF2wYP>w05kVPRrADM=kHTE4tq!vK)XH>2Xkzs|A z>gOWa!H6c;7k<^b8Dkv&A3}B|0Z=vttfz;(Tla_BTC`F+WaTU`UNzne+hEe=UE^Hx zcmgv!lsy&jY|syUKh_bz$X{aQ1h&+I0$UBpvl~#j<4;<@?-Txr_f=gX0IL=Gn`JD-J!r!TmttxQqp)A zIAP^FkjxR&O;eZXtb|H?JpaK|lBy4bN0$W@^M}d805PH{M@SJjqsBHy>RU)i^4Oe6 zUvId(M*LEUvg|;+M$;a(d0R`*J8?`5eoo2GCdRK1@Lq2Wa)dMwx zft2MX@9As66IL)v_B3J{L&R*;NuXB})4+&CYo{U+#S?~04!mbcIfyxi#s=sCSub(8m#3zp)5lP!Y4gF!j+B8sB@oMTADl0H@TJI7@A;j_ALG z^1T<=hr}))MOM&P*82FhtZ-?dP(-^O*^*cwoCNu*wg$=f9rx)qH@xEp3WJ^ zj&nf6d_~2ETEY+oiWF->!^Y5nPwr@KU>yG99!64mqxBCWJr3!;K{8HsnX_Hs2>w*j z%_C?@7mb9}`^E=rH$MVjfbJidD?Um_iVN@VBkZ8#i#59!iO?glfEcxx(uK0zl{a4% zzIyi#^j?}huiw>+GYxN_0D82)mEdwZOq{jn==SyjmKVC#SP`&wK5wo$Qc~9_L@2x) zKR=d#7$Euvv1WI65PEY?d~>W*T~#9JI{Vbr%2LF&{_=8ur}ULdXAl;Vc@g2^lbpKn z9@(_Szn1M`gY9%_hc%S!28IT)^@|2rzYR7UM!IvQtSkm#^jw`wK>m5hFIDJU=F8*& zV08)|2aDxXu{553fs5gQSDNnI@PABhf5^0`{j4n}CHWy)QFOJ#(kt3|Goycdv`i$Q z@kYDuM5}6+2*uLiMR@49Ol|mK(EFRkf5|Ld?cg6biP2sC3m-^PC4sBICVAQtvA2Yu zP9gN~g3JHxz12t~?G1y=(*h`6MY#fd{O=IlVR8yLmFb#3ci<#4*Z@(TKGnc)`CK?K z4-37-ZTAONi}Y3zJHsD01PKflclINJw@=`py#Ghw3<_+!7^7OCgM=dM1&QX`ZxI%Q z*0t_^9g?33>Y3wd*5RQVB~7Wwc2f3^HT+sMj+D)hq}uoH6PlPIP3+I@nnrUN%5y~% z;$o=5z?wwr^MxmPpuUc;=uvQ-08!d)N& z;gF3d8#FAp&DgJXHR!PNUNl1n2u>xKSutU z-hcDeIOUIsx02ye>|Sg1&smA>4}r=5&?#m65esL*JWq0*NeP~(-&yqG|=)^ z1+GOx$|US&tvbIyFu9TftXS#8xo}l9%ve<^;Jdo}oc_5+)0<-^vq)xX`b_d}F4UTy zH#2d;rBl4p37comg^>XjcI#=y+Bx>X=+o9RCfypgt@&tWO~2;mfBm<_uvlnyES}em zkY2}|aF^X|>cE8@l(L!Cv=$e~JZ!}>gHmojF)?pRYa_T`kfWMt^!Ra=NCdvoh=Ha< z+$_cNkG>-D!5Z`9D@%f8{tPxQc!J`j5>m|8$)iDx zx-fPSpdefNM=ktd`QeNeJr?Xsc~#o<8!ARj=N_Bf=;22E!f@RFp%_6~;+KHT_=C_6 zY#*F7QyuEaAi>}IyqK`}qdLL@#0&NXwWv7~=69N(aQ$^tu&@ZieDvZkqGnl&A3@0< zRL%z}9%2RA0!yv%(T|}kFzbNww+q~x?>7Xj%B4NtF99?sfn;GM<;(f=2;=wQhC#6j&=u4r+%3ha-~@RBmK#q+y0?~=TRbK>dsUnp zzE&Q;8F_>asbZ}l;i7MSvn96U&Q{D_ntrVlsP*jU#R!?z`1VNF1WB-DS4s~F!cN1X ztJ2t(QbSpxV@m%_B<~*HfM1pQGXq#7)7F~=cstbc@X0;4ca^lu{O($I3W>gV4UFGmhQgU$d{ODh8%Vgr67z_J z0hfPnSYEfi{;w@gpWz7@WA14ZApQHaJdCX_MhriT`u#kew1W3YVaN`rh<()XAT}?? z>z5sZ$K_(RXXkhl_vOm5N2=ahwCem)`#SM-C-w4@HS$6)L)OJZ2zgE{C%{hqf5#w; zyilL#99EesSlRHDF!)UwQyWs|(Q6z4wgvyhCaSzjC*N`X7fw)wJ~KA#2wyf?i8@{3 zky7m4EwCvtO#YwK20&pB+(^Y=UeK(71BiW`Ho>h6MSg1__HAj|BRi}tk!PBw?cVF& z%^xTyH#%?>`U20qh`}WyqN?F2#!f)jI}iS7^jjI+1&IF|xog3r^}ZkOs~m;+_x*_) zUQSWoimiQwOz~PW1WTMz`{`3(f5r%S)Dp%@720j`oEAh~#>C(^N&yu6lB3CJ&8>!QgrF&n@znrfcr7bK7 zZ#zo|$?C@#bL}&X5fu3IGE@+d1pDO!LERP?V(H5KR<+J=ROB^@4x|3SIxkgDi}s#B zWO5PLQ7M#bq!qtivR}(-%9JAUV7$r#Zw6UMIA4M13Ya;KI!<6k58mO?oqI0=s@QEq zEE7fxxPsGQA5-1Iu9&pxYc-B?LY59EXrKjJYFM zxC&H6c`FL<3{v@8X?-?azs2Joj5FU5#wj`;!?c2_;m~XPH)DZ=pAo=i_7{>P`!WkY z+QzTToO4-T(@6^5=Z5F_+;i-bl_e_PUp0M{j1ys(!41UJ?h48=KrJNuV`Zx;g}D2} z7CbU*65s~LeTG*6F4iNXj#)4|6-Ko?-+U)hy730oj60wvq#OQY zV&R3)J=JOut{pIf+cddAr2mljSx)~CTR_0n#oqG$w=;W(_@{&Kzd&9%A=kz|Rf!j`i0ikA*u=p_P=?K@PR zvlt|`>R4{42<6Nv3_w;dj8qP#IE{RM`~DKY*YJq(2=lj#HE4WHVRSAy`?__g^` zwGNnn+(p!T*D0JNS#uAXB5D_S%(VwRo-1A*!rtYVy%%A<$TuhH!@cM5DdPhoorK;x z^vyi1YH}yKQ{~wMuMAaSiJ2pJubja1y!YGCQipZi!PHzw z`P5aqlv^&0wLmsLJTa=QR_>&{aiB(a!cRS>mOyj6B6L}xH zPrF8DPWTy)Kn%J}fba`cRS{xX`su<9PQ(gJSv^-*WlhW;2LtV4bmzbbA3?_Ea$k-P zo1FjKE7N1E5uks+_7(whGU9)Tk=u1%@dF-CGq4eMhi&}J(iT1*%A0WZz#9r<^N2L- z!O?ZW=7nR`W2$=Rb6T9%`b2wHo9A}W2r@bkly1Y%HypHrB(O)3Z~)XFq1q?k$d^-# zc(=_ujzJh9P*m@SYnw|a`h>FY;p?0AuOa@Hu)dzv&JP#U8YE|_j2J{n8Pvs4_61u3 zbq`y|@o8A%G0@W4`cHX%V59x?p)&?+M(Xe9d{o?s$?!dpNxJl1gQt}IignP^DIma> zNe&+b)-GCw@koqX&Q=g%++-QG@S2Ju!;O;4XjP(@5JaqN?Y%?bw8Z5kT4}my}jwkc>6G zPVish=t*n{GQ(F+Gcj9E7_ehUzjUY{u||NjOfh-H|NEpppPPwON^g2-TSulkS}-(gH7xn1OUciU zk;T_6XK9L|<*wsmgkg>&R@)CI(4lFccOas*LA%+8G(nJi7%k_!VVQ0O45|D0#K5Tfv*tK_PJhU4D&%xuYl2vXdDx^@Nt;Qb4tf1fa>FW&n_ko~ z!*weo42^P3%8bwOsVp_r#d^w<(w@n*V=w}S8jBWrH1t@@_fDle>!RsiiU8g3xVGyz z6-7o#2;fK^KpL`?<0#cWUO^73VELi3c!>2uzR-Sr+K#25zZ$OL!}FI$}lvn~032sy3qTbNKTVnGt%QKAWZ>-?HmVcH%lfueI$nA|(dO-l`a` zOa>E+!TgQ{0&k*Sl`#}k4B3w-6y>VOob6ogK+|8UX)m-ng?pK;HM_`beTR&gf2QtYeKrv9{hvKM`V72 z8n}yt!d?lgX~P+4lP(txksh|Vz`vMi2a^920BLJ7a{D$*&4kEyzsO&Atzpwy-=JSw z;;QuCXFxt;I~=W-RXuSRX)Gyxg8D~kp*#G=baM#qQnMczUmpr9_Kg$Ex6t!TLiE{8 zlSj-%dko}y{Df6m&K1%`$(xN0$k0Z-Wkdbm{!g&_Du>mx${{_y_~GIAt&=$a8Wes) zZ3OfpGn66jrK0Db3tq_q`u#hhE*4Ap`@5Fy{$(wZpX%A?-vK;G)E3O1F*VX!tE~)3) z8-LUE>iC&-n0-DG0^LIMUhfJMSp~5?d~m$B6sC0%8U6lf%=*3t-4RJIIBE;3HXT*Ms{+&b3U$RA_K8>B#qPr%>at4 znwzD#quO(_#5RroIJ|wcddj_HY6t&O;qQh+p^gcS%Jagr@gEjijH_ySA^)`0mcq?w zvlne1a_O{L&WfTF%X$1|I9|ZL3{9eS*lJ?dl8;bgW&)&D-b@=K61Tyh^j@IsD%Rp5 zza%7Mb_*gFsUr*U#TvRC{JLz#_vaE3p302}9a1fu=O|NM*T))2FC#Fv!8IFVn1d6r z7v2cwiY9le3OyM(G9+OG2hE@#HF83uJ(KfaWX(M@5Us^b>FV|Ol~d}dkW>*=`EY2_ zdU=#I!q5?RztaptRhWHjJvcN|CUm<#X$P?;X!dWaN3vK6?E7(yq+*3^nUHc!T3Pgm z+#~Odf?S&8qy0MNkYwO+^d51ijksmtyJ7M=C_@Av)57D=3Yry-t&{MQ_eE@?>tQRf z5t7g`K&Q!il!Q3zo%;O_M`C-fcrNG5U&;(oAg&)9AtIkTlwZKZEN}11MM_x@40 z^gYboT8D=!&|u^<6(t49j>RR!;PORaN}PB#%7WK$>`hfcfPAqDA2L5<7r@Id32KYe zk7iF-rU-^ahvrkYzw`rWsmuP1|M%W)olv97yYr+-58MJh?3aq zG=a~uoj^mmFHiOVGJGmP_XXmDn)9I^IN?x6Z#=djb+`# zaRZwvpIGp;iY~afn>M+FtgBd&VvG8f*GR4S{GPY!)X-hb$1Gn*&0_*!&QhKpg6*$k zMAyO%_}8VriFq6zx@x;S7$<0Ah)QIu?s(7H=5hc6_`+l*jcEDhsC9xRalP2=s#>?Z z-nhP`11w5l&j#z>kuEZIzaI!BuK#IZrDy!CEN~}9&+O$@PF&b1N{Rzu=X23^PY7NM zA{H9=D=FVZGG~ArMF?CJ!Q&u}A`{6?2#`FMoNXWyyfufSP_s@oS|lAv ziv}A)tZt|Ri_9qrQ-E9Qbk-Oga*~-|201vF3yq%YU^`pgQLiDo&A&Qz4g@l$wpbzy zHA=x9+6=n)9Mx++vV6S1+|Kr6a~I;&-3~&xBiu+NA`9`*_3*9D@YK_h*q^%NIPI}# z&2jn%KpRut2d0T6BwSgnfxIJu3^+ELaX@gITSVV50B$uaK*+_T{7zCiCbiwNli3>w zt?7t+ua14N<#?u7NJich7AZUzgWXb!AF(~zT7#=L;NKv)N&0Cl794~8QdOUFs~)W* z!9c8}x>-0KtqK2;U-+K_fdf6BeoQHG5R z+vRsjl?I_ZW0O1Y6-w2~`Ri)ko??#E!X#R82jmE7rnjJSttB7R(i$tXiVJ`GEhvB# z)=XIo-{0p;Kw!?=55cc4vyCOBCT@+KG6P)2gYwY>t-~Yc6uj2gl)Q8u!e)LRpOt&h z0~^!(NChH}!a0wLim>9oAk!U!?H<;sw%^=xBd*Eja^n*mm|iWBaDTrDeVqJkHEcb^(>4g(3iZG&@4SME)5I;L##vR(##60P!# zxH+D*n`o$P;QFbU=lTUxSJyNthf0-qD|~Wy?lNHA&ab>msJ(8_(%k1WoCD2AqRY8d z8PL;XH|?iDN}+nMPys%RnOnwDP}d`Vn@OU-gTYk*Ax4?pcAyEpZ@#W{7cH@ju=;_~ zkWn&l;GHFEIq?2=xXGjx>7$_r!}Gjl`f%6>x@ASip@>OuP+UYItU`&=QklK5`QI~* zpG`7gg4F^#W^PU`ji~Zd5vC&dCyo885X~>`cFb8!Y#QAGh4|};0&p0(&@dkej^9Qh z1y{U-P~fp93EK60zw?5>?7~?4JX;1VXbo2XZDL(C{9c4NKFwGS!V_@(mO`YR-L2H0 z>i#1wpHY~mUqD#6dewD<`1gq;O+8_IE6S2l$rP_`)N%RJGF%iVo!Tb_fPs^?Wx@`i zBmooZ%kWCanyym~>k&m=L}uI*`BAoGtMN)ELpdw|+(^Q?2?wqBydxff=!BFT!!Lpz z5+#=_oHm@S)*;mOEd!ODw+&@`y{bH`xe{3KI7Vms>-+O~-Dq)e74Bfi*CC{zi`UdH zJU_Oq@Lo#hH19iSlFw;@%Vp>r2lf( zPa|te|F!uQeq+zts#vBzSGnn1?F-0?PGnDfpu!s`5&ybh=79ic_T?(?jQx}e8y|R@ za<1SV=CTPE6DlDQHD*>HIMRajD;poL6bbOIO#x8XpWBGb!!_#%9gYf2fJ_?s9ot)P z3A6f(GSny)M2r~H7Ul)AOjH=%u{y=s`~cs*tZ8gc3yJ-NX#B;z&97g}Z&wtbo*OeP zUoBlSBdMNckYr`);iscyH^qViu1{q%zsahwf7cF0=T=uBkFFgdHC$_}AT2K)@v(PZ z=vP-7D~Tt;7pcG}nreFa?fyc1%~YaHW0{i*hV$!D0G@ciYU&RV&X*eLktwN9sY4R5 ze=)kOhm4{h;Hu8tb4=hEGQJEI9!M*Mu99=E!ppjLespV_HeU})?< z3oMuH+u(8aAdd%-HAS=EZ^+?o38=ApP$=?*31mJX=FN_Z#UZg0s1;O)e9t2SR*B;7 zWUZ;=g+Pj!WMi8=Kx;_V!1KLQuWZ+fL{aY9+h?8w=S&DH74K3#NirKf8;*L@9zY)* zuQ1GNA`#0K-=-)ERv?@E)W}zi{uYjrFW)21QQcL;8Zq-dh++O*eAa9!_hkw=VjA52 zmJpmiuNJ!bQ07JkCk$$zZ_{?+dCWGWe*R z-|M|0Aqv&pZZDh%^)U%S8IuQsyt(($wz$}4#G82y!GY1kIexVdTZ8tlc&ke@^n6(; z1{hW>1J)>@BrAcLqb^=nXD?jSKd;=(W4PL&n{>fMNnVToeUU4(+pj*;G7X>!K^Wshqg=;jDr5a<$YfKY5D5B6m3{QOd5^(YDbYoMhzbY-yo#N$xNR_)yXsN+h?a z{K0*3rJj=+-PC`SnSD5AZJ}cv&b==!-0orLz{f>(;(C8#FDM%eGg>#RnCWVXFL7U3 z12s^tv#P4pQJMjhD@{+ze(^H@Oom~ z--W#hq}#o#`(|X28f2v0*Hq&8=lTu3VVzy$&@qeZHLbA&$yMaj>7(9y2VJz&c!{7~ z3-ChXICyOE?~v}1dS^ZLs5<{48xhzGZravREhgU!Hb2Y^%)#mE3ke~q(X>ry&&3P9 zua5Z!$+91uzTj6fQ_#?9s1nFr`mLW~vsMCDZH;Ujp|XW8TzvkK4hJuv?%$}Um&R2V zwM*fC-7Kr`^lLoD)M(-K$&IA z*vdJd$yWN5D0T*itYxUlUR)H%=9a5X*p?3_p|0WB#4l-XIt(iP?7WgS8a{EtkbHOw z-2khNfAoRAl*WBwE6MNOSKmJU!9c*483uH?&@_UN1rhEPRK=+TUw8tA)-Q{<&?-Zi zR?&{OM}d8)c-Yng{AwNwk%4wp38ckST9ErWnxuEMstF-1E0x`W^R+--!ACXj0mf85 z6RZ@D@mKn<)_lH+0RpQLtvlQeXOQ`)3#GglcWnEv@dmVH5rJR{9Ra&GY0MH7(E%Sg zBu$wr@2ZyUJEp2Z#U?%}0FJ4#;Vy??eEmi1dN#)FzlZG9i6`Kq;)`2ek(}tAX%yRB zpLgmN5u|ednwB{hZ`#Al99QNf%5F`d+TP7Ne-4}L?c)a~IZ`Lk>L^QmR%9(f`|Af; z%utEG>2s6t+{-vupqy_in%!wKH~J2Hs1oECCb7d$r$ZuV=mGYyK&BYuO2tpw%(8og zK$K@-Nh$tPo{YqO(-RM({B4YPAQ&A;E0mY*YrK45k`cDO5C*L^MnjP9KR21h2d>2s z%sF6e`J8g!;WE@#bMJyD{W<4GN(7+G6`@(zd`RY77Cx~u>G@#Y^f((_0Zx#LJtW12 zd=6acw9ZiJ5id8Yp3{<~-;_c9BS1MMn%W%xwdJCxw}{9L&+;e-ppac` z!~`+lvzXeyTuH?=vi z??WdrkklU{#7faPHkiG-L{ij3!}X_B$MyjSSH-PqZooUOmT%dqNf{aVTt~B5`y;eT zgIKCSDZk;?h*JX1@jbtzXGA5CzG}&EwMKCq%&^fu3}a^DN0(-6;X7EfFHvW&4T}yd z*geg!{>p%wi2bdWDYSMw>Z%miHAd5|>u57+Ue(L`^0@2qM#&=rJ3ktLlgh-F7o$!u z_@FyCpX8IR086~1M^2PZ;)Fo6q>{ptK9utH^%I^`dsY)yRUEDczllt4fGL1GP5P$7 z8>As9qJ+f1A}&x0#Yeb`*{O^XzyHrOz5UlL-LG6=MxN=aD*RQewE9((Ytz{XDw0M*qdQ1;>F&X2#! z>Man-j2pJ`6e-f1bNS-p-0Wqh z%$$m?1AV_cd5G+OSPhDLF<)7E9Q)uq;P{L|$UC|3hYu-;M0W6aQD;Q-I26||0< z4FuIx@Ni>_z({amEx&K~-tXe`3Hce{@OYxqG(niemMXfS76!0n6~XJUf1~-`L+`l@ zz;FL!{Jy##vaL1!iVibn3%*svDu!FYb#w>}>^hv73T;OGMA*iQ;vslRVon4>Gu|OP zktoK@Q(oV3ch>>3Tm2!iXfwxQ7*StOZd|2BP@F{;^R#Da3WsLI6RCIpk^X9Mu4t)4 z!i|xJKc2%~Aq(@jV7C`^M4T*ECb^Zp0IT^54Z_EZ%T<)15K{;7lpUK~{Hl6JCk64)~O0 z@EWWn+zs_V*+2|&!opQW+k35&;tx^?8;JzJR&sEwsnMwckvIwwL5EqRYf7~l%ZE}z zs7e9CCd3VbNbmks>x|4n{qT-|G$+3y2_yH@67APhxSyhE(vL||6lD?P#?>0O@q=Lx zfV|UENJC8sd8ib1+`d;`;ZjMrR91WEWwnyywDJjn)H)fy?*l0|TUTzk9lS8&Da*pY z8%*JXXHShN>>|XVaJ-b&+aDp+*rFkPQLEpeC86Etd1<$pi6>=Bq8OoOyYZUUrC3-J z5hlKO!@Ev9#3hTet#7M?Gg^D8y=JkP7>m{KReuwbAZk=p4XpSOH{y}jZO{i$+Xp!k zjfRpNc~(xD2-?e$U z-@#%HruC>Q)2mc*@2Oiq>PoMl~}x`N?R~<;xr)r(9-+ku03KM)wiGT^6MSKmdi!zfC1+@=GcZ?c6~=oDSI#PTCY!{>FSdVXv?Po*ML_EQj& zDPZ9FIq_-yFJreRey=BxXlB)vaJ&3^6 z_0Q{AtyX6gM7?PgkQwf%)B;mgKB8-jWTw~8h9z2ag{eOd1|5AQ&a8e|hYNs`!GA1< zRGDD?hDK?nQ|3?b1EOJ!Bdn0rMDYg!-GFN!fF%{mpMEJq;yFy1wU_v}&P)8z7I?@p z1!EUO3GLjsuzz-~!i+iTtW|>sy1MQ*#Sh>lm)inmAUCrc$TWLW=O^G^NOTn`2n~Dr z@7~k^JwU?0&6X(4=@$>)0P{eY+~tGp(c=AD(too*kUVk7qR)TG{9m+$S;3VJYtbQ^ z@W^_s8tcs)?MO|?CKlH`-Uab>`tYtiQtHS%O6L3?Rng1$)~ptPrIt`pz4#pqW^f;$ zF2nb}x%E9QPwhetQ4BNy#`uiLpIO z5bJ-b4gS6r&`*?-b4Ffp+czT3AzDC7lkWc+A)<#!#_OgC!FY=6dlTzPGUq|WZtKX` zA21$?p}z=pm82~0>V2i!nJ=@)mkI@&g+aM!VbC{cZ*Nk8JbzgNG{Vte59&J^f!(?~Fq@xM3$HI#oURSr!;v~v7wZB#b&iek%E~!A@ ztetJ|KMXLjgx&5Se*Ff148(EtWzhV3KAL6Ludru~ZP<$kd$WXR#I1uzz(WgY*}3bC zxq@|xw4-gy=M*tD&^IdwFw-y3H4{14m52>iPQ`wCqR#Zz5XEwKVE^iZ?9zQxeXqGj zNn!;2FC1UAKq-i%*0|XgEJ?e2GF1v;$!P%BmzpW;`YaD} zTN$|go2BiljsP2rL<4;VKA+4bV{Xt_ESVqD(!}ky{*=^T`eAP)%^|%1E5&@G)(QdC?`YW6UPm+s41$Ur=) zd$7)%wJVEv^2|}c;C>x`?6fy89AH2hQ-8Jzkzl?IfJcxN2TlVgfZWE75A&DgP|{h$ z9W748(JkPABR@B(o7j13C3uf=cOcO0O@1V z(wR6?o_qM+jtZAKDId0LjG9c&4DU?DOca{Fl4A;n{-sXC%iyAJeRL=?q`f~pH>Y?+ zbK*^o&v3~Cfb=(k2US%>d*%uwy{rTqbs<8_7I4{fxIv=wt)M~)&ZQ#1TeY!#GHYs@2R7QBqiMk$+E5@p5SE(r)iMR;qh?L4Z5=7UupjwO;!o?4 zM(H*52Ez9ffe|jv=n3Hx9TfW5Kk4D;ui?cYdChC+z`HH++Q_9>nFGCpW1B+uNeG@0 z!dOqoZ+4OXP!sr;q}-{hD=f5SOG_k{hSIy%a z0%@i&Q5Z0{A4+6tkLvzf=>s#G(t5W+=ZxE~;Gl~3izFr+M_M}6(7Fo^5txp8-*sQwCmcX%OJ=my7J*jrYZYaDM{hqT8Z$>LjrG} zqndux0AG--^m&@k6mGDHtbIE`cvhl# zpx%kOUs4#%cc~8=W4y+?sJEF}o$(Ut*c{&Cbyu#U47iS|fq>5&05~4S;=HXvandLp z`0FufZ#>PNllfZI!Kz@fd)~Jvl8JX?D>Ufdas94*`~)9=Ig~b4J0XCyK6$7xiv01!fmbUvF zWm#5zVs3hg1*Nke(h$kmm(7L3UD|=!+~CW004vpiF}p0itKc)mhgyHaT!lm;hUTxp zFDmb3qjQK@v#B`~4zZ5RAc%f-tw5al{UQo<0^xUM$6x^V zu)H@?UaDITJkmWc)sw1u8fY4T`grzmrLu>2k+BdKKvN-rU;hR^wfs{oxZFm_e^Gss z>V$H0QW-5|3{R+WITR2jxPVqL?w$UNClrvkF+R~P#o8j|CAejt?=c$~VNGFEEvl}Y)VJq=sYTuE3+ z2kp-X{+|_~rW*Y~qx0h`HpVz}5EPr6i)K{P#l(8osj?_y#5@T!}Lw@+5U;<{|tl{oHVdFMcqH_l5AUTZ-dAY%jtZ=hPau1lOU9nQC$!U*K3Y$(ZRvD=KW48K=+;;i>roKg|!HLII6F|tU7 zh4pTCSVLGuH)AQPkN7a9DZtOF)&n8sHObF*%+Qx*Xik|ssf<*jkEPNlN8l&=>_rB; z0*KxVU`BhsE&Ln# z>#}(~{@-F1&?~fE9faJZwU<4?O3S$Ae56nU7^Hm0Twerv=XPIUBA!<6Sx9edBeza2fH;f&Oxqf+;vwyqOyH?7!?3G z^FMfVNr$Y`Hg-t(u(~k!CL$Ffnkzi*ee|B&+0{C!?T8A}MNS1JKfZpL779#7F9mZ% zhM7>G7`E`EGOz4T0ZWXsxO$8?UZhHHUy?*4sl|v-k<;V<(NkM&q9e&^M~MV_1vhL`80fn58eGXIBMCPUfYN zWI=}ozopt=KG<~b{F#gqiYFC1^BNvyT*$nv-Y3eH|Hu_yT*tM1;@{S{$U)VvZ}wK= zd9C+D_o!MV?OsIH20Lq<1jh36HUf`H-Z^DlBBtPmo^0H9X-|QSP3h$fFNT+4Xa4&6 z;|xscli4Gyzbl_5HRZvLCBxugnmwcjY`X8(^pxy-P7rYW*H6$9KFJ*qW7nXIU zG8w6shQ3Mx%N0b3OhPs2F?VR?RIT~g2E(c)L>s^^n=9r?B8%+#@R4$?2V9u z@+>Q;7rcm`flp&BOW$-d=1zJ(bBZk-dR%!ybsZHY*K9S948T2nKTkOel<^5zObB}j z+XF-xu+gz@W>^e0!`?Hx0+n*L#jr=n-b*4JQn#`^Y3D67ti(6WPFozXv_Yzki11v> zQ9GU{G6UVV$465Jo6yA)MiqXc0#Qy%g?RcG`RJa2d#tP#FF;Nk#rPNHHB?PS*-HG zLfS@I>?jOFP|~WGoO}tVHdq3ANdg7CNo$9rk7|!a%JF33>LmrmT!|JV085(U`{{! z$kVUFpHv}>*URF3wAEh!yWDBhz$mYnA@m~aREDN+LbOoTQA?^{2z9qyknND|n)X8; zxK1mPL^SIoDR<~bu|{+OM`8H}4;PAI%Oj0dOBmVIUs+PENi(#__(F$V-9(E34sWe~ zQe6C39Ajb2oqYcp9&|Wyz*i7{cwHm$J=m+=pW<48<;yqorUTgN!4J~=BKaTEPa-!r zLYuLtrc+44W3pu#5`Vx6y6Cwk%BNmT{Gg~nvXC@$X)tXPc|2g!74{44kOA=ErZw4L zb8D$S}a_!Y>!I%nH7NHN;c)K-cF)@NOryR9#!?1@(+8 z-^#&5h#VL0uyn`m@s$a=If~In(;;_E@DS5j%<^*#9LnSdfdy6|67&iB@_JUiWB(k6 zM>|{m%AuW&?c@8(sd?075^IiK=ILC&%tyg}Z8*H5@Y=DvxM$U`gMYWV<(VFyqW8<* zPzRr8Yp-exokydYlKX2wbgcBaAQ~{od&ZJn;P**sJ@OeS`lPeJFsF7~`mEH)NvQ?6 zMa8%_>OrXLWD7%-a4?0a!+AgWH&>NcrKC=#;XhA#qs5&E|sli_=GN+!ZEZ>KN_5?cu2Fl z8T7X!9)YoPNGjk;KqJ9KHA_a{yIssowOBjRdUq6p1~MKFtIjqr52KYO^FDKIS8zL` zeJ^&b00n+^{>xbV$t%UnOX@4=Ch@xGnkdug{1d&yCp$+>fnPLywMXFlMy@7Uhp$4i zrTMnKVpyaAkC*Ik(;nEy3*X8;v$mU8lHd3!oo@S_qh^VWN*=uME_!CkiusKiAZD#q zm^;&km@0MO`#t97@H}5(m}S-T|IOUaLbG*1Y0&5*%2SZ9>5-Mc@RpQ@NW@WDK4)H0 z__AztK>AiCx8T4|>suah(`;2ipV>HhH6^>dWKoPW-`;I94uTJrc}C_)zh1b;p(SN7 zqu$Z52%?W?@f&1n{_T2x*5iV3!%A>+H9(*<^M$D${yXGSRa)st2)N&2{sB48HPwQU+V;uw$|@76+IrEf%SgMMVwX?=P)ZB9Q?%Dyasdc6hsQN~iccP@4{IIM z#9S`$Kogx(EDZV6^rJ5iWnKj;keBG7@a-ps*Z61kd@^S=`eyFIUUNjoH&+Lr=v?$% z)fRWx0@Mb8qrXxIF)_ktab)^YBfGC!-A2EL<U zzcJj{vXe2^CXv*xekiRCl&FgDfZ)VPCgS#2SRH~(@x@*u7*PEGFI!hJ+y{vkkR9fO zO4hx95hxj;1;uoww$rcnDjVVs@@)2oqdcI%SL!K{;}PgeK_dMB^wgXBb?)R*tHtcM zyT%MKM-uhBA~2DB+y+(=41#r-qh0yh{GcqlbQA#JfJeY#+u^-X{)KU8dY9pETawkM zu<7Fx2>pPB=jGh^h@?8uO1Pj$U!u_J5y~45#*7c{sOsfPZ#C~;`$a{t+Whhtvn=jA>M<0ggROcI@pfZN z0MXXzhGUoKiTQgxOVsg;+9cEk8JsUe?(Q4OBUM%vS{U)7Z9F+cxaR;S$l1-_u0wQx zfPeXU!ZkpQ)5B7((XxP3ScdP}G(_=J(B(cVZF2gHfa&_`CbdWDhCtJm&y&*ry205y za&=bKI%@0wzQ9@)E#$NwoFottFn;BH@#kf+e`m!s+a!l(GtSwW=D=4ANQ^EZ)-*Avy`cA0ax6<-(1GSIj2qk_Z{{E` zJ*#U_uR&#dQ@1RhzIZbE3 zh-B9oA+79&?G?LbJJ zNTg^H1ajgSQ5HNduFQgr3KYJr zap^ia%UFaUyH>I8`OVE({gs*OT-%q!n}KN6-8C1^ z@ULkm2guN*Fa49GPv_h|_)FL50qw^dSu31Va-$#Z&C`N{4`AZ}7YasOu1Wgc?)L5q zrLPJKQUl()jwMx^?-iuB)yn9!3!JZpyM`@6X;(~^jU0OB>?F1ikVrfsa&l;nVV$=% zbOUomlOtX;yH>R}7J0Fb2EIvW*oR)w7hF%z>v1_NiA$Jv)4i=iUkRig-QWp~8>BGd zqoWHp$AVlzSX-|+@+FR%mhn;?FD@uoy~;0E2y%a5aOzY;j89i?O8NdOl4hDsbUC_v zkToCLQ|*-K)@Y3UI0)Z^XmK8EQ4MR4sHFD4j-6r8s&dSUcK3U7Y%mrx$M#g~-rIAP z?fzI-Dg|*N+|g3fU|-j&V~D<|v+nh!#NxFHPf;X}jQ4^Fi^}b^_ELPO&%0EDpc$f8 zsW+j(Fgy8OpbiyiSJ)$2W=73CQ3j}4Nu-qLsz48B2enSk<6*2ijQvl(DgSsEEwDk? z>!NGhYHM79?Wwt&)mTuISq0{-#xVWsjx?mGd{e9FKeXa71OVFCm~Yi$)(7!dw&o8c zqnFh0vvKdzF!@|A@vB*kodb|@Knu$aFVTzp6?VOU9hM0gWe;6&-f@epeoSz8P>(jC z%AkZKTCtEJu$B_oBOF@as(tUY$1;0g;otHg{m=lD_MpB)-BNbs%P&$Qjy5!#ha`IJ zVIg8DnlDWY^2`|n#{Z$MG2VW+-j^9cZjIJNc4+$=_PBWeqbP~F^YX|pX=0!kTi+c> z0MxTQ`pVzAfc6l95?+$b1R`MeVDMsAwg3qz9{Mn*fE@K@=JbTDE&MY*LeVZGS(xFU zyUlFN1STEt^+1wu07mwL9UnvgZ6{!Y0H}n?tP9Of*C=JKZwNUt0XS%sTAL9^%2lzs zV4qx6SNj|3{2^`$K6GM?AL;547B*k`@Z>>Et>+!3WPjZS1v52HiHhAawN>e?4}!7N zNX}dGRLbE>OnGfNLAd&yyF=7upgx#H1=nT_rHO#%mP&(`2util>VL!v$q zLCH3k3p$ZuwGx=$$cRFK=JW%=E&$)t9@<<;JYs^4VZ8|5+cRX;h%tRO#K)}(>Hgns z?sRjDX|6<>O>@U^f;&(5h+DPoY;GA(IYqODG`)z&%kYES4zai_kVaEg&?4rpBV9V> z_%N{3y#kHPlY-1eI{vuByHuo>mwuw?e9~X3jk!X!9Z#y+XMOGLQY7g^=QN>IrC7AA zSyz}c-V(JjI_W56p$7b6%M)_6kFJLtX-vtreg4|(XOC@TdzIZ+{6**x0OwXCJma~& z0k0`kLP(*la2qksU)*!6w@L+O>d0v^A15-wedv{znfAMuTSdm>7v4|q(f?trasga` z@k)t_=0546jb3IzBksWwqjomIAK&G>-s!SDdG||KdoJ%%hePNil?Stk>*<31sf| z9XxPg{i66dF>EjwI-8Vx*W!!6aE-E01BdT`JW?IXRD7F&z?;IFKLxNJFi`&f1vDU{ zvxiZUtp&FR{s#c=4WmwMj{OS=6_Z9-0{AZ72_n-z8R-DJ`|OwKIWbKgDm2Ogy8@uKI|^T z!NF1R3A+eF@%b$-@VDRwV!9^Be(nO}e^uC4T0ENtbin@#uLeKh_9}1ash1Hm=wF5h zKjoM?0ngOxelouGF)GLN=!xHx)XE|z3A#_^Ct`b&SOpy>=Lo*u&D%q5OXy#t%G;X0ERU+3{zN!%xiolqy!?k7*3Y`=2{q3^a2pjT`!&+Y*R& z>%!S7*VBktM3Zrh4tA!h!$h+Biu@4N zuMRzzT}19Xo@a@L;QG#(PJGR>&$78M9zbQ0t8cYw&^{_!-XU36iGC1CQp36x;Q$BRBn)~?|yRLdU^rHD({ZthLbuxT8d~0%n$SZ^> z?0^@yC}a`4MpOX~JL^XBzjEeqJ2_lfL+)wcFqgsU)JjdM7$j&yY|}!lVKQ2mgh<{n z$#h8Ssq-hc)g@IV!qhFX{@L+PLH=4;I?6GPFDpRAQ?SmHb@A$70X|Fp`e$AN*?TgQ z=W4cG?c*w#;&l_O9%?VJ+9+tFT>`U{4>M8s-U0x^2$HO^6+cTvr{N`g>2rRMMV$ue zpcTlqsxE7m0fu`+VhJEdnY%00CJx|E#C+h}M~@Mi2Hj z7h_fiUV=ApjU7|Zzslc@t_xPayo48a(><^mT3YT9Z|$}@tPg=Z#RU|o#%EW-HU&{! z&>(T;LRU#?#F^6(H7Zgqo9QZ8)u5#IR2Z1v)o&gLzUpSfRw^#+Lw`_-#Qo%Q=|Eh5 z9aZ5`Ua2#+Y#RL>=PwxfU`8~hx?6&pl+yh~3SK%a$cb14-GPfu;ihhN7RuCt(k$_j zwAiQ}pP4Z7o%rn_Wk>nH+6;Tbv9$+T(LdTWO4Quj1&cn|;HHNry?MB4=`r6GpO;+O z$)0v=k-raMLf62boLI*1eb+U(;}MJQhO;Td6CQ@jsNHh;g$WRV1w|2|2*y;JED1+c zLE|D}gk^!Z_mg_4G|0KvcBfCpxlQ`v!MBUC@u4r{LdSL#y6zqs=`|QA`EI{rn!8vT z2W4JW=r|B2$fu(=D%QBrAn2p0B0mk8Y52`R|L>%u_8)(Ktik-usoFCU#EDJ_E1)usYW)4z$C0>$H++v?y6s@(ha>Kc3GbM*w;3;kY&kUU_0G!A_AxLbp&}{S8UB~ zE8RGP%dRwF1-wXu3a%Qpjx6G>S?3GtlTk|%0##vt&%uLW`~-bWOJ z@Pd1L#E+|nEk^`ki}de9)7-pdG?^j9(-LG34#AfAo(|nqjt#q0cT@w%U_#Be*DA>B zuldpaxaLTvIgi^M8aq<4=u>Y}aJQBuOwgb@=A<6}oK5JZB|>CQ>Hk#YKfc6tG^4?O?v$2b2LIgDc#! zg~+EeWM+^OC`bK)(nedNZsthVM)OhpY7*-w@auYg3|0}0SFK60{CJPq4E>2NxYR^H z{7bL)#*cN-WZ>sYf1mm{6U1kOfYNLkBMphcuuTw-5K@R=7EpIZ4dLg$m(q6$J_M?7 z$ZL+6_VB+F>?bM%7`?x=I5aY~d$Y$+GEpdelKa2yJ6b~XJhy}9()!-_5AShBK0?hw zb4sdgvn;h2Ty}0I^75Y0#-_r!w&Os?O*Q;IhDH8KT`FL8qI+ z!MoNIzytOo(>RfmYOb}0pPPijAEIzi2FT}F{l%1`o*=wpwxS710WDM^hK}71aDCjd zx`yc$JMMlNqVy`aF$AX=g%NwC<{51F7nw~wb@VKGnIhS#(+Of1yyL%Gb=z`Ob9aF9zrd*UkVn159@h#H zHj_1U>y5(bejnC=#CQ}+Vh>QdyKSK@X{IM6pMgCWWvqmk8 z%mg(?JMKi+z%$R66(-;Q@-aFeC;#Xc3#LwaKebuXnX%xyQ*iHKDh8%(M}o0GLv8_C zGEO$IqT4*@MbDr`^Ln~{NsDMpLFl=w2g*I$SdfkImh>c)hc zBR>7W&=|6zeEGAMuD;dMY4E^uJ%?jONK?9gn3?1-`f)eK=&0(wC@UrePJ7PK)0!OR z^8zqw@AliSYWaS9#|r2-(4Syf7JVs3#q>}bq38HZ(o0b(_Zk1r++wIOoBN%+~i=g~+lRC|L`~pur`N!X8@?equ zWT|%uA;G zr<*%+=~4~Zj=`3cKq4K~)jP=r{?u}1u_Ya_>z=@T3{ z!^Ha)3H&VV#Y*7mHf?x~=AMVoCum*v&(fMdB3#LaDZurOvF2jEj43_KtK*V@bXowT zh^8K-8^v|%V;MJLAy~#y3a)@sBA7Hgn~7PHiOgy4q>*Gw@~IDt(#UW$cwZ5mlzhRK zbI%=u=0Dg3LLPn`q^HwK!+1GM*;avALgAf2D`M-!S8G zZ#qu9A{(3RU;x!|Eg_tU4RvGAG=_h_#!S$NorI0|xJ*nxH4dxm@OfaMiqFVYDqVk9 zTyTWNphKY4wRzjvKWU!;;9pu8{;vwQKQnNGw3%9Ny5n+Yrahv{a8+dmORwPI1y74U!q7?wbDSB?z% zm!@NA7v(lZL$EuBsxJS){#?xFu4@U;j`lAQb(t*9^g$z?{Aoi2nD8}#(v;1xAAtJ6 zp{51L`nhxQ2y*kKPH@uU4D_3xyQa=Y`s?miV*b3-5$;ErM!Xx?nU5Ff1Zm$LiaTfR$BB%epCg@n~fzfe% zFpvnG$3CBtL=R{0z-R%NRG>UBJasTM2`3ENs>Qr66+sO~&->L_l;05Y$$Q7>RVbpn zTUl;LTatMFg^kpv7~DOv3{dF~tIY)W0V4C>7R`5g;@(dOUyd$wQiYr~t~;w07Dk7t ztfli6^I46-;;7e!6ms#kE8685d(F-~M(ROX)pyeJi^k^N(RNYHcFiuf*Z^DrYX;U*xlhz)R- z-ScuhpDx;1xCoPs6~%Yi5T-kvyJF1;v%GaFSa?V}6H|;RSPVHeU{zYp9lnQ{_*jtD zP~^X73qZ#wNNzio{QQ#3s?9#1%bbTVGX+v&h@Ib?Bf0ZF0&U&q)v-~P_ogn+m5na% zIlM}r^`|upP>iT6H>fTWIUPT5*>ddm;_PZWOmtvz6x=N>W(_)MmH}Y|VpOksYhzPW zTTLZSJu5#R1?Q9NAF;hxi`!KxABEV4vk5=!i871M>+npp5NNcNkxw`p$z()$eTYxaR?v(n zil8J$Tdz)QN~GV1cguB=U%s)aB%&OU6=Jv^{NTgaYO*byE(NJG&uA%D*j@77qzYpprB3{Y+sytAoKpsE>RH1h9RORTscrVvjwBVZn>cdc`Y7$r(IqT230945+ z8}{WoCW%~VmpY9b@r8>|R9BrYOUF!(l~st?#{y!p);7*cgy^-pjxtks<2PlM#qqyy zY)f40+8Rw{a&zoPhz?>8sfTCfsbdW-11W-*k!4G_v2BfIEIY=G;-J2WAZzQUw8<+3 z`L9osZY^Yo3nracv-U9f)qRkkHt>_dJu(?Ve1y=Vw)(y>@dmIw+cNzy^Hl!qdmD?N zMVel?bk3I32Gkk1XA^B>`1n^b$DK6i$R^(-{ZTv#t7*zDMi!DVyLUhdnWkih!Uj12 z1fo;IAqBtEk=8Mn2qhTOR!D$Ru6?Z^e0PWGH}c6o^rlEtIz>#f@&n~u{p;E4Fi#Sz zw{jz8(q!4E#c*rRDv`<~CR8kfw2K zalkh;_~X-n>Be~vCx%25A*YU~3BXR+OoeE9RoN|^!06=S@o5ik#J*bmM;vkSclk!G zTh>7;1?mwuKVi{7PuKm&p+YTIt98brYKf){iLl^0|3m5C~=|= zTYBKNas;#^Jm?qld(bPfjQu~{X;qD_T1`iPU)rV zQQ|p}S36!s`YhaE@phh*HS6j29%WUhs8t$)G@q^DYz^mVIL?E&VGXWeD78aEmk~ZD ztt#ZSD{$1}t(#4}(Cg)OcyRnj2Rdx}QeIZ>*3V>4W_Ke5cr*ZD!!A z2B9utZcj5iz>u8PXOwoqy)mZ{q3jED0|@pxk><)Nfqkkmr|K6 zY`;TNGyfYjz^XBgFyn7Fn-teC_6cf!@-9k zwGGW%ziKd3nYwMy(!y18uhDYZR9uv>uA4HC9DKC|Qn6iv$F1-FDO0g|UYSh@o|-zd zF_7~#@e#?qzkHwct|~`*6d<5gPA$zIuS}8!(otc02-iiG+^LDYJ0;XSrNb#b@DSTz zf)GnSFlO;(mrsm`)&s|`jjqi7SxS3M*InZYoogdmeUpe;)?(lufcAV7iGSx9CZ^?q z0Kx>FOsKuNBLGYKQkw7EVD%6y3+h91vEO`9g=kZq^f=-j9Bw<@v9D_>x5RZ z%`OQVN(r>7ks(>Z#~mxxPf$T2V>+gq!o+3Z*lGcXZ^Yg>)$Ydk5Jrtc`$QD0(N*C; zX0vO2KXRYMM1@jZ1v1jwm(4_bFA^;zKzj8D0Url@!-aXd+gecA#hzoy5FJ=pPafKs zdWxC)P+H@ALM+iuQXibR_i)Y_=B2&f6u|cZ|E@1C(o*khs{*xq1(b2UX!i8AfZL67 z$eXtrp$AcgCE#cdBl16blil{;P0L{)Q3bd3OO#9~7yTdSX{8wq6S<-j#=PTzfy1*V z4zfOXDuJIz-iJ`L>cC-;$@Oj$aQ!THF|*xmFKgxQ^cNi;mcW9$C=)S0v{b!gxGXtA zT2uMXE-hz!DQvypSxS~xk6S7ssQ8705(T5g7``loo!9)q??9Cq}en zG@0TeqH1j?3Ga!SY@qn#MSm+7t`}CD3kH%nVD?$WwFC|SUXS9e7mt?+v52R)9?)VpnBUV>A zK0U6OuTi>PQBRi$d-uhA{?qn$P6mJ!O3p{M)a5eC@8fm^qY>8e*|<$KzIq#7sV7VR z#q1jj<=*P>Bl!M(hi}ql0;O=g@*inLPag@R>f$(zwOt^Cyb=4k8(u-V&dCY^CuH9g zX9w6%6x|$ek$SC$^ZoyOq@|KlmbC+Phtz#N*-Dfa2|kbKX(m1U|IS{IjzjR}yc<&AS zr?PqQ2{B{i^^@g(h@R-!T^I(%s|?N8616z#)!JCwrbB#wPh^IOUJrK!ZfnwrT7s;& z0M5KV#?V|We+ns&Y3QuNJm6%tN7L7iwS`Cg`FeIGhlDpNYdqk?6>{3?bDG`YbTNI@ z#As>*ufM}bAH)RS`LlYDR$dBoCZ6N+Gk&fl4>0ZC zYbuxxg||W(yLitU!mG*El#1WJZuyH8#^d;dt6S(^FDY+fae$&+)G(MxQkR80Fi(zC zxk_`o4e-`mOwhfaGkzxT^tPg24=SRVp89(pB&BnjyQAAd#v5c36K2U{#b z{d>Y9Dleu8*Xpi$*Mx)dXJtoI5vb42M`=( z;om_UQVMw+8nL`<_|amx8s`UKqe;&*W2bO;!BKjq?QJI(3mi6OorFA zL++_3=hcjH2Lr@5aw*9|fOJbYK!xb_45CLGxePD*ZY zCxCwI@2@_s=#xY+_=7s|YO(V|@u%b%c|qer@ZjsF1Yw4CtKJFi!D3fC$>m!o*4S&2R<)Af!w(Suuk)n%OD<5tbPA zfsP^KX*cg3+V+5++-0?<*6kzaPl7W7DK81Q;F}C;rRdTM$+y<4=^jipa}@$5t}gT^ z&O7Z1`s>qIe%$*cc$^Mt{3Ikf@)C?I{ZnBokM(+aj5Y`TYmC^ihJs86GdJRZH_3ae zPn+yaCgS_n*gupGLS__3wQC%|omkOlfDVG9uy?&wWuGT1i_dR0(KmeOdtaoLH|7Od z#yBlwK}pUf$JN97cW|toSB2ylSp@lGuqZa1F-=v1GV z1peR%k3NRfd+_ny#0*u@Xv)$Suap4nuW)JzIfF#423t}L*1^)P*aEJLVVb4`FY5sB zbjQ`s1K(pfg1Ezo)7XlY#dppw40(ik42A1>dtA-2YrS^>QN0+19Ep}|b~dP*S*R)S z<@jN{1rxtD`%meOyS%ctQ;S5MX2{zh_q7EptuW~&vHfDIHRwWQF+W%@x(Sb6n)4WT zQ*J|pU`ds34aj6f&`NSEIj=k$5!G(y4ae$7_hcW?*#tXt!%cgBM6wXx|_^gx3Kc%&>Ns>u}5zEy88=EQ?B*u zoQ0`Ml15@`_8dih=9cbNU(WUC!oM0;=sOMHMYeTKJPFnsSr9vQ z*?O+)eIRG>ay6VjNS)-GHbrw4EupIYl71eGlqa^Vj68uCAJa3CTrhLriD|l;Xr;DP zWXx-Ha`w&};$Spm)d9s@`d0OgtjRjEq71!KaYbsj{|#X-6i_&lTy4c|BaKFth&Rb# z+qpDwTjAigl!`#;s2Dpg9+*ch(8J@~D`RE?P^na*jz==e8ByQq7gumx=*Fg7wjC03 zwK$pVF}_6mBkLg+Awn%?n7XQ>Y6_TdBub|Y(=^cG=v8^_Ho2rG8gAuI@C%PlEBdU> z@97mY=sr;1N`xThejhS8Fh=d*#)hksaH_Mpac&^@hO1NWm=pPY$!-HUDh5dcl4eC@LHL9MPb8sg$?8ARnUg}_!*=_hU z-q@X)1a;k`rRM*K3;W!K>jNRDzs~`|-3tP-V61WcQs<^Y&CN@BaLQYtNCAZJ5i_YW zl7=^40}qjpuV(B*#>pM7G;DI4tdR(=JUB%BxIDy&fHsTv3D9#FvPOM*H%)!~MIEY` zLt>6^@aprzqb_jeLSI_7PB@k(%GAAMly1wGEt}ae9xu#b2Nux;wG{75G%KI4$qYa2Y%3tc; zmZg;~!<7j|;wmm}u%gwNgtW^JyHw-TLWL)nSVmcHu$7{oi=k&X6rnjn-kp}@`OPzo z$U3?ld5uA{pwY)Mz`08dEu8Q-s12aQq-GvzHL^7;!!rrd6!Bt5>}dBW{Q_TzksZ8$ z5d3)0a5IDP$Wf>0EEXrbTb4aTFS0s>@wRqh4wVz=XQJ4FP|?2B(lu4{Cxi3bm>2&o z`-^VKkTXw(Iust{1dEar(xoF9{SD^Wuo=)$cRii5nK5Cv`#3}05TsSV8nq``Vz%#R zQE`T`&o(zW)l%#Dp?|#?ccPSwZgC5cywtG0kI`qHNxS-R=xerJ#EJF0e@_h_02erc2H8%?%BX(RO(ol{l0{v_Q zvHi+NNz*%ftS&2f-qcXbU|Gprtd*Ybw|tER`i+zSI#`Al&v1Edq`1Ea&P5US_;t+SPs+_zB$~ zs@Tm@^Lam)Mqt(s1$+mV?7>lN+EQ2E9f@5QOd$;1@a!I2=bwj@F9P(4Jz5=&wBgsO zc)eE3CFud!3(@4bj#TK-ESk-7#DCjJ_e(kxVPzq!D?B={V!lHP@9t`Awf18gvXvj% zK7zJbQBktKXbr?7nJ_%;?02XIPiIoU$)6#cE7x0pG@9$|&u%)xdxe#lS}_STfa)NG zCAUA-z?B7t5*tG+riYtc283p=LP2|T&lBr8BoaTQRY4jeT9K^uK#Gx;!6Zn%m-$s@Z{Zj6ZB6!m)2wm1rhAtMT_^AU^Ibkoh z_KPW#4iZgXusUZqY$O&gTc^JS8Fo8@HCjJ`Mr&20h2Vsea+{+WcukYNIP3C`)A{z) z1*plw@h8P}a8wWOEc@nANEZn9E^JIob;Pg(zR^fXH6-w#M2DvwD zYXqeXWM2fICY|@1#WXn7uwM_ zC;Q&*&{~NQnS7>;Jp`CTs^2YQRW8?Ia^fRHM)e(C?k3Y?s3S$1k~P{9HZ*Eflavdx zaZG>^7RN;Y&Py|i7A_PdoUkRTr#!Rlq*{qE_5lcyzXN8F|XiQ9t~R=YKXkJE6l?iFrW_ZP?@1Lv8PG;sL=_y_Tt zbTk__aLIsJKxA!-Z122Y#!?&m58n>s*PW+~N<%8_KTgF(1DvN00;k|21ztA;WVcCN znfRZKytLO^p3kt|W0}9e3y8^=^BKWv537HL7RT{V^1VM9>WcbJJ58ZSbZ!ma=c_Dt zzH@fvJdW%ad#+R>jtkbO(_5gfX~axP4j}5fsCh6NnxswM@xu8pVssD>@vJxSBy4(Z zWkGRrHe$idh?Dlz3XFaj7m8i3w2p-nTWz-;^N#sxQL?wnGTK~snq7|_l>IDPU5HfX zvNznJbT$x5%6N@Z5m0#C%=J-Ahuv6?iAKNL@#1|Qiz1TrzH8*k^ z{LDG*p3H)O`W_WtCT4KlDxbwy2j8y|VIYlXEa?h4$JI&h0%N1NpvdU)V+j zmULZ==3MAx&byhe^D6)3%W4MNU1JX^JQagsfT8F&MTvE_xiGkfo(lIT!$&wM7j>8p zoDcQvh&IPQ{EwAzGSp*o*d1`kv*U%F^DWJ!?N=)uxVIRa#?0=@?O)cC**{QE-+XMIC8mxW9O06?lVvP zLwQmqWDE4C%lZu+g>x>O&Owy62w$0g`60jaiNNtJ<=KEDz%M$;mBXo1Op1&FJo_7= zJxPXnzE-sYSXYtp zVTK$A#4giI>^N;b|Ih+x_}mEVSPR&8Eg6SSy_@%_8nBdQE{k#AYXXglCs+pmui5k7I#d& zt)G@Hb>Q=YIb-Ne@}!?l!Arnf!IzPSa!34+;nHg^pK8(s6Wz z+P;=+#q z1JjlzW;$3izfXGjhQ|ArRo>OCHqQ)Qp(0#8Y@3&BT#)32_BQ|!+Q_7n2>GT37rPQC zGM&0_z(DYW>#i3(uAL#BfT?OkySx3WLlUzvUhuh*HJPb)T~n*A23o1hx*`mpNuR`( z5xSn_3y&7#YBpv~0e%$5)O2FGG!nC2^-Qmn zZ^)H^B(f-N=b-h(x@6VHaUJNRe65atmCFFQIo7Ib7ybzI?0;HGG?uR`UUG$X;QVZg z=no)@%1=TMX{lp9(tQ?aL9t*Tg-0TR@m>-;b)7jVP*k=Xco(WOx=(6cj|8S_P&7uM zpid3QL`qH*s8vO&g{0uN4hv!g*_qf`Q~7?JTUk`i=Bs66Ex4Y`bW8|=p-dJkA65{E z4%(_pQIG?CeLc86f&knDl)(X zW!vGcj#EZbP*vD$$#CVN9taWv!MN)a4I1UfQ#DK+T>Akdp^c?n8oNw}jtiSnWLP)T z2aRUllVFb)5?yjgcjljUwL2ml$Vsu#{`B4CHd~2Ha?kt((t|dEF8iVCgyj=TeoT`b zWDo~`C%5l`t}8ZUS(qUuI}MFGIZ4OwM2kH6%r=d+E11+R+2i=}zj;13M< z<#`}9vi)d)JDt*gVt_}uSdHEi#k`zRQv)K3KG_vcvO%W_sGAWvArmO) zNY>+T)jBdn$4T?mg?cU){Zw0`H%Od@HqOrR!iBRaAeSp^eGAIiKjVUg-%RNa28=|c3NOy6=ImI zK1^X98pyeb)oFByr0NxKKQdTH{**UjiDV$5RvqwB(LV6-LVG6R*emxzh#|UFjYJL! zFs{Zu>#HPm6WnQfsa;Ot#N;-j`qRAI>tUid;C& z)ff9Y-o1;i3BDS8vKCHc@(Q|_nNHoMClJ;d6X3HUgwD9rRZY$lQ|u{B)vda%ShtEQ zVe;@>7S_sRZ#bE0#XRQL+e zOd<+50L=e)@?K)(qwFuOOxt`+CNz2^W=`Vv?vcwGKkS9EklJf*`{cKFPBDI6K>*63 z{=_xyafxN}Nmc~M{Cff8(krQj*1(lzNlzR96zLzVe@LASh&^-1!N>$OBj^wKTe;;EyM-zrRx zumsy>)&&gK8zbn@vLOEFbDkXKf)n0680rUh0sX@64{SczYjv zwGle~3_E|82F@4@bOE|rMvCSd=0^_Fmd&;a4Q+5&wP7lHv*hwSXT!l3=orW_F+gYpwSBx7(r4%lgXm9!D&gc7p0XxI^NhbXZf za)HcOtBUWz#zk%U_i@~^FxX3T*~8KE4Lw6<#zVtI`)T4TZ|Xd+1s;fyjf1mH?-HvT zTPgA0?5CLLo6|Fn;Pu9DXohJB=+=jC3B5EI z)ebKlD)yknst@o(apkeHm-138Bq7wMW=deKc+Q1mZT?t7A0Uxu__yRsF`)|yQ0ZnS>+CUNtw+vB^040ahApIA?L^ZFoE zRd^bW(;==M>y_MlCA2?QkKh+NQx09jt{ftI+BRG!-SE``Qk@YtCt)E6^W_4pzK_0w zGXM37e1bXz7AJ5VQyGXn=Dbz8%YuW^-xbu@CmQ0S|Bd!0(0gP9C<#Y9iAoVT&#z5D z5%CH88_v!%;h90`4rDGC3Rh|^Z$Af^_QK#OrBBX52;6`aVGIoOJPWq~$tIo z`2q_THYbCFNL5)p zxBw+MQ-J0k3}nFCpKbesNT!IG7J@aI{bMdH5M0CV2e{f>&x{! za;QnQA%05#Iq3FmD(Lzb<4J;Tsn^oXeY$W^r5wpugW4XSlOnMiT*>>pto=?IecMD+ zsbQ1%E&4u2XqO2HtKz)VS3^<@1o^goA2Qw>T+AQ4dJ@ycr#U;{Xg58xYN)4N)QF^%fEaWb%N#x#`BnmEf|y_pp*=+I%V{#1UL_9LRhYsw8xz5_bL4#dBzdvVQ59*K)GL#kWxaq(HaP%HrgK7PS z>BV)(mMLOjhqcW8#?G5pU_Ygv?SaS?Hs^ZyJtxnAb@&GU-NdQQD|w$~UphU?^c zN`~XVK=+E6YxD<>=6w};EdOu){`M90Lz%*v=kFKlP)Y+~!|MDUL{=!G5a z?Ell}#U1Tj?7u-zSeahL#MQ#cL`htTUYTCS(ZJTp-oVks*2v?Z5ciJ<`S|E%O^huJ z{?jHE{(9{jE!jB#>NLHQiIbg+qmhZzU(ov9yT2|B1k4;9|F|p0_zj}}7$vB+5Wce=svn4Us@8VxTt@Paw1xGt0WfNyDdIb?NdKD9QXL?B+12Yq0o$q@} zcFy0}O~CNao-2G;^YQ%~)c<9d|2@$E3*K3oIN1LK%@bhp!eId*>kk!v-xP~EZ9k+~ z*#+8-S9i6ZQuoTG0hiI*jH0cqEmQ4`eHzE}EALPY(*>AD|0*;04&N~^kazg-NS{20 zw#N@`k&fPZT~W}GDm&Us_{rz@g2p36H^hQDVe@|dLy~W6yB@0d;dR?!QN?G}2hkuD z3s%rnLSo!}OjYaZ#tl9*_cGlVWK&Io32LT<)?a}@C`{yHqHSUTA&0K_m>+`FVAbjl zAr^pfMewO6b<#`@pCO{O6<#wW6oN>oUO zw0Q(Zva`Cj(OzoLRH|Uh5-wd@_}bK7^2s|+lZvv_KmCfw`##jG<^~iWMh3_IVgGnv zN9I8BN=m4G?gUc`y9YP(Hg)&lz}(4*{UO{)oH4*s!ipqsx$(EYseX;j4kL65(ZI4w+`gD-yJG1;P52X&BE}Ft{xs;+p-Q)EogDQ$ zOT7U(`CPPZ41Ci-8On{pPEvRi^xH8r^TvpZucs-_h2$!wHa(51I|Tto)d+N}ud+X1 zA=#e{V<63+NBk5V_mvkN_ruTu_xXf376ar}@Ya*4?;I+1+v;B-v1E0Paua$EHo>O>#SU1)B6t5Q(^MU z|G6TqRB|O!nj2!_`PC^}4Y$Hf(7XUhQKX6=z9FEzx+Mfr(KY??WrR>GVn5V8&2fK( z9!AK!>*_mjttYemBif)Np5HWl?L%sRG&fi0C1JGwegAPR_ozB&D+Nd-SJXzJZ}$oU zC}J}2vtCN)c3L+=RB5<{YLt?<^xb7C@ND;_7Rm(BM>efhPSa3fXbPY&=8IL=83g` z-D+HNeM#Q(oe}TMG{K+AUj%UnV}S)-ZIwN?y{c3OGc=jPtAe&Ov|;?AtHWoqn-^u8 zc<&yf$NNPpS}aTpQ*atv>2}7-a?DtX)8A!6;52YZgL0^Gq4HsbA-uMM&5PE%JCKEc zR(`o%am)&hM_>84b;V1WWPKk~d+YFmTwkI>%4lnLEy~JeV3_lFyek!yzuqmI&}mi_ zT1S^nka(P8vK8 znLQQwTa)Wk8{q{?>Lsuw8p18qLP&r@qdu}Te1jx!&s_R*}cGs|3JngX5{VFk%Ew2m0$Ub4n$ewqp=x~5j6a)?n zW9I|x?H|i16J3i^QUt7NpqU$LJOO8m@vX_G+%1$p>l#VKOZzmU&mG0xC#4L@DbjLu`fX6z3xH;M~emLRItaml!iUTrz;+* zR221e+K!mMB4q-~W_qSWSIo2^P$Aq1aQ&@Ms4N1K=)kJ1GU+gta}z}l!JS+7Cmf4P ztn_w}O$#RMXdHu6#uwF|meV}CYoe7~ln3mrLBEPg73*|PTJ4U^0YT+FaNiKW^Jo^< zt<)n9q4$vI{Ru1Bd!)n2rA^MYLw_@p-Aww{Lrh&!KifSb1gP(iO`vFwUv{(LPf4AuVul@?>cecsAB11Ony37=) zj|P%x!h8_;Y(C;rf`g>OCU@e^(OuSk#_V&o^er$|gbg+Ab|tvn5im=?6OAX3dn)F- zenh<91E?llY;mKFt0+~kD)&}~J2C>ILQ|yHi}4r%vLJv~>F=|*p(~>NM(8N%V;J0} z9Y;5~(W<5h-zmkT3wdzGulUpWo|*OZJ%;%eVpj+7s3aS0CmfQ)ckVBri>bn{QI``t zCx2Lq^Jm zlxWdCw{)vx+!n=r9VNHvwG&J#o{a2#EN8}oPc3Hl*sS7`Xh2?^)}%zyRNo5(BHoKB zNd})%=f8O~dLWMk<0MzTK)H6-Gg(=82q6NbB$$p<%0z}_J3c0j+YlSn9J()p4tjbKG*7YWh=!;SNq7#mEnM)>~m>xuJPoX^>S+*vJLa*H{BWzDTum@=Nh~)|9TY-N2tf<6AO8(SiHP;XAlr=$KS-0e#tA zVo&&ZmY<$@c-;8ZNlefNbyguP-7w^Jc|Q>7RFfn$9TJvNDHl%C_sY|nKF2f8w9a}JS( zar3xjB8XArSc_A}(bP3y*YHnK{fbWLGt9RY+LdVz zY(rjrAHZn&WW{__|PQuPfG-N?-4{9fdZ1^7lW;V+?cB5V`=#gNhh zK4G7wzv9~nDkLsSerV{~G(RdnX0T$fWIL8#BI+qdg?uMX5vtpDI_7cCwF>U?~x6w`W6~830!)`bt&E$04kmV#tqXN0V zaxCq@7@JTNZ`lG**W`OsBPAxU-83Je?_*`1#3s3qA)zzLp+N|ImW=Cg?Go&y%3L~5 z*4U^ABTB6@O@6Io0MTyGxO#iE;v!N8FlM;IiUuEqP~-qCYE1p?v0+yCnCc&?UB~xP zh4W7b=4uHv=>^lQg=KZOA>apC+7M48r8V3zI9GUs{=Bn($Cbq+0d6~%XYY$z_0g+} zqjr3Z0CSg3 zw&iQ5;ZBkrVZEsGx~ox?>@mC_*2qXO45Ar+SntMCA{`^(IDEJ-f;oe0QMY(tI*l8~ z-agm`9+9+yu0>keeG+0B8Xx}J19&4~nz@VZP={|Am)9ecc6OeL~cY%$CM`u1nY^3zjpB6|sK@dE9%La*$Dnvi=3DhhInoX zD2$@|Ez+%&!YKDTMQGNhfIj*!bW`jQsOhJqK^YTrfBK$<+n~4Xn<>*JCjBXHMpo_7 zhBg_6pU!&!&8^eRYZ!OQw9|l-YKLb5G_)*Id zzKkl7u*qMMIgP(-OL-Ni-ai}#hos`ubt3WH4o&AMc%pIz3OOym=?o~}K@d(M{P*K45A%wOUKpzKw$KWeAjiY7U}?0_~r;h&@BRf z5G>AKhv0&NkktW6_CrYk$?aq;bz|?QfiVRDkcvyXFZHK{gd7bichHe>DAQ{}T7~n! z@qaccn7|EHKgrx3JKzCY^-Fke)v#^@Z1r-dy-N+Da2-F1S;}6=we3>fPBTz}`ZZK& zi7QSsKYYYaz@NHvCu!Mm=ntgNbMclxcr%ZO6K|8rZDY7ATi|J!^L^+53SNqeqjR&{tZ9yCcAM!>Ts34#H_@iR z7UKd&F$_T|y3_9$)X!HyW7?YL%*W&#nRqj>ulnW6cITFfH%KDrZ(&cezP4(Q4*PN=t)J4gz5P}WxobN>Fu&|7I^8Rtt$wGL4EIRG$`H# zTh-KXF+FIoC$Xod=uzSq%qMi2!*dcD_r!I0KH;%9X?hQe(k&arpKB5OG5W8aM~p*S zyks^GyLj^HCMwu@ls&;>lUJa-53jX;ij}^vNz=by8{r#+B-gb2S<<@%7Q@?y8b;Xr z=;Y&_PE;1+@?k?aU!ZLaf%*9pn!|s;mZa01hEvqf z{`3UK5G9w=5P&Juhvo|ifby!&)}6?v0YSoo`kp#O%0@ei`wdi7%ux3-z+ z>QA>^FivgFc7M*C?x11x{t8iP8bHc@F^6?WrflybQuFM0eRR)yN%AVs%xA`4{1Q9u z>bfs37#;9^*>YU#{&)}C?jbmhmXQYI4VA{VA%}#R8%%5ZNVd>y21p8jGS#=YR5{We zMg>+_L|^#ttlK{IFJtAoVj)guz6(2We8d7tSan1tYGU64NR*M)>&I_9vxf7JNDRxk z1W4i!Nk_s@HJ{@z4Z}?z;ehRnqbAo?;pbpKeTBK4{Snu!0p+oOG zs{t??2y}x9Puani6I#*(elK_()Iz@?LwVYWOrkE;OJ4FhEw;87YBbV2V%owLGJ(WJ z00v#_6!+(CPx@^}=9^3Bx*|)Dfm0zRx3Z^pn|@55f%ij(rTuuBQ^9E%flnoQqCIRd7?4{54DlC2u> zeYK0LS+2y7#Vl23&a#cq?+9#I`#=X8w#fBl#zYrAU^US& zP=aR!1)(U$0`lkP1=5YMvA26$3@}DNhs?LGEtXVS(95lF4SuN-R8R0nE;hmH`%U5f z{5LjZ`458l-)Z=Nkk0=t`knP3?Dqey^!xuX=l+*5{!7lCk&%VtKR9>hMPl;YAW$8o zYVQb#Y2_nF`ymnE>vT$k3>)}A=hsbgES^83Y2CuSeI=LHnXp+4#Zlzkb*XR!5S|sM zZLsPcH!G|jKLI=1%A*FLNcs)Rcsu0JgzKyP);;Mq0sH{?Db;kG+PHdS-rINr!oyN) zRuCeBX{R%6)6)HD=6moJ1O~Q5d^AVsMvWWcEe{!YRH~KYBYXh@qa*DHZUmLKn{lt* z0_1#C4xLw)4H{+UD^&n`Y)DIxI=F%gaKcW%GrZuW&m@?mPTTbVPMnA){j@h35Iv5G z$adL!bSC7m%J%a~Zs(=B4m-K5LHg;3*vYR^HNQwqxFoC~BzX7+y)yYKC{^BR79NSJ ziW5kSL%D{89Q_-rHuwN<>n~10q=R87vMT{e(_T^~VGXxdLF!+OR<;iF2rQ;ySm> zM`Z0?^Vfp&vXhwH~aZgkDH334FFh`vMQCQ3%L=JURH6 z>vz`J?MMTVLkc-9@Vw$?(IM7aQa(3Gv+L;&8Vl!-o_pQTwrjxh9ux|<(A6vgqyg5F zub>!s{^C2Ly+^Ei3aN9Tp3?wE#QqIJOvAa?jH5g) zIuQ(xz_S5Nd&P!c^$st^zcu-e=^JX&Guu3NUXmy(G<%_jtZs;@LHnnH{dMUcUz_X= ztaK1S=KDYKu7FdyO|BV~Q5j3E&9iWie5!zi5I&|@4oyI+AYd6FR)3C3jb zBqZoqoU@G|pQ6^*2|yfj?#Imtv}Pd-IZ(_uS7OKcGGPd{*{io6>^a}$9zqt-7vIpj zp#`~MWo>PXIZ!@8#m*LEjmxz!woHTKq5SkL=mE!r9nB_hcFUO78T;m>c2~4B1Kq?L z%2nApDo3bO{ULZM4mnKsY!N4{8=0INcJZu!2!TD%wko?2Dz~bEucIQpG3)bRc0|I4 zo!(*ZEsTFuYi7|`(U7~Io19`1zJbLZ3pTbQN6+ent|(CtEFsxmoX%Cj*|DRtj0K@e z7m(Qu5e&ww%SQ{lV48hx&1JfPEu+=eS+vq9u|}VaMl~6p@HT9imBT ztzJ*wm6zL|za?YDO*=^y833tdkNC`7445E2TR5sC{A4ucg7vp5_&5OXnuim5`x{VT z`%h=Ef69Z{{tZVNSvkLPl=1IzGOo?Xztjk zWRGqDemk>G`slSG4XY#e9A8l_F-O{wM2kRYotI;o#Q1U=?jm1Gs+H-rtB6NxU=ekZ zUxUl*8Cd$&hoV3R{0P^S0Wjd79Yiz1CUkpj1)}M^IorQ$VEtC4j!=HGmCy6}H;ccB z{)_|u!Zn)mvC5$MgFNst&$#T~W)$jT2J1=fo}d}NF|sZk5g#bdxkT~K7%e<9c8hy1 z75t--?uWH1s7O>s$_R1agg?q9Zs60Ypv|g-Q6rQ?(QtKAq{FnQzm)8&;^9r4<>Mu< ziDJ6zE0v*01uN$ywrM2=tsU+&-4CICUA;e$9;Nqa0XGD6-WWF2;oO&X7bq=KqeCFB zN!7_pYaPlVR)#aa_EiZIM(v`~W@utT&`d8j^2E3@6k4!-8`Rko;~mMV@?v`)zfl5?Yc#;lYVN8 ztnLF81LK zw5+}WjkK5rfB=nDVjVDyQB?T370zO*`Yam>1yk1z4#%r zj7EzsJB$L}O!jaW9GxD^3hji=WUyDY082n)jk%aQPjE*|!NzPMXhw810c#1bX$3WJ zR23=xmP-cq)~s?Wa@y@sf7EM3tq7bsaj*q^)g)jii{d+4rW> zPoD=J3)l}FsQyFWoAIqiu5B`&c0O8pYtUKI(-{J4K>p3rCY>1FS|adzr=qu$x{ZET z&6r(*_Y1_je|STGhaO|f;(a0KydS?ag&mzGoyn4YMttLGE0jxoz5@A-aA@B1kWu^ zDJ8+R!KF|YDYdBViS&9347U5A71@lpb}=>vm4b_bilU+<0Ay`y=byBT5(HFXhiJa!o6qYOCH$xY!K8s1B&*f5wBhLYiZoW~ zrNEA9>=F>Scvn0?de?asaFZzg87pt6g}uRfkeaf-z*|5w3dU@+szuMJvU6wBF;Jd9 zc!a?@4_Qzsm97C!;@sB4H2!?QVQVsfj$wZh#AE^>OXWA4+)xUJQ6l36uA*z!)|@wp zecr6;(S(vSaX^?o9SsLnGCsh_Sc)uuN{| z@~+;o(IR3s?{nqs56cd|SzQ3IZh!esDY#__7bRD8P_WFO1t>%h3Tjn4KjU9=jOiP= z{`E?P6rrmVT?Pp1LY05*s})r>{hk;sVz<*1uDpgsN)bj0ESHmkoZ!$DxYx^ZD*M0< z+2eaeL~Br}SK0lNGHcu@6kZH5WpSf};ucnhJo6dx*I zeyfD>s(j(SP0Y1>6s5KJiK+vlr4wLJB{a63B!~A0g-G~9;IwvPo#&O{HDy~ zt9jkg#8}0z>d|-^qv>rtnlgViUzQVkjE9XKRJ^v`v96j^l`-!J+2K+GEq%JUM>P6}=k~ia%s;cL5rGy7$%s8Fm5~WrU*5~|5lSsf0yXtPhV9KTHU7jLX zC>LgA>*(_IYFpP?M%E64HR;hKtq}T~tQpPl6M+noR~xdd4u&y`{%KV^uJN~8N*8s{ zaEeuxFUX{hvet9)MZCGZUS@`3Qrc}X2}JO0`<7f34A6Y>8u&Oud;g*5c;RXx0b{|< zSHb7$jz~mQvB@_UtbQ^T08&58?YBG>rj`r?3QkzAb?D4ZyZp!2fSuY~uKV?no2Rsi zfl#0X=%;HAaHm^M0}lj{gy(}q@91d2oJrO9zK1HU`<(^4aQNyZ<8Vzy7)?O9R3ra) zVAv-8ZFi8>P)^PgLqme0s0;-_viXVNSFTE88Es^vod(3_J0^|czxm=A|B@K~>y!I8 zw~yt&?e;PLQ`+}`zTfvh?Ckwx-2eMO?7w7&Z2v3cLEt(+5Un6nQ&m^0Mkk|Dr9IwF z*3HfBg7vD`vNcV?u0_UVWAxK%FgzJ8zVl5wC)DKq+=Q3*sK9EVTfFC49x?Ujm|PCq zeWM$`png)j@9u$}9NP#qc>(2E2R>I0Oz{uJy6062BytvFkRd7?NilwScdStV7;lhS{JEFrxZL-5GT76560TB5%uI4H#tb{ z!I2o4PT8Z22PtY;j|()SQ64e@nKXwrk(<$3>hrm66~F4(q+U1;L_ExQBpR8W-n|hIrHriQUwO(uUXFe1UBV5|_9hkDK#J$Zi0B95Z}ocN8Px{0YN1pnq1PzOEp8 zP?FWErA&Xv>Gk%}d8TZ`Zsw9T8SF}R*&CPWAG@KnBQZR8sIMd%V-)^Ycl1E?l-VY0 zA7n53y?etJzt#}m2a~Za5GrRu7XWw(v1{6!mVXIdK(7is$G!+ExW*kZIQ)dyJIv%fwYMicB z>_kb=?=8{vY+$SADEasRJ-g1z*$jzt7bQdM8RY}#yEA5qU(TjpU;(O{6*;;w_h+d#l5b)xWeJD>3#Nf-s2 zKPg&K!%(wgl%q%IXBRu#et^%Ym-N@MPCwF8n>)KIn>)TP8%Ut6!eaq?FL?-Jts@VP zE}LhYG%GT5ZT&nQkYa_s+}BJVAB15SyhvH)cc$_7RuAw_%pvd)2A)dCJiLAL{-gTC})( z5(KYp+qP}%UE8*8+qP}nwryMQ+NhV=m7V|9>+8&_Rim2yMtiUi;+%-svCWXCd0SJ+ zmi&&;Rwcmp=C-4-{D0G#2q2jf?pWh)7wRM~>E_Ins?6e%!KOb~CWU|V8-9?%W#J@r zg2SNW?(C-%MB|Frh|fC+7n4{R6j5lab*Dq5$*-+A~l+|MNWm_y`@GEvV2nkyd> zO{f5P^E?2Kr5hmr-L^voVKMG`fd=c-w(Qqnb%%C9ufKViH?kN})Nz{h*R%JYw?e-9 z;6>hZGPuLH3s{PK%~GxU@=PZcV}uyqQiC;Ws^%wU&~HKWBmD z!Igr=T&11STzq|4oXU`2MY9>EJLdpru>KcQ`tdZbjx|{5Uyz`4u;+{3QO~FKbhBmA z2>CCPRxfG6cFxtCYal|O``riSI(NBG=YG904{crY9TSXl4O2D)Jd4lb!jzwRS3$8; z5{F>9)sSmv!rsg zUP*0Rfoj-QO6}!o%_*5NutRnN6JaCW*nx34s9w}TEbGv5^`s0nO|NY#45?Ebns%n` zN>f@VJ1ev1+MH=j6d_BI?nE%dh$n;3g?2qTMGX#zK78xt*QM}3SQ{lwe84`#Tv#&n zSSDjEH#S=Xq*+cCRl{3aezWKT^+ccC4EqUM0UUoon=$MMiM@?WSN`4bBy7@RPvoSKr3oo{-0il|7#)W{})FXIhp?d z&r<`d*`6vsa5&q&a%1%!R$h0 z>hi>RFtW%>?yWX$t3@B()Y?7r0qX+=iMd6Kcgh6tJHZu#Zeb(G%p^N_?r$*2<6E*d z<(^o50EMIL5S205SCQojEn+VCdZ|H;U`B$e)KhCuwhZ;yiJ1S?p8vu!{|~fa{coS) z|M$@1|AR08Z$*p$&E(I2;bQ5<*#FV8|6Q7;7vuPM{BP}3q!;7-cl_@?_hj-l_}nf*Ik4PT2CiaDUmnSQytT} zGHKDEY)_3BI4>3%AXSLyuq5IzZ7x%@yN21$^YAP0Ap0-h4!+RI+gY)Q3o( z-F!n_${zUsh2dBG^=rkwv1JX^GUS=~lj?%whfxaLivRs!2Y+B}zguNfJ8J&6MMg4~ zwv1h56=%V>gTEo5n@JyTf7@n~2!-_rWct$@mn;l8qgU`kL{}RJI+|l&eGccj+c9>b z^OLHf#SC9HSz9n7Q;g-QqWb_uWF1fVa$I#@CU`&8EN?%(e_bkH!(3<6MaiYTlIFsg zH2eGkvu$6xqu~HV2vAH&)7;Oy4!w%eN#x77a7$6H*??4bsLLV^-qJ(?Wdq39?guEd z6Tb?l|Ng1>MQi^44$7gtGL&`wJ!yD&O(^IoyI_^eH1&D--CJU1IF}p6;=1lh3@e^c zdRR{Ja+A=iyMzvaQTJl&cJirT1t&`o9jv_)gxt~NvUX$l;>R|_v@;A6ORG;R#j#dn z4OYdl`hEa>0fR9Hr>b@o;G->8z1?VHgI6G-wgVeeXrzi7N9eaHIjbr60X>378RTz) zU;t}l7l!F}T54roWKCkJz+)k?cXV0O!2$bl-m^95aO7QmCrg#36${F&2WL=xmNsnF zmql5b7S)1oMJUL^AD7C((A<&OdLxsqx(Nxoyou+Oh;Yd?`bQtVXEM+wams#&4U7OW zZn(u*5fDWVdWXx&j0!Rz??Tr;)V;3vA=Q8J@U{jfQ}-m~6+{SOblrX+8yVz3*Xc4G z=Q^=qZWp<+0oEEdn)n&wyo8@4c8eI$UmOat~lJgp0}(&jP`d;l)OuemrzSf`Y}O={`^gq z`rF)i2jYdU&A)iz6BJAgO@^n z0fi7b`)wrhsH|zT8i`M@A;Mb$BXO&_^ww`;;9w{oo2LUyr|;JxyCTbPS2gz?W1Zbp#T6O85=a%7we8sEddogyOOjoZfE%?&Lo0J5iVDB8(h6`QmNx&loCjniIfWwGpRU|&@m>sWh+ek9WU zW5puOG!=Q!OSk)TVOen;bt=kJvaBku+*_-xGhg2lKKX^+_H_wePI2rkaXYV+SR>*d zG|<{%yCJ8h-5Xr{}g%?Bg)F;8hAe?+6J32V9m0^qgEtBxnIOWVfFit zU8ukLy}r|vh4XW=9Vw{>#f=Gx41SF5=gy$^>Go4%>4Kmt zEP&b}4o2alvA8C&6d$pS-?Qw+M6zSNSs>uVeWdO`zcXvGd2zFdG8L|qGyAl#?hNgb z+VwXp=w2kvDu_M4RFSnQsC1yb4716432)F20dHX80arHg)U!%yRF(S*x0A>IH(UF3 z_Lh+Z5IfdWHNMa7^Br>L51{G}gol6+E>9o-3^vayDjaq9jXGcP$5aFQZY%8(s}AVj z{8?4SbIjV3#Rz{KVSiB94aj2zm2;Yp1c<_qwSAn3u|^-xi5Zr~WzlC=d>mzc;aE zeLNi^B=hsS;bKM&4U_7|qh#qyE@ZbcFa8Wr3{vd;oKe!9tkmiA*etaKbrlCj*AzG3 z{-I7D>IeBH{2$VrC2CIW?RbukV)+;%4rWA_A^@-`i~*EA(aac)Idzb~H?TZDm%R_k z)6lyE{2(|I+9t)sBiqlaNlck=jSxmpbUX(@J;?%cn<(j0cE+yTQ{7F6885$u{-Hps z9`qz`tGLVK&T@N(3TeqPYOy@u*`yO!#YrYeh=LrUosH;#Pd)VLI&`D|(ij_}t1=b0 zjDQ<_{nyTS=&3)vat`v=RnRz`Cx_MKfv*kH-r^x&P!@O_{B;n?mL)@p-S3(>eD zPk}*-^{HeDf^q~z9uD~`Y+{I8qzL{+lF~E-Mv+k5M;l=_-k*xqnEwE2XQE#quB%k{ zj25=O1|tB8Zx*s=q4{z{mSHmt*{P6gT5RZ;9=16*=SvB96`Hrn;1=dnlyMDDUK>Nt zVmSH`h{%k1)Il4vVNA-I*#O3&+OGKOeg`Bug_5H(8<=N~J`cm%5_XG~Hv{8luVV@x zdw046Z~g_L{j_<1ywBu;Uky(dy_&#iy6VRRq}mtUTs!^)_yBSAS9TRYt6A#WDbQ@^ zy};+*C!Tzkt4HK;2}qbzX4|Bi`|0+N@WX51B7>cxcKJYyJ}y=4O-$3rxkLgtP8+a? z?RA3Bh(D;v;Ui%39YC2wx=jjX%oiLoV;|&D^WHZsN+^$Mz=(C(9UPRmTmq5V>Z(hzNCEH_qh`!RZ-VIq=0gxVxupftU#GK-C8b6E*TRFEO)GXoa?HXymb)!qK2&fp!O|X*b+3G zP15lr#34TWlzPw`sWQkXU!r-d@jq^!>}}?Rn`7Gn!D#^L=}Luo;pCB0&jGrt>S~SC zlUA&gK<$&%M~4_Kr+@pE3KA5I(I8(H0_%_7h$1v}PF+$6q{r=>UB@49ZpUWoceYHokuxBf-{EN8 zVjv^95M~k!LsR3NOw;OG5cC^vNLipM`O}{;j2U*jqzMG=;N?~g%7h6YlW*<31Ff~D zoD?fuP|H3lz#!CB-WsR-whyfQIV>@I$~H8tlUq^b zQMLc{kMMuZM(|&pbmq@AG`wM2qH%@jJNzWMW1TDisqFt+VEX^^)l97ar^Lkg&jiBA z^j|m@`>Jd?AgYk^deh*KU^N00{K9!Pq3axQiV?9sfC}dx1r+BKWd)v}A_l z7t+hYaB{UEu7K{Q^r#@TcU93AwFt5p=1i2}^zQN0t^60wledRITOZ$t-fTgi$Y+%%p1i7yx!nZ>Fh^lXOhHtX?NY|f^+{dp2ex?@Zb zP%!pXVuD1R%U1S7#ok7RJ|ig#%XB)@pgKxiR=%_Z`1l^v0GN+9cb9q(%9`3?&C<6$We2(ew@<^kxW=)B zuE^G_06Op2vA5@KJ2pRl`ykld%)DZ3Fj`cHQCuM|lcYS%IQ0$Ako|PA%g?;Md&zy$ zBm`N%t1E&Coa}#wdvW&cZ1C+^GJZJJ9|N04CweYmIz^y!;^kC#k<;A2+qKpYEVQXT z&bu)@H&-#LKkW6F1>dPbD@&A`^4VKJ&JpKiVsTH`AK5e2jN{<1B7j**co$Q%xidR>QR^af@{M_anO>iCh!Zi92~xAF?*r{)uW!zZt^CK^_QMv-N_5-M-m1<5X_*P9L}ly#^49! z$f%H`r2l5D6PBNyM@0Dw-cF64Q^hK!N|1DR*QeOCRBfX-cd)S7l~G_F14tho_Eed* zmQ~kkNNL~kCE@F<_s^purVPagNcsZNp$DFc6PJM9sPCp2k#8!xIOD}(T`q9y8dbGN zrDS)g94KwFII3U^ zQ933CdS0uuH_XyVmkxwTJuFnq?CCS30-2vh%#QL-rsFsBU@dnNfqR*>OE1*LwS~WM zvU~+xC*o}RKqST*nTVxB9!i9*ZN5e7(0z+VPW0Yk)*#k=yFLPPrDbGO4pqriXT#zrzaN zhmascRzogP4VbQ*dr)LTKG^tJlbt5Q>sdX+VzxfZH{agJ=d{zcjyKdS`b^GV$0Sn3g~j2bDQd8uTx5E%`AkMR&pXu2^z?v%gN zO8ce)zZg+VP2Wh;mlHXqJLS|+;oTnNgz3eOvX^Lg{3Xt+KG^R71_S#O&1BZ?)WD8Q z5H2b40J|xb(|qe_3zJTQlC6pA-8DlhS zR;D2~ekn8iQ86id@1KHEYmc}|hxsT<7x*iu5}=;c_iOW$HLXG4>(oWy5V|GxywW*h z(a>z%F{Zrx$<%?jT5`mEW%r88=dyy*+d}pScvdsVPVt=XH>M?aO%iISJIDxaC0kT_ z{u>E(@IC}VxOLc5?2eP$6lw>QuqFdlVp>l6>Mow(g%fNvm^X2(n5A@?zH~}wvAORi z0Hyu*6X>Las^jkVUAARDgAW6=W$OIp`VzPeoIgWpf#}elVZD8%Z*A>Bg||C-6b8(= z;yue`oq8~V3{Ciy#v0`Qy#lKF*-PY&;rsQgkX&CRw$h160w{{-I1SE@u@);!u zn|b)DHB$r8;1380;hbq#_UW&ti|cXB58G{NSu%dj;brNM=U+>ux)d?zca7{O|Df~^ zuSgy$IlfN~q|z3W4*>Nl7^`Vs2ea6emWsalzk57meUtUAZqIZY8#lr`IUd8;To&a`_T>Pvt@^c6wRGTS#U)7TafPqC?$zn)o_od)YIFqz0@(W#C8M z0R&QgZEXpq#)g=J85jo5vgC%|&d&@;HAg-F1Tt9R$w_NxwFn(WIe%*@!PKEL+-&hW zou{59F4qPj)*Ow8$0i)6#s`dH*<7Q`r3h^ziI^Iy$SSC2gr>0zQBKGqN30}4U&2Y| zbJe-?>0i{xWfv+w@(Y58n$+1`|5iU}HW@0$$bj=G5VmW+6uQv=8(arg9aLyfs;nLX ztQ42CYq^QGxJK)imf(rdPyzXV{)^T_9|q>HK7r(Hynl|=l64UFk+n;@4{RKP#A(N{X6H+oZtYcddS~PXw)H0H=zFZtsH^p{zGI0c! z^Q~Bg^YSF)zX$TJ$1o2l`6npTxb&8q(=vil_T_fEWQTPeruG6d<#JwUyW;bNkjIWW zKjv65P?T4MxSTN+W*>A)j1JkY5HsUob_oG*?&Bc^O<*kO zu}hjk2%Xs(9jteEw5{nkwUZd%kn*|7I!^18pULU9ZWvD@RVU#nnMW%q^{_7$Z(4Tq zbI=55hwyI5KAz?6xQSbugR1$W53U<`!?m?q7K_uGW%Hg%%5VVObz~S?@AR2Bq3#-y z2ByUiI65^9$3n{(4opOPtgmvC^_~2O#VMc=Z8G)2&>016v=Kv)NEwX6-j-ZT!82Y`+l)Mi=$sn^2&qE5~bGV4r!dG4LuZ(++&(-Md zlNL>kH7x+^-#c$ps1I^~ZdGVs0G9IPgs56ZK8P#ODQ;M8U@eQlM`bw6kJ>2SW7 zD!&kI;Vy}^e>wKM=QE9JFV7ZyjpgpuKz!JtTwSWd^kQ`pMkei=Na|NYDsjpXm%;8? z<7bGA$G*@2{Lr5mhhjob+$z9C=uIMegOsPdm7ln30PAljwwifKf1b9UMt<9L6RQ=A z&c2cmof*#pEf_^n+xiBKl1~d-ASICkXgfIdIW*Pb-WZo$3y!+y3*_!L0;>5QI$BcC zpRm^*Ae|Jd@v*gfC+vm7yt~2-i2g9R*k7`sD*& z`=7ZLH8?ZS}x)H1dR`w+^WDCpZ^YHoP0v=hsh8aDtzhIZm}-na5i~o^L%7Ed%yB^ z`MtR=n(bUj!l<8->HAI~QA4#S{{FLf(td*FnMv6R+s04Iv+ZrhT2N$$!gU+V^uXAN zmjle+Z&SV_OK3z95cffQo{&*t?b6FSsTw5M+njM|NS=9ls=B7{S8j#VSVXdHUN)+k ztOr2H4>;IJFvL<>-_rDEHY4oIz&EJ;D0jwe4v>>y+&T&pFGlxbk7sjnRzs2oYNHO# z%_Pk~{Y^3P0uk+E$X*~Dc(JlXl6wZTnj;W-_?A9alYU9Ap!Eo<8Kr%^;OycY3SLs~ z!87LOHjtuFTEOBYtUiB_sh2G8$Nk0{QHSm6eNfThTAlS5{t$=AU8A_c0CP+C`MCZ5 zlRWsB@Tzq_B9YA(OgwGAlZ&_25n_Gkni-iFH8lR#6Xz57i3an?GA+zJzpID<`6){(R+L7K7k|uj9_FK``Fi?ZaJEf2T>(#5Z<-j%X2Z_AZr|)F zC+~5eW-zAj?hc$oI!t#65I>IRc7LQ}A*mHlzkZb&e{de>Xc5_J8D=T_j`=yKy6j>` zxjR8z`{7e9)Q?UE5!mF+Fg-=&L$jP=jeb|1ZB|R)0Xj|fOBaOBvloDnJnHHrpx}J3 zqoe!m8D!i4tQMQ)6maM=lwSNzN^Va3iJ-CAzg-F8=)^H-xLakQNk^F!$r!tbK6SHu$H!))k18 z{pNe59qL~u80Q*3AK^m>miZeq(QGdl-pefOQ+A1BGA08$+h z>fp!2D`vj*Q`jY(i9eJGBII`_u0FY+!gqsw9Qi~lh;sTb@Y|N(7{oJ#P6}H@y&~O^ z#te?Ov>{W;x2po(T%Ny;^dDc>n?R=|ZW8p~v~4XK%>dywUXQ_Ie-8hJ{FLZFjSY1~ z@EwHMR7Uh7>~-5`P`g_9OCVuq?691xhFVXVB+xl#4@=2Mwaa&Z2+=(hnp}ZWC?~Tq zDXWuZr}jR(*^S9Fw|n@jliY_|Wz#*wm= zlbqmxX!5fh{Zf|yA>e(f76+l{iiuBLn-Qtu9A=k0|00(;M85@u^>3Z{`gjBNB%VO+ z*`~geEYk&caM?~f;zw3W$y#+1ov4fgS|#KnqVc+5{mVF=+~)){*HlVNkqDbe?H z;%NzVe=fjHDp~_X3-Hyj;T+}XDH3vQRj=mpiW?C6*hOQ4Fan!wvlLmp3z_sIA!TD1 z8vXDb`UVtmJqk57;3GYtJolKbcB^Vrjjo_$9a#KS&r!@6z`05*`7btm{zhD$)eg~? z6FHe6m;K&Z3`U0TNAp@&^Su_Qv#0e838AB=UXXo2md;@?d`yWR z_~3OEPT*>JXh{R6LE6f^rYKtLt13+oh#)6J;jbJtM@j;4y{ejJSkVUl2~==5dckx|SEX5|y-rjb~&d?m;(}{d&!0m!w$&q+%Qeig5n3KlhUF?HG~J;@6dU2v?1m>kZceY)QmP#Q6Ehp7&p0b8mo2^S2tqj z_8d!>l5XCvY|JgpJ|=I;OTO(!mEKUFQM3M%O91nabpjUteWd$k;$12}1*kSo*Jn;F z<2+ADIY_t%(}_`Mt1%E8{sNfN>w!ztEOTXlg!2u_U)}M9+`350*mA2Hb2q#EEb)X# z)$DwZw(cx0Sq1xYrQdEAcuC_p50W`dj7XDQ4;(RPu$G*Z_q_r|HM*4&2^^vo5LN(1 z^PNQ&(X@at;AKxNCmL*8z9W9LM%#sASl#rat9tcq?!wQ!BK$tbJseLs_`RCwgAl2E zm1#1iM8bhry#Dpfy+eY!#fGRWn5-pvP8q-HANq5o*@DeiB0cJ9t8Xj5IsrL{o-`to z>vMvR&EBu`-CS!DHQ z6B0N%9O)pT4f~sJDf!!3EyLO8en-C(u-n4ow$S5uE(ea&baT7B-e^fLy2ztj!Oe_a zrEB86^F$&mUl7F#T|s>rOo|h$7bg~!QFpNpPJFU$6@p}pyyE0)4J=C_+AO=HhQC|< z%WwF9O3L~AP;|;BzAP4UC>*=qwsiLivpxfWk$0zBq)Q3b!bWjajJi`V+`28J$#t!b zv{}L$VhP!YM#o^f_IF(iLPDTbqKIwIeBZn7Ej*(lvV^mdvyb@Ij7A*;g=xM}1d&Y6 zkWv`oG2U1kJmm;u#kW5CrIg^oHlLa8Np?XfJBq)95vhW5B%-I{fU^oF#Kn{yj@b6C z*S3jqV1ZDd1Xn zP;OlTc~_-jOvsysqZn`?n+qAI@c$@tgiQ%+T1e5i{_MxN`!{YXKD#yU5ML{K&G#J) z&@~QOK&*zrZ)~Z_ zO4R>9-qyIuD${c+Z zUj>ojAol(pZr>13GEo89w(wYqw%(yvB+D4C2HM%mcvKS!5vw29+qw@1+KAw}-c7mh z#lemQKL3b=yOA>Q1eNt7q!6hhYmaOI60$RSGAy5Kc3)syH$wE0S0%J*CCuY#JEbF7 z#Qb8T@JBnK>LUKZ0IQ+Jo4<6NB$Oq1w!#&A5auj}-nWM#)mp4|E}HB`+FmIDvjm+;7y!kWk2 z`p4y34e3u3J}-^5RLpaX%B29IK+tf^aJr_PSJCk4`@YzXt&tu`9MXVECmtRFX$m%% zs1fuhUuD-k>$1eC&1Q5>8ZyG!ES`jjrlID!0jdxNN+homIinA>ZGb8Q#U6FHUogO$ z`-D#*<;Gd$z9I{{x#1>pl@!ci!Gdx5aU=(Ys^yqe5@>_VZ6AaV`TQ3ArQTTYHs9kmM5o+eH$Li!y{lxz;$8rSaJiq2IKJ%#qw(xt_^6>F>o2242w4XlTS5%DURBnZ z=26d1&3Ygrb`UMBmCCnk2WZU=R=FEF^N&d8ww3h;0jjk+lV4i_z?p?(u_DI^N_30$ zg5_;K4htkDZBXv9@8XR5v4Rh#2pP7#PO4)t&0)z8)x;#L3G0C6q%14l{}K>>Ev zc8Udk;2E6&Oh2bTgS54HsRP^ z$)h?qqA!?U2CbyimUSIqH$4Bym+(W5VrV>~o4?wOBN}7<{SqdpCJ-U8re3nq*U!JX zK;Nj2f8^;Fd$gM>h>#{E-x^4qf*(aueQQk_Cstow5IafR|tJ|@ejP!!Q+ds`5) zqgTnSyrQo#ZP|pp2+~w9)HaiW! zPRZs&Vt^ZPc#UaPsxdlDv1*is~( zQc5M~qbLgq8*dQPP0~(uDn@3Edxo#*F3pNM8P~QkfHP{fo*{;lvd`D^8OhBRo#Jm| zWtH||h>mf_VNFYZI#5nA-wNKxLf|}h5SAu{t__${HD$o(lHx%Idk)#6Er=8qR}(@_ zYuMVxz%t&jg>@Cm1t5WFUBXW4xiV5mf!OA3{%ewQf5s4ya)~La>5h zs*B(?;`~M!R69lt&yFXd8lwVY`Sb=LK}X~o6@;VH(`|s$5cJk{6#+^??NtPzsYnV8 z1DI7plv)HEa0&GsU5I;W08Gj^N7PH2?~6tg&E2Lo*gkJ;U3H~H&m1@iUX;cImpi*U zFhQ2o>7-nhGzwK%4o3>Z08xWEIE(XGYn4n)p{w1+U!ou*Kjxf$gNp3Xoj6$JxcsslW;jKP{M_KEADM$}G>DUC zJ@CQfL~5E~O^G?JE{zxc6MkIaJX%ZL_dLM)PXWCJg90c%li=sq2YoXOg1|4VrZ|oh zPpUjiVs&f(W?E-vS-lgyH?rXGqkG723VYI4DE9%e4mMM+O+8BLmFn0ZPW(TMt#8n1 zlyVYzEWrd*6p6NSINK_YFGxl;Y);U6@5Z>rLTOYK=-HJW_Ivx}GGAss9zEnhO} zAP>ZpWt$HbWG*^x-qo<-#>2vjazR$rmIv5jWek&_Qi=n%PsH@GCt9xf+7}*RD2}A( zJB9>SRi`(KtSd?3oOuLZ44}af%ZVn*>)F^Nf3^;-DPD88KG+CSL&tAkOGG9tQk-kt zn9!qb?yhI8;0`q?9@O}npeaahAl7`^&A=0%+aB=Bzj|%HC1VX|0Y&uI-S?mQ@h*fA zA`-q(WO)A$V8stGhnt*(v^Nb%!;{Om?AL_+N{B99lfGZ4j*9uA>FBOdL8ww&ZbiIK zp8(F3ZxezuDEbOsy;KqE@Rw*C?rYurvAXbZC9{Gzj&V(#_P78@lgQ84V2C{E&b#$8 z!yd;{bnVL+n+M;)Ycf-{OB$5fn{~O(j$aKR4eVVsY|NkOF&&7hpC#bg22lO_Ql@@$ zQh1de7N*#WG(hT;2Vj%T31?`s`4hgtS9dc<-%wHN8XR0~b^X?KOa}NVu!)xtOntMk z2At!W_(H z!0U~r-x687GWgSM{i`%f;yB8u?0%9~S5Iy5;^tzAv%xeippJ^*YWxV}vJR9jNx0YdKBgHv=a^fUPq zTlkR#wIM)GwFq!irDC53kV^$E#9trbImQc)!|YFBU&BLXl;M%n!i=$Hq;!bsov=-# zxUzsnpwskAk=TG+=n5RBgziwHB@`Otw2ykeyMWd{pN8|r9%D09BZhG3Wb}ywnJi_2 zbt0$$E09deU()59q=SlHCcKhd!S$XQS+Z(sw29~%`s|x)U4Hx-Y`o9ZT1j?9c_^-? zE>OobV#g!JE@@>I5>|_#Te?A>HtpmPOW2>R())MbqRVVM>^Aq^E1Y50>V2818Tl8w zL!lkE4{W^h3#fI9lBj3POdf$KlHV+_ctlt?8FWExi{3i`0SEp%diJE;KrDs!SlkXy zW2=Yh_FMu+{dJe?-7JscN=#b2sQS_7f@9h_{lD%%xNydttt#l!$pu?Z@1RK14{2RJ z{K4aofQYJcM^_Sc5oc9rNe!$jRL)@CVG>t)clmxSw?QNVpN%cNKyb3Zy2b9g2YTS$ zO3{tJm6gvCDwiz1r8k*Y3qvpBeO!s8tGjY`C;lpcsd!^%?T1}A#xLLanEO5e8WEer z84JC9HHg71yH&j|H~?GNOYA@Jb1M9Jrbv05X%&Y%w8q70%I09QL;(@g(Xtg$=7Lve~QPu@*_ zSr@>9+kfwrGI!Ty?jiQ*V&1CwrDuIU(yWurR6OdgHFL~P@|q%bv5l>Wu?OBiH`F^K$Oi%kPXN1q94y2zeDZ`4XLm% zs=T5^fF9}n&>pK=v*~q$%{!vc+EPp-f#G_feeh=w!%5juFrhe&DR^4X8F0K>ib=Mp zk|yUtsXe}N+2YJ%pZHmo8BOWNjn)SMher{VsnuZhV6*2x6_M2g$8cdqt-#b@gw1UdgA6=jAVlI|>A+OLayILt*4iIK6)+}V;;C>(!zTyWwYLAB z<|RrVhMJ}$mgv$u#_k%jxvBwG5E-+La$hzaqL!z2MP^+hew$@Bhj6W%@r%_Z>U4`2 z2HXS^L@&hl`HdmSw7gIjVXRmOL+6}!0NI~(s-nrDd=X{R8eoc~IKlb8aHf+!~pwT!0wRa2r_Gjy%h5dhFRI%ya)zS4xQCsQo97Q8LK zWQwhW`7zH2p6AgfN)zQ@KXgiRT`I@$$bER`)K}KC2Id+z%S=dC5H$%IOQ25NHmiy5 z>A^NVEwIlJ+N{Ul5gkSGD6#>duEg|tYR;tf0TOqqsE}&B4=fLOgQSdboKl;Vo~xF2 zw~>CA5AM-_zY^ri-ArVTjpURDUMk=$hs;K9iKu`2`0ZDBq98K-s^=32^bE0pYz15t zaKN@2$k%hrcXzx!>umla+CkA$DsPS7Q7O)NB-iAtwW`$t6G*|%Nx8DJEi|0TCJuV~ z;hriOvr<629FDKoza^X4vy%IS6NG*J%XDGSZY-U-q{-6TCfMVaa{Lhl=1O0MFnnPA$%LkHw7gn zl9?B`HV`QorsyDc1&KdPuHo3>lRRdGoPZd-Wv)~eBEC&Ju$qf1eVW^-ev$6U5@4t? zK*+g!Jej@=pOF|To_?{dzo@V$v@le5t2eA+4!^n-x5BQEQ?d*}Up=M@njX_1Pht2u zf@x(X0i+|1{mQ;S!Ta5_FVN!Mf_Miq5x-A4>K7yKPP(kZzGRrZ2-)VjmTqt%PV+LJ zeHF{}Wp2iWrIq={O+asNPqFx5GQgHeL7FxDs5{M%hd;#Ue_hvo$icVm3{v#h8Ez)db5HU z)!F{Wp(e6nn)qf=qb-5ut$?LEG|@}flDJM`#+$Vi!)`+xazLRUI#+@9|BBy*ofl|D z2Ts>ti`A_D+Y1cd`I!4mqDk9zHu^+zzNDv>?Ndt{=ypa*E8TqC-y5JQ7jC_8@p;&2 z>{UC&Z8!fldlX@E`hZ05))bdv)!xoI_3XfUU7)uV*nhB8_3kubU5SN(i&J}=J69M@ zi|zZ)S!@d>Y7$g?OLw|VrtHgu4HQ?Cc`^Cp;8dPcL{(vuUe};Xp_55|%HcZA9TNN7 zLNB!-D0f~6$c%qLNJR8Uc;md8%`$fXdI~}%8KeBQ@kSHLCMb@4+^d*lSK_xzmr(H0 z*Td9iuh@fEn4m|Q=%V==;iyC*drHn<0+CEi;j^d9V7c9W4EmN!e$I}6VN}gF{2k<{ zBdgTMYH`G;yQu!Vfpp$$>824L3GAb4$)xD@1m`fd zHH@a6x;-9@D5O_eT~_{%`X5cSw4G6aMxQczq^v-T72rd#bYrW?igmIHK`;Fn%&|zV zq-POgQxv9~QL-`qDsRGT#Uu7#Cyw(bnKf960>D`&##$M z5hGxWJj};ifsWBnX!hI@wQm~{kiC$WL9f_BTNLWizTYmKE1u*1834u z*=HLItbxJ587Xw7>P?74`(`r-}_J3S2P(rM+3f2>*J4D(j@vy)|l6W%7QPbBo4k|xOGWU)Gn3QKR! z?;cUz``VRdi{LeAl|(|l^yNK#I7jJ?xYkB}WzZL^{nMn$JS$+w(w=OpeWD=t(5)Y1 zpc%iBhH`HkvVrQl}8mtZoocrz0uZlCHfk6 zUAQDy)Fi1CN_DRIRG-w9xb#~1c@xDJRN9U6wpn92$Xf%rQzpUCzc{JZF(b=0f>5rRC|6Q8%f>Br<6Y z2Ik^nG(@^qj&gePRN(*q6|vRC*m^}olAr`6Z=Y7PY(#(++E?~h>qD5`H-K%zWk{Dh=PpyGpT5J7xP`= zcfwK3sm9Lq67YvapRxZq%$*W&*n8t!<}shnE#GE#sotbXByd!|xEJ(&_Ad<%03bPy zu0RU6{K#Ou&$%5fnBGM;nnoMwn;wzT@ZCu8m5TREB8M~cWJnX)2MpCAam7Ko9VF+; zS8}aLbqO3sh4$`sT%(*pAge!;g`8!(pB$@nCIJ4XF&N#+^A{qWUi_L&RavGooU!g6 z1KeG}28U^o-=Ioqi~CJF(fT(fAt|1m=;W*F9inAM&(#McpBx6@_fZ2#f?Z;K7o`^& zGziSx;cW2B2Y;5mB6OwVh4%*~1R29|uwES0vzlIS4KfYA6_#|d@vJpZu7&Bqo>_(C zMvAj8xFs6q_4>eghA+^wMIYUR_w!g_))DFxxExPCUfzZee8mX*yUG+aOCYj6W{&Ls zg35l0zF#K$QMwpDjlTchoc!b7Y;S?9=aM_JL_*ifnQ_dmp1t2FN_(k zrPC+XszuyvP_nX@-S5%o6zF)9#f@hk|I_)pg%(Cqu?B$}cP7m81_D2bvr)od>qCA? zp&n8bg%Nv<&w1?c3HeWfrgh#sHiM7E8OmbCAqEg{l!soQ-I&mvDJ@O=L=-w56EMl% zg*d*9ai$J8404~C6l%C`!qrN|=o>lrIg6^s}tH$NpSCC}{rIuni_BDx+=Z$4o z_qQ0IVwxBsAa(*2o@QJ!QC7beOhItP0M+Ap%^I0PNwyF&v`ifRaxnIsR( z-OG%P60Q543a(R^9rAGCd}7rp?--0v7{cLhnWV{@5PT^>&?U<}d;?%R)D1y^>RLI6 zNp4oBqAlr}KRF{ovP4*n+{}yys?EH$bxMAt(J&w3T5M^#)SkT6bm+&5!fphh{hRL{ zDVh1!#oe|D$B_$yyd{MgEI;W*A>)Kizr!u$l%ZXyE8)RZ;gU`IAJ?C~MKA|&qqdPp zlz}W%9GLEV&VCMF{XJVoUu}~s#Dt@5j3lTe2FhQ+y5$ADtY3awVfds>DESIlOJ1+w z)#G{s*ercb+SZ$6a0B8kieEbMJ^LwPdyv%PAkd*`@S?eiYAr@OZmMRM1dna%c9Fcl zlnSoyPm0VIwo@84HdV}0DRC+*%SmMz$f~h8jbt6y-@f=B(_|K_NeWKBVK9S$XVGxuZgbEP{+%QwvyG86L1cymziXU8_ekdqV-HnL;1x<#3 zddkWFu1k~``UWq`#q=KW(RUYY{t_;85XD*u4QCB@a~){L=zBceSpD%@-hd5vpGQC( z*_B6t#(laC5F|Jiw@P=5SAp&dZel8g+=5Soo}>4_N>8!k5s|{lP_tXQ3MsZ-e^a+8 zwSe-6#-4J3`*(K$s}+Xf`p)X$YLpp#ihi}q7N!H`GWjgk59s3BB2_cTQdV3x5J3!7`;?0C znaVT9i7ql(A^3LD@%-(NQh`?XnriY;iw~IE)YHuhSP2tG*XX1&YSWhB zR^*7|&m8NnVEc6+F!pGwuzWriptt9Ht-+D8oL?U`>+Xw=xgwL-aclwdA)a2Lm+Yrt zX|F9CM@&;HzKG7gFcn^VYQ$@Xb;p2s2%*KmwZGO}++2gyII&SPqgOuj7r2{> zQi@wBZ5XVd1N?p^&DgY-GojPo${C)LfamF$1*k+zYA%H(oe-ru+!P%gmLp2Df%p?z z+M(UA^VL2D*UVtp|T&WBx- zU;(o^z*tNwnyqOe{o)de=m~iwu$=*V3_l*4vev&SiMJ*z>dq9Kv`IeQ536~2q@?N& zuv9DLrVOW!1pW~ltNofAdv~kkyl{BObSV#~D>l9%HLr?0!)e@atU_7O)2j~m?56c} zus?_{QTsZL5DJToD8<9j!Vt1soqAP<9 zEq(!y;G9CF$Lr}$IHv2%#r^-m-8(qv+O>J2v2EM7ZQDDxZ9Cbqvt!$~lO5Z(Z6{}U zfAdYhRp;%V`D&(4RiFRhxmVS*)^+`upvQ~{4oJF8-7}YG(jxQ01=RB{kH1B~8EhuH zDN80}g5C9P%n1Q-LbObtPWOxD3p_V6M1rniIqs1#CMgVU925>)xrAtS(G|V2>)A?T z@uODCk8JM-Rr{bw6$ZMpSuWAjO4eAB{O_yMRBXN5OB8g2Jkk-R{!UH;V5UO-= z(X{4lpOPvp+}ptF3g7tyzFF)r-n{Ua3z}FM9th_~bC%2<1ORkNc$R4cA~L6#@r9CF zIO+z-)So`xJ!2qfJhpP-KP_v``6ez+vux5SzXvdahl~zS-AI=y5ih*0m&H*L(@Wd) zIl7oupDXY0cx5Tb<|=a4Ds$ZAl}GOFH-Lo?ysx)tfJLE4Q@bEkeM@M74eaB z9cAWW(nFXA4(U3ug8C3mqa`Q*?(qIC!RJ3eynh5=a4`HczK@OL--7rV|C9K>u6Juc z__J;7DaCWQlglzwkLs%tNXLQ?hneez9mqV&1$r;&hY0IK?XY&S~avd zF-zE~8+SYv7O{OhVoXfe5lW~@nMHM-DhUPOjU-yn$GkfwM)(wi6@gODpOk~@ksOen@vA4Q$B`u7b$oBJgV}%Dc5{g1x%!j%vqh@JSXG?+-Fgo&0Z~aBhgsaQ|pm@-+;|y z9J^d z+-};E)QL4!BtR9*Q>$oCMLJ9dgM4|YPDjLvJk>YE%&x#Xi3v3Ymx(&_Xv`cvvVAL) z=G2&3N<@(V-q;>H?=^EGDW9~p(HL2!b>(CqR{%ehauibN@f}>V@XE8O-0w06gwBlR znnn$Vo7D`?c)cV1KHpsj)&9bU1qj`Ody}-?8;L+{tJGm^{}$r$HNLb<1Q3p{OXnPC zfCNMVcF>MOsfM(6R>zTc<~;I>x3QGhTCLxF_>uI-Zb0CnXFbLdGtch`4b?tmmOH?e z5C`dO9U{Leo?16d;Lfa-n@y7*8wK()&(;P2m{d^@QI1o3Uj?G|Dqr26`s2dvLD*p! zwy}2CK-z6J(2py#LujHR58-;wBb;T%f2hD&$+ndTt!yt_Ddr$B1aFofvzwRSU8?4W zc*XeV6-wt~XAQ`s1Mt|D0u@q5Gls~Y<_YBI3BY|$y;gdf_f&#v#BlVT9soEd(GPX! zFjz7a{@gLvt|I=zC*D?^8JVdUE|T!th%3GY5J_HFd+kQ5viag3PD|&F0i|-1e(6${ zx2i&=g$+0J_7<+?1H4&y$|wukj8;_CNb{XEJDx|(QIew{SGLP(|~Fdhh3RrH!2 zyLsLS)SlZ|#eR~qjE@;9u;$m@H7>b&yQS9Aqo1o6q!kxwx^j}}EKtDpO~cUE3Q=iE zN945)(|?@grwLzWYl)s1{XiiVWhjd_Gd?r_9O6TBkWKfnK12j;qS!>ssUf{Tt*C%~ zL(^sp-vJTsRq@qHw?US^nIoDuq=6j{U{XlVYKmvxGq?^RU`WE(lrI}sD z7B9}+~XqitxJUDg%)LB=Qf=>NU!w`JNEfyi8YJ5ug}yQy{7M9Qn;RR+RZ>Xea@>U~lYyqZsIvxBv=0rBrEX8B$+#}Mx7EMy`pQD>TqcikfR>6QPY01Q zI9pBX?qiuU?ONXe-n0c$D=NXPZstfCMw&oWpR(y#1q6M8y8|?JQO|>vHzC>7wm+z0 z{A*a(b)ROn;nkzKRz0f&2Qu?v*$~8G;ppcpcKj)LYR{hkZ!M^)$f5znJLI!047W0Z zsyn7?O_E|qT-zE;3}wwA0??f8H^-#^ro))RpHvCbc~dHE@oD8`n_<+ zZ^wzQ@sljijMoaBbw_1aJS5({O~24MNy9ct0OrSURjUq9fs)xz;hVYbW)!8PT*~&u zpBQ~%(-%EDGe5TtmCn0yU)}@~7{CR0WyAm=z9XkzgRQV!zl&pj4cx!~+68D=mX`4w z%qJO1ff>f2sq2>6aXF^{EI)e(#%FT$aS~BJ z&v8JPkpdTxW}3;FCY+l^icPUdPCMLUXi)#-3owX|=Ue)s#0*QWB~6ZY=buqQfdTaw zO#-_F6K(lTzf>gbPwBsw*$+K?2ix(O2Da0II)vtr;E#0Hvq4!9K*{@x8M`4=HOxiq zDx#zv4Q{8#f_y&mne|kW@FV6e0?;-%39iA!%|1h9$#jO#qi*63h*_{4VznL;im_ce z3W5Rq8?Sn!bG}Q$4i6=%E$|!KdK9rL2MX(>L)EGPk(9cs9gy+nL1USt@uXF_6_thc z?qK_Hp!SMna%7iKA9m@SrUCxIeUmYA95u|e1#qDC6YYy6d&DXPU%%HIBOe4luQmXv zRR%`j1RY=-*S#|W(_J@K|3X4!imLDYr%QbieQOszw?U*_;u)GfuaQeyBdWN+^Us%2 zayp*Q=bCV_5_}ojzys2G7v@YeFrVB4KK6)Mn$H z>3j=j5)G7k;RiSMO8%X%P$S&>9^mc!q=*=Z?q>I3zfa2od^B~iI%q)u`C@^~dz6o7kp$QFpMVQm__FRrs=)1xGCc%{ur;lVx`Zv>*eWbaj7!p zQ67LKCg9>pad!b}+S>9V%EXH8)g% zOd>_oHUrCYUo<>=G$l!3Z>h=GZqb*XQSnsfZwnGeyN<55G>w;oaY3Hyyp72AhNN@fFL0DVH9%s|yK|9~ zuf=HaH4!g~=4#LUrl`;Z66bOTj=p9FVF~kx10OJ%A%>G-Dr-s)0(6FseLiaPgcCG9 zt7qJw4(ra<7lFEyycImt3DY>iEttje3@D_vs>fR1l-8T4;d;?-8=vRg-SyJpS zMR!_unTD#64E0nfWY#PqZOJt7T0#=AtuIpg;&{(%__|cYSJNnKwx7iNln`Yne#w`K zIK<1vid;c_pGmpgb)WY{SmX*xujQP-|A<7>a%N@$FtoECAD3B*9e-rV{fxXf66-4cOpjFN$1aNRKmhZ7VA29E@Is;w%<8U#GZQ11(&^I?Y7HVqjKqO`ehERF=l> z4lvRx2`r4nRev-R!U+VdN=9bN@x2@MhI(mn6wHVzP-pptK_nJt+HL4Y`+B9nlS0OW ze&C$lqI3$|tCs%=baI?AWW!&ekGpg)Ij*U_uoOq3;s*UFFg|QFZ#3JwPm6q8SUN0@ zYWgAu=TiOr^<;}=!m2Z&44qlx6_&2zcBK{CQj$Mc`?c0|c|V1^loYR!^BhVOL`4tikRr8K|6zsD7AWcb>rKd@Oy!Yp#HZ(rf$_O3uSsqYDuEmDH{JNKvG zgIpL9sC!8TtYqKa!+HRfL)j%2hwGUdW*ltuOGr8`Oa2XRB@WT7oMuN7#kFOX-+))N zJu;(LoGSLWA=FEKN+AvHc4-q8dTu2$gxx}vNi*jO;RjcmhHAIPxaUiFR^X-9gAN@% zsb+kKeXC-5kg3?__dPmQM(0WIjbv%yTEN^A2z^qBaA!$U#uT!!>>al2h`-ld01>HW z?OGl4N{V7T>=q{j25E@PT^pnBO!E#|-o-sJaENE=+jygg(j9$Hqw?5OXHYTaELmwH zi9t`bS`d&${@ur)S!@x=C7vT7jojd2=d9jGa~@JbI~Q^La$@q0 zwT&@?iDUgO+;2O@j*JaTq=~9%oqcW9HAsV%g?r36@fajQy|uAA zzq+PsOxsolX4$o+;pkKZA*`7%A;!Ll7e)d0UfL5}cf7n2nRM;?)Rf(+X(1%BD7+rN zVg>5p@#J;PjEueVfmQ9%z&Z_&aPjpOX5~I9foi1-1Io$6Z)gehpahWPH&P1SZRl2a z-f7z0Nf5WU{9mr9DM+FCuFDWW^TbCOJv@SF%O__NQTR>ieL8fCEsKP zosp=k427oApmfYD5H-F7!?xmOB`Nb zCzlPB>k3QJ6)wL^g`CV~)AV(8+gm7X^O^h&PD*Olswk2qex|c}^l2i_Ok3ya7rF%u z3eQ%@dS{x+tL3f(nXu1m`H3HbH<;wLtFMo=*x^QxmWoW_FggP*rYP4vt78ZhZYr+9 zY^eyO^!Y(~#=sQZk!tcuiOLv=Iw=>fjdPHo4F4V$fTawZMQzI>NOs*jDXFf5uH|Kc z_|G`BG49iVhU)?}I z7}@?kvGQLk%VYX)*bc-*z{vTJpDp&kh^+iSS?K=v(tg+&{(`z4T1*Vzvh=OZW|oh{ z&B7BzU#B>%)72T94*R}|Elo()Nb(Jb0$e{-UP~5^f<4mdvPod&pIy#1*3-ayAO2{m zb6!7PK5+u{cqWj4c^=-`gND9=j-GKMw!N4}JNi~5Gkao?19Eah^Y<|rZ|ZfZfX+qk zD+b;lYAI!#x^)1ys3Sa5zg?;`p3?i;`Pzxu4Btb1s51t^$k@={21au_rq!~f)$?|K@amEcVLtOrgh2h-zxtSp=>o^Z zX4n&&TjTY3aSl#owB4HzB$J)vIiV~C-q)wKf{ORhcP~gSWLcr#|LoYc1=KQ`;|XAL zDASdO0PNal&S`CDcdr?Jj9vW70fi@W3(EG9&+khEn8Y7flFvq?JN>!iRym4tKv(}G zi1SI5S*`qxYQQgqrJm@T!IesM#Ru{`S>aRuk4HiZpvAOdPOr8byR!3#BTqjKr3Fj< z=PXHjr%p?76tssi-sxyQd**Rh&5uS*EJ2%cI zDed{kXex*DIB>!*uoZDXaRs~kre%H1lx@X{uL=-pMuj1B0RE&B7)6Kl%~;@M$3Uz5 zwwDOxBZg=RZOb5JzFsipGo9q!5_!r4-2QbtQ663Fg|P(o+Yzumb&6G606CWAXx*w zN=Wj$5sR(pxW~GXvU<#B=8v;=p&JY&fIntaM_ZhZlN*J$Kf}}&B;&lIljHXyiKOCS zYKo|IEwz4!w|{Kns(EtFe#;yRrIl9tdsL|p!^gMa+75nxt?xZluNBsO?*)_=E;31f zkHv;jhl^BVlnCf}@9CJxZzBrdEWF^}xs`q%g~ur_e?#NT(kkg=oml{`dA(%*(`aD&Z8 z@j5z9mKxE9-l`p#K(Xm8@^tf`9s$zlCpt6mHd%YUv}5kB;C`sFOuJ$q=nq>OXQ2%l z<34dSK3DC-3*S3``cbDySBQ$|aP>3vqd9g317oUZ(_%*JLLXa0`bfj| z!=y<{?#CI_L2_=Oh7SuTuwUJ`t1;Aa5w9b!X$j+eM9&vqg2ZoGREbUmkv;V3EG~LO z96!TPWFdJVvSA|5KrDza|D|Coe%3Nf!rjJ+NWtH()Ev0fs;LhDC_qA8ivloJpn9%>QzHJ zGZ7Znju;$R>NNf){^O^tR+WKcaH`_n@ZTBhLRPWe)#-8vi*l_CE|( zjEs!T|AAQB&z%C+RZnHlHfmZar>>$v<3ZBVcP({1KJ%OeDD$uvUS9l`jOm|1#*J~> z7E~}&QCdTO$bjM*%m$F12j!(Y>d@~nZ;9zV*5JH{JKdDU=Mk@_ zOkjuTH=+IEy6Gw}P)FVe{DI(+(*@TVxGRrlS5gPrF{rt^{G z4#!hL!Y7aFR$^u03kZljm^1L6Y$XqV!?fOs1(<;g7V}#m$IpB6g$zT$$~Qj0`>+u< z-4K46l(!d=Mqe5d^~nL%uk)s~Me1Z#24_*08lwpN!L)d5-5ed~CxO_4`SkhOkGHAi zvrtj@na$V5JPEuy3EOQakmfqPX|OjJ7NS}~8!Uu#Xp|ZxD0Lo`p>NS?^?Au)O-x;X z61rQJ)k_)_3}@bsb5>@zi(^lX!U|q-LEGUW16cz9qPPyRJHf?Ei5kec#NS~(O;ETU zJp zHB)zr4m@1*tQ(N{{9=-iq>8?rK5QnKj*2CvSP0hIh8vU>EKmR{GulKfedUJF ztk71tVVJ`<@km@WBN9#T{=?cLcBjp;DK^13)EY0m&F0NiU5S^K4H5KrV-#Q<@|(M2 z*4sqkV52A-HmQ2aLsQ8P@?yw(K%1cn3h|7S?i_Exsn`jd+whJAsa@$gN?O zlx++K#)W@8@ukhD&?R977T>>m2O$nc;dqWj8-&n7VoRXb*9*BuEa8LJScmEIJhE*o zK;dp2^4d}k6y}}9$eCb^O`LcUiJ_1qlQEEDJDCV%=tia|0 zpEr;F z@83M;wa@1)4CY(0l#VHx#VNA9^I{v%S8erqi2*ZNQIbCTLQcSH$&*@f*rl9DvLn=ea4{PB&ffOpCA5a${OVntBuwRRIXBYF>d$y?7hDy)6K$l--Ey_eykC~6Nau>0we z82QO54*lmMybu$!%2ADaz_(^YOzy9FgISw${JBktMa>VEoGBkp4KlXg=9`)Jc znV!88AS?ng05cZN^Hx>ZL&MUx_P+|HMe@UQijp{>ffa+GMPhntWK@$(9^&xOTLX3s zY~Px)$f!`@i+%L&F9I_1y|n;)ceuQd<%0h1#{;$O* z|8$pgF#P3Bt?;1Idp8C11fnB{fCp{Rk=)4|#g`+!JxI2?Wk^bfZH=tzMfy0Zf zaa(O%%;G##S_7hK>SAfH923H09R(SuYij4QR88{d5KKF#;7N!hf>T^QgAv5&pjwMS z10wvm8WCAc5x()=zlV^yYP@hkXXfRmu2j}0&BD}1oTf!NJuiPwQ*+RhgxxKDG&CO& zcs5jOkqO$j6!bqIAGH}MX$M~(97cr^SR2Al>FBp>Hm>rAF5>e=3~?fTOY~_b0#r6x zytJps)A5-I+^`Bd@$Byj;dp%qev-dLYT@1efEl_KK^%B0MbjmhxJ__Rj_vh@6TrWF zV!x@CMxZVA4e(}}s<|@h{0s=Wq(_TSWkn@ovg5&7!&^&rgL%Zu<^dfY)ntz};eUjz z5tCxRXAJkqS!JO6VD(4^R9~9m6%FqMwBRZJ%qEsHG_gKuf&V)O`dcLOuA(QYH zeAZ4T*X!^8CK&^-4_h-2Sk;ZBKXc>RK=bVWWnEEbXSSP=eMyScj8VL zLx;@k>BhNjT$zHK)Rr(A!^^Mh1uPgLakdNasxZg0mxQUf=8C~W@3)CgPASraLpk32 z0=3-4Mu%(1td>>dWIW@Sr^JE&jaed5zLF>Oz+Wo92TCMKRWK5CCWv z8j=7*Lwuc-Yyn=4d~E^6+8~2zI=~tl*w=t!nZ5tD9(tqEjL07KjX_t1R(8R+Mj1&( z_{_2RJc3mE<;7^GOVc?4&Il@heZ+_g>sA!tEWieDhb+Ac%5=qwM}mk83Lfp6k6_EA z0WwyxHu6CyL{-!PY0-?My7Ejx78JZw^Td~c*jj!~U-0Wya_Ln+;JW*}{yqCX(HR(I z1)x_tD!P{;W=q4DlvR~&GIOP1k+s*YY+4tdj3|x)zl^VwxM0aVm8_(1T79S7E$O_wAwsgoZ%CKxE4#V zTR#LB9lP+jOL@^`(dT|j;*0l{+h#N}1Ypdd7)RGVn9#V>kY+K_EU78Dk6Ml4enjz# z!rlRWJ+AtMBE_M#XLuuFo$$g`zzVWNPy+2Na`H4!wQi>=5hF3d_rTgnXsV6{A3855 zg*7y{jw!M`m{s73hd~j4(astQAYkG>YVw2dE=nDl<>uS!$&zQQ5`hc*QMtQP?n zW3elW#aq$rI$gBOlPTS^Tb?XzKq6Ci;_K-#IHUHbZa1 z;q3hD8PYrO70*aVbiv<-DUSi=#Uj+T%}{j$Bx-= z5B4AfW%BmE7BihaJhfF9Sw^>?S^uS7JJ3BGbjaTAayt8J=1*75sOO9>=~m`LF{!}% zjbLVE|B>Rk{oA|M%$`N3K`CN&YUQBgkeejYsjWzYdMRCBRJP8oFo{G)|29Bt2E4_) z?6V=wWxXI4H3`je5e}T1oCj_*xDj6!XgILwQi1g=WX@l1CG6iu#W-~hyH#yBfXWB??MTPIwOd6pm;`yJ}CYAfkWUmOZ z_f6xSXY&MpVbH>2I7M_qn6308wGCveXuiFx7U3&vWSuw{vy}m_5}VT`G!w#NTqRF8 zoaJ!8cEtYW$}b{#JV+q!vEd|v^{5aIK=R9WINz@O{GOxS&baO~dm9-`u^;@Q^(%Q> znnkqLvfFxjV)9j&a;nocz!NMa;fmfTIBEg5ZSnk@gu89qsfhZdJ2r#XyLj8mOP-uR z;CBl5uD6IT!j|$al{3APkfV~$+^33G1NsyK)Fu<+v2cK9h^Z}OEMyYOe~qc;;5pn# zwt4Iu+=}c;Md=#$jF*0fM(%>tllE^F?uUVIH*pSl#G0UqNE=BD4pY@pjW;jf`m)Ia z+JcMc;$%{uLiiECcpp84XMu(r@srw=#b7cV#J)r7QXINh?OVhP-XzDK>(*O_${-n# zI-MoQcJBD(`oRf#jYw|LD8NstiF_D46jBYeA+@ukO5A?sw?~2Rxrjx&@BGOD5^5Nm zCnLeM&w_XL_9*~BWL67ztQWJ~L6`}oIKMJ*L1MK~Y{qYuSJq{!G4Ex<6B-&K22CfN zFq83LkU?P}E=e0H9~` zW#c9%FOmxMQOWNT?>^N6zNg_eqTCr_&}tcSV#Rl(po9kqvuT_wW|WN8VsiR@dC^MQ6eVQaji2Y3Dycqbax+B7-aCcN8N(Q?pT^oB>; zLdcTo^1`bb1RaO{C_0JYB^rpg4%ax+`Z!p)Mt~-V?%%5nu6*N*;YtU@T{jn3#-f8A zFMt&=Dl(upn!e9#s*&87E^kX2L&E$p4@wG|sY}N*?)V@&uEns7+#2i^c5(T`LOPu9 zWN9z=Iyd}btZLG%??7^1K8Rd{z^wc_EfZRrsO1Cj4A#0>;4qOK)$ED*Eil3Zh&bz^ODmF z9V6!4S_e}dD;v;ubqKc{F*PWsL$OYc-d+JauHVAO9)``1oHRse_0SxIb}pTYgF|YY z$XN3$c|`j|8CdvhOyl`PI{)gamm3aLZpdSlpTx0QLi*Z>Vz*Ls_t9A*bQ)R4enolp zB>x4Bw0~g6z+u>7(E;(u%3?SdRjg|HL|rDpq0x8fSVFfT7js@z5`mh^ z`T@1%Rd~8un62I2LB}0rSVsyAtK)tDWYka@}1ymAj(Y>=;>QDTznp!zj zi^71LZXEd?pN!DtSxf4DFS6Nl#*Pr$RzES80iS%zW2I?qt(}Jr;uaQs9cHYTIXPQy zAhj$rd&M7;NPVQ4a3ZR5|EXk-kzFF_5IdEL*%Or`g#Z{(O4TY6f*!}O0;yq z2t7kjdFStTj=xA#|0lxt50dX+Swa4LD^>q5*R?YLZ)s8)IXVB*q=#xpSxBl@y7fC+ z@DMNFQ!-}dhj#T^Ir_=4Am93^{1qm$H54dOd$;mC9l9S|i~Ai_lB7p&Z0sy`G=4a~gc*POPNUy%ulU|fmkEsd05^o`Drgujru0b*T@k&b>0bPflkdf`6&F?& z5EpnQ3kpjy3DY&lDFVl=tbwj;8v#!mB0JBEwOR(A&!Z9O3%7ba8uFNv(Ws>XM)OkT zhcdj-UJkMhPJ9GfTNqvy-F%B;SK&WJO`4QL%t4JDTXd!Ju5la_ADF?yLXW}TIgxPi zOve02u=R8;JwlF-+{MNm1VnD~Qn|}Sq&C?VsiBQ_l4}MVZ^eP9f~mGwgWo~(h$Hy7Eqa@Li4w&;?CCq@BPlsT%BZ&!5+eq!&e?uGqh#xX=~Dr_q-) z&kj$84qxtbs4?)=6q(wLs2I%J&dmI+xPdCt8b|uCXj3VsYsCr=^WW5xFMppP49n#O z9sazJi=8aI#nrl?^~qsT&N**68(MS$?Y#L3&JM>X!&schw)a|maS+$R*xoGH)R~RL zzJ%)ES^;$V&e7tM1I!cFr82!gz6bP^QW0xFke`J16io2Z^G62t;JP~W7~iARgD#9z z^Xw4uWT81O@^OYGYUch|XQ*MKLl}Cb8fsqRA}TG#4*kT{aa0>$L9x0T zKG@4zyeCy89HgEuG+X`oF8vl#&Cf`>@*-+IwJFcweOiP|-0_gy0}2x3WpjkBhl!JO zM8?R`b1>Ywz6WzsU*h})iA;2+g(bV#wAuz`E|^A8impRo9P!K}vDKY#dSZ3c_zS`Y zDu>@~>0s%59U>`I78Mc(CFh7v3o-d>`MgM(m+YJ!ZM6dG{>Jq@I?o)YZto`qqa_KiF)0^#cT}_bOG94T%6e8hu=!7%ej}y| z@lljuv~$V_Vs6;$lC+YuxC@3rgxtqndwiQyB)v%bkxw6z-UrY5L(}-b8rDj1oq66| z)ou~^XisnPFcR3>@~34Uu26xcg0}d{Uksh=u@mFY_k$?pOqS(H+WdzYkhyTnN#ACl zC8@Szh7R@}p{*DIXuxPYMplDPrhSIYz$`F@(>rr;rmBLE4cdg(;um8bcfVMr5mK>M zVup4iX>kdl8bt5-dtAw&M*+)Xu-bC8%`js*zAmZ*Lm_5f{2Sp)TCSuKGD=MM0{DMH zxQf&}8?ds`G&Qu_>;{`WmK=d9=TE@vzKn-oE$*1jH}~6K*(LG3+<6lG(HSu>37C6| zoM%!OYT`ikf8yD3Dw+89F)@FBg)`@x)aZTJ1U|Xu%-^^|iEyz5-t85clm&mh-GZ54fQR#PiFjyvB#^3MUMx2SLSqwdKU7!r zw$?ylXqMyUVY5%W%B;JEyWW;wJ0a5?L+@Nmz1fiAiwJaGg{#*(I*-&Po#mQn`Q$!%4ABAebd5oymllbZ|aZh zx1&BHr;G==1(u$CdBX}*lo>arxyjuucM-Pj#DPI!zepe^4dHkwnq#liWFOFqz3I8Z zQq0mP3wS2$RA9};q-s79vzaW)<+>m;SEe`PPSXJRQzBagi+p&6{m5ihYB#4wPk&4{ z*uX#q8gOh8$6LidQ(%!L+MJ{!-V3<3F%~gvauaSBqki45tmpmg8#6tDpAkmZT@0HQ zp%q=btm!^Wn^Ho4lr*NfJhatZhUef^*lJ|@!#|n(e{G77 zR%g(88PuLx0g>z=OCe1+#$)0XaN1-~u75PCx)p3=EGqv1)ESxn38?>3ll=kInf@M7XDW^)tYrNoYXj>Xjk?f6 z;o|}e2BG5I5QF32;d-=2lYk%+V4jCvO0|Hs8O_IIEE7eUv*GE)8< z^R7hy-_`u|e+AY4uf+%dM70?h+5UqmhQF!9vHDJ^oVEk^F;qqDo|c|J(~2t)ebm>J z`crsBhv=vEqQktJ+tc zGO}o|P^;Kpo>S>FHsVf4zEo3N^D8u>wF(ijoyv;H*_?*Vm*WxTjadq1Q3y;x2hO0}%*!#U zJz?9Z6>0{72(gBfOSL7WfVg$RqpG)|WsZS%5dDZlB8n)_APRU8;0jv#k5)ehOQk9&PrG?fSS+GEp_La z%PJ#XAOWVLyP6~5a>TqHFt7xMKld&`-O;J^a+R^S4!LZI)}crdrt1cQiS+$K(JOFP z<7rc(lLcqWEhca$lHNyGh8MZep4>~r9-kmj_%0(=Xh+5*CgK-swu(Mf-QC~^kv5MV zWN6YN2d?x*EE=e+-_b80@$l+x9s^>LZP!ApwwZC1 zlS?5+h|DdztSLKE2s)e06j>zOpz9YzNyZ0WYepJOR3ZfcNEsE*>=3?WO!j!VHWo}$ zR`L@P4Gc7zLbNy$QXUgZf2$)Va#kGLwW~KQZ_CDdEopr?mNfS8!>o7Iv=LYtXYb2@ zn{AWFD#hB!*}+2`2#a%?efZIkldA6)?Li}V0}^4vV3KhvHb~{7vkLd6qUVLiQ8E<@ z@08tn`nM#PS67%8b{q~p(0~VY7?n@uQ?)ub_oGwX4)=^g<)#I$UY>6LhPJ1jl3zv{ zGsZ9%A!ZGJ9ndfB-6fgQcQ2M1N{{ZQx_ph&3Li%n`->Qg?K=wz!Jj_%(eOoik)0xQ z?ua1{n>YeLe|{kM-hgK-LC(B91a3S@JU$Yf)cl#+N4 zMZtq?Vp#U4H);{k%{!`DGen4!C3onkEsOzye&21Dm1WUWE+v9u1l9w4ts++P6pPo! z2*?dV`KSq7e7(}CrOVMgH3LKXR4x zO#7Y?FO1yk*pA^eL!@2uQ|z$H@6^(#eS=^r8tSQc2Rol1#p(LRR7??zKU+4wTRNmA zgyp%1aNN=0@@hA_^FtIOp1A81kMlPqe4NF+=l(&DG8PLQ91Kt8Iob2tEqw;o;lhR- zo9bmYt(<1bFu6us$(7^l(t@}ugWb@lb6*|bBwnBX`+zS9O`vL9;W-MkRL9}E{26+5Lbs}}@rMhV8V(0p!l4QW%XVknbx zOl24lJm6pH#qq>E&G&jU!KFcc8RI_L&weXc(lR-tB?2iNo3 zfY=@D6U`PoHj|v7KBLcSPWti%2;jd-ITtKG<&aKO_Y;RA0+jI@-N!|O7!vZ?n9MkU zTEHVsqjJ^>2-?qZ*R8F@HQPv|AU_fA?$r}< zi{RT9z{8%U?yi$JTFr9T*15SErXH+4>3o_|*rIliq@as` zZDWlvnuzH1dnNKz^&s&ZAG5NEG;&Cg21Js&Jm!cd|KkGrss7w91+Bn&BhMGViU|jt zUgcDIAS6Hs%*`vywR(+B5s1~AMiHRVIkYM-IJCo|>+$k%9CHYNj~`b+)IR4PBQR2& znl8t7QQ5-FcRFz|PDJjj37LtmorSO`CMGxrwtF-&8uWY9`Xx?7`;tB9(TFb;6hX8- z!oYB?4WV?ph{+p&QyiWE6h{{qR-$_2lbB%v@KWK>{!{eUXmIU*LU0zTkIt2#B9|ym z7Y1w8GGGY2bb~=P+UOz{$`>+TJriew@T+2Qx%Vg!_|+n0>;xC0)2SnZb%rvFjMG8f0%j`$6pn;@01#I{e2TD!8kfYU8H2v`2mx}LHC9y8 z{e0eUN@<4QtEl{A(2GQbG+Ly?HheCX-NWpJ+!8>~-^BN^H#bIp5n!}%wX&`fg9=CZ3>8w z4PfI#-)pOt+YKL#K)s&Tc7cs% z>-#yTAw|{EXEL5uyi;4!PGXJCi|jcV110ovv1q!8RkhWVfS13{g5-xN>o>Nqg>Vh@ z%)Cg3!`;h$HzY@+lk9y)N?^2_>_ICe)h-(?3vU3MySlpQ{47(P}kg0{ybIm@IKp zJen<1RjR?@HY`O)2@zL3}{vEtOs+68VQwq@_GR7>l2N12mwPP5nir8AoN)AM`AgYH@?Zo7}i zb(=2fM`Ob;j|P<~GQDJxz;QzByJLiR5c7RHl~i$NgT2LBm2B7U#)e!2?R zPyVmN?fa1P8kAzSP-l35cRT$>PWDfNf&Jh8QuP1IW%X~;sQ+f$AR_|-6XXBzOZ|Uh zonrZme(Z06hJWshZ0xN6u`g;8&=w%f5UlVqG8dM?z>pY!`f zkc#OJqj})9U2g+|<=H2*VfSnnT};L0k%$xeEMOq|d{|~4X#q3ZTjbJEpF^AmG-vVg zL*z=Ts}m5w9|vhi*{-)Uz##E05WHL-n7^Sv+ouUhVI`t=O;nvVD4lqlj!~*)N1N8wQ&V^ z5i=X^!O)4b^bW;KfEgB`?Zmds8DFx&)rxl{{TzIXD%vwqUi71LzZ z(!0EA7%zTTU3?Z`$&wx}x{Uf6>QarD&8jtA2ECnRuIY<;-lc}4BtsddWDz{;#=JYQ zd3iYahWZVZ5@kI5a?g#9&gy=o76ViV3gkavLY9;@IgFx^CoAs@Wcwe6TT#N7RFK#ID&e$u< zWM8W#>9szpQXKvc><^P4;awSd{6bxR1k|T3J(=Zv z9wWVbh30*~SPcSyFJ0+BZl9&IJrkZljp&BE5gzBPoduu5X4CLewU&I4^S7aOG4o&b z3|ll*i?hoI!T!PYO3cwAG3I#J?P`3AAz9*Hc-YGV%axFSHdg|&+qH(vsg$*YFJ?}x3h2-E zUges6byy^)$4GCcR+;g=?9A(?u=q*dv07jL$jHDv*-i1JR zAbqDtGhzTR{7bu$N51}JtMHP9IlNWiuEX)2-ppU16PzJ@|TN92FN7PP)4=A<8Fq_y@>mYUns?F zZ>T_-%)PMr@EiTnrik}hurUFgDUvQ!a}jZ}9UpuQM8yr=(F4dsI8PTL>G)&5qU;RA zUu@z8w(yVGZ}NC&fRkH`y2yj{xQjCyg4aj-&oYuAGW-qN*T=S=so+H+S7Ui0Ukvyz z68m;)IMR&KY=r3hrgR5P#$ywim6j-xpXEn7YtgFQe``<7@ zk`yW3(BDb!aCj&%1f=j8G}6cOjs1(tW#Ow8bY zliX2G`*?JK3ig+Ttb3uS(wxSAAJ=g>FoD{XsR}$5;mSkX8WFqJX+)Y8qAHjPxwJZz z3wb^7IXcY+FFr%aZr{kB_1&Cc!$WAAfv1vmr&r?#2Vn=wHV+88-O( zk^GNR_g@j3w_sxpEkyD31DU=+lW2DqK9(66`f^0GhvJiMu!MrLb8i=KP<_?BjrD?I z>sOS6)Rr2p3aWbJzo{~+*pmhY1l@K7eE}~-i38$T@iq^+L)F39iPF~WhY%$Y3u{uF zv=<;Jf60u2fJ{KcYfLf7OA1%4t3z#4o4;}9-DHWLQx-!AK%;IPK!Q-N$$T2OCy3xA zG>|5xj7TY*mY-6y0W=yK!NB-9psJz9q=>gGLr#(R38rg>ee29GC`FHV1#}ptF?~}Q9or@^TOcd zc)D|<`vUR2gSHKCE_ll6-Y_9=otx!+{5=BDXz=jd6g+6_VJWX1uiejU`);FMT)=$g zX1sJM)wxkWJ-qoNm~zEUXLmZdfL7Z!Fd(RsE)s6dynojFd*}O=!Ae*v<42Wy#QwmO zd}xE2oI|&)@CNeiH&LKK=L8=*VI2U~a#dvmctkd{-thjOMI5d0q`&_%P99l`sQU!b zX*0Yzq$?6`!_)BVd$uhz;?f|6`}WSRRJt{l-*JFyoJv~1fyo?+oCZFn2slDag|QGA zfXq&7GBb>vR3w)O)2G#LVuza3{hm@ptGVMwx%vxwM)#q)MsA`r4s^)8ZCMdg@(45e z3`*Yq_oLSa0}A*#YIEdUKdmaUN*n^#JgimOD(L)$WfkfZT}Y#T=OdY#HuI$mf*lYBG4MdRI0wFyQqiWm7IiEK7#xs}AT=$Z|a{_`t8TXR8N<3D3Q!rA6o%8N2`$>P&ux{yZ{)^K7U6*xk2uH-;1=7lw3dm;@Mx$Hbjd_3>g@ zCY#WDC{SBvdFojV6aZX-+!VJfGXlIR4a&hBMok^Ilo`$J8ho>InIGmO7O$dM6R30G zv0Hu>nvR#U=rjDbVJd;bR}d@geO(R`R44&TXjzwP%=pH9{k!SvZ}2Vlf4v9!uS{3} zv+=F}B#eSy?7t&ukmdgk>f+$|%WxGOvf5Po}&XTNQRBm_ulMjCQxaa zM=kMlA-*IgO>5TeDc*D?lNpd@!F{jBn;Z4#6fx&(Amc6$TBfD=Y;syjUR<4xXIs^e z46T%*@`NZFZ>(Hegp5stt0irhJJF0xrn@w68YM!1@$5nSi|Xg)VOvFT#-dv(_WAn1pVvkq312K zY`w7-I_APh=~K8Mt+Abo?3L4mkKs}1WHv`^_lYRF@)Yr5D7~XY&*`boJ$!1SL8jy9 zyS>*;u!u)`$h2_?_fqf%if0oUuWLydQPqWcE6j7 zplVbCuF;lM9#UeuDxC+FNiDrH zx%A&p9Nxd*%_WPaLR@!Ew1Hq|Xw zy3Rq*1AR=BJ&QkYO;9R~zW3;kZ%P}a0b@8cbaIUIrKc?e0XzoFfpDI#cPRq62>uo= z=|N32zPc5db5P0kaPaQfXV59-c|{S(${?}8hH$n%(k)GeTVrSFYgQV9Z1*^&mV9+=|I_*I#oXEvwp%L&xJx>FYFfqtv_+u{tze?u~8 z-oowYS#Y|ZenIXI7L4LAY2;ACsJ2;$>-9i)|hR}R{eBNc0V#-~J$g}pO$K<>hJysE23Uc}}tu;=TJe-_^wDUKp6p5Q- zz=r`1(a8zQS}OlTzd*p^DGqr=y^hJa)z4oiIpBA@0%3gY=XFo9%Reb~8#6zLCtyH? zjjo||drSwL_PgOBfK&p_HJ_&cRI0nh44;8G=-;2G=hLu&=07AIA!YVOkqM^>-0qo@ zWgr3Yxw(r`iKIK$doK1$ez3;-z>jR=FO|wd`gUXZ@#iw&5N!I+pePHK0s$zxjpk-5 zEh`8#KZHgo36?8%zVm_6)<;UdV&PtwZ=DeZIYh9iH`IyvF~)`iiG@5IRp# z;X$J2N>^5Nl%Xfm@As<&Z+qB{g}8|auIYYEH6g$FT}`!sLVyu}JNr%I<5AuDEd@ds4SMqa&&riTMDu0sprHopTh9mCe#U))?UFh~(sS}i0Cl)t zC=abb!UA99J~bP7oa%D5V-(~#?i} zL7oQF4K=l_hS@Z~omLxIcN1W{>JjKp!nXMH)3P9={noO*s~@mefJk`N-{iorMOR7E zc-tIn(IFA45MR1%#zP9NSdSPu*vzldI=?`f7A$499fdNECPKj}t6*qL90w@*gJqlyh)A@KI`*rTP(^46TB)Vn$09$vDUb&03~T2Amuc$Lmm zOw^o;(&ca?MmvU_|hpDJ*h7CLLm#!X4V}cXY4eSH`@* zfRNUB9T?x({xaILGjN-ztpvk#r`6Kc#(CulmfjxeDLmJ9x4vtFoTl{vbxw&J8un)p z)T^F|(94}PyZM$%XnZ;VaGK@}X?AB9h>DPgSlB!j3@Bz%2V~F+to^;r;ThCGTNb5p z?SQe1|5e8_y9y}Iy>Soq;La+Y^ElNp5=k#wj*CA#eKIJ?Kw?ihcANGKr85B+6H*TQ z4eo^oZ_hU+Kad!F?t(2mdc4S3_&y0gNRmaxmj(f@x`$<*C9$gm@G^wf^63lFehT>3 zj-9uG$Bm%<0?#_PS&SyyH#9Z4h68#lwAix`^>JB03!3(=g<2?r*X-j zCXL7E(xmb%xRL`zeqG%dTAPUX5zKmYdPawMA@{t`d!mT(uIu8CUw@QPBK=9ssN{}@ zNJEV)R=^A!ok#cUgkQu~$6*oExO4CJs4;r*Ev%)uG{&oj@Z=EeSb;L3;ayk8 zZ%xSEqXTT>N!PE=^|41^)m!C>NeD1%Bo}Sx(4dL<#N4-(n~;!XBML z6jel(n(!C{D}Ltt^H3Fv@cP6sIA2hii$lVB&+@$8T*MJH6ZRiD)dAN=-YxD`E=!nK z0n-tx3Z?rJ1gjLClbum5y9+&r@rNCVFnWw6Ymu+5VrA~O&O97X;I?WKVgb;XmjODH zj`^2KET3=S8Y_Hcax}S9#@~0J!4tHmQv$ov3&fOq?{$?X){R@)uH%{EY^o;)#8^!+5?u);dGl)UBdJwylUcBnSCI(X5 zZ_QkeOv5VGrIF+K7&B?HzejU-U#q~`=w-XT>!53tnk7vATy4gXeSr(u=2Z9RR=+B` z!8ElHU3b2O%(W`{yE8@?rXKxuc><0>K*8gvRqNE|>%Q-;-^kWE3%>eJ6U=@=+_OG} zLrK*8W+E&1KB4YITmIIi0jV?y{`>((yC^R*{t$4VUnU8+bu*DHrI9sHU7}}{ZSm7C zlxQOG@7CfUoXNlKpZ{(E|Kp%m`mY$ktpBi)|A!gCe=&Xko6n?wuEu|QCUG$R1q@~< z>kWA7>krHn3!`Vx&mdgZCldw*sANfirl8Tn!A5`Klo$F`V5-0;i%41|lxJy2Mmk;W zmhR9x7|BmB3g*@&nG6D6MUFww0*y0CQBph1?=OD-rFNWulJpb!2d?`EmJ+#5ZA@rM z(V2T65eG&AIWLu2Tdr5a=QmC>v1*6f2kSiL_=gx$2?TYuQ}HQBt{vVciODKYcrwXE zd{%mA&o%O1bWCY`m%eVV?eiN@h*Tr#i`RJsUlkXTjdoNq6?iW}*}dq10r0Sa@?_g2 z#+EMg%VdOaeZ#bUOwjb-EZEL#NO` zqYh}K-Lgh7)*#EuC<}}F*Y&Io7dyjI9evr_NL1c*Hr&t70~ziFRYWfzm}_RYxx?2) zp5UB0AIL>o%a+`rVVV~AJdm;ySlPW-x1R~9t-UuRW$iS=r|o;skP_)n3d40A<-&+i zrf^Vd_}!TUeJjeP?a6$(sW(AFRKs(`R7?|jYYHDbspO2&AxP7O#%_EUWewkDjo>1l zk``65A_-eQ9jV(Y^=mRF1P=aQ#P)*W=N=kVii7Jys#Xz58MM=|4tdU3x_$=HT zmI79GQ8)}fEdc_lE>(GaEj=+psq%y&;Nm6U)RC0juY9uQ`)mZ_2q@PD0#ak=5tC5I zlJOpvsDpg7m!-A{3iqRya^K|Bk2dhAKy8hq#%P6cY(v)5Q={Qy6%R*Yj!DW$p`Ttt z6A@3;UIU!0sr=i*Fim4|IxGdx3O|5_uF99JnP*rcv0;q)s{3f5JFF~9io|=?tJ8fj zt9^Zw&67f1N;{fh`UgbPW89cVuL2taG4rkV7Y8HhaaoEp+R?$it4?D@Mr?LQ_h z{{K%p{)0h7+50-VSJ_Cc_hym1DlON z=wbnFp=>G>N~)^7WQ@`*w3U~#aox&EAQ=AUoV z0%E>C4k^p?1>3pcaew#yf6?pz3pz9FKh)~~xtsW3bmo7j5C0#q`(Am^W<82%yh{G*Qy#EpDCXv9UV5H9*A$-2ktxn00iL%y5uP$vR_cJ(e*+=L}9>2j;*0`^4cDr$&kGUVBdhT8i|)nXi~i4B%+#Ekv5e(A(t zVWjV9I+Am<7c!-1pxE0GpGtY?-hyABR*^6UDx-M@eYQzHIj05S<$mjsAbz(`Rq2O` z{{bEWQg5pu78KpSSUIhxyZ}y9lQ+jIpK?G&`KbM;;Ij}}sgPDHOtBuqAP#)yD1JC) z><7e=lzf_lH#am1)+bRn@#9ucUWuD-S~(nN$Bd2gasUH~bj@JC{4Q}CU4v7}L+)9) zo1@~oAFeM~B_)e;x;n@uRp54&tO@{hMl~yUtepS2>V(B^2=U0Ecyli>u$o&aAv6KK z;!lOzKQ4DIyX4l0pIzP8twGDNZ{w69_gN~6J$oi zYFH-#4ep&oaJOkT3Uh={!=Ogmug1|!^x=NqVBH3!1}|NzZkT<^tE^FuEu@^CuIQvykrxm1VsQhP7ny-Z^36hy|KvzB{^WJqK%@P(&KHuf+MalChD=Bt;`X7P znhhUu7j`ZLw(5YIiLj zgf1SHcV0$c%v^@uWj4{lNx+nsD+6C%!cp;5mqL_wZhsWJL~=q-8F~6O=AnA{?7HJ8 zdTSjJn*SmHV=8d?xn0FBd4P))TfR+LE5O$Lx-Z~{v?{$r85fjWpe z`EzzZ7{~~C)3z}UnR@>JWRyONx_grs^tTvFBm07a7zD~bMGw5y7cqsabPoHv6)2EC@{Gn zBuRrY*<=h!DpP*qWx%qwyqU3&-dkapLNPE*qrzPX_|u}Z*m5`bJ@l5!@}}2k?`Y!8 z7qWWG?a3&+8~yXODU16os8N*e#~nqY2HnF@nFVIj1Mbq-;--!L)2Wr&Cf0MJI3#1t zV`z@0=3%r|z_&AO0b_lp@byZ=^AaAosrs=u+arEz+tCSYuzunnZ+l1tHCSRkz>-Ws zm~-6|?|2TG98*jZ3R;7MLR0AnPV0RN*Mhcufyz($0BfeO1?^8x%N9e?Q3qKz<=Mg$ z7in7-sx-LL(xW*+Ml-*cx8qR3E!0HrCfhg;etSvRmR7e!-BN9Ez;IWVs$ z^k$DgD=My4z?DOP`;bi>%PoaCV+P>@nOhl{f0WW@Q54c&klxHZnqlxPmd@FyMG;Gy zNxScfb>WONnav$qy-y}>OBS?n2C&s^!G5&bjkVU;NN)*A-`oL>ducY%DSpfx&|VIM zZr4}FVy+aVsfEG7rL-n+)$MKVBnabUUp+;fZ8?A|k*TOQ|4L`btl|tV-wR8kV!ss< z|Gul3bS!Nnc-?F%!(zF7E2ld;Y0C`;2xV%>zz;)nw-v#YMLT1=cAcqOW8g>q9+InH z7BpVbz&YicABY7`9ktwZ&gv?QL4?a5H&XCW4QxuLvG6Gg6OO2C^k#;WmnNdb+Dzu= zaE2(pAj-fwO-`#qOFXmK6oz4}z;N>fZOb%=!|u;;<#nYuF_d5nu&_Uh%!ySdgMtv{HyZW#g^zk1MXq5fO7Y_K6rjjKiy}5xRnbO> zmr+uVtL4^eMHG4{Ig6?U=!Fn?{pE9@l;+0fm!&a_dyKH|a>^}$3X;JN1)lyMBHV(2wH$-7o z(SzN=y4I-pEvhB6T-jrC=j+A`&+~m z&mMPkPrp=>Egsx|{1qk9rjhCZ3P6kD_h>=YbFN)T+ODCyW4k3$2^uMbB&Ya+Lt(;3 zpcY2hMmwMDYcZs2q!kNFVb7aSUfmpA{}uy%1T05r*TOn-R&ptITo02aURI z8;IY)&gkKzfZWiksW)8z*+gK3R2UY2zELEAol> zZGw(3M2`sqDXmXO8Qn1?{uQPWHNQ_tIS5nZxUeVjQ6`BqYT~N3f`8<$S4?1b`Yudz zLl5&2pD@LPt3Zd-)?%x8x#T3p88!1U^91>uuZj5SC$&TW(L~9)i5Z`ia5uWp$?+Su zWoBObduW$NjPP6`z3*@4n?8`2mg;DHsW#+5=uHyiHiyvIKNaAQZfs~=X+$vhZYQJT zK@;uC%?c0HpSvyf(6&p2BDD=Sm0C|;8`Vl0j03e>&z3Nm7I1YV_BQ$tNyPgZAltXs$%**Z1iY2&JtmcL8+{l|jUkD6rc)JllROEzEV>2n zAbHx18(Ne(6=2UTw{h>Hiv|=rLAFL>=@>>G5X#-NAAS|(Ig)L%Tx<}gJP=yX++P#1 z>*{%N^YX_%%y|v`@!)#W#eCAu`BHSo{rNGogKB|PTZ=tssusKE9BEChs%aINcW z!lrcR>>dZn?teULS%p#_=i0|T)FY3mQkR$Djoz1RrnCp~%V)Lx@e6~*Lhw21XF={j zfbnIOUFilQwqLsT#~Wct%n)V#U~*H%)5W~~ODw9NY@Lir+l^XqfRt>Jf%=314cwcc z3TN`AA)S+3H%}l+=4h(4Gy!41tL}rfqDb79dA;C{lLGhma#Q;-m|LLlVzM``J>rK@Xb{F- zd^v7uN#<77sQrZ8C*tXo(T>oiF^t~ z;eXF>mGAH|O#fsJ-Ibh?i?Y#5TxB8Mey%_wCUhYAT221B0&Q{9^{Kly@?uq`{AGrO zg~;Mcs>HO7&|%LM5ShiKS@W#QNF!NnR!!eo<>zpy7)NL!(wHo60Op~HKiTsj&4HK6 zI`Qcp(0%l|UkW(9ByGXhsKgfK_N!$u{nVcX<9Xg4#=@o|HbJeMOFX(F@zq9` z9{z5;`wQzLWZ~?jVB#ojXJcLN8+CYGGueBrZh%H!`P$ ziG`WDGXWzD`~L>FSQ-BOS9URU_OLghm$dma?fgsh{I}_dUfsgj*_?pmuZ_yQwPnJP zslJMj%`aF*SVL`uXV$qN>!1)_hljMlSAa^~NeA8*10l<{=MQf*b)FQ?fF<&95$Po$ z91f?1>F)P!)~~subj@IZG#h4KNOlQ>cJ*p=DMh*=q&+fXtxq22^fehaV=d?kKt89E zS}X{CLz}4{{3-FAy7wM;Tc^TZqbkS_M3%;Oopno;t6T6MbzQh677*mGqZ6?6ZtS`Q zI&TnC&7w3szUc+Mz|;;Uq;HT0PmGHgEsA;2mAlnD5Er1%$AF@zKN@@?)x#m1H|=@+yg?FJ-nA^GQ0QZ`1k|16+{2!G`tL z-6z|ek%A85Xg)1a8*`>e*ouYITO{5tq$y4|F>~AJ<0L8KC{vJBP@txb+m}L}mq9yd zGO4vPV`x^zJpq(+%K)vqKAD^-T?k>S^Dhd^T}a`7w18Zzg+nk`;1zdap+L-~2EH3f`jS#9#Nbs6OgX*n`-)1>T%>M=i^7rei9Kt0d-D&2J(=PNiufgX)2 zclQ*`V#GlhSbhIELCr}4H?8>S1%jz3@qqoQl$b-aq2&#j$q?c0->73kUm<9Y1rrwI zxb`+d7vHf+-566pSQy-V5b=x@;{J^sqaw@=n74kNY$R-U;D5SO()L~hgd3Ei8w;u^ zlG{2-0HVt+{?vjB?}2UhB4)i;k9DqxFAWT)1+-4PeU*IPgSyi1BFF zJ59p7mkZrb5O^3vGe;2%re(bL4950}#4CEXh)N*F9gjY{(WH5`RPRbmQl)Uyg_=3^ znfLISXq;7z7W^HStBE; zL|zv(msElmeF)R|8$Vkj$0i%Rw&ukc=RUqM&sk@d z(|f@*3XC~f0z;cl0*t9BVO6pF_|iRT6Qa(2XXEbLrj=ms;L`IuUFj3zirKZMV?BVw zPC)XS6a``8x~f2J^Jt{l)v3CKDu1IwM6w(|Bp^kV|gxAO37KKSjJ za#!VvT^?K=Cmj}89@hj3xdS3+N)R=4Vo+;!gDum=YHw|VwP(7 zZ%}li^M(PxH_l#jyF*mc2;P^! z(xfha{M2Gya6&(xIp&8lqX@et+yIJ&HxscF3Fu)Fpr4CwO6!nZw(YrE+_ENj=)O2Ng6MiE|XwDh#>~J ze3=0+rVgL54TNnXhs$CkK_>4I{26Xl3?rNkKYKIH-Av{$G|>}@!4(Hvun+Hg2<{2e zNcIcD$QRXi?MJvhv=)#_wSU{smCTT)=fEYT>X zLIqt1JWWe%rhlOtb2REMov&$^r71k<3FrBm)FbvnHrA6a($#r{5uy`;6W81o8-d0% zD*VlWnVvJ)TYPn0XR>ID;GMj)y zc>8EMxAJGjV>LX?TqkG=VaFnqxv~?2d5(e^yYA~@7U3}laGZBpUWCF_lBNsWMqaG% z+Q~3)sK$+BvK~GBuOx*$Y37;qXMRCGt1!a64%YM%d0hhw&F63~(jEvxMp14UVoSa5 zAjm#$-5Qc`yJGtv9_JrWS(csKX&PK9rrm({cxYA20)hG67bAj(L035iu@7d0@cIIq z!Jc&L@xw1qT#xNN8pfHg)>j^XQ@)pNM|n<36bV;E(Y;WUG9+wg)v{SZEb4(so%P3@ zbe4#?1@=yK0{%HUZ$i-cPFe+?-@=Twz?FPmbUj<-E+RBL)Fy06cvQi`8K+*^E1Okz zc_ty9kY+gwt*YEmj|};X+MEM1;RQMz2|2NXqe5Qy$NVuBgCc;;&8Z61UG6Z0Cx72-NmBR@%D$?EV$%t^GAVS4nq>Uvxtsrmv> zUe+THh(P@dyeWr-)83t)QG~&Ms@2r(l>Gv@=GU(&Xe@#*c@~UeM05Hsz+<^O(Bb3m z(!yVx-M1kWg{ss|NEw@2Y^NM;I3Zk2ze0AWWn|Z6Y%-6_1`xH#f$~YAzyXBIWctK_ zD$D!+0(lztp)ies`Fs$A-=Si!*Efb;Gvh@i{FUZ%T&sb`v}Y|e2Jlg0UX~>dv&2oU zB9L7XCm}|#4;gM4%bnDuLfziMle_C%AUV&vs?6-9Qbsz$g-4TEDLCYZuUvEW){)Ng z{izq399F3L{mI^$yP32Aox!FTU-zT}pztH+f&JRyBe8_3?mNq-U!`cgEWA*9GP!Eg zhD?97c1C{L+2Y2g;hp-kwl7iZbyGmJcj?9jLl?!HH;8F|t3U4E0p)U{!)B59Ccu4+vFE#xabV8S6xWY$$UjDk-YfJlwJ(mzqDe$^pkG%6&FIa^~R z@|}&Y7IIM>vSQ|9e+jy?1?HbF;wSyo_ zS1SI*!_GVd3;|Lt7mu9b9|yZZQ--gNMu4(qo`1*;6|dog7E%31tO*|pGtoI8 z{zw;QzbOAoxyXE`D&nh^RTeXKLUOr-xSW(`@Fo2S*TtUM;#Wql_AWqw}JsF?V{^?R7s69Ynz_j?pM{<{&+% z98o-NVSbH;k34_~lA1fD$#Ki+g$yji;VCVP4T}&cKl>S|p^<+}E!~ee*^g*fmANVk zihS(a{AvxP2Eh3-Z8ZL6YK5$>{yl#+k;d8)&`4G-gL}W8&88Uin`scAyW=Cda_svm z+vl5SrFlI(_7K(md_J|O$6mV3>+6wGRK$GqM>L}!B&ZD- zdfwk54^cbxbnuqJm((xL82F* znv&kiDzb>B&=H%cgG_D9-J^q+N7BbVdYg;W`TTHPWu~e&=}&N7+=C(+62kG(n$hnF zu?A&u0>VJgY15K4pOcDf-LC$iQC!AyxMfpli^MCF6DcuEuJWp+WgDf-bAb>t3|>F) z*k>`q4qyns3Q}aWG6t+}k^|5?pQ`xneqaUMY3pP(BP(4gl|B7>-U49tXIHqHwKBp- zPU9O}C3BqWOgNx9Lo@^@alwq6Ed~8v&*kh^!A=1*Cww1{1{HDKR%rv?`vFSuyffGs z+A0RpkX7YJeIheD)zV>)!b#FrNQq$ED_uksOPKwlXAv{0j1Ci)9BrTKYp3t*y9=^O z+81_IDRk6*kYFgGeV+wnNDM_Z#ajB2S!>)E?+D*BI*eDi*&Y&X1>j-po->ATI0C1=Gumifj4-u@V5#Ll&2#p%g z8lN;d`6B8(Aku>{&BXCD#pGTDgxTng(_*H~ywPXll@8%N&_p&C6T43?unMSprx?uH zIO#AXr(i#az`b9a>V@0%`d^`No>-RI!!{k5O(u^*05}9wMNs&fzAm;$11*|xE_J?6 z-T^i4?N9ty9)xbPKCvORlD6_^Fbj{uXj#h~+`sQB)j2c1WVrmR^nX%(t?qiaff6;1 z7Z;>(bLdlB%DC+T?aD47FSTZ#eeY}MciCPS*-bK8xD7=7LNqJAkl?$!P6$sKF58#J zGL>*}DmEWAk54#PWpqx9A@AbRS5=6Z0N?eailE*%Xq`tDB}tjEWo%@E#8TO`>&ta{ zN*VR9GkK&86k0DRSKnt!x);=Ze_i9%d{*eHcKyjo6HycFhXP3RLjjVIYn9Z!ZEh)e zOS7C`gUA!H;}SLz#z+K}FSZpvc}e}A?vuR50}F&)D7sE4|Xe1hr7MK%_$?pgLzx!*Y!OW3qyRm|c)7!bA!?+L6u5Ezle%(0=}*+?&UO&BpG${oA}Ba@6jy2Wtq(*G)!| zy&t5R%0Y`)8D>Sb@ry0&_&cgap;Ex7p+6_sYkLi~_tL|3LFI9_)%oVd44)AF9usMe z#FzJ7JzTBjR-+|T6k&SOEw9owN7tX69PGjfmGJ2HH-#5jh*{m@FvHJ{{_0Z6_~fqpuLWTp6#dBp}N$z*5jl5jFiZY;Kq&J zbT;KDi2o?C2^aX3BfN1lGXSye>uv%w_|n<$?M5*j>(gv=8~ycH7R~2HEvtpXUn>G@ z&yHRiWx3+;@f z0i97|jX~+zrSOZa8YboR<>B`Lz@K4-?OjKvhw!@qF-gKrziq2%@pgMAuJGmVRD@8g zj(FEjl3xHqH2sE_lZo?eMEzi1kgzN@n-b!45z-H69FSKdmqJE+Dbzwpu(vw6*`eDTjs z?i({Z!B3q~S>YN)HS%cGen06s%G^g&S&*!HCLG~EDYx8=>`#@NtygkKooC|rc3U*Q zjbXl8@q0B>0WKr$H~!%>tni98em{EXkvv0635OM)vwms*s&wP#x#sDt_>l9|cFWQ|&;rTw@TlZCgQVW-dHO`B)rKYY@#?E6Fkm)N$!7+KIphc^-Mqxqd zi7>X8U)FY-9J?6mebz;1sR-I-Ba*Xq+Rxica@+`pUL>T8%W=R(n?8IDn*6As>YAJ0 z6%|xbsN^^tyLKDkg;+4Y*-WX#dQiyR`*Sg0dy9krD(CXKkbbDz=b>{W^KkbW4AXIo zse@u}BT1+6^#!8V1iLvP(aTNqd~5n$O^$6wyB7E%g~Z^Qub~Gf_}-Lu^}c-a3`pyP zJU4pb$w#^j{J3JVnI#n__nI=iOHzd2bIOSkk$FcX8wL0v7a7{89Rts69RBfxEy$jU zYx4c48;-dS1^7%16nZ7su4tM}9#HmkgPdxz@4QMR3tly+ZOxPuENGsdycN|jE6oK% z046QSv-&x?+OSzqx2cd9JUs1@w3ZWlG3!8PWmV4RW(^Jyxz3=CsBWTb|Aa(fQSF(U z*s<6&r%*512DpP6o#XOH#+k{MWLtKKd$R*TJ>~|gERUD{JM-0@tdNT zPObc`PB8`bgreSKIM9_U3@Yk1A#54lq}qw>vP&fg;t@S4n4Vx3|}Pw6Q%&6C2#3{kimSZwh?`n{zi#)G4Gud z=@~5bK5{87b9z2iw?=rPLr3h%L#OaM27Y{PEPzfhUg6Gj`uLmH%{3thqjPw6)^+p+ zyMY_)n3GI||h za4yJAYz9)@RNK6kM)i}>Ih$aSNEb>Cu8^7qjjMZ4)Coh1F7PDd!IqdMfx7#xLA5w$ z((#JuDt4>Tq`N|uVQJG9{NKM*ZRCbI&1`WBEHvlR0f`4H%|7s8R(_Ij*K7ffk|aRv z6qDJ}d($rkWc&BXc!mgf0vF`3T;_}xHzAncf-cvRGzL}mfW{q2{sBJ!U}jFvjwS{+ z{|=n}$AQED!W#b{s~;=O!RfoANxZhPgdmIlWQ=`-8*j}Ni;Us*8lXrKkcDNv`hU&k zkZbu2@3Xc*Odj7CXh#1iv4pip6#2PhH1(wTBbP97e}6ZRIWf&uv$q5S?pSValbrq!HBeCpH8KExP#`Q8S|`tVd#92epm zd4^m0)PTtEGva0>gQej6oIE-PmXG8kJS2F8MMGE8nJJY57eyJjHF}9X$0&U#;2?fC zLQN?2t!0O2faxeD+TDtHzl7WHezH&GWef9cGq`cepYE%aPy9D4&-RxG1OJ7?@ZY+a z|EC^?|4vc<->V;m{$&#i>;8WUO16LI!TqNMc%C9mI;~EsbT< z2_AWLlfC^)%Mmx#l*!N>7G?nOOkO*B)0+nz)@Jkh!>%Il5~z-gLPSiiH;~;6$VNf#;u}up=h*yfgz6M;nU^ zAnygOl>u$>rAx{etws{AdV_`Wp2uP;*NIf@ml7243O5_yA$<2gV(cX`d7+qGBSTyj zATksKS+n--*Z9X1uUQy(5Rw8~%?octXWN5vS-x?O$9wqAG99q29kck4)jA*dSis!S z{SLh7R7@%*q@=n5TXWmEP4Yx*T!hWzWZ!erHMeO2 zBrRvFvz|5Cnz*lyW?gUVA{V&^DRxXfM@g_wCwZ3S@(>DubxU#iKmaV$C*qe3ER3)0 zW^h-3psvs?&YGPvn1@Cfx}9URFH|~6&1j{~AUot*x*m)eFah_{bXxVPPG%ThXq0vY z=xLU_0)!hViGRa^1tJqUZ!W3!!`1vOnGI+m^;->X~QTL8No`z4KcH6dX}%BaJ{JH%2}!U)N#zt|H@B&8KWNk>*wd(V6-a6Zs){) z_zMrpfiC++^ZpgeSyD3=Ub;72SPMNCapx~lFU4B?>g9LlAmd0@Ck`izD1Hn^8m`6R zG~g=OYn|$udoE*{0*U`-?is>}aXZ4Q0(>{`8X|4Rk^Ex_dn+RsomNrDF+R=YOMOstC&Wt_u70&WW78F|Iv)XT>GWM_Fk%^U<1dy~*0+3Px7}1FmC6+Fn5d&j^1yejI@j<+mmU_oGQc)3)p3 ze~?~QWUn9$HE1;Ivb0b98-nYv$dR4zCK6_G_PPy1BkcUkA|suu{Pxm7PB7SCJ_G4q z2m=!Tnm~2&GGE&=)zv4bsPn$w?&=m}{gbZ?U=LEvz8$pmv;@c0%kfb{81HC_7>uwY z2y5xBIdS$6NYB6xpv8m%BZhsS$?3{9n@mvx6fq*FD4vdju10~MBRKh9+w{vmu(oBH6W>4EHd>a!^@L>=#8ZDyW z`Ip8K1i^+i?e-)t{JcEMW0^17NEt7ZuEo}M?Z&1mpy z=*6J?%PD2#x;ML)^4MZ!i5zCEh^>babcASv6?>i<1HzP!e%&AHB5nh z%4)@(-qr>r+!x323mWySL_oVAoq6UG$eF3Y3A_H!mP6iJI~4q67xUJP4St0eZxe#l zzodfQ!Bjdtm5pqcOj^zRd`<0T?+dCrV$ING7b(s787ijXPyc7@{QRS$-uQkSu8o(( zFpF1Na=V)N36k@oU^I;$igo=;RoDJQx%aFVQI)97=yJNo|U(4NILT z7Ui22iQ4w8gMzY6eI{hCx$WU_Hn{ro_{{8ST+S>@qk1HAeF+vUv3X~=iz3YVf#)@@ zayXBffe-V^)3wYJ92I}g8ttbueKrBU3Dnb_FPAxWk5CK9*6S1^rFR2w7RfL8w*j>U z?gEL)Jk(Mos1nu(9r5MX)p`1}Vm%jaFv!S*F6toXKg{i8!HlkqO)C?^I6I?j7s*7f z3;fSyAu=Ir`XO2|9<6&>%kF^a-*mRLrx#6dm~@KUf6qBK$fkZQO1iL+J!(LwHJe}C z1S#Y#@~50n-LOWvj}O|+=53EcU~aQI%P?=_Xox0ac1#K())Tj;3SxQ9S%SmM*6T5I zFHEf>=z8>?`A#YnH;u(&5roZ%{mM&sXbDT^1HZHvvNXN7nwTT;(lrdtMx`PEV~B z)ZSBW3q1zlHX%1S7&EN^J&Oy>t*@mowy?qzNS3FAX&pzZZg7*fGD;!ToVlP2R{WvP*B&l< zkJ{9!cC}c=EQ2R1JIV4!%Wp4n$wB&LBPwkG@HGQK07F+~7Y$F^o8T3L*}C6aiFKkd_i=)m zAXdVY*`7QP_MGcWMo|+#U}>c=#-rJqgMrZ}&YvOMbY+z6=)X^$&Em(6MO7uhX5Z#A!$~(nFXOh%n2~b@T=B6 zf4Q4`6M1KNhs{G(#c~P=k10)%Kb|y~r0e03<)%9b=j0lv%dgQ4N z#a_*Gu&S%?2OFu5t-O+Z+BONwC^oT#fB8bbgTgTj1%_7X+XN$ZWs-#DJKYp>H9?Lv z+3cCp*c%8waKIIvPD5=oNrCSuJUAjzICI@E{J6Hq!T5Fw)f7ml;oiFiQb-kn@decA zfIFL`r?^S|MmB$sOs!XKIpmIW>~WH^LdKaU;$S!llL8HVVgv>Kv~lfH-rD4BZnvIg zBi!`aGQ|O&hIpoCQ(GIl$!BVmXhURZR1jTTisVel)?@U-($`n3W}t z%tmHP=0&v@b)b5I`EMB=@n6;UKd$cnZ)*F$k0t&`X#wm^Y>Y~>29B0Q?En4F`2Uzu z{QngC#@2_hH*Em3@=*PUGX@6PRe`5y^Lh%EDUEM#Uz#UQ@uBmx#0mUo(Q;~Lw2TP# z+%=E)S|Ni^o5_2wg2l6jiM%0_z;ei#VYAT+P{F)veX>pk@G?{FfS%rlW04Q8dWbqy zUnAre;`M}~^Nl}UI;xj9&Myj_Soy$=_tN-FFC@I4$Z1*2aYBif!CE4o?$K~Bufsi$ zR}+o8I0)(-+%^s41lim6-d#1%!h!XH32IDGn16C~QXdK|`nSXwn3PkaQ|4S{*n$h) zW56t{<@=;HEMmq7H=jmpDSQe{oUAc`A%NL_2O*9#)S3g}5Bdxm@%GN_T4 zW~?%ipi5J2BY#ItYmveRSFq1z2uwX*6AcAnNua0@Cj>$%`Hz`+`wLNAC{GL9Tl&bc zd>w66kmjU$QasaX6s!7)l|u^-FiSlB?zpnCZeJ}{q;X!*>K&~C zvXY~D8LwBatzs@&cG@*rcyh&+aa)q@v!!scOYcyil&6)m!$I=6fsgEr-cd>3tz(cr z5mtGK;-1Qy`cbOJZO+RF3mRM4&&SsaoAH>@v$WAoUt|@igU;qv&Ujbti3-iV6f660 zpqJm$14I+0%GQPi9v}*uk(EmZ@rSnT#d^<_OogFg9eY3b90*u=0!C0}$L>uME(Vm_ zs7lPLrNr$mV8^u*(Z3?Z$Q|^kqc2s+y(8jOBR#z49t4Iv zY{Ex&;%>JRRZkV|%c%HN@Aa=k8Z$e&Cun>=BU=%4@~C_KXY&8z?okB}Q+Y@x^*N4@ zX^*mf|Hg@W&7=n7gUi(e1~N+!Fbgrf8D#DPzw5}JoU@g`Zr1c0SJq|8HF&KOuP-+f z{cVuWlX{IvaVCa>ZnWAmgfdWLdZUYHaAR=p$bYfh6m38!6qbUDs-X5KE55dlIuXBt z-_r4xRJEwiTv+@C1QR$ZJaC@oXnH@iJNc+%x@CF_9osM8m*YJ?hG|u5+Xl2sIw|0J zY>&t_%J7t~LYW&ys6u%hshc%9YPiogLgLEW}pUGsrv<%WsgBE z-A~)rj@x=k(d{AOMPa4SSu;_-xE%bxC01B_Q*8qmALS*dg1@v+nA-V)7I&YV^4_r8 zP#sgU3DL20h~mCKn%GnxC0ERD*>*3m$5ib$9}zY0Cm2Jgoo~6k`kPq?o8e6|ufGJGx^F^D#Y-gK_)371 z;_Ntsd0?ik(#kC8F|iD5^sh?OtF102hKwIK?$MrCMry=zLM7*Qf&nzg%>~ERc_PoZ z1%GR-Bj%ai^~;jj}FIPCXGW4Y=`S`ZsLgmXxaz5MFomaZ!#aQfnX@oTjIWx!C-^sO|57hL?bpK~NjU z&4il+%UtU#4xv4zS|mLZR;m(en3_z!-&5LfCxIHYQka$SLC^Llc<{4in`M_#DFToP zmi|odv2t~B?Bb<=k`h(SU;3|V=y}=}qwoYLAHSreAFIh_dR-T`WHkIJo(s#ibAEXB zzY6f^r@-BPsv$Yy{47J{9hm5Cr{KTC^UsQw-+?;*2-Bv~?eX6=l2@6P26l3_Pqji_ zOgFe)7ReByMyu(e@16b7@9(SnWz!qWOxTlb*O+T!Yu4Tj54n|!MN;311{!Y~HPz&i zDKpC3{Y2i15io@)9DDr&RGsLVqs0STN+WBOP}lD0HXZE%sZGZk>A| zySuk2zxws&O*-7|2 zy0WWE@V4#(uqxIIN-aLxV4yA-D;Nz(k0|;B)_R*3RuGXL6p92iG5OcC=4dE5SEdC0 zvZAt*(?e-u1#(;KuzUCv^4m2U`mrZ` zm70%3*mJs$dRlhlquGo0+ca&OQEfxTv{rIB|63B+_l%O&%)tVnlI3A9mrO!r2NE}} zZKmh7X`$g@TKl9Aou^2@lg|C}C{qtyIc4)}ttf{EUIc{z&`nfr8lny*M`_Kw4d1Ga z!H#GPZ5!~1+@x`d9W%tk%|LFQ%1H9ItEZytOlXmS8YtDtC0J1#VA+*7oIImEcGmhY z1371gT&ts-t0{?A)337)zUJV6p=t-AV8wrW)<3K$n;|MoIAnj~JO zVW1!?`7k$)k^qIeqFLh#hw97R_}+YN^-3vn&s0eAg-YMpClpO75n|;$j`S)LzCvhz z0iZYqOn!fiT=p^f;5gx-R9E^jM|Qy5)3ahl!puPY-hTLmA~#?nE1KYW??72GDa^J8 zGHhO|s`wD_!8t3E$khP9C7j}=L8n)`HGMH_M@M`Ys`+NU137_SKPd@fPvz@Pk9hX? zk-CHI1!3-tx$r{=wu-oJ+IX-tF(PVnBL?tOpzUw%Km~$_x#xPZyC8)Ge}kWnLvCww zWIF_ACoa9u0-BUWeZ%E(i;~URAU8N zMAAf9zWe*2ap6NPUdm2F&A8mN?hu$Y5$;8BK0X$l8<^p-N5!#bC7MCK)FR1oeN3{GR6QqZ(3PsG8n9kGD z_$Vk96c#fTLZr?}i_?0^nfMo{$spA`_A--)Ma7k~(?J)@N;aA*+&O{I3nXek~gseFyXd z1D!AKE7F#PzV;-UtEiRE4?u;wkYloBADEe~5RGNuLkQ#VqTXia@~fE)#R}ft~dUm!{+(?<*G+HSIpgooWj|ak-s*XFg^k zFsJ2hYl1^4E(}E88tzwv8k@<9$RfHSh(^09vI7*0aD2Fbb3rI-ll|>NZnDe&-kVCB zl60{@k?%|P!8gA-6l5<$GAo!@iy=nA6GRivP|{3!$Sg`VEBq}5?J(MOSP06HMjOV| zvnoly3Cr+W6W2E|4+$E({hwzW?pOjcf zCH0B&L3vKh=dC-P-72yH_I=)(z^Y1@_xe_hb_J7Tpj-W$v-2pkq|0uQzV&qwo~v`X zb+*s#HTG9v2$u@6`Rh<3F#I8L|AvKXX&lmg`cgBAZ7FyPmpyaa{nAiRoKTu6qLay) z!m8F{Ipq2{w$WL;ionwV8Z_*t(=`i$CfwiQ55YosWlcP;z?v;YzblX8xum-{>fTU; z>O>q$qJ8CP!^H<0(^{(r2RKKiowlXPyDPLL)Cq~-ICOEsiGHrG6!XpfJDmH>;7i@x zXN!QP-Gk|Yi@y&zqrKB>hS=A@kY|=~m1Mj&`7?)v3m+S$21a|DIz6jwI)>d{E9;C6 zb0|dMz>*@qSR2NKcZq#(Zdqf*h#`$r?AxSSG&-lQ3GiiR?Kt}eTf7lN1LK!}Y!%5F z^rh(!i4}^N81_M9i_IfbhyKBJI6CgsJc2C>3^)$10o4NL#xF=&OPm^8D1u0^L2^)l zhQfCrmdjA@J~=}W93SC?rdCi(+SopHqS}%+@-qq$ZZJ^Gy2%rt-Vk1^%%RvRerAbgX-G-cbP|UKCKlcmTkRyoUfBHznViqw2pJBJlisTfv849VIl$T13t%2 zieGRa%6r4qGH<`iOS-4=F&IvBCfP&$`w5L24E`k@uF1j1UVO}fLxyV$xB%(hp_W{n z{%!J&qHgKJA4r`IT0U{vo$(8N9h8B<5`V2CQAJmdBjv3qBaLghHW-^$mdGj4u64QD zl_iFNOdskBOZ!aeOrsN+h=|3>_f0zsjuoCuc@`m*M3Gda!A+haz1LklmcD$UPYjFc z!iD>3H>27|>nFllK_VbwT;|)SVX#A08hYJ$r4C`2#ap$VB^mi-lpaA=sYSg6+gmQx z`P7;9YO{`~daR$IMHusPIcyc5f7smGeX#{a_J8^nrXz4Foi^4Z7E0}uZqQP;mwOM+ zihiy+jP1&b%0{;*dzQ&OiJ4Zh+K5pckVyW}Nv)XugcK38FP35k^vriwp}!^`6CME| ziL$A8Sz%JrsvS37PG_J;%fyj1IBdj-bpfCcwc0{p>*jJ4_0>Mh)O54?Bo8{K)gX1a z;6xxk$#2H`B%~QO4865dxI&2v-^qZ_Re@N~28uKeE$$r{H&0uG-Znm4f3mM@-9x+f zg6=lh#qKH?NDn!SXw|2YVoUE%9-c(28qr;j9FJ4~`ANS8-r25S9{019+D10fa{^m! z(F8HE^t`H_Dsy0Iipc==EWAiNhIq-bSJ{URA904tJvAsccV3ic8Qz)CKTA5%Eh4N6 zBW5_494s7jR13)a6T~)ltFjV`;xq;*bCTic(#q#=z(Q&^xJYxV4167@L6U#{=6O?( zjh!5YL8fd460&JdYc|y>6t*7>Z^lR$PThm2*F%tE;x#mmMA`l-d$5J5~!1Q zWr(l(8u&Z;A7oDKmp}6ASRxX$a;OK-f+?5h|HkV`1lW{-l=bH`G(m*5A13e&TTmm% zFwIQ&y_E<^hzK&~Dw2Uy)5A&=fplZTKa`289;e5^2r`^w_j9234&4nvy_flq?^YHu z-8XG{NE{yGSWxj858%H7jbgYguu6OMP~62X=MemK57I+ceVzyX?Tfk?x*7vmtc5dB zwD&iU`&mX`k8$C0ASA-Fl;4eahOEzFQtGL-h^jzkP8xd7J{+|b3j<`k>0e=C5zcr1*cZ@BW{$N&k!8|9`i~{hxRL|Di_sUq|CuSlI#pb7Gq3cUMJq0xLz* zvfc$@axM*$$nxTNM@GkTrx5D`b4+Kl`I>#+P*_-s(HU;o9kNz2jbfL%5aN{*uCA@U z$=%$}Jc99kvQil&?MeSSmFlKQV4|i`7fR<^<^ty{B8jYk;H|SzwqqO3u|sYbgg3R5 z8;*R$+xStf`kIRUvkcbNbov8Ry{W7O2>MZpPiay}mB>Dw*P1ecFvN<1;Sb#{VU!gx zJ$M2=s*eM)2LY}56jL0(z1t+m8qOl7po_ekkbe9g#ESg4!g+(`)poz^Biq19iPtIY@MJuSFnSB;iKeFcfNem1j~MTD$5@&U(^dY~Wav-t|g zuFlJrT%#N76w-Gs*5bvS`$rVPw5i8#SATM4%NPA~!)&22c}W|hvZ<^Wos{s$S>(r4 zl=OUO7K)DJGl*it6WVZpZfCFJdn8e=iDymB0?2X*5gl8e z^+Mg(_-20os3BqDj(B8t|IXPY@Aw$=Vph-|{p+EedQ;}Q@5zsvO zj-HgwG#|iYKTP^bDZA3b68bO?8%5bu(e)%){Kje1fxw5(b_ODD85(LR1P2|NjL{A* zdwTsDbvs1`=>+L!zAS4K{{ zaRe%f6-=G;#}%j#I~}>cd~S+ZH8;ZN+M#ZT=;=hjK)$8l*K#^3DB^8CW5;%6s{Bm& zLN&VGCn>w$i!3xtMn~7!o{xa#u-cCm9KnA07DMLRSId?}G9)=qX8wIw7#3`8go=*^ zgr>L6OCJWk`V-bpmKmi_ayvc;TWP!ZzN3&Jws7+cRrkhUK{f$TJ}y20MwI{#s+BYC z5rP^*!}NrCRTD1y%F3gGju|`~e+R)CoZ#}v?b-0JnRRl$d1>u7h9%ghY<7=_nRpRk zw@p*Nk|ze{!d?h?4!7d{Cg_3u*B`T4kLbB@#ug|mOn=u#)(8Fw(b~NNH7_Ye0t+Nq zmnU=<)0tEUdHS&+@wSDVa=x-aBwwL5e&-oz0WcG0Ns3&C)H+ja9Hm*6q6cuz-!1A% z`l<%;c=(dJ>CX5igdX}n|I&7xQr;R1zeCF%=!Sw;^m4iqy)IVlcmg{zRgD*SkZk$Y zgF;ea=|39)-f9+*T%~4600nCMbch0Fw61wmaaP#Tti9fenn-d=N@W7HRp|)Daei^! z&lh`g%>$8fU4H*P2QPtcApK%VPv{|dq4@ihbXI?v)r<+gPwUgPO2_fI)Oi8p{ENkl z%A5P)q!0%!O{4;gL>eh}xsf^8GYkz|uXxJq#|YuKdV4o=bUm3LL_o#`Gtj^&eE)ES zBIMT&$=DPWY?5`HTskMTseF>_+Wg`fU1L0xaftzQyBvCR-w4I z@Ww&YZ>}gsM}+V)SuVwZ!Kp-yl^0Wxy5+oxfO`i`TEl;f^gK?I*JCGd|FQi3pkGZ| zAhTSWRu&J~{D~BbT@?jNg@ly3rFW4Mk9@CBb-LLCWKaW+nV-z*pFu$qNn*aV5&9`4 z5uiUid|nptkV5%$vkeSZ7aLeePh23k3O(_r$>6Jzd)Z=YpgG9Iyznf9*P?_T%h^jn z)w_ckrGM-u5R$>>#e=XR&B9PKCli`O``7EG6_t^BILZEIe0n1A32b!F>#`~ZX-j{w z2S7?=(7J<}vukDx!X|j2^2~fH3DJK0Wh5_SnCp<{ZId7J)5M@|AScffG;7^uWzQyv ztm3hGz9tq)jhkR5u#7YK6ZsAm=vJoDF>jLd1; z!?rH%a?A7B(m>brl!v*#!`MzvENre3JX0m~Naqz(-BHVH5_G=nOo!6TR>Y@W7%5!qn zXX~A}X?#TBZGXU%L8d2Z;cVQ4n!3^BGLg~MIe$ShI6Rc1d0jSi=#OdL`Y3{f=AF)( z7)R}+GddXl`^!VmDh07(^=0+7UAt>t4t~&Q>LEB>^I6hiaCLXmEt`3;ix!gHr(voJuUPjhF zeXcR`>mjEQoAQOyLFE1`_b>Z@aAf}1Eg18EP>T6;v_?%gQva|gUUl=nHD;Foze@MJfgNX5McuOgE%|W#FH^EE{B)CEmq5zVJ9MA-y6iF)I z53`zJ>`);7Yotwg!P}#Ky9(xt?BR1_UsiFc5vNSq2?e1fM&POS&w|IsdP=u1iDk%~ z`ph6#m^tc=?P)MaC@DmLsFiz)^U{|s=o?y45N{t3G^Vz`T?zM)ro2(V4;Wslp+6ad z&uHrW_#%&a)Ba`N##9xj;Rx|{H=V%r`pent({`jgCKk!`zaZ)JdR%@_Q9usYLr%27 z55uERdC94H6SBgH9DT~}%{A>A5ofI;R;KY)m(HcsvVWs?RVjxAtN)`9DkF@fYM94{ z|CEzTJtw#~qNc~6xt0wY5Mr|(tX@PlYeG{+gcN3d7G{t&RPn z@5yd8y1DRV?)S$$Wvv>1d87`Mc`VesLo34q;d1?j!IJ z64~DQpn(}EZ$1XfK;S2@TWfyzCVMS zjXzk4tmCvNn|wa&iNm>TiogU0Q=Fr-6xm!tS>&|Z3Oz4_iK;aw7lvO)_nyfO&hX9$ zMJ2eNhX}LgkWu_E9a`$#WGYoy!rLz->F{w)QhxqZIFQi@-zwfeE9z0}#avfn(cYqk zBccpM;7}FLmw!$^`K{Ydx}2hF+ypRYE1~FuLa!vV+-uJ9ja-$CQqulZvAatLYYe{A zpaYU>1$b#p)U0-v(b-eH5mIb5og(gMOGNG-W)9Zex>Ikrv2|T-NC@t_DW?O@uZiZh zx_&Rrs+R{?foI-nY}7GxCpuNRHByyD`9h}d3O6zcaO+aaBw+#n24Ry)YBWk6uN9z2 zKK-+*yVAc?9Y&sNc?XSRI&U;`$bWpC6q6frZE@@f!*GQte{fVU)My}>;Uzm{(lf+h zo@ldD5@1WXS*4b!enw9s7z+y zLXOI7pDH;-`1*c{P*`tvc;Cf=pQ5*qcN74FHm*e!Q-;oyKZ=qAn~`P`@-;+5;O0H; z>9bkxX)66Nyb~|-91U|OZC&|!yTw;*@5nzr(}V1V!8fnaJx+9u)dB1;NBAo|VuTUa zb#dcCm1?;Yhj1iVe`;H5W=~w)G=>0^iLx>$0wVEK_9j^Lg;4y;UemP6I;2MAB}NK$ zUm_@_facVvZB99OO_ID`%%^$KW)2?2lm1QvxS75$@Y$|oD^kL`~p%n zI9g?fev6vh>ul`N*sPO(wFN3yQmZ_vHuD?8{KV5qQOuU~a-rk(PRtwx=9n1oFHlN= z1dv}4ine%4Z1B{ljq;cXCJkMckwN8efR zHZCta@Y`c9v}wgHmazAExo7lZ0>3GJ{c?|-RswJSnnxmv9NRr%iaHva+#Hx)sCD1} z-HxRqDE-NH=o!@zfP}GWV(2c-t@-%i59V?0>>Z^}VwS|;(tg)n2>-h#iI`P_RB%C8 zw4Zf;i~FXNq5uM(De6NFIpIZwOD3!R8-| z&@-#$w7{;9_hdkE^5?Iwkv~@5*lp)wj!Is-)^X-Z@LbS6KKc5Z&7skRc6t|wtKlh>puESw0;5iMrgTs_kOQk(La{_XO7>k zQl)y@V%wN?tOiSUIa3nyX4$8UiD@_z{c?wNdIA;8WT#$3LAuu8xsIMqCHjGVi?04& z$|v|F!m5zb-$oXwkU$Q9&&@|ii@8tYK-Kd+8|Hn;B4k2MX^>iCHiON=#<=zJoI6AU zpjM{b#_n591Vg^7sN8ntj;R0-?$3ByvMqn#MRN;8X*MLpjz(Xe>E9ORG(@+8=&Y_hW2$T6bn6c z(^P0@YR`IaHWL!ehGi>|Q?fR}24}Z&WTWVoQ-B&s`xZ5Sq~5O1VHG4KVcmBycv>mv>UdC;NUYG(UUi4fsd$<pZ|e#Akv&P-56eulgf%xOf0H~HKZxJBB-bK zp{~QG;rivdI7ULgk0rh3r7=rS*O6~j?<{hH@fPMJ^)2&N|L6?XZChuaOv)x*FhFy~ zl@1JSQ;`~9W^Uxxz)2iiX*i zg0~WWwe*}WkZQX(s0#R7-s8bW?7p=d%@EtV@T15$kn;Qqls@ z0+(G+H~|2``giqSK?T+r-sKLimYZ@dj}g zd%xUSYp|9NW3Dkm+ijaK@vWCqG5!HFM#(8k*EUQ9&U?nD;GvBF)10VAE^%^l_O7=s z!H7f3P(L}7M_QAS=8+6@;ECZSDpLW@k9z}L;RyDt;`u3g$+M{4>~ zUqG}j8DH0W2s>BqSy*(Sn9+pvc%GO?-}&*n;tzqKw%!ny>iHWO{&d+ci&o<{{X5G$ z_DM`P_jt8(CceLHx;n|P6VS~+MoPhjH$InC{9eD|+cI9{@%&lS3k5JA)N-NL&S2kv z+?GsN%2c=+2PN{Yg-k6Iedx?SGaD2Lc#oJEKh(Lo)X#{a+~NMpm`M-V#2BWOSEb=F z|DevujMV96D?9lYo+}5i#q=A}SVf3urWOfVh!G5?s^5l2m+T4temtw$x?`p^d8L*C zn2S`}yJ1p$YoB5l7;}Gaxj#iI%7s^dlC~zEgl730q7mM1O@Op?bi1*i@Lrs`VFc-} zDbn^+x{I#PGb;r>sQ*Qj{`R|jV~UP5-)+@`4C$vyf{?jh-90qt1EZr@G)?L`AC=A0 zAgU8JrqBU?TlXeK``W2yvZcP)eZ%P-eFwY`c|+;1((i;L6%&sDKvn~I#OG8zJ~Av2 z$s|1Gj0_#Ev=mo4iA)4c`R5+=CbVe)`x?RAEhJWOk!3>l)%>XOIt3;#0!v^{uhsM%wZ`q#}ZhcJ5Lpo6wE5W4@x2?V6caGIE73SxQu&qQ< zE9Y-f&RH&$xRb&fj=!Lcs&Y}%rFnBJ-H}QDC~q)k#Ky!?O8?&8`vW`MCXT?{2=bj6 zb`cenyIL@)mOS@xs6o#?tS-T@vw|i^uKjB+M9#H|TfX7&ho!2cm#Yzd>BWsKd%=jfDW=<{GBY zeZx4{Y3X=-?vIhGVVoo18j6_$tc(@yc zTuw&b!(f)=LEkJvQ`|ul2!lAoeZcp5b;Hzn<>1DV1sgfKp$X@>A9<3?JGG9bbD-M9 zW!*L5e@YN5sG*_ME*up*4W~ z6uD(zSX~whvl_y0vvlMD&IHo8$H#f4eWomEM{`U%{zs-{O-OvGVbpY;SU-xmK636a zuYiGs_)N2{R2fSM?us-(N%z{xf%+vc zp>Q~h65US}uj)L;oqkgmkg07gi=}MegYzV!5y3jUAANw+Q<)fYKb&2lVp-2U4Oz{^ zjCPNM`9vIg(p>7BSf=T#T?E!I-gIE~C)@o)pEoNa-LH-DX+k$#eXiLUPSuS4iTw`C zQO2p6XmHk@*fk#nQ+aq~3t<*c0$c}1`V%4I?C{3q?-E{!CmSpg!DR`a;P>dleCT{E8i^uHxr7% zmo9XnacQ;;!JoOtZ^7}o61JM1;OeEGbq!YLcueLgg{J9A=W<= zPsMP7m>Wu0SguyeX-q!!TK>sQjW8f!AMeCH)nNn(7l)Qr$+=ihh(_)0`Qxp+1vGO8 znMc{{d+(*HUAk^<%4y+q6}aYc#s%kAcu9C2j_g+MODNOEQ4bIxz7$CE3wQKVl!>$^ z$<(joTJs672<#cgnhk2-^Ui6Q9Y096uJh)C%lV!mEmT@WXH8;2ps&M(JzqfXssY!x zF`?U+b!pmbA@Wk}zHT{A=iAMaw(wMxOzjAWTB$%ISepC|kI|yOgio($O2>Zj6dcY) z1C(ZU?WZLS%GVDwrbK~Stt&sfxEX#*VWmT4@A^$Pj}V_>ONk=pEgX4b>|yJ*k|(h z0E!s<)!G&^QLlxBoK|hW+9DT2un*L9nst*9HB))n4Pys_mc#pGD~x3o>(&6J%l1u1pX3)no|@!)OKl`acfe`l+%l=D13Jrai%Ki{rDQ;J=flu{cC<0 z$7Zng8s*!zvUEYkZC+>tX3~VUalw`D$5Xj2Go^}t&aUILu!xpE-lcm;lmivL!?vM-;n4$WDR^7& zSF=>$XJ)L)zCP$T6@Z*73$$v`oePr%$o&|qBzUH~04JOlh?9}r0! zL5|6(-jbsi`|)+LP_lS(GDDf6bKzI6{3*8`(L2dpgu@(y)5mc}?GaUja20KNgSZAi zw$*f)5%)Xbm#`a%v~ibQEvn{+HMC1C^@hgeXuru?&w0u+m`I|1YTdIi3o^2>Rc7Ea zUi%>3S(7+S5TpSZgZ%amTJ#~rD^Sw}#fFFJ^M1<9T6#6aBpTl_v4#8(1 zqr=#Ty@QbBuEc@`wcu&X>e?(*`DsPeCMa{_QH2Sp)Vi5gZ}|jk)qq={xR#h-FY-(Q z27hHJnVn8Y3gFPvGkrGZtc*6j6!Dp|Jo?19!DUUEiOdhT7~$3?Ur~V_Z)U804B_Pw zS0g(93Nh92Pq5mDdeE2SdsLVQ7XUV?~mFcq$mL{1v!I}GSZG~e&g(phXb2pD3rL6oT) zY#`|=!e{9F8It9U(og1snr38q(QI!1lEGR~rZ3YnU+PvdY6mZR1;`vTSYg;U5!^Q& z`KFM6Ib%+m<~PNs3~3>5(Sqdf{@KDK9~LjT-wyBioQZ?X8bq;}5m!x>Qpp_Sgtt}b*V1er2PATQ?Lj^(4Gq{$aP;=I z@!e)%X0Da$ocwZbT6Gy#&9247*|e#5;a8G^#=GA}(GWpd*<`c!tJ$o&s zD;kmxD|H~p#rZWKFMtmdr8v5mq41Rc$oUjr<)nlekbWhD5{Hyz&?6)9cC_ZNSfE^X z66n~K^Oc@A6NLO8DfgroA#G26-LL2r0LZp+2)=+8sq6+ZhDz>HW$ z)^*p>az79-UFcX!d{2ei4OG@Q!|Vk%l}?K%*{C$fQ~+L23%HSmZ$3{u$#Vt-%PD?N zIXa#?1l>E#>CV6?R(ge(+ z4Smr2))qUZkRiH)GFM7t^E%sy$51>!;*+% za=)>me9o@hNh7i8!qL}CtmejP)D0#QLwUceX>LfN{pkNfZs30|AthM`>wH?*a_^U?KLa*)im+h z?I~;#?53y-4Ro=#YO+BEORX4AufwFZ@1)Sm10K_QN0yhTLjsYc69vbxTP?z~xEeEC z*sdeb7x=pvz$b>{!7-4~(u(U9jo^A~6|;#{Ej9dvqNNXeUFe_<&*<6sAoG5J?dp(7 zHr*CTa@wcv45?m>er%OXb94)Z_RbMqkva^SeTiZnKM!sqm0(fl~Y_a3SGs&qQ&Jc@nG> z>=0xf%zVtsUkZI!T)ZjR0QKt9yDiHp_^=vHFz$Qgnoj$V;9FPnfYm~{JHq^ybRUR- zW%OF~Jcm@)@j;_#T|B@AHZ5zF^(H@hC~5L^ggo?Oe|ZdSG@$2oJJs|=dQ~ycJLau4 zi>Y?_8pU5YX;a1nvA>sBzpiDR`+-}dM@n4Z6^OBDZ6NPS4%V52Ul?h_k(4qVBOc5k z&uPJ9#nS=MexOfB;STN(k6-mFG)Nb+GZy_qW_S0fv)hbdiYDHE?6G}(+nY-D*9hq;(dt@`Lk!gehppHQVmCOQXh)* zY{>L<2wOJQtAY$CUe%97-&k%@<;DN~ORQSjGL8JPFMZ{YpJ3;TrqEG=XZ61GFYyTN z)O;l-TxcWk7Ne}Pe$78{x5=90{#|TTdvc>r0eRn_^@XQ<)RK)MYGE{5z3QuA0!R6z zO#)7Xbcvm`?A*FQy=lxz>fEUnEVcN)^Z7=_fY+JaLS)|j-)b5+fjGU8z}xXBKJ#t%qOa%xqmMbsKeA)er&b9^E%kq#Afs<@fQPnBN}H4^vE zHvlYZe5#{S((wM+jC^vbYI!-NN(3WE-vQ;OIJ|7JKi<&B8hvO9zMORIvaFrNNukz1 zIHoM@ZrI3i3q;DvD4j+fGiD$}lnl-- z{E@_;_w~H-KvL>!u53yDz?A(BRF@x&(`2-L>kO91ck4wbNejSux@4khS>xp{q|J$c zAn6&6(577hc}Me@wmMn)%;vo%g$?lOw-!FZg&6v7!R7S^;+fDed#j1hWk=m3v`Y7# z*po>*gupa(qsS2@l;RO4zi86Q>+UA-u;v&e9!eZ&s)?#KlD#EFr=py_^ zkFls@$cWWJckX92=^cH6H4WShLOAH(0D%_YAeF?{7YtU^zDCULhT7;gdg zbvS@g1CpEymL26cZ}0M(SJm^M54dsy!Clr|?-7aNPS_Gn_|kEH|85boGAu$|VgbSi zw)Hi&g(tpYWs@rg9>t|bDHj@nnffd&WdG-w>R0aK-1#Ke1YY^Dpt)e!q4dEUQQNWsW7@#djt6PaJku}m4 zW%h5$kOwQD3-3)VWbOuI#|t){V>sC;K14!IsqCDW@^UJPw^C+2+uN2P;cgofSq%*W zh@{q=hE9A2CtgV=iF2GmYTfT&4lVQE?iT9b+nhFi6A3E5mI5k=*hoO%lOYbCa;bB>g^%Yk-?H40Lu$`yG#3RoWlr-fMU;W z_yc8xz6hR<;Ly_c$AN9aCCjh?E3q+{u;S~?OK5V;LiQ8=%#MeB1?C^f6lgE587Ez> z`qA+9QxG#ovyXU>{uo7RF>?&=rTL>q?AfBV-$(Hk86UETKOBo3YeCTihV6T@6c3l^ zI{eW5BuUeJpR*LJD}LHAI_*Ch1}uqg%3$7{KOXSgZ0gF|o~nl1>YCW^j7T-UeJC_? zst@_DVDLr^@Qf&>aEP~~l4e$eq4C7!;k+6RIf0(oTHII1795i%);Yz#4d_;4qX6rj zfYcY4n`yo59vuZF?@9&-s>>-+RLh+zZUe8i4DF=**?eo{flI{!Z8_6!p)o>eOq~(T zor5@_r^Q8G)x!{jk>H)S(BnM$X^%}ZFM*7kU(=GaP3X6wL8V3kn*o1X+J)Lhu7a6uJMzOvE_2 zfK|k2;>za=FyB#8%HXlXf?H-8ndXUesM(H{zTc!2q!}0fesMROi=_h@k*D>uI@080 z6xS7rxj-~O1QQ!9fTSrICB!*sK<~i5dP*0=B|1lAe+lM<2zXi^_tBqgkesO9l4RMZ z?_Cj^Bp+-T@HmcRV_Mql9v^X9AlqIH^#rGue%NC&A=_+u<;w29!aEK_eB;l&SC@IC z(toYAQxBxg{D65eZ;YDMo3O)c$`{*Q!eNA4Unl<5HTF_+Mfu^S4cdWr7=1hWO#u}?i5mH{cbn9?F9F~c z8(XRP=fmm@w2QZ#A+2?e1cmBGm!R>^296%qX0hIdVmtxWNNex9D3AJ52WAt!>!*7fRKwn3JES^9`|YZI63>#5b$#af1O#iBpmBf=7e|O*o8CLMdAIU4niwPj0uq)ZW z<8mpCPWQMQOp~iQn{m>HXPgw|u`Y?^RE?8jl6pZlK%2R~Wv-q3f>~mTE`*#}H0hM8 zdH9)1vLsxd+tuUHFtDNLFlUE|0zm~3&@{C)-dfDwk&}eGQ%|K(*n--07Im8dcN_H|Dvpy29&9ZI~(t2ebMB{H?D|Qm^Jgz)(Fn zAvbF{u+G%3HUz`VbhA}#LQ;0i)oGm)w6c~DQDcUt0I_P#+#AqHpzcSIjsqgYaQ#OE z&-+Gw$&_$yZiCF)$3?uB?K$%^$VX(1$o&%(yJD<7;aPp$%h-TT)?9%HdL1Xc2SE$Z z7lGNmNA_72b9B_Eu5ieKjol!;u{jF!TU@m^`x*}T8mn9OU;N~)_u|caK?-HK$c5RG zcdgm{6w2$c@S2(-Qp^@zi?yAQ7E5^%6A6&U9F5=uRC-L)D2eCsA+^;kDCj0|Ostg* zv_vBv$pAYN4Tb_Dx^#s0kLW}k?lT={Ym}Pb12c0`-l)bb7A(?KSRWf2=kGZD6JmVy zW7oFtzl*JFLCfn$m6gymahPQyHGXwvJ;_i$-|W>+J6NOW*2RyyiNB+AN;=PEoP9@{ zQ<2G%Fgi!$39BZW$mEpO!eaKw)Q8DSd<7O_i?frD)!7$-NI*b79 zF-6aXNY)>1Z3b;MviFbiWG)x%D1)pl9?;x2vy(KUm#-D2IIkh!rLor9v;*%D3qK@2 z!^vWL(lM{Pe)~;DdQd6x`OI<=^|agA^3Zv1LQW_DMlKk<)ClpHkxF00is+y|A5;Bg zy`{9{j4n%vj5AM(uFMaDR4!198FCFJ!t`0Cuq^)eq4*JYxP%mOUghg^p@%x@-(B*F z0YS_^h6#beH~V3zFbHh2t{^zxJQv@eAi9{EZ;)&p^6mdEd7BX>CBD;^D68 zWo{!HT}wLy*>l&xCdV_pC0u1aMDZMPn0S+{?D$9TaP-3?npSHJqnDSXK_(e3-isgg zd%5UQF?&&dDLiNfQ27mG8Fjgp3`2HZlH*M?Hk>XBoHRqU319aCXvgoCmy#!%6F2+v^c;J2=J?ge!urL2!Q;k2nD-^TB&! zVRnhBPG4IwQ6{>;_L$D7LsmH3rt_d~IvA79PZgs6{IIz>fCGkX7NZ31ic@mDzBJ*!EQ}VQ=IwW2dS(@IG*ZF*srjL z36g?{-A*j2 zFl3lf4)!~LlqE#l5^k9m&u(xeP>e|)4at15G23I+x zN>==-q9c+0?nl-?TLry&h%So5-9?_oG+lohSC~{dB-~I3CZbEt#>H(OO05i6} zxe!8Vz!>8pq{48n2#N%P98t+Ga^S+!J;#ZhYT+`!28t|Zx)*LBT0D=lOQ)syE4WzA}jr7~EEBSBN27l=O*8bj9atbc3`a!7kty16v`Z+Kb--i53^t*Md)~)v;zyMj0at6qbI2w%>#qeZn^tx%?;2eSm@VT5|0Kq0-q!6{5 z`pMX$q6$nmX12TtYP%@K>~*d&(08jWl3NI=3OgA#k&K;3%3~4M${Wdxb4Yg7l4pEs z=q_8}c1T|K+<(n~+I9Vf(v+?tUISLn@)nnO_Th<2a2ERw(%Z*x>t)a8oAh2Qym;5AL;o8zH;pk+X>39M4q-=0ZYW8_EA{ewhN3JF6rg9<%Law{BT|@J6 z;}henDo5s{4Z9;h%GD$SRH_?)3&L(wbN0o4`}Py-$>I|`ty!ojZ$-d0cvSHVJ=xs z1a}ihgK{OZ8H-KhyQOw#496*lAW8KbaNJ{RmGB?Nlc(ydvtvX4FMyK@jnyAbuoQT$ zdWFhZUW31TYuDQ91x(8Kyy5WPDpjsoPuvTxLVj-^Z20C%b+mC6EK%%SYxiq*Xzs+R zC(h;*v4olJeS0tOoPEBK?uAueiQ<|q8QX%L(Eh?3#xZ}+qHRo_2gO=UC5nWJ&^}rJ zkqzl(I}V*({fUSh)wxcGPNDH}5ZmqxdA=N6vT#A!3U* zNE|T~6KbfRSCCpApLCS2$5hsmPjmKkWi@A#ueG{8{*jHeIWSOR;)v;ojV6{3E+#@t zmCAwP^f1gK!nD|*BUm$CCh}o`>Ql=F@!6H#IPXK7mg|)OAePwN%y_lT!ibNTp^)$s zA2x&h^c{??U+-Y%twCKFSG!<%2v6wP;Jv1NYp_qS7aUCv+~GiIfJho=MdDG2ALJ_&~8>PY~Yk9n?ZrzOWy<8+<2gp960i^1uC~ z7yl?Wsnn>RWETQOCrZi&r(@0!VgN06m{FeN?Ev<`BBdN6sl}zG0Mw%(L&9sM#`Fs& z6C55g*+HS>^>~G%<&Lzne4_ClNV;MQj8Tlo}REn``~hnYkPVn`;u~;$wJe0;Sa|wcr+aEpl^MywSb9RRf`a?X+;)%Jd^*zjSMi}ol@?d z2C?*oeySp$3Qd#c(Smx`@fVOrry}%ys)OF=4FCN^WamX=D0C{0WuCaD75{>CE>A+W z`8f~0-;6e*({ebxk?UkWum@W~)~KHr(#pImGylb$oXU#G8z8-NzpPdv3s@sa5~B0GG*toyVY{94=9~%PWt-VKjM+U^t~5y zWgqEtj7-jiZwQjx624rAHl9bUP%J7(^$=9>aLU#ACto#_h_)*YmHB@25MO$^DpOpB zJS1W&Vm|!c3|Fv8vE7`)f8}JWafiU$noKuEA-KSC2>J?h)PW<=;YO?_vI`t9z(ph# zE9JzBuCl<{SD6lo@Ya$NcQ>2Uu5+taA(HZ$dmOG)UmY6vnyIOSfC~wrk6aZ{p5KnW zpDmt;zt6lXjIsqX5H|aI8KFlMl;93sH?k|(hZIIOwJWcB%0mZlv1ccqw^XFx?GYXr z8buK=z0u81M^9zow090*s6Q%ZoZp~j43y&2_|Xn>P|hia#IMBaVg+@iM~uLsV4TXp zzrM>}%V^aeI0fLVLS_!*YE{L}iIf1{O+(7c%};%Ln*g~7n;mE7O30$ww|b;6oZ9x4DRR@45{c z6>ki@aK0imzbNbmRoozePjqr1{<`_)oc%lRQ-EuHNxB|`jbPcP>9SVl$EIXW#RhnH z=Xc*Xb34UB`}>$-@9Ez;)R2blZ4A?E5kTV$jO9tyToojkLx6_k(P4Q?O`-}JOtXgS zIG8eHk_Mqk-Zvt4*E5Q|vMdw1#TeTbq9yr-0TUx<9&b9L&D4p@gQ4*5vx_O2#kR2! z6Ib7?(Kk5Z(}o@$prbyJHW(O^Xkbww+#iYz*=&U;mi;+aN}OT(9aUaSv#B*RC6yg} zhkYP2s^vC=+NgJx)|#7dpIWm-C1H;G?;O4j;t7-vChWZKYct9TIRd(pym%mVj(oWs zc(Jk@3@7KNEkoXkW zb1!cVSm-swib+^M1*Wq(cMk;?L1T!y5~GM7dLd8t;5{=i}>{{VrwehBo$Pg-0BlcC=U1K1Hx1@810$ z!qG;7+tZ~yrudFN?9}2^>%07WNsRv2TS!+TftGageeWEQh8D|_3YfU&jq~mJ$kTWb z){~B=GgN+D*INWHmTa=(2Su{m-F=PVE>k|Q;MR(RyIDpIr`qbVoUEKRS4SC2F&>~L z^F2{|YLagDwjT2h)hT=wo&L!DLbrX@dJg|Hi_-^)5ccb}PQn3&1I3tY4#{tEb_Od{ zKdX@>&j9|9K`4n?m~c*9_6L15+_l_7nqg(oj3u6SfK#|wqIqffv39>*kdsS-GgM(i zd`t<&0nBqx(Hy8S+g&U-a@7&^%|Q7fg3Sy`{GDP^V~x=FKUwG0FzW~!sK3zPQ6#{$ zF?8R$t_ECBxG{84v9Nj5*pnoP)4;=(xo_7Q2tOorZXplje&^=%zs{f&e_@`F(n zEu3@xriVAz=<_%Vk&;wF14v?NElDn8_EL|j2ysM7&n6j|(AuM@grxhdr(83zL_DHW}Nqv+c_#G-(su!67=%%%P z(Up0ba3u-ZbC=cx*8)xN=``V`w516{QN|Lh1KCp8K09TL~`Y=0}`$A z?!%Q0mTNYM+DYQ}(F+brYK3iJ;mz<`8|F)cINnzJ8G`Z(AzR75ea5z=o_oXRZ!`+< zDDH200kZ7tJY=4JZSJqKZuXTEP;#iaZcFJM#!x24-#RiGWm}wjFc;w~Ym`)lDaaR` zKv1=wBZGLjS^W1mgavkSf~TH_&N0ol0qn)_WBm%(Ma5XU>IS!@FEjy@RB>{N`~JK) z`)%Z+>#42K$hVtj^4_~G-k`~RcolUyLHMpe!1+fh4v_3+kv9XM(%-7{SMf;%3Fu6T z!n=KCK^=rL3@5>T`<24j=*iD|UL8g^9dxox78nca zk{oAdm>K&-;;(Z&b3A)X)U#VkLr#Qs+#v1H{z*XJOP;a~-K;2?z-aE?_O<53BrqH| zf^U4yi(Q<224eUn{0g|w+O-ZI6lt7XN}xm;PHg%kLG?0#vr*G;?T^0QW3HWE zI`Olk3QSTHSrmU+N|MPm^)9>HjKP0?v3ZJ7MT_uE#!z6sUwrHSP^OHGn02*j_gTFI z54rVr-toF`A3OvK0%`7mwufnC5eEH}a4PI>9OPj27(&eD6hfUW%{l2E$> zfzU`<$NSU%tQ{AmQ6t3Me!9^g1-pavI)}%be43M3g+Ec~v9sLu+F^i6Cnxwh=g86u z5t%Cu5u&UpQl@!WK?jq5M8s?_nVQiuKy1cIw`HAqXA8M)05R_1VM-mD$xDMh@Y!id zHdMQ?_+qt4t#nCq#Xm5IE_LX7&z|9IiZX>0Y~5*x#?yC@8Zl2+K=8w+JH)IqeQhC= z6txrf9Sb!?BI-wSg#4b(dk=wBk;_g(dnX2-g5iyd5HOteJ^voDT2_HZC{B*^aUOXc z5h>8@poZ?$E-)iH-0=(RDIr`BMAYG3&b?*2=aJ=J^$Rk;V8AhXvRH-($bFD~E9&lr zex=<>gTLJ3b_=5+W4qE<6ItK$mmzeS{*v<=j0cUso+=8&2yT;T{r=`Gws&kNJa59f zQp`5vRX9>bP=pC!)mH!SY(6VLRl)=&L)@Mi|^?VH!JnHvlGqsWNj;lXPaTb^Q-`L^`hj^2+;t- zsmbmwY1GYqDQH-3Y0lu5TijI>tB#MIb(D^Mv%}>H-@m-s8LKF7{07g7Fr};bn%2ei z-*oKZHh55}Q5b@zqpBGZWt&S+QMgR01$hghpQSLxloMuivG|x6&P|)N>Z%fZ>N^VfeoiZi-S*`E|*}E(N6^7teA5~9q|3-i;C%t^0>a5)_Q?G8cGrm zk~-CSOnA6UXO=npE~U{feKG{fu)NBN+EGEL-YA6^6B2iJf~aZ4T0 z`L>Sa@rH=>EVW%v^c7TSaz~6I_S21eY7v*;pa_WkdS9*!_yEN@-ekyI!{XJOUvrOhs!w;h5maY+V zlT%o$a}bq2ovQaCJleCM(Did9dE8B=eYL~Ble>4<6>b``ScrlyYM`k?T8yDQMA>3Y z@ka{Nv*UdF4taf@6r;H?pS zu;+YiszQ6PN9kxe)uDgr2!5c%G8@40aI5ntddDN&uw4l^9c0>4ojsm18MD5m@7^Ud zXEBWt;5at(Sa>(^tfA!&rV{2SAdY-=GZCGJraR@q9xpenRxh3is!-nNx7~gp)~#?} zSr)PbA7EFC?5yID0YKZ5WQqcKa+H6fnO{SdU4oDajd(F#N*(`fBs4<%E!RR)X32g* z78U&>5~7meWqxxvXIo)ci;n+Jk9NotTV4^;kG&Fca^QHlT+qHS+@OHU{jh9hTTsH) zDPrky4GWTo^wIB88cl~e{R(QbZC-4W0RTFq5Gyy~QO7PhceFhY@WQyOINx~Ish8>(wm04UtyhqvHIPKP_GnsVsYD3ZFo$P z+Z0tX?gt!$kPrj$r0ZyRLk7SZNGl1#WTC0D`_zqEGTz)pUXHvc9t^6n(sY8mQD?>q zE=mK>sV@0oQ6->+YRbEgx@1-Vt62V%S?_5DctL|62<|PygR*A?TU^Nei)q z2%>hl>sNth*g~+{Fm?bJsypzlSJAMoUzGVkz3$}KEq`ux5elU77+D)*+CSi3rk2ra zmuD8p+=*VLUL-*GHR&OB1nFKT(=<0m5q*HoFZCM4O z_j7Aj*ij7tYocZ4I)=fb^DhGPZ!ow2&(QWi3C#c5>F`f+p=V`c{12zYKY}m+e;K9O zi&V;t90sdJ{VehLXL$(ns=~9hQZTq5u2gWGU+4|1!!P=_FFg6-I`Wki6G)4ingcz8 zj8^D>-Wa5T)P}!?V8_BgQ@y{E+DyFSJ7ejB$~JWy^@T6()hOd~n^@!NFJyw;c=PI&TVo_#8eB8r zFCf=_a|9|A&l>JtcmuQHPMs~YQBXWMWqz$UPKq*X8>U9p*U$Tr0snse@|{ZJOTaok zofaIv)0q|q^JGXQ&GNZutbe?I_n|Q`Y*C0`L_NZ1auf6wFn?vEI@+yzdtK$cy6qVc z?RC<%D0~r~uuNO4M-^n#k2~`ET-a?KDUpaGvTec<5o7ET;^cQ#fmL_+-jU&3J({3~ zrWhbi8W!uxaOl@)4+EjpRqP?z2R~%9aQsbl(*uf4S#@FcY`pps-*iKRO9M1zNoQrTUy3g z6W8H3m>8&vuQ=xE_LpI&s0CmEwzJq#rSAa(=JQ2CW{5<7aTm_hy<;c8DtT|`P zsFqFpWq{Ln53fRf8U%lK7WS(BCXZpIY=B4trx?ifplz>i8a zG(s=0OYh6~c1&z8qwd?}Q=MtW>%Q(A%gIVs4dePwslCrs_>IX~8Nex8oaUL+lM9bE zM9%i;8S;U2Rr@0c;_0unI`8)Wr!M57xBHteLurWIzF8M zoHPzdV)7U>Y&DCBiDw&Z$LC4jsl4(B%`fj|d>7>+r@I=1hK<^G5U+42OSC_JwK)}G z-#S~;6QU%{qwqprOr^0k(GrQ4<~p*Z>*hWm3qzHkBn;x*GX=X!I~EU+VbA30{rv- z>Jp=vKqq*)&l3AjrvODH2SaY}?&g3i*>&JhaP!@D6n7#JkYyrSnaW`Ex`=BexhYS* z1;=BLY19Ko2l~p0#}z%M$==o45o2CWZ5j}M_fbh_4eR_EG~z?`A6tiqnP~OCaoZm( z^vcmyQi8L)mbV?~Q3wSxNpkRhxH(i8NFdnrt=hSj0dClD(DvFN)SX`#Ux-XY;3!hC zF2*ri2?E{*RbIWM*6~kAExr9>Tko=rRfqBo1&G11l|I3XpgB7xV|ORGCYDx1P8`xw zY9iw$9ayQjG8Kz7FMH^z43ki93x{(RGJ^~f%@Ek3YklvKU!ptrIBgHkeY!k;A0+(}_{&1_oVxXNgBt<3@vlWKGR@mtBS1nq5HXA3#(oKVV zs^%t z#Jc}LlYk}3TkydscEQYyIvWj9e|X9^pseTOodiu?Wp~`wi(Z*!E8zFY1Q*qxfzj3P ze|B;`#SK$^D9_womRLoWJ(l@pf*$RW<#U^Bc)qTphXM&ufl%t9K$Pra+~L@`K=2A# z{)Ot(1DWLO;?=fXe{f8Y_H~hdcf12PGKbWI`hyM)Qu!)Z8H@VuJH>{ug8{6P&`leemb|gen*hqfgDzz=wi|Ssk9Vev-yXFYk0#s6w84zs11H`OQ3;DH(1p$O2Hy&inJk>;g9HQ*k zFMpIYs1$@4^^glPX$Rr*1m75{f(JZtox-81DoIU8e?Fw3bw8sCRCYyomWU-SI4d?x zUCBMx!MO`8T*n}*=jmykBtK}a;0rc)H_;cJU(JDopkXYr&p6-;WfzjIkjwRYhK2!1 zrIl5KLlR0?j|`LfArj_gmn6ZX8Q_CbI(}7%7Oh0-qIvy*y0QIGeB)`d7`} zb;KvUU2**QBAC(DL(&Nymn1glJ!y3g$IuT;sz#~SB=+#{Y{|iXjUa$Q6Bhx;_ zp2eQ)#wS*Gjc1lZm#5LDJbxqT7q-1m{mN4B3i;qCxY0mFehDkOJ+-GHXdf3fR_3 zJClBRNTku{f~!=0|D1g4C&;fO!<7`L=)7cqcp0Vf-$0$y!`s5Rk#P$dtC&8Lqt$Kd$XQTrzCmr4i+k}A zX(TMO9H|^hhvusB^JI|{fw$`vI6_0*X$ZbVaD*s#af69NAQSmrC?e%A$m3@L z2tLo1c-DsLJPS;Qs2=boy*I)pWWp3Bj1p(UDKHh{A|*~)okkK^v_v$(sbp|hUb%R- zPzh+JA1;*Xg5S0mSc9JkatJm)_(L^>lGWUhfljBPZ`0Klep~fmDcE4%%u-y@__=sC zfoLN;MOaEcuiT=g{j{_;c+?RK9I*m=@oDW~8+HE7+UeW(Vx8&g)ZE>>qpS+}1rj5~ zb1t)UCO+4$*=iW3gZimF-aHylIHt7GeSBpSKHpT+MAh?r%xMc{cne*H{vdUBv_@O> z`fH~#Jrxl1>#z)!NNHy_Y86t553osukpS^+>g7h_wRj^{af#m~EGb$^+2IW3>|gEZ z|3QHMubs>PE)l0={EzyD;cxvSjZ06X=w@p~BcpGw;Ar)q^`r(jDKbjQ)87^_Emltc z2Id;WiX2+%WSsnjLj27fh_01)5f#ssHm)lH*$q}UJ@xS8+tK;JPgAdAuu^_s1!=YY zp~s&&kzjDT9X!87bA?^IUQL0FxGC!+n0IGQDT)lbSfHsBf$Bxp>4_;Nxdxd9EEj&J z)a3W@Yk}2oE5#3o6bY%VgD;yWrCE|v`NMWLvXIE3u{7IE`EVmUD?==5K+V@CM^t;0 z#@1>zejS-D-&oiifUyC)htw7|)ko1}<+-Pf--66WD^pEmZ5FG8y@_V{Rv9-c9L&K9 z3hz6zIJ0`dyvCs+cd0idspY~rdnd##6m`S`lTXHKT4t@f? zI+)w;qtUX)hq)cVH;2oVmCg`#qu{n7OePC1an(z9B zzEc&CsE>7cO5lUG$UWpSwAQYsc4wL-EhRy z>qqDM&A@;M!xsB3v<1bi(!;Km(bePp7T#XC(98_#A(DV)qe%PNV2_9U`Lsh5I%zT| zF%NyLgWuAaKW^Q8TSY{8VWqftxHh#XPh=)@^F=*V$?-U%qQ{nK7>_+Tt`S>?KhU)< zMsB0VBum{eo>PqZb(Q;iRDnq7OEaIM=Tc$w#=uW70;K+X^QCeyys5?e4Rc=^(Ipd znt%Oj74?>eH`5MgA%Wt7_5FlHw7Jf}%YH^aw6JOzdvkT{fT>7Nc6O=nG6t#f-E+-4 zO1F^P`MCQ*9+Raa0aDwIEfzbbUIyHi~kx{E+p zQtzl_lY^@@QI3_y2hNk+qq)KLx);mBC%pj7Wupq zgVERGoPfE%kRq6a?t?~|)5LWS^yPOxQWMKGYZ5Q zH1924Toe)^$_aJAc3T=vx-Khj<2XWxbNCz>tb;7vc`%E@qN=>(G2;!l8rLGBd*_cm z>#|V}clY7_RBFq+BIn2pPzac4)q!Rq4?uY&48Y61M@7hwSdXIbM@%DRVz(8Kg~I#C z=#-@7yk~7!>H*Q23qnyQuWo+pQAeY3oQsCi5Ey*Iz7+=rxP4 zXU>YMm{gu@5s@P2P9Wt@(mq|*x6`o(-rB<2AsWr_yo@J= zpgTtzDu@dsc({zQoorK1ss`(TFQ@Je-mTTvG}`O9G~X&-Xlw0MjJ?f{0H7}Yrsb$2 zN^G5e3nj+{NB`6%XB$L1c;M^jVh(TLSdfX_%(K zM5q^11sn9OhDVdRN!6XAVhi@j^|*di>!+u)DJodCLmwMAb7vM`9UX9(NOE|8B|zn4 zQB28XElC8{Sa7XFI$crSOxOG&fd|Q-1U@5e{_e`*{LEJi9s)5Nqd<_n6Ng1jfivc7M ztjFKT1`S-9DktDWbE#r;v|3k75XezhRBbl)Y3JY%GT7rNvm6S5=b)FJ_Pr~QUD6vQ zrslkwg>RBz4Mg~L%>JN3ILlf}Q_ya}c+>D{`@KrAOnia_E^iI~V22v08Td$B_KynY z>|U6y!9C2CxJ$F72>-@ffdF_W#MNDCKhDujiwdBIWu=qN-ymLNGW`gYlX#LJOqYt>Q9}Pm9&z6`Qn1r~k_NjL> zJ zxB8PA#s3~T!28aX5^Ieq_LeBrr$#ZDvkjlzxJBD7CILTJhiC0$kvQfgKi`vVZ^`9<-WY3TfYyac|F2*4qx&0rW7 z&jQW$F7D@;U7|LbsXUt13rgNa+f|&;))W#~h?k5Jw;pf2sT9deE+u_KW#o;vfgY6+ zxDIOQ@s6nNm{gGNKCP>8=YU>yt{M3>ytfV8(p~83QB}B3tT;w`%zj_Kn{eVOL1Ke4#mAoo&Csgl4es>b5vk-x(kLWh_QXYt*=SFFesNJu*l+u_Oh7}b}QG5^Go#+AAm zP#ycVZ9oayVT0;O3J~jq1EKf;6E10)vV`TwE|oUJJfmt$ykN91gjx6Dv|d$oXZ#cv zmFx-EOIxJ(Gnv@2(*ZLCMdGM*fLX0H;))kpf0y~XW;Ve zPyKHU7w&0)^j<~R{Drd{t9VG_7-cNCe4@dO&sBGlwMGk3Ss{^7dKQJfeM&nDa5ki% z1c9%ua-BudNL;EfNMVp+&grGPc+Tw26HXWCrcfME;d zwIQb|2u{>)cx7y$9+LTQOWp<-hadQ)KBJfEb!Z5esScOdpqzQK!?o2f0XNU0AK4OO zLYTFB)t2kD*_jowa|q7MPe_e$Mp7RuhE}y%PqUV-!_ZR;DlzRR)P%v$-fz>}OxikriAk(*TBOEI~h!n>d>m=G#3+%4?g0Rr-pDs|-_ zVT)p=W;<#K1x%hM+#+1EKRVF{Qf8j%DSUb#Yl zz%9ES{S5hZ$KpUbJ~>0I`lG_x;M7{Pi~wPo+@O^Z+63PBQuj0Did^^X2}zD&VV{_z zRXN_WZMX6u)-9G4S`4)Eumv2qoBgs4YDvL5s>cv* zr+tb{fZvuBk>dC`qR)OvY-b`-$zet5WmTbYI}(H5%GAsV2`WupsI|i-gG0hz*z-=l zUiC7iUkb9Qz%&W?F7LaNMCsz25Bz;vd?9s0Vg45`VI&6!Ip9~r&E~Y#u_Qx8DO%T} z*xHE-JC?pVJ$v7N=T4OzaO$H{1R}Zib0Hk>=(zS2w%8Qb0qt5YnB>?yaSr<~SCd3d zt`AwLPF5bv(*dTVvAhsGf~r~LHt_J1VvzBT_-B$uUB9m#LR22kba+htb12)pGgF5` zkST=BHBd&lZY_RktP>^NZCOGfmGe0ue^FD%Tvp^1TF%*ceFRp}+Z_yHrLLT?`V0#{ zWL7%T$MlmbVu=ZSXa@iC%^CuUQy+*Y1^MYC^;Mt!y*ZzEtfv_0=OTiJEHTZw_(L&i zpkZ2|0|bXnYM3QFm-zUTQ!5P07569l%j?UMt3!XP zvGv9r)HYz0fdI7kxE%UeMPGh?u^vwt7KHrjhdfD%t5g~e{YDN$`r|eaUx^&M?eDO0 zdY^ALZG+0z)BT*wotT9_@c?L((3xUxfz)TD<88LIurEfMg zk4WTUSnILjT4$taCCT^Z1O1z3dfv0#;QTF9-jj#T?vH@{0O#7lHOlOeW z)$FBqWMrVt&tN@Ukn3iWaE%Bx7~8(Q>JXc^oieFWu`s`;T@-v5f@h+lY?>7wUS`ux zmEssvvKT6Ie? z(O!u@&UsRztmC(ZsvBPGC(E;d932f!@5Wwc)JdOC(S#;wMSdq-HL!)v%=u~%EkhPd zA!TDFEWFu=Uz*XqSs7ORH0weOVUrE50K#nN`;R{vdX!&sr1me>`Cp|R#pBahnF6$I z{i{&&))*t>Bo0MY9gpCkWWQU|L#^gCOep}n$=1TRg4;mPLc&kEDi!_n(An?)*&q3G zN2~TE&7RD=l{my5L;6bl!=^r@4incXcvOtnz?f%}P(a`p4%P)GJy*h-CqGz^e!aGl zdKvwE%A{7Tcl9z5>_WJSWhL*9drIwytkAk)mJyb%_5L2`7YpL#_=gR&al*l>GzA|Q z=s*D%fYXlAia!1yh~MT8B?d@F)1bmCT9-A`SNSW|8F*X0yivkTKLSVHXYV-uYPO`F zRv7S9QMu0<6<8rM6=Md0zPnR>vxu>fBzK~I4PASrMfG(5xb?mTg9S&K&(RwOSftoL zeuTWDn>4xe6*|mJqnk{FK-!co^==kR2ifr=R0j3dV*_x=kjJ!_j~ctI4ccNMB9R>% zDOs8V49&%ZzRGeZNWrgQuOB!~^Dm))zn9tC)&KchPAAUaR-pv_js`+hz6Ja%_tcK; zbkN$fIpVvFzkw}em393f5Y7H(xKTD0kni-`XT=>ObRj@XIx$lhXP%%}lv@e}=ttgo z;(ho@^hmCeY{oE+Xu0L|)kbk=Yq|!&u`t~u$veRF;&d$$KtI!V!1qIm9CHV5zixie z&U1A%$oKNj&nNc`_1Iz8CF}p~EOo>>1SwCuYKun#6`N=aZ3-2;eD| zw2SIC&HVLJ-gcV-?9Ra^>S8QN5dJJ>c7t%vGv9Aw9ys zn#p10*!@31P&8Gau9cz+V<~NVZZPX+ZangemCidy;k*NJbZznz?F`qb;Ytm%eYBH2 zAjn)f_M);lz2q%C$fjP{y8m1YCp&-kiIM)Hm-4ZDeXJt*$j1KIQifXGlbH&n;OEbN z%0gn#7b^s)H+Z^eR%n4_z`n4>C>|*JMy0C3B2D&1;qk76%YRo0uJn1O(t97l?)(zAeLwEo5|*_%R))TQ!9)#Howh*w;g@B zTz>RyqkK4M8r171IoQz?6_EFVdBi>M&%SCYGu3p)1Ui+Wk6E)xyF5oC(+U^Z4fP6GDmM3TC$))^y(D>SDJ+zqbF`1OHK;K}!{WnAa;ch;uBb)Q?2W3y| zZbPC?L|nX2T@cr(WOk13WB`f?HUfXk=GN{-*EZiRq^-AZeac5$$|B4j*Kl#glq|s? z+9&CAh|NQV7jf@suEke(nrbX(XP9bc6T}9#QcHt)u0R$sft!8tkp&K3GG@mb1_ zw8pe6=VYFSGSN8R>st#--{9g3P>Jy{05QwG;C{cl5!+*6y`YX)6wuEd<;Uua~ENABs8tj*Vpp;{udfN|BhA1MiszI)e z_wxrn?RKo5N!N2@n7Yfy!Q!NtvWWim<^23V%)6; zp_j{`^I#AW;(q5D*!aj)#dB$8xR-&Mt(__zBBv}p&fYqD{G)HNH)SlJgSI7;iRhV|oh10;MNHv9)AG9afSh_%JMB(P9x(6E^yLVg80O)ZV!Y zWov)A=4$lGw#2CQg`tDoV|`YV-D@b|0vwHhUie}m<#ui_5-32Bc|dG?{1YuulA z?e!&8=}=n_p=_NQkYbb8^sglhvfN>2C#z|0r*EG9r}&Y4gzTKSGHeC7b$(6yiaHml zkA_^n8O%7U-h3_s?iAs7?@SQWI=nEt6qS8DHLku1uou!P1DwVh!}z|nOQYd^Q)1Qf zHDo>SS;?7>bk7wkBekw7wTEV@Q7c6%9A^gdgi0H0pu>L+3;@eJip_F+4 z6H)=n$Rj^2t)1XJc?-xvspx81_dX+@l$ZI5&|vO4u3*u2mGr)@HZ2bcR1Pj%?s~>W z_!@D<3tx~{^u8eX-Zcuy*YBDq^0)h|d=E&p-&uBTq)Gxti!NUdiE!6Ky>Ud-_U;`@ z-&dL2-o~*!WwJ?$w!kOryU0uWq-0@=i65;p>9r;7a!g__kX)0i?^I;f_y#H3Nso?A zAi@CJ;)PaY&)45<=M1>fj{u%GD2XvZLx)6?hTr!U@NY6gFiIrw@N5d7mr^L*TU& zbLiwlSN7pW@wKKlnt$A?ac^2$9Vm~}s(>gBb~%N3S$9)59=4E!En0}Na;+>qQ`@ln zsLS#Pw0Z7|Z5Dtl# zihdO(MKg=|$lcqZjEoSCe3#|gjT=|nfGOypS~PJ84CTeVUU=3#b|l%q7(oG(jR;{V zVkIcdwuo!FHC7pA4i1BZBuOp~PqucC+}#k!XjPskH_K%MI9cLHM5qU9T4GL(hQq6Sl^SnqVS! z&pgCqwxqMv-Y5njYO9o~lFGr%?xMl3=Yh9;^m^ySPlFb-^0= z7~_LO?Gs;;24I;~Ps)Cwp-%!=wLJF%J}MxZ=G@i3)Dry(fV5{CG>(hTM^OX-@g;;W z7uX~}ho~piBsX!HCGJEWqa&Jgyz&}Qy*`wQ|Ikrli~pwsvb*!HBa#k0dd6^^zdPLd z$ZqqUy!Vd_&a4MENZ>PGrF$1cqP7n6<-c^`WpTibB;F9jLXP#F5ycRoOv1{b?ldiy zafR6MA%lQoN#Ux?6a(VvrC|nJ;)9ZY!}59O67bUGfAbXzbD(97L#=ni3EE`mSVgsL zno6|U-Y9Uue*^3?L)V)?ot;{+wSXasB$G>voYDotnitZpHI9(d-^{O8em>!nGwHq@ z?G(;yxCtX}4BEt21nFWV@~-iSn&}tB%&u;~_dwUD)IfQ^Y|l#E$oL)5k$%H)+eBP}A*3ee_TO zyo)!sVC~A-Bb?0bTgAb41{Neac=2lW)8FV3^1(X3BZmh(N2@R=9vHHoX0q6hVSA^9 z_>A1G8uag2#kt>sQx}dMgXq3<0vB2YV1WX#UP)QUI7KP>)>t}HoB(M^z0RA@LZ%}5 zjf49~zkF_JKn4CrFT(HV#Jf_{xV%Z!B(wixlZDV`k`_V>9FdfP%)-3kzd{Q|yh^-t zg5Y9$n^RNQ@>UwW;R@jOdASNk?9YjK#z=b1%=`R#;8WdOEzEC>vK|Yc5kdy9on#(L zs6$lzGbwg*7VxHq;`Lia1M3zT=8p)rD&X9NbH9xw82VQbdp`Vl#_m|vPhRK2#2As1 z9SA(n;jTen8IbBbmBsP^%UhxoM&3wiWn8D0qELrU-`FE6bCY;%l`wM#yy`~n1G!6? zNuyxz&y2b=ILhl6N3g6REr6A8Ga3LzBHZe*pgy{1Ut9V1w_n_9h%PB%b-NY;jJBa9_1K zN9P9nIp6QvxtrNBTZl8UA$*Q1a@9bt+!m2O?cDB9Y)c5m44Ef1j#A_vE(gd$8>(Pn zc2K~+^&XF~Dfdn?s2_)SB&-95twYi;)E<&h0~(n|yiG>TTYSLi`C*g6X7B<|^0e^R z6X`Le`0h)LprN^)rxS@?)ox-*ji@dP<9)#K>?KQY{bXTf`t+X3$ID!V*G|{J7C*G} zWwOY1V=G}R1kRT1L?1s}H!*ZLDYT77TaZNY6~Axm$Z{0WvGK2na&JAhp%Y?8r<`PJ z8d*;%o5t9w)4dTT9}{UOF+$$Wiu2M7>Act(1+BZeeDB4Pq}|LGyZ!4=yz$$XQX@u3 zwF$lIW%<{ErBe- zpH<(>m^xs~WMCaSM4^B8!qyqKO z8+l^)JIivrxoR);nNw>LND+Q5A3$$hSV)ySp8#v`li!&Zj?+UM7J}Z8?C|){KNz=q z+b+VcNYAMI0XgCANfH%lHiwES`Y?O%H9yU&w zLAz*7Z8B9YF7-$kymAa1qd&_lnk=zaddfid$MD88H2-ddE>@$Sv(yz9kj<1*4OIEV zwPYruyNYXL`UW(L7IXOdSS$YNAGcXtLv0rmq!Tpt+_8@}$nQzN>0lCHirhtXNQjG0 zFA@QF);$(TDt2oZ%piMTB0Uq_5r0GjFy^Y&_V;1!!=Jsfo&R9_`h?8=CnmCa1jxDz zGkGn(v+qyxFGE}WU8}-oPGkQPD(R+R>B0to4FOg#q8YqN{X`{tT( z{eaK9q_tS~cKG$nBDUomV__h?79fJOU{@CEkN>iN0ig1cKnR0v>s(Ika2 z-nR9^KS@TPC8~_GrdYli`P}YEw(_sCVG5VtUBOan!L62w<*` z2f|v{f|?Bub`(vp*>yx$hd4wc&B^KAoXi(G{wQ;w8I?u@!&}Wx+9P3DU@=!d4<4fh zR|wKz?XI?1vMd~O4%Kae+K~XS8xLB}@)ewZ}TUp>88CvM%?_Iij z$#|McmA5`8&LkQ8uH9;f>|}PMX4d+6bc2(&|H1xf>tu6T7g1HW#ac1Y9V7&BZhtrf zHcpmA)FzgG`qTOhy!q&}xnGbD=;OJ{@w`ik7A`x5#NQaWSDl|=TrrNFE367Id&N;` zi9oiYOn>F5Rrivs2U-!wn&jij~5s` z>W*X6L}KzO)DjPa8DOyl8qQY|^{uDgM5|KOWihOl5faK-KteCa8jba1j)Um2ET$4g z{hokcdO#J~Yl2@1Am(Jy=mYIXWGy3iYvfzp&!Q5;j3sWEh(8!fsw#-)7Y z=pjY-dKp_!Si~(#;t|_snj&HMMQWZhl{w8F^=0{x^VM6z=p!z{xw$&`tYcyy*6(X} z!BGqwl*ifYW@G8|2(Y<&@&LtH(kASH6fFcn2IchF&Xhhn(d=ae^No3fKUp2~sVa<} z56jfG&o`>6;%}mU9fXLt$g3|J7viMpXpPUwrbBo2D#2R|MGg`RxASn`NEq2lJya(^+2@xt_>R!C0LI()>Sj%QuoVT0sDg`4? zLRO1a*%pI<1;S_Hpnf2p?P@Cxo71tB8>=onS`zz!qKzx|R0R9r+(4tGXI-~$#Bc5C zt_9d}CTP{m=mphPF^7&WNOOUL;wg7(5(w1uA{wdoEz6aN#9uu(4-8LCF$@Pv{zbZu z!tQC!l(B4wv3WtuQ9Imp4Ft{X!EaWzKD zM4i()PBj9vq&>{q1BnrR;_4lSG${Mh0RHYPHk7L$a`ujM)OdoaN`567Z{^*)n$^$F z2g&E7Mz!-}NX=R8AcA{3d@GzOBMsY&KR*cFKV)>!swkj?iIv^t{ha-vL|id9FdyP& zALV1f;a9|mYx_Guzg?Uj=AE-%d+pXs*DvFGJkMbOh{SJRJi>K~+@wTL`4`?M%qy}i zuIXI7>3`YBbIQ$8E7&7P-Nc;x7v2xeK3<1C-$-n3N*wY(tXP*TteS2%pxMg&RLHOd5B?&!?g znpM?U&gDy`*KZ01TFSN7FQ`wwUNdUqW#c&2PTUh*JnB00nklRxMLqxt?rXwg6{DJpG|dl{Joo zUzkUaGG#41P@D-a-20c`^>S4c3$6&(|TZaV4S6kvbdVfpznaX9HZ$F z_OpH>~ zxz*4RbzYPl5e^s3>J6~Eu-?el(9U!&UfYBbcSyc@lNYMAgE&ezLrcmX2Yhv)V#2@% zL+pp*-<^+Is$F~Mx8m2Y2rkm>pRY5F$_iv($F!U=<_;b!1Mb=o_KYvI*?!o2&{$X* z?;rGWi%|Z~()v8(=EDvsLiUWJ=srE*$m+PIjY9pgxRMd5jr!~a;w%?Z)S0e3E4E{{ zriKa;a@L-Jw)mYG;d zD?jXhAwrW}QB4fw#88Y_|0h`{wc5HBd%lr2t(ZY89uu$qa+J(Tm_F%UyZJ*H+>psE z`r8)?>3s<%$w-|_OIAf)Q-z36ciy1BekIn5-82o)2CLac^r>zm{8P;P^B%)hQtncK z9ReTB=>*mTr%^UwCRZXvdt(xuX&r%dwkdSaEoepK9}G>cemT=JO89P;Tqrt_qBwah zYkHSv7ZXyij&n;UdzRTIi%-OHQnIlj?zCatb#jlvxK-cDhAtt5r7AG+&nSggw{i4l zl9HBD_tHN}2NgK#yzEn3MS`c+uh6QXl0gh-d+jMIkCqL#!6LEH>e&aqKxxStiYX^^ zK}yVzu2xTWN@evT)1~(yi`xQ<&KG~=F3oUiKSLJ#9b3B<@Zk3;pOd~tphP~wZLsfP zuRQe&K6s~!M74x`uF;Zqm!InoS zG|~0sDt3LeWSzKhn+vfc8P`DC3GJ$z0$L2CFPyu~UETKK|Xu!7DB@_1BIu*onsvq19SYf*K5Pz;c)Vl?b};UX z(cG$LzR?Q{ZZg2`u^hLgnAF66pPg6&OxHr;_(ayFN`=|@PJierQc^D%uI|jG!!2v> zM#WMVUhgE5ZvLp5azTN5Ol1DMc6Aq$hDxCOvxX!bJH30h_{b`Vs?jmW?>IqyShT zPzsX*3>RDGNdJ3o!x6}}$8E^5bx5kHH{8W0ZT*c73ID&A95hBbuB~E{R{CO$0**nNO%!ak^00?az#9zWhZ(y3~1=N+2!w*Go z?;<)*xP?eFGSPu1pQ!=Wn4n#g=azzT@N4u5+j6;hb87exvMjWH2UH!J5m$~ zzE28&+1i?Kt#d%h?**((|4jA=21>>O)(c)H;D&EK`HgQf37q58}QQ^%6*V++T5hS8b%PmqUi3j z0Z!#YkyQaV@V>yhXtyn>H`XmXJr~76typmEHk)g|xDT|FcT6&!;zTwzJIcMCnK#+8 z`OjV!V@}k0h$A@MykUgO`7+K@u#5j9lEXVsRjyj}mc(zBR1)(Y!`>ZYf;99YTvo=Z z*^Ws5A`=UVXsw%H?B%cvWNv3L6_2D%qy8fjt49KC$=bAMBne{x!ky66b9Ks@$x_}t zAbU{xv7MRk;6O(HC#qboGhi-`>w|yDEFDv=wjvNCjWQ5;X^2r2?E+_0o(68aD=LL9 zfYme+l3+k}ESye|hG&Or#aB4-GB53_Ys{~9)0Vno^;4snDQ-_Jrk7p>oY+^)hYx2i zyUXD+gx5F^5f3_l7lkOGxY*KMPC{r5)MmS0T2{=o0Ho`&pEw!zulwr5Cy=_O2i+$E zFU7P@j}9%|rGp$Nl%p^0%7z0s6SK~u<2sv^P|XlqM4b@8Vfvy+pz{IZxh`kFrZgdM zI}$fDe!5kJ+=#t%b1Ga8R(~=LIOqt4bSpg)qYE4&G?+h2z)FM@0+#oRc2P|10PNp{ zrx0bVJ!WLLw2X0~H0&JZjl+GND=6Qfi0HiNdl zy%6^rfXw$71$rzc(Ruty@~L+GW55mblW9h3%+iHw{>aSi%Dr~L#oDIB)Eo=6HH^hc ztc3(rGMd$p1;%}wn$3(CbMKDh2PE&w8QX7Ea2w@?V4pSA>-F|S?!Z-zz~Jq~usGmdq=?u5iJMd`xLh>(xKRUMz_)%Ceh z%h(L#A&~Fr33P!w%vDk=OfbeFp^LOueS)yY$L{W@E1nUAVD56#8l>t^vj?Y%Khyxg zOnJ}|(q2CrzAeAM8Xj&}Ikfa0m8wAHq?*R-CB|6*cjahPj_OZ}vA&mf2 z>ObkT8A+((Vy6eGAL*tUa{+qDEJOg2t_jhFoa@`78_lgk`5Kt$TC_+07*!K9N57f9 zdbXhCXRAo7&x~ssq^QMSwQjd4>dn~Im&mMQtf7FsvNsSL%EZubZ9pswV+tC*SvPWIz}QaJ@@fEVO$k#+~GzKr~tm8OISiIUZm3+F};l+=-_r<3A( zl|uE~R1eXl=PQ(#98aGF9mpwMdLh1_q_U`W9H@fLk&3`j9{~v*;c_h;Ul?Dj`_ih` zaNbm9kwF_bJlOhSx{XTmT_4-aD$mx}FS2wFK<-*(wGY7o`3S3T=ZZFAzWNrjTih_U zq;QCO!1IDzVp9@MXd>z*N|PB@eih~qvekkdKQ|wFam)KMkWj=}W%hwOxPm89Z|(`$ z{@Mz21Mnp1>R8YPK4$QKnZT*y->SQS@dAbq4X7@p&Jp{I)g`_-PXQHXwNqh~mnIn_y@jj@B%qIU8)&|9{$R=jy#1qjqtzBacrbVK}_JTE# zAnMnp=b%A=$56nN)`2N|$sc2|d`)vL_UgXk?6|c@{Igh8Jef+?5MC;75A`FC8l%U% z)s){7CViLkYf}1xv!xh|4SL`B2Xv0z3tcQ)4%hBp(pC&44D>neEpNd_cDi<@$^Xx# zx&}Dln9t47MnuNjp+%TkZ^NowP7l4|q~3fPQlLE}O!voYK$V-sa;4cra2IXXlzjZJ z(a3U#h;=krMe)`^7RpHBAUe!JgAhyenK2eSm@;?``O2)o=gZ-0Al%65j;svzl+USDc@ zss4{-L+fCAg<(y#nC_ zfM6?wTcc?WQNxrNk6C%3^xKfr?4Mzr$R3BhT~7KrbK3?_hiKThC0PnHNQs~n0xg*U zWU&r>T1ryurmV5afJBHeR9_YCnHc|vjhr?Z2|-|{Bw{!^Px&3Q(5;W=Dq4rq=nw;=Uw zJNEIbZoG-CgDn|5^irM#dPwgW!sPf`0;k^;2$WKztnt2wT-F|CpMCMi_GAUBG*(JZ zbh_5LxdvXJye>1XqEt+$v)9_F8rJ-*Tv<548e)o>@@c?@f?1`PN1I{YrlDh~XJCaO zFz?GmnVlb&T~WrvZ}d`YO*Dur1qz25*&NUb7UaQbOm$k@og_@X*`?{t=n2z9zSN?R zkGJO@wb8J+#&T(;NWhXLT4KY*IyrP%!Zw{wkXk-C_|XqtfRtU1sTfYUpjT;$#~_Nn zu~EKRxrCTPG%zH?8hVohwqboCMo2r@+#vmm#otnhP2G@TWqy1eE#DH!mxZcQphmoSY>(&e4Bd~+~gGgyyI3K^=@LW(H7 z>xrZ|W}-~pWfr+EQy-yoW+pt}Gkkx2 zo&-kjiYeiGsxx{jPMc<|O3@`)5cpaIQt<;trAv7phQFqD4w_r1f(Wn)ceLN(=@NG> zV_;=MPc)(ff1D!Xf^95`_iU^{I2PR2_JXCAoX#5Lt?xxu919LSGQ2*KVa-m;{a*Il zZ_lcYs7Sxo=>LVo9!=Ecpx_L<;P9BTm@arPqNwX)8g@Mry^_SnbkCRo1IY)CF~?dshNQP_LaY0|>vs6TgR1;%um3}r(5Z)J#PLW)y|7H5m2 z5As$FpixU(gA#qXwIlUxPNvd-s~8MQ3O`w&%}?%D9WQL1IgopyvEJ{CrgtSKD#*t| z;c47icMMUMyLb3wynQw@6Hv8g3A$UO)U-P#rMpPeKCwpm>3MbgWPES>2>x{(jqJnj zA%!~WyR=MWK`WqWmZaZ!D`~wYhf5h=wxeeG>!ho|2JL>*t6q#<#Vs4kg-$24fFN@a z_bEKD>FP%CFj|e0wtLKa?UDb%-6C~BPc5fE3mA<=M_$8X_bJ;YTAZHZ!@3nOE=w)x9_ zmMJ;mag7p4Pcgqa43Wcw9O-q)!jy!mOIPhtA&?Z9On4Q8Xc55Wz&=s*^T76N@_p~* zAYwzM54Xf%BdZArR8LW~q=f!zv8$SV_(i=y=jowT5Dx-hzO(lAwhY)36I%aE_%3-W z<(fR1h0@-lq;x9X-Wbs(WTQR{CV%($9m|Y~kRRp#VWO0) z6>cR1m33J(hkO3T)fNs%tUfvV+Nr+(Y>*A{z!~?0Y z$dfkSk0ww{EVR@Wy6AV;;Aa~Hce@e8vEpgHD$b`yVx%>U!}hX04GK=qOIozS!=EE6 zcT$YP6wueRf?Jh8!9UV`nOHK1>LAAN$l&!|=%vr1b%}dEKfOOw!AJlx!9aTJ%)7s{ zz$G{aUvsofSPJg6BUVME3aPV=%aN?5-6PCeIV`Y^Y!A-3I-cwhGGh3_HO99a4e)DT zmSrZnDqUeNr?(GSh|l=}!(?mwtB|EpjQvrdh2-n!6ewAPFhmE%DQ1$+kK5!!oFtQ_ zq*ZZ>L)#d%7!z{O@4K-N?gA#lnxEf=rAY%02nTr6T|V;^sU4vcQSmW>aWF{fI}<9- zb5`csB2g&kqH4ALdt-4?3U1%Z;suMF1`qZJx3B6a!@8w~`oHYUMaG3QK+{CUQ03_Q z9#YY4rFtp96KNvQ3~68v9TK|EdPi{ljHP^od_90t4E?7?`7DY)w_SZDCoG)Jp!DHm zjLNqorkM(8BcJdD6!j6FN#hf2&u@A%kcSs;$;a5sM7*Ik#yuk7_K0iqwsoZIjd(I( z3Rm8%2Jh^9XDjB4%Ab&+Q}4H_O(@tPE~{q|jPGYC$<`?{{nPWkj9sPx*|CRT%}^i; zc{okQmVYv+t?IX_S&}-+j_gyp;=4H_2D4R-8fxQeh*$J2*u>{s5w?I()oz9ns+P~R zf;gfd!n`RCZfqt?V!N$AsTef@!sX{u1${97S-dI$AZ@=Iro2RQ;acgwVqO*G#JOEY zUQ2uVfyAo8IPgM8mx-cIJNZ_AAoGtEV&>p?+o}v?3(KTGKx#0Ky zwLFbDVn8eKZ~sb$No3fZGvNQV>P7zLnAgwzmUG1^+JB0L`FMj8pn*txHi{0#+tR)j zU@#mON%U(ZAEC-Cj9qvZ>BWOw*D$2u8WiBT@@T~FpsN+;=hU1JB_+)?k}>rrzX?ne z@B65dsduk_z5u?ongsC%*X8_~!kdfM7|zPD7l)pUE2M`uXNvNq5_W!G`}l!v)3d9$ zaPY4F5uWQL1Rj06UKXD66em4SrSTy-(AHRr`<4L#jT65n?L3;i)M0J@_CDSt@S}CB z_`?5w7h*4@fPUSaZU8as_{TR^T3Nx zuxZz7VpF-2l)Tq_{y`IcDuO^Ad>)6DDjF;rT8LH#BTnaVuf% zyP4`=oq*ktKMcvD4k5uRh6{1h7!$$5L-5(9{9~SK_V^=&>pv@zTruq(gt7)x3NoIO z-4VVS6GN}K9FD+6%-~^Aa=@Yr+%r(y%2Fq{>|A~2Hk$IK87ZvKuy9~A$a~kUsqprW zfJ?Rb++|Ao>Kb|~e=Kd{2Z$fV-THA@3*7xeLWpN}w+yX6bh<)3c5X6t9}MpPLINkK zT9*U!x=C}+EC6a9r%y~&W3G6aKwjt)R} z6UZO1Tm>jh?RQfb-e;g16Gu^S>Xt1{e_SNa0(>sc-s$b9K*lH}y{mkD^)s_4|j*|bAX87L{xH7Ua{s#p~P6kgcQVJ4aVj4+4yp71a_gh!U z#iZFaj_U+YEJ2&`r&}8mIcO*1tW0FyaEdmt+w7=PD;^DLn9n8k?;rzc@|5TCLJvE^ zrAZUIeXEHJ?5*prD6k2+{SP-2&I?E*8=i?sYL7BK>o~Vnd2AjN0xWC%*>L>4IuS<_ zlhLHhBji%L{|{fm`5L>eB}l#qX?u6`6O2!>>J<Z94uTO6~}M?u#~cO*%wl{^Te2kH}0=z?m+C=OG(QZoh@))IvUhzGUFbyL1SDb; zQu;zNi}gb~A7C7HiimH(P6yYd^$*CaadH<4ZkBcZes74c?Xp-p8-Nguu^Qa&&L5RTdT(oY`SoLBxoO{mzS$q^c@pGj)0_m zez_}mU?4OFOlED_Vi80QQJ~}{&#!~v06TW3HkdpsY;Jg#e(4sqp*KAt?ECk(?(j#Z zAbTy?bj#!R?=;M8vd}iqkY0(flBjhfenfe-0L?d@mesaAfU|E{O5@Y-N%v(sma;*8 z2e&aNrB++vOnAt#H6jXA!V|||3p}AMo9;FFbFoE9Kac5 zByMU+7@%sQ!RNAUV5z-`V$E+cx+@F4$#SB{q?*vpg#+8s2}Lq25xoK&39+5h}UWld{7oL zI5luF9LDd0l)2lowtIqKhNr*L1O=>e)dR(*KzUHPDl{$0a2%gW!k_hTz=LjN-CVt74VIBt z{PkPunrffe3Gz|hq~1^xq-6OBwcHGBWv`7p0_v6wZN^-1d(@A;9M$PqvuuY+`~k!) z<7Z9b>f0&4CklOux0Xhc8{otkUcaX2-GXoh>F#?ntVT-2s88vVK(g;k_?TTUX4`6UHFUlcU$D2RNS1k-%Eri6ZfHwnt_ z-%05GSh>^-`y8iyvuAyd?OIej^hx^tD1m4VfhBlgseEy~zYU!2#z)oJ1j!rouIX&% z-3ml>OCSEm9y}Ph%?fU!Mn$4wgJjm$YxkplDNO|=Faf-QWXkFaonJa}AP3lUp~g_+ z%EP_NS_7k~J8v}NtP5v6i9g^K;Kl97p#g#YtvBiidQP2QHJS2JU=rXLl(T!LZj?(RmwwFHywfzZ%@ZM9^7Oa0*1+yY>Nl&9b4#Ldw31K?Qw_ z9nZ`p2Okx!Agznd*=`fi%Hj`={wQ~rI$7yLjqPWVSKXW-!BgrgqK@aE(TBGL?Lp5O z=fmnug_t^mBrggK99^D*3%d(!s6g?2JS%fphA5JwoAwNqdab~X0!fE$Mls7 zv-Tp*%Js`ZMsc7^5_p+HB5>r3%-cBfP?WiCv--kv3eC_*07H50a6Ov>1hEbqw6B4? z*9Ns(SK9t3V*#^oOmOg1WedWJo%rFvHO1qv_}G#o9jpQ1KDW{~`gv%TYcyR2w5Ebg zKI8n!BvbmI9kwg@J|#!uA2aMYC9;|u`8o?DuD)SamlO~NRvyPyty3!s_PPWKt}I2gn@+~a)JbsvU^}p({ISKD zCY2!8w6b`@U{{E*w&v$xQ^W82uHz#R2vS0%Aej|id&#Bd$UITk(Wg*#sxTZh?no^# z+c@`gg}Col%mk1w{zv8;01(_%^zO|L{Gy*4!}VnK>rJq%=q>E~tzH=Q4kVsD55{FV zdnVFZxt(NsE6Kw5h&Qr1h)zlOxPrUSn_A*SKz+za20vIue51xdE<*(7m_H^u<*h8u zj`Gz0qdh#ldO#0}^%0KWdq~>Yf_H-(v+`MLr-XjUWg(=40^GvAtrYw0UWALS=!icv z!;!}b3oeF}RAFNUZ?h7a{E)GH1sbwLSO`@})=KauukB(t1*t)McRrmy5yQuo4{|(* zlXtx@{F7Wm!BF4I6y0kEG}i)?bomKwnMnv+LW}wY3peM=ajnzkRXGNm&ndchYMtdO z6nagy7#b-X$UKo;i4rdMXbmfWaCzeY_|5mmY=&PCqj;2_a-WL5PAOW7X!JU5iN!(Q zApF`#_2TC#mbdI-Gw>aZl)6=LRRFb3mE%fLpO>+=WYkUNiPX|@Z))0aO)3#t5~u9T*SQdQLlsJn~7%xyMV&so3cNY#aa7*O`h{a>qhRV!R*=?V(1@ z%znI^X(pyJJC$N|o%fUlH5dbUQ(*n|zfXd~t8a4Yaf%tmHqA4xqkN89E%~MLKD~Pd z1DRYND$@c6UV$XcW{3UJmda@}`?B~p(>=YKxyS4$ovcg=W?Q;XE%Le!2~dCzEijm{ zpg}_l6f9}kspg%vOsA(OpC1q!CYMf0m5~Md>12rU%`2Un*s=B5)&4f*0R|4Zp092)!0k-~69|B&iA@tcf^ zC@;J0*c&`|*S~Wyx(x7t2aM|Vw>m3Zce2jIrH=YtXdcSINxaM&%Pjp}XJk^wgz40{yc?(>!*;@ctKj@6;q( zv}TF!v~AnAZQHh;J8j#xjh(h_+qUiARo&Hf9!~V>y8ToU_b1F5E5;h%{08`6(JGTp zXm6TEs;JRaa1Qul;r}4CyFW-!dZ)gH3E!4p)CbziHWq&$_ijRgsck12W+MmFbthUV z43$QNz1rMBv4sV2X^eo#r-T2oIn*$HYnT<0A{;G12N7|Pg3Ub0fRNJ$gO{ZCZVY4G zYb42f)$P}1*3a&mWnWc))NUOqw-VK^AU9e6TLc|3X_3y|?eCe2T@yja7+F;qS(p%~ zXl5ldkwBXzu#?e+q3J2iO=ZP6!84o?26^8nwc^Dm&bZ;k*@<}hNO^5u0>Np0P|j5! z^Lg%3fV!uH7#J&(t=o%oVQ?pd8E2TQahdNFy=vQNDZjB1P+0}wd2-6-Tw9U6u^HI` z;V_47sz2pQ{&RD5|A;QUtHI_yflH^>N`&;&JGFt|Tbt}F`=Tj8KBj={(irYvJCqP$B$0-K)TgdS6s_q^*O+<27 z&e9Va&{ge#Cu?U2 z4bwJ+WDMO@CdUAB{+;a+Y+|QH4H@)&SXOM7&B{ybK9YrJeY^==l~gS=vBB%SjUh9x zxKwlGC=vImHqDwP3yA}DUmxZ=^50?D!JdEj|b49c&LB>R)=d7{z{* z-tXD~mS}_aF$CQKqz`3-1y#3`^3drYTuo?)8iV7^@{GCyifgKwt&j+#C0>~^%Ug3J zA7Zu;`RsP~RK{|Fv^$;4qV|)j<+8eB$kU5ic5a517>z)aCH_$2^ft#(+sX=^K)A7y zXGm&?Mdh}PRdU6-?%^_ky#3Uxxed)w5L_G9Dao( zt_Pgw^m%HEa@BI7AX+>C2ja3DIcakeGC<;O^X*`=0rBoMs4}N5EeiF4dtLevb|kXz zP=>nYZ41tG-~jO{b0$Y9sqomp@d5%1vwQ96e`93O}-MBNpu+~O&&VF&d+>{U-3S0GL(!?Mc>;f_<4S@tH3(aeh5 zpbwfC^qEjYxZRbu#@uX?hoe=u;B=_x>2ER}8jd{QcHc@0Dm&EeQ^P5p{L~&V%Yd7a zleBnno(r;5ByVOKDy-e8x{-Vzf?bXXNl{I4f1b>_U3&(9&TX4v{7#StQq#2>GQ@WfO(i{ER^s;h= z$f_(S+ILtZD2XGSa6H{ihQUK68q|5nK!ZN;D00u=>OL(SX~h9z$^<}+d=?NLtInc@ zPj9tBeWp=X2K<2v*ZWQ&JUC`Xk}zAudIcVb{i3Hy033ty;zGg`ENV~xAXI{L45GU> ztVo>|%-~o+f!R;Y8`~tLL&|5*#tce^)o;yZ?As)0%0VS2A5-}4%k(M-wNaLWu;T2h~`8%gvm7_Aq@B#Xa=Hu+=z!D7cQzRHlL7vM)*u?(Whc0Yv ziXVm7cjX+42<4|9M(W#Of}|(pd9)f`L;SvGpARi^sopYpCP^NcHDA0RJ!VS8lsz`7 z0EDoN+$xyd0f?>L%id~`65LDEK#;`?TDR?HTq*F?i_=RLc%WYN$ABs>J7vy48!TWW z{w?Bsf7uNC@z`5SU(36O33G|+JZ_wgI>4fT*G<4a0KPoSsmJRIPQ3#AKNfoo!rZE3`k&kJQHQ^YrieYv>rkK#GPH_ zrT0qT`ghJatGg3ErTu2^Wf+rP?1y9vGo+?t8puGxg3NI5(V!zGy>h`uG`|b>c@VV) z5o2!5D7@uzL>JbJo`U>}2E{byGr9Vm7+{NtiFG451nV%_&xOP;RYOpdsR^PU~L0DrsW0_lM_FMOQj^$^r48Cq6sL`U5i_gwMBR<!W?jj!rz3f%Tj;!_jko zElILp*J8uWnRof=5bE7gq}}dn);;87pK-$iw3C_@z?jjr-gU)luRK(I6LS$~45mNx zr1~@qo=D!PfXDi4&o9(XhbnoxGn^%$I+E#Q9x|d|H1rLo&c9kH%^bc_bJ#oW18zI^ zs3!Hf-i>1tJpNW+^C?@`W#dAy!+%4EX(-gwZNGIw)nTT7w7F&zR(Ril8yXc=PFi+a zR3yO4g~u;EC0}{zW(21bxhU{ARgaB#0L+UjsA=B#3<%k914XyBG}<_;`Xwq!W2n=P zC=D!MucS$tqlyp{38(b?97;(UkK`wOmgFb_nX%+g;l~mJw`rNqpN>cuE* z6>Ky~^z!1BO?QF>b*0sSBb~tQ{$>y=cW%+PUcR_-HrEFFZ2sXb;-N)!n)M(iO8O2d z&ra6R*PZkDDR1&Y?Vv|ywJaz=LS@)9yN06=ewW8Z@{Uq#Sl@j+(j$(DD~ZQPPc_>@ zynmEh9LsS5jX3Hggp<5sR8Qm;2{+p`&qAIs!~&VSpPHA&a9G6F!b8|QPQE7H;g2Fl z6wiMokeV=od{q^8UVHZ#0mCBFI5|Eq`oZ1NwDYmELJRiaFylX=G^IklBl%KTD`|hB z=M%;?hfE2}fw#jK2XS{d_bq>xVN$RE!r^*`iipcI4CKJl*!hj(fb%y|;8*l0@PF9aRzx6>?L z^{bFn7Af*5X)ipXb@KF~Gp5pXOec}h_LX#-W|SyMGs{l{koj;_ zlUVUmzb*iLmHTJe#2kWrS{_2mOtL-vP!ktunhupD=Vu@gs7QAd_ev(J)vvQKe$epu zD?X@z>r+E-^}gpN(zUj|62#8^8HXV1ws6z}#GVlxi{~s$9bH3R=f%_EdI%i5C8urB zV1X%$9}JC!C6r69z$O(U?}$Dy8{WYz_U-q&ecvKwNs>XzOVY4g<+ER_-v{PT0C zm!~F*wisQ4fSkfKr?zp+fBIdrTO#-m zN9cw!>q3!>InFRug04I)a-VgSf=jfahkYp0emKmUwREyhj01!}5dUuL&+8U-z~`1S ztlA{x)Ya67Uv3%beVwe31|}KspFZ+TRTl(i*i;BdWFpX?u<-&qu=Ggs`5m>Jx}qu- z9Uf#+`m_THO4$3G+7#)~=@CdPbBMz;^|tx?=a8?&THn68s9S9ni3@`AFt>hIS!7IO zWs*WxqMHK#Sca2pLVx1a`1IUaH+f&lf7!d`$07S|Fewnk2<{SuBqN3FKz4y;;I9qN zRUfF89*z24th#p=8-umYey!j(z`*OaOiTnQ$2u^AC6H!;666%7suGwtrJ1 z;sYP#r?-t*G3$T|O!WcHe9wm01bA7kRUsFfcYtw6TL*D_Z7p1wY7M0zXgS_gAacGo!B5Jgry~zNA;lPZ5IZT&56qWF85I5ZUchH!qz8ivpSQ{J@ zrq9kwhVgzZ(#S+qRzT3eu*xtfC>w@GB_$J=Yb$WNUM0O+2r@Q@78H3-hy~D8 zKs%i%?F-kP6y#XbR1lSZIk4bjW5trwUJZMTu-{l+mP~j8FrH_H`fm>;g0h2Z!PEOs zoxDV2MsddvAq^4*#&N@!0|O^NZZjSlD8ttyfcYrxg9a3HpIMWzH(32K4qVw!xwT{R+}O~9ZtvQmj+)?HOC>5osmK`5fSh?XJj6kF)RybP z4`@`i>%>wWE%U(45-)!ZW4ki;BaM@wPF>M76}=Idr2dXf=tjmJ8V(^gp*PiR)XvpJE$N6{KZih3Bih#$p$ z!8vni{K0Vgqp_Pb8v!z4TGa~CL!BcwkC)R+;mykdQGNPdltc2tPi1wq#Y^f-oe$6Q zYx*`7$qO1W{R7um;WE2G*@k;ejWL~au@gX2_w$$P?&W&XK_vg&&3ZsCAwpNaCo<=1 zwq9t!>Uzj%z^pSME7MRZgFmXwy+<1|HUp5hzGWKo(%GCW0M!lcbOaEswZ`$6U`N4) z!y|=HCF8I2>!Om3tRiAyz&)n1v z5DCXXQ?OS*&dz0Y0E7T4H(={f#64FEypu3#!~Ailqx+EQjlPFmSH{puy6+)Bv}otu zLg89Uch@iXo=Q(Ddh#ap2T6CIky|p#;;zzVFtM|vJyuOLhzSC$^m4K}Dp`KeXD~A=#VFDvBZ4Ch+oAi1kp$u<6 zb77v;27>Ug?v#ge1||7U`~8j{5DDnZUhQn<3nKWa!1{B6173&+M z0#7}!-4Fm;jNC4DDUQ0Fc?20RAQ;X?N`jmFixeOe>G7G`LZH7ggV{rZd_h;HAzV6vv4#8o23$~YkI;A! zPT^O=wg4_MZqprN*D*7CC6XNx#35Rq!?jV!#-Z@p01q4_^ON0&72(itdCaK{u@J5- zPXCI@`~k|3ksf{(_wv!$f+boRxZR<#Za;w zZ&+*-qIogRAN6xNIeSE;q)RDkd$FG540?I2wT6d_vGRDahQ{{&<2i{M70Ey}{F<Gx-qT5(XANHt|QSpNlA7eUxFdLknA9UJ+%MD|xYJ zXM?oLl^!DgtDer96`id^0&tX}Ieh)|Do%64f{R*1Any?yI_TL@DvmXKqo$qB4%h~> zx~B~qTF(#HoTLE{?Vt*cQ=cfyJ1;QR%~bM%%h5`0XxM#i^Hr6Y?@fDj5AEDh2-%cm zj@{Z+jvSw!2Y(Kam`icgUaxQnr!P$|P2o7;)K5v`ZG4bezP}O^KTCu{3LP*m+E6@f zze<_Hjr6&{(tgeUrzY4v^5BU99H%{)QlxVSy8X(+j_+`yRf2my(tIZuGMN^kSKP^C zA_D`{s;J}ZkbKmzdcjo+Jf?filD))6U6xiNLGY$u2n8d-rVNj1z;~c`_fE%YLy*!y zbOOfk72ApCGhsrM&*6c#he*3qJOg5$$lm|bw+OLIo zvfc4GKSL@dR9UO563W6F?B%c7HPf7rLw)qTLcLNl1(8j-lQepd5KzfGIrsyk7LJvp zn=zkUVT-a`;9)k4T4Kt)v`b6E1 ziSSb7h$y4}h#bKImxhskJCQ~y?}-ugnfo;;KvYt z{l?@Y40z+}Mq6y4 zQx1q@haqdP*2^FEXG-gmz?omGR6HbZt4_h|Hr-PQM7MEAB-Yz>>S1Q1XD$xzNC}LJB$3r-&Xhgj8UnwmDwA7eqsWK`jiuC%)!RIQgBjhJg8USIQf7!3e?q}kJn&!g>_rN4>aD{$)tVA$#y*o}GkaK*>}!HgI&%mBPDA8p))9kCA_ zOQ*Smvm1*ETnQv8q*Brm*6G2LAI)yx5l;ziLN-cak#%$ckz-BQnY5Pr9Obx0>a!Fv zGH)^OezYTpj?82#3YxFePE114y`ojS43If7sErk}J!KZ089haE&d=o2+Z5Y#6~@Sq z;4Eb&Rb$j*h^&#DEiVh^^}P_oF7OPiH#$&VxVtpB3BH~6i#||Xb<*8IiMCi}nW zq+FR`;1Xl(3J`6d^v9QooE6x27ZGWG(8y>B(vPjZ?cEy9I8 zLhnI|bte;pl!9Z(-g9Colrvtyi+R#W%-y0FZX5s?722kl74m0dz)?I3#l@@ij%}}u z@@SH@crYsTDM$w73sL%mT{NqulxT-&H)7!JlI?3dq{WYqp=@>Ji?m8Cvl-C*{pvBT zsxsWUj<=N_#ZT4B6Q^1Rh-+Ku=4y@6WL0k)V+eqk{L(M$tF3aH;+2L5wl+`en&ZAY z@WJyieB+t@7gm_PkOcgBYQ5ORi-_Q-MX4E3&*>?UPSbnLq^xP;0(lg;GA53?$&KT5 zv4wV;Gx<7J!%32mkP3%7G4J(JKSYZdF7kP%baR20V_3%X_?jtRpMO$DszVH(z=v1t zhw|EL433ch2ByllI4||V)fw54x!XRp_$xGyv9{<*Z?a%TOqfC z((M;iL)1a$dyZEQ0h{&p8D8H_^3}rba4ykgg}}ralWU6K+`^E0h1D2;&XET|WkMVT z577Q0s^9W~KCai8>>jKcPU8-KI?{hzk0YK)3`t|~zw_TO_O)kk~XCLhH-S9yIEk2u;1McX%7Z-qD$}I%-)BoM0xxH?`GMJ zRL?HLk~a^C4#q;xrJbQP~x;(R2$yVL93c_n7hjhF8Kl~ zs*$3xYg3WGH@^nY8;$xFd5fj)oDGVcwvE+h6;HeweyW%=8q5cp@@kC^tZ7VS)yUaeQePP#?HQq zHj!0&$SL5VW$5M-L@P)do+Q|GY<5Nz4nS|%8d?nrah%b=Bb*&HTM3p?x(Ds2xh;Ri zhhK`m--l4rWSwcT2N>QF>vz+&$GF1njYM76o2EmvyUGr7J7C=kzxW?&W8f_=C25C>W`Gb{JR|aH$ z{GE<`roj(!vg&%r?Fr}>>y#7y(U&}prQ$w3KErCcn;5*etmAk3q;hTxF%SI>b99J= z?>jRr6|}%@zE>VS5SH6Joav}kj`3Ag@ce9gKz!B?P1d5i@4X4C0dkzMaD9(&6L?u0 z?{wObq8?TQ6{{_uOs7pY6ei|pocPu|v1^;qSbFlgAo=7DhJqtJtFds;2lp}e5-M${ zomYT>xR=VwT8^~gA+(fZI1Qt!&2D_o~G zYZfe|#^xso!>rYIq&arvC~KJa#4i3L`=R8wpZNIFhDy{_23mO49^=tGkOp0T|w{eBVB< zwG?$~s>DZT5ayV2h2nN*uZQ-IbX;PulK?wdR$ub^(Zx_syiqeGHGpoV;WdBA}^r<|m;`Wc8 zI17fI{7JR^gj)IKZ+Ru!KdxI{XVg|HsVZNwfM}QX#5|nFil?Ygk9Js;m0@C7a7D6< zA%c(y0{#_y4w91_1)TY zB%6QKCKD^R=WKK7z{Zx|?4=Sn7magB`3chwlMY}o`q}whV4Te_2R%B7jC=cv5-A9~ z1t>UbsfZFDfWiWTJKwX~yiUAF1aFPsXm88VmCUBOn4bD@Pd&_blE!vV7>y-HXZaz1 zpz(n~xAS0K$vroD&)%0&=XV^pi7Xp6X)A^?Q>#G}<}Zhwh~WB`Xf@jE?>|Sm53h%O zrq;e`Uj}+9Rx$KYThKh!(m^l=3g3fz zzh!}o(y&g7IN_uf$5DqN{<3!X2~{0iNwQ>EcuDnAj zwJyN3{)0Gzn05bGf3aOO3$uz8vrHpJ74&I2+s&c|XL8eQijpq-LMdOB~oa%(bNXq%TB*VY0D)K^E%mr)WTM`aEG-rZ|_9 z(mq*|sTj?C`U7=7Dqa#1wYZ3cD_b91j$f#+?q;H1BdXq(UMvOtX87(Xls$~>$^<~7 z*I3j2)3$vs4bSYqAEDRX2!zXKud_avbJ^rYl)2Pk-OzW1N+g|&4R&!)sZ8ZwI$|EQ zi~fATUiPJaTTPx(vRk5i@wv!Q+M0Mk?8&+^!rRe}k@&yJ?_8?9jdgEJlRX`k>+g@o z&N!FbINW77B8?j412UD5A!tQ;T;JnL-bRJi7Ky|nbgn86gdLRuCu!XqnOaIbZwyW_ ze+*7B#6t3HbmZ!`88EI4)W~!5Fkv%HViCW>z6qN*k(mHr0%x8$!eN}#sXD)`nhyYi zH)<=hcVE+y>5X0`q3r*-9NHODhrzR~1OdfY#OVYs!-(!1zmoWmwA%;+h2vaO*6Pd@ za5myJ#p|70=%?tW=LKGLV&q;;0h zz9OY90jYqCeWeztUs5yO$oFG~by_qBcHE6ql561)i3FaR) z?LucR<-D1-KT@viS1CdkPtn_BUlp&SJyO;w+CtE@{;D>x>jNJl?ZOZH6PG?)qk;t}4nK43y7N@b zr9n@Y5m&{q;}75fwa36&HAjAiRCY^^Z5$@%V$fC_}URRPcF9L#fV=y+6be zN|-nw#^4WDZpu!d%St8RP;yi>Z<_#DXDb8&QtQ9McnxesS@Jb2u5|~DL&`qcOd?a^ zO_ymh?yuN{Oy^`&*R6;4DS&14PJk;B*;-keW!IxGGU%VAf}8p1*I4n9-sitYcrvJu z;?D|%?zAnJiJ=wiK2~~K;&kCeE`W`BEyBo_ZmjdR`22@QF3A%6bF<8vx#Lp{nR5M4 zKg2A=0A09>`7sF$EZY2ClR1O<8)+^FF`2i1S48=wxZ}m;Y{_V9Y!-JD*XN0(q@49x zG!@8SP=byWO4b*lS9|v(Ju$uzNo(cEo=2HDs}o5petHpe*4-2`h4TAx*VPg)`}Bzyo~O<0~sY0Jb%%`eTMKt`d}Dn^X2^ z?>?B_Dv}z?`KSS!eQ{1`lzJ&FM5Kv8RnOE(`9>Aw1!pP0s3!RGq|b*4gi!e)7~kFi zG*^ODb4c*=8rFsHO?~lNyxWa&%P#r(fz%^k=Mf{*L7&4gg=)?AwU-rIy7hbw0-t#y zG@^vP6Mv{AE<0j92pc*>S87CEhzS9r;WOxO8T6X@yO`J`FKfreg5s8u=)OYBj9HD> z1vipLV-xl2rZVaUEL3+?u2y6H5V`W}z#DanjD9I({4{GnvvSk3&E=KCJL7BVY}8j7 zkcg#r!|55jK1)ytsM0S?>y72_f?}NMH%!;p%K>$eECvZUOl5(Hme0MU679VieY26< zzantAH_NHi9=`|iDN41gD5K`$gBFqI+?lBAPxK;uS?0*6WWhE8px8vuplas;Fi$Op zdF=|(Ud&Q){bp3z-(KjhvYD@%mW6TLj$kYMl7O;wHr{+9^hdd*b*vvUQ6f=Y(C$PS zgU36?h^P3;bK|+4!z34n8mNObEt+;gFv2v!($Xv(5vy%8gZhaL>z58O-}gZ!ZHJ(U^;N?iOM`}kxFS*7Y{&;LS$sN|DJQkZ%+R? zT)W2A8{ger{<$tZ9PW%k3TZmQI#&Lary;1yL^b{vtX@*5RfE-`g^E?Qq7McNwG`yH zeVYR2DbiaS8=H`YMYqg}ybUKR=1!&2!HLEC*7@SA&vM?~8-JLg#)0^0 z8ltUUDyY4($d2J)s;n6wx@xY$?^xU!+ZVh){R5bO;gV*?^9rqNn)I`q z+U-<><0+CR`ytt-|0cR~B+*jZqT<$GUgh)94*{w03OnkwYQT>ScKd4OBv{hDZ;?W)t6LHdk=g*KrXnoU)pHt!cq+6EJDH~d*;%G`p7%*z60hT!jM~l9;s{&8uhNo5 zSEo&8yogC)sAp;$bS$;qY;s%=9IdqgTFo|)V$OqQY^0yZ*t-CI0wrhT6*RbiP z7dk8=5R}jk5P~--zBt!Xq%TV}Sj;V96cFkV zQRbKhz8rMo3IMn905Bt%v$KBo<54|l~Kthz$v^4=YG(j=@< z%v02$~F%ZW!(C$^DT_H zH`Iu--M0qB`5^FB5fceRim~{M3MzmN?d6M5@a?wSLwe+1K`yr@8!O)UE})k?A3|Aj zFK|9}-<#01<;kAmT5$85?UKwi&j-XLy!#c=!48de*|b|}<>HYfNG!V=bQpU!_>A^X z{|=k#B!BULMs5Gk!9SuFj!w?_42=Il!v2OH(8=O6(kZ*!o6yM_S}Hl){3j<%kQ(9# zu@l#8&eM5Sdjj`n>*dxveLYq>af*O_iPG^ov%?>Fp?I6jK#l+@iF>!l5taI|RBcWUq2}Bp5kTg!Luw8Id)&=rxEyAAtx{3w3hrD4ORLTsNdD z>St!fu9KM6hHf8GBBB>{N%?w2%~Ta@ z@WhA7+`7J*?%(L-d8gy~V_@TD(Qub&5ob5MOZLKHuvuN3aG(gki0BXMmspgfc-0sA znm5W(VgeT8J&0wYACgo+CEittD-&CL8Q0HohC7Rnhe+b7sShOIrPkE>yI4p7+-(Lr zEF>|lp6t#LDy63j2I{ole%JP$+j)%PA>yo4#jb1USD1o7>%n>RLurXL5sq3-1C3`f z_a^{-9AEe6ZbW_cqwSFBXR3l7?{!sy0!YFvOi-_zOd3BTQq!o>wGBy{S=ACl zZeWh+mbse&NbkY-(^fnQ)?fW>-eBo&(J24%rlKy?QQ^WCS&ITvRg&EpMYUKCx4#Lhrm=Zgq-*n2IYZkrU#RnX65*lM&HeP z{uxyLgZclTjLH8csK&qUFd&&G&0Mu@hfn}iiX#Ww@JV0cf=PqCsI(dk_gPNg_zvg; zJtlXvsfN0tHCXqg}S@ zfH6@3ZsBS6EwP86FXyqoKeYEx&j0VQ{J&u3e?#@ZDFFUUuQ2~BU*P|TYU6*q%74F& ze+ku0Y%Ko}byP%Iy^K-uW_6Y0M5L1XfDhu{GUqb0*#qZ|l?H?>6F)_&3kO+0lILe& zBC2)!j@ouq7J3t}`5_6)t`bwHVrC`-%vykO1dHd@R3L{tXM;_XS%av_jK^sZtHP8m zTMCouI{N!N@71C`kgJ25@L zhmn6$+Gmc4$ZuihHz)L0zOi8A)!Fb^08)@fF*%#j3Q^MXXr?k5+*@VzoTq&Rr19|D zLXl!;dA76}0HA!tSng6TZCk!-=fghcv7#W}?RJ;6ij8StK7%Ie(46Nnj2}71r4QUE zpJNXWe`o=G{nC0dmD#~Z+c=4hilzN$8V`?|7|?@FUU&Ev_sXna3iPjlQ!6rn*mnpT)%dNit#CDTof`kjtuHSoi!nYtuzBQ14#@X+S{4LRcZ!W z%!ev?&Tdc1Y9P%Kr0CTaI9i53lYur@MWK{KF3ZB`;!3ieXnw8{tR?5>-Ef(G^Whj) zWgXI^Vx!B)uc$WI_PU0<2|^Tk14;EeLuAgnttVY2pM`l^WGZQMz!}z5Uc~U7o`5D- zWOj@Z=7l*+UMFvlGGsl;mjY5_p#%59DElP8yck^lk>~tuGNt%k($pX&;QJ__ZfAY? z__-=AuxB7=J6;B%@LM1l2&9eyVCH;O>um_mag40Li0AhQx~I~wmm*|zumsxijc0L7 zWlllcncl|U;g>cXQ10#g>3a?A1M2Z8K-3I3QlEKpQKP!4O{~TOUd#(fJW23Y_Ddk0 zv4qs)$!6p<`^|F$aG`#dO#@+^L>tHsGQFcELv>m++UrpXp!D}CR2&DPTrE_M|n2Eio`z%UG0C|F=N9-p821|gI$N-wwBj8 z73GYg(ZAQQPm1%r6gzFoXWUwQu%gfgbHQV2-Q;?l-%ESlGKcvFHILl&hxS7zQk~R9 zDv}iUddfuk>3nu94C_fM1voutuFt_PiDJ$MFS)lFX&jJseqm%e4O3C?l}JWw|E{(J z4`e*H{}`5wIe7MUoZqy@9H#6-AMq^}QMiY$x895kIS0hcYX9n51rfrxxYo5ff;my6 zLs#eK8EuOA@e!Xwjf8;JkgFt=UC5>RP-QMpJF| z=)hJdonZHRon%9@1~oKAxYmX6wa9{ClMxnP@u8)JreQ-!E+p;T=K!PBxHc4~ zl6Z$0C_Pbz+ivjrJ84S3(S@gnp{ zsEq*ONJNPURCfcFH4t39LWpQ)7f&xvc1Sbr%HOZpC`Fo234Gl9Pxt)I>k>B!8jToB zHKWMcWswV1;5o9Z_{;1Y5lfcp+dePKe_to+Q3tD&!1DBm2gcWlKXIrpoA~N^4@($q zpP>HCt+dpoUj?^KM@Dn#uMwK=( zPTho7&jIC|ZTZuim(-*!gAr#XaWqvLt z))hBbHval;c9&vWC+g%+A(QT{>L$`e7{0R!C=a5Kg&>jQlvF3q6^o-SIFz*hS6&$( zq7D~QRhYKk*Bx+92+mP;?6q**h>!!fR8khR!s38dneweKl?7B7(Lfp1sdi4YO8;pr zo_71QlZ=v)kUr)reurQgGA>P5NKW8gncp%)6Ui(-9$Iv3^Y~p8-g$9h68JaDVZ>(q z`m0!c!0Ne^U?=_Z&vd#i;#JDG@!rDyH!42Mh09KD4RMDo$Jfc=v#dh)3vRyha)$-C zS-{mF)9jPUJ>x-FD@> zBRIrxC*s}H-30;Nuw#~n5wPHVAB|Byl+0ObSH65YJ%ny&F-F7SBP&MtQG45hp!v8C zkXi1GOKW~B#F1uYb>e{L#Rrf{uvIi0q`@s2a3~fNIX8=bw}xy9&=O!9Z&$ULSjM#c z^;o0zW=Vjp0N)|gpKcp*KpMv7yzcYmfB3`nqlep1i-cJNQnV)s<^tSV*?#xv)$8om zNVOTvj$~QBtvJw9j|fRoU4}C`{EneD!M!XyLiD^Qz|lAFs<}X6ZV#~&E-OG5Ig*oS zoCOS8{nY|Vfr;pJ9!nt_u6_(U#0=KXEM=N2Fef2kvG8XZ);uO&e328~3EXJIvA1@> zU&->OcTRXA#$7of>elG(s^okJ@Lh!dsy2R(eN_TVzzaNit)0zUIdPK2LmEInr>|tr zK=584ST#~v>aN$Nlauq?+cpYFbIeu^=TfIo%B9_UkBbwuR0o;a9}ZEEWo9L9KNBQ- zV!a$DP>h3i3O&y`fWOry7sR!DNAzME3y!CEQl_A#`i&Mam5`|_FB&Xcce4*h+lge{ z7~E`Q-xW(tiTQ>!cgSiUp78!B`C2se4kEk*1o#^a&g7>c)SHpfI-B3xxZxVVCpPUGf_~k7D!9$JnD0_IdjyJ(bs3&NkF?8j(?|5m=j9ti@|?-f zV+I?|+78iW^n};Cj*cp7+huTNnd&v}6{L|z45Fyi6EViHEoXmJTII!-xNsiURW<9? z;L;7`R;5oF&0%dku~kJL@&y>6_njNc=Jh_A)77g*X-|ezB^hI2Ph-De`V+7=%rqOE z2_MF4^9CJp2e+gDKn^k|nLEF|))2lV z#FiC2BAGGURNn?L$H(Wo-kz@NmeP9QO!7NhDO6&qPBBe=Gkb@S&vyZ zMi;pNeV60HE|j)r;r+X@@>ZpV~A4H ziK!yU)Tj3*Slvdb&s+pT%~09ctWPHdD;IDO11SEqb}mD$W4BOsMx-SZ?SExuN`~%| z{I82#G7p=Te)wcbWdhY-W}28&Sje`i*j(tEqS3XXl*$wyV%vZGVkW41SONvwi7Wiw81jo0pW;x zc34gKD+tW;UXP1KTOy?Vt}wO^YaMcUcs1l`=4}z)IQsPBBPl}R=W8$>UB`Xg_b@*7 z)C2&8s#9Y36or}*w#zU`0d7=Exs3l_bypFo&aZ1!cswr(&0qrMMJgmZ{30bg?uYiw zW#=TJnE;$sUEPBut81|n27D<3ef05`YUMh35ETqXVX6}6EmRq>vBqDi34#l=dRnx- z4U#TB$I+0F&_Wqk;3hsUc5?fuv16?5wX{-=8lwci4Yle&Z&qEfU%~J*nRsTc0_5GW z`kH}0iZ|5ca%Qa04g9Z33JdH1gx*Z-O#eb}w*MY_x7Rfo zcoXq7U6^B?k)}#u5Nx=^)t}L8)H0#U$D;NDwyC?%E(KmY_l|BP3;>4T6T{8bSvPKZ zxH;u_ej)vV;#cA(i&?g}9`=y2&#qjrL2YT#?+n%Ov8m4Sl!w_J-`&pw%BM=fdf;j- zXiV32u0acamnoQ|dp!R!q<@bPMj;$09y-f?Nr^`%93kKqTAQpeTY?Is{1F+@T&NV*Sk$ejyER*!bbyP&$|4?*;XfMQ1tTmGPj%7 zx`qW4eh;3H05ffOWsh3S}w)8l@=m;%c25I(2(1gW?-ew4Y z%FC?aobt+J^}lWR|L{0060tGx%m^;5ysf2hM`X z92&T$JE*2BbFt#z4J2$Xv7&OENWTleJ%n6ORWugB36Mrea%?s=B0XT+NfWgK=t!X2 zD-~OTz-Qmc%_ri#2lIP~=m|#@(M7*#^t7<)TiP#nGLC4B*hL*THN!|?y2^z&e#jV< zn;-nqu(uo`VbrI=%ON_QB&6XUIKQd%8uh%z&O&Q=(sm|Hijf6@ap4o`FzQ&?HP?d0 ziQWy>cJ22@5}M$_!pv?Cd*9=oX&LrHw1*OkJ&z0YSWS<|#PqqqFij1&D&7UW zOPrIUEGlzIvAg9+A}5Etrl^UR%MvjGB;a-jZ0^6L7e7ydPz8gXM?SlnGxvhyVnglV z$JUM(2uSYP>+k7lGi?e_<*v-WN+bVfcV~eqQ*8^OT0IyQ z3K5TKjeD?b7sx+xfPvg43gnu|kJHh5u+VW|NE_^9nCnwEwhOJW{{S4i|3*qmEaJK2 z3NNSy2H#>Dor$n`5fsTJRVw)jlP#Hfm6Nv{C>@M?i!xVu;;g%=WF4 zYy-=7WdXmtQvq7G)30SzQ2&|K#gZeJA(pcTHE`Gx8+wThBPS?taoaROW%-KpYb0*J zLA#4yoaO^FHV!^PeCxNwohF~ah-Wjsc}FBAtBOsvj(p#cFU3dV$lRqC<~s(X(Ql)h z#T(n7&bNwI=H>RE;Vg@j5w-C5g(ZREXBhbtc z1O`2OA?DaT2nN~KKX=n(J&aVIH*K~9RV0bj{bpFuw)0J1GYo%@V7tAF72zcJvR4Dj z5qD7IDV>@fp~H@7&SZPc|U3|++dAj zter#818Y+=!@*6=BG^M}{Og+8mNHKZE6t=lLfTR_pv@Jj-sRzE;g5FP2^}~DafoDJ zEv5DoN$+urwC zjcMTL@34?MRC?62Z$Lje)6_5=RlA27T)W3g*=UqSsiu3)oD&+iw=haWX*BlLVI@7S zt^#NXK*oRweq%=l^>F!!{kNv^&eC*sZr&zO4kDqS&rh)s@_MIWjr6XhFJpPBjX3%0 z1uekvwfQXpANI+Dh1iML@d?lgb?+5EBWwhEBUI>l*}lSZG(;ucRUGTtk$d=xig@?h zJngdkO28WZ9rfhH{HE0M&`;>43kjTa+tizz&+^E6_#NR4J+UCnd#)iTnIN;{2z9B7 zDwNC>>|qR*nv8-FzC~p=yLA&i?AJ_Ev_QM~qjjr*_M#634DN_WAe+48~{S_mn17QjWNb!u?gU6Ro- zd;=*O?F0g($~k>GAzd(b4*4&O1q*nvb(14Ps4br^U=!{DMO;C@r1cdXMMt`im5O9L zN;LXFakM6YX=UCEVbhGnH$BcZllS5gTN~yyP(HsdQbyCYyr1S~r+5GItfckN77=?V zNf1jtGQJHrv}s$ZrE~z6z^}%+X65oo%r`0tY034$_GX-J;t)3d&v44HsE+^l>>@WE zcWse3>sA?SLBzalLV3Nf^gRzywcQ2`pKnhLDq_qH(aUZ+I*V%Mnl8EXkO73(yxvB3 zjS?-aTQOM$F^m==V3Cg+@E@bZbWP*16N+C(HJO)u$pEnNw@e;1OJ5Xj(svx}sr$^gZudJRiKc@LrnV-Le@H1p#j- zRpa@wVUT6QWJ1hJr@jsc!K~th3uHCg(%uPFwfpk>rUIw>>@o|IPl>F7B zF@>mxPLhu3MsGM8JSd6$-G4guTeNIg$X0?LlvvpkBN=ZJY`2j7v;HAkLXrW?l={mn zirTgENT}Ws3wCaD9Q|;k=RZc*t`o@8{<2~;c{AvW`Q;L?RV0z z9KgevNf#n5xM0zgVJN{NvYp}Ok@>41O3cD?dD`)Q>BCMt~)`<-HIh)APLyB~uWBs>8_ zIIJ-51F~D>T(ACx4`xC)eCWKV6yuOc?h|7%$epY}hF&fl9F4tK0_#PA z14Z|yvB0Q%;`Ko?M*_qgeoaNiu(Yh6rWyTJQ1JkhU!jQ`l*(~E*q8BXfrs)qG8LGC74liz*GLc-O+-xST$Kv z;|i1_B%hM97lN;$3gTfBklj1#PV#((hLWP)hLiN$&&yx3FLbu~C2|E2e$Av}_uL4o zCu4P;Hd~P@NuEhiT=!&-BvOAHthr3gb=?t@-5o}>s)YZ^)9a+@ zY72LH^hxcs)&x7k#9(}>1Tv3NWiOyhSXW)c15(-N~=cyHPCeLl8@ z{5Tam?gPC%e>I7OVFR^$ap@dMAdmykYvqG{bCG>I;{yuZ*iDFo61yDp_;w$$nsXxK zWk_J5WtCN4Zt^bq2RyDG+}9|pI4{16r5wGoj({3;x~Kw|-*EyZXTzOHdLmjlX_p@> zPM|tqr>_`Y;~>dEiOXjhzLbb=VN<&e&wUt&4$WeD*A@V)o(Ix-M*&`Fgf)Ta4X0X4 z3N4V8%mm{GFqqr{I|WU;RU1P`BKWx2zmHo2xvH{>hBOBN8f1!E3KCASj|~*v5d_;8 z-p83ic7uOoU^iYBBoyErvw)+bO@w@7fhy7t?HnRSyIO?VUwc z55ML}e>P=I2hw?F6bBBmwP8dq^;oi~q#m-2dlqKN{`zL$xl}rvHeLV#zz$*6O$=wl zZ|Ve(E{+QjcXoG@GHLNDq8u?Ft_=s~{P>1FAHC*izP>@jlQXT;KPx%;@>30xx}*aB zJ%A6ES}7bv<4@@C^Y_G4RW2dF@$67WI<9cYg z!!S>lIpoic`scTV#5iOR=)^R&$4w4*p~oZBlski2kd}1UL z?tu;hs&=-t;W7tV;jD#B)R1it^-c4YV(?Q>RywvfzNm6kfQPBy>@+)BM?1e0QRr z$c+b<$b+(5ujvVe5+A5QNt=wZEgEX2eRlx2+i^V`EML_|X?GW|X+09eh5pa)277>u z>-uE)qeo`vPi@dESov>Ad47ut;2~SU?cp z@)BUxKfL1KO`OTmsyXlj~z! z@~>dY_3t!83aDfyxdzVndc&S2f|qc-MkTZb%*&(z#0bE3Q`BY?%|?7y`G9Ffum@)! zRKp4ASJ{yi7zpNIt==nxSRb<~TMvtJN(QpxL*anl@Q=5MZX!I5+eqFywrq~-f%`OA ze{xbg;Iar6Yp?A77~b(LL@;#Oi;!NTE$|{CQ(};I$hEhd7kbgZOajIyBb7;lXppLl zr-VrHHAUKsQ`$<1b;qu0i^ZgTv2!E8nu5par$lV1pg{!wMVZ4N4D^dlcI`klrnZtT zS9OSw9*gJBxyTb|P`Y_pY0}HF*;dSVF9)=i&;Is@>`@oqT*c@2g(3t_d{~F%!c@MN1Mhit4aT6<&zE?0w|^jjd2XvJtZ_CHFXO6W?43#7N+Xh3t#{xVDTe(xVwuO zhboo}7mKm<2JkR`9725{p@yBj8irigYNVJ0D?f9f3Js6Rwc!Y=BMwkx)qvJ(oZ(Jr z=78eWFtR;;7sP5TJL_yDYMNrIIg!?!>Vg~%!j1RZbfhv?89D~UP0rX%G(uOC5 z8+Y*rzrXOw%!2@lfvx81_h~VvW!T*)W9dDeotHv*HKZ2+^zUDvV7j54puhi2GTIHN zB*BP=;b#?9LcfZ>Nj9#kCsPg&q^?Kq7ZpB_hQOxxwM$f4-d+1N%zS`KdV2{!9H06j zl4zyw>z*2zRHO6(p4gjG5W_OD4P@9a+b1?gh_pF*mPg z+I;lczcG3lDd{y{IMQj-lfVF@b7lnZBMqOXfu8_$A4`@@^>C$UD1!;{JI!f^!97Jxf4#2YZdg2@3T`i# zv+ckJ-A{>odyb-F3|Dno&;(s=oVCwr7GgQ1oLwRNerdbPYnBZ#QV%}ve!T4D9aM9Rh4eqJi-H+#OD=S#B@=>D~nL)DM_=KW9o_Dq zn~X7-T-#WNea8NwqS|a}>|ZAJi;Qc{-Lkr}Q^KUx<6RtzlPY}ZhQBoWwdsF%MxbVz z4q__~f9vrSEwR*uudSOYOfe`-?Y#y`6?|S4M7B|kSeAsu8RH8p0m{t_D~LcFyiU@6 zund`_!u?YUXfi4yfoa=B4b$sKQqRd(xwP!h*UICVPr`#YP#O5Lh;5{d?a!GvNb0K1 zmv1!Sfu-bSSffIRWX0pq#5CbZ9_*Ji!(eMerm&imPyH27wlCHQ7=TP(otB(q-ek#r zv03emy>Ex|r-{Bh;?Uq0CC;;>>P93uM7LHQ!Xl-~4o*^@0wC~6C5<~44FY{caiNkx zx(D+ISw_JWz$Sqfp1u$>+#tlkl{kw=kOdF6Aho7fcYnS<8Db6<-esyPBQ!aCkz=d$ zR1f*Ppyj~~!}_FP_71?1W5(08Qzr$2!F0PNF-XM!APmN#=>X)8JJN)6HX)J4w-U~Y z-IOLkc9-A&+bpAILfyJaJGP4ZQ~pkO4)xA1F|L|0-8hAC0G})p1uOX74h(3Ch+}T9 z`$i3=MS|aYi8pEiQXy2c6vOG+Hg9I8L>rDmS|i_rO5WU+)55%~y7@9u`y#iJGjA=2 zX4faa2A&g6Kqo^?UPfp{F(!6i~50Nznh)>D!c7=G55u zxCaY@+|N7YJUfio6v;SOT5MR-+*P*Abf+&taf9JXPnyj1>E|RN5p}v}f6(J9{~p5% zo;20jt|Jy_^4@W}`V3{=s*`hrQw`3=xwex=WId{KrnubH9N#3cms(cbXrvlSq2npD*Bm^sL(|5wqTSVf1L$`6Xuq9 z6U^4kIV;s;VBLQtzO1filuk#d(Kp#zSDdS0op4W{NDcJO30daeMnqC7u!HVg8~UD4 z)uVWFQYOmww+DSBad_cuJui;*-a0N#3gMU&5s4k>9=Ao0z+O*f)4$(D7r)g9I&+3K zBMb>eL|Ge)>XGsLthXpbSw2J2qQE z8T}k2Idhj_V&9HP#0J!^<@FJAZXV;LPGmU5u#<)9`KVm!8@E3);4uw1Hx&s`^->ZV ztP~={8fmGaT$h16ATm=a<8|=sa2~8S$TDoM^}VwCAhY>7EZ=xPh;l794A9>@vZoGB z+GC5pc$5wf6ykERU(<1m^n5=|Mdo4CzfUHJ#G}X~7~)O}CFpF;Xg~lg_;{~RYRg5t zDgW3l8rb~p)H}R5In&pXN&I=1XQHyCHrQj5A$c!O5B#L^3DSfNczjfwUDn5XIcIc< zeNj60WI7UMtu0U`A=m;&X^0o6^9f`*>%n5doZl1;%F#vk^NJ5h62B&=UGRt>udEdl zYjy0<1EW9b)^@XaX($aPxr#os(%)b1eqRRhfgi=5C5p!J0 zf9)TJa1goNq{Wb_LdGsta?VCmSFWfQ`5EMfjI2*yT2a=W1kq%(N3>u>+e5Gegsltx z$!`DN=l2pS6YV64*qwpL8R*h+erS0^mv}}O-!T~RV+&E(+4X}G{Ee({Hn?*a>ph4@ zuRQ(PK~@I1jf79~Sb86FiXeuCowQH1FGwOp+~h;_QL+g|`jKrN0HxEks zA@SwK#~twA4szQWz8_-8C}*HyRIpl}^Os}}LiWg;#qigTP#w;NvY@;LZ|)*Q6~3-M z>HPV~54;?N66br=Jg?bRL9Fo?{R|OGK@e*Uas`69z-Cufla>+#o0Jh(-~nk0`8VVhujDSsz7G2eeOQ06YJWewEFz~ z$eq!cbpWy~;}8UKW&0st3?iM%wYds&x?MC4j7hM)08C%mp-L}%EJb>y@jm&nt+7Z} zXAR=##DXYdRI0R@-LiGdiBOAU?(<0tf;V8+>VR7nz_ThWj5wK4r~^}M*PksSB~@fv zKichxDm%t8mv>f4-@w;F6srC}0c<4=%SJt;s7_{DYuVq?_$X`|he~CYBB__`+Cy&8 z;P7R8dZC5YH{bJDEVnidb@oU7l~y`@qVvxZh%`bTp`#c6R8g$~EMN|Ad0)ZoaZwgp zWRo)2$qHQtEiGL^322Kb#m-%8ElFNQ`xPSlP=(ST`KYXmpu)ud%EjqG6Cw(&p!ZmA zEbhGT!2336%xaCxx!neiBcMP(UT|3JgXS(Sz*1Qw-b~*YWR4c~++%=P@GfV%o-|BB zA%AAu?{(K0IQgmuF1;-8O%F$BFMQr;ksBiJhP8~uh?SwXw80#WI%Dp#Mzsq>F@9j! zI^`Hh*U475TZH|L73@}S{tXvfX2P5NLh>?$#$sV-NvF{IQ2FB+`I&`Bx`R4BPd4gd z5IqoYkI4zoSfHqt%x|Rart8}kh`}8K>CcACzhJQ!^a&b8q4?0ZyZWrkssARogQH2N zg4boKtVbS+jf|hMMk<1^sy<>6z+`%Tg^7n5^X~bE!h9@iAYO**y-Av%_~Nlg=pN*; z%xx>{EB#H?dMG3u-!aRI7M+_?(!UmtWClW?hrSgqB8Jjp3jub*`|jx8;(e18BahM< zP?Nm)m)lD#I$EP0W44 zB-PpQE`l7Dx9gTjVV?VI=M#jh_m!jU}Ds zx8nNLnJz(NAiZd0-|lXuDoadaZlD2j=5IXVOl#pzk+ytj$yj5YGaH#-%ogNGtq!PJ ziV!{&lmybdJw;|+F%{%OB$@B{LV3K5bUe+^IPi~_u%KRV_$I5I9P!gH0uQCD8vvd| zB%<^TTZG2|s_N|uXo1}Yb>!D_B2ryJQKH-5{79!`f$DAE{%qlY(1CcBOvNGz7tg-L zo1T9obG~4Phl5(nx+tcJoB5`?g?uU%z?{MukDjJIy zBrMqt!S`xU7>r}ok3w`wXY$%$Csf3NuCB6PZ-Z?ZL*d}FF9c|XriWirH3CMYM#xxb z6>mk$?FnaEZMBZ@3#Y2*Y0-3SnQi2i6p-G%DLgtYkF zlmG)|BNv~Q18*Kt!(hFZW-jg7EV^VCkFdw-@it||Ks^8pb?p}WD7k^{Z2!B!5c|btD!!4cHlvUG{pQXH&A(xRq^+o?q#^ z;A|PAMz^O*t_`O1jV2aRIlOAAJk8fWD!qBYLSCrS#d3!%>_5Pr_K0sWoPxwU-|pI8 zO917eeE}^ID-#<$(PHi73Cx$38=#OWvgo>+nz()kD&-BtD^YWaXBA-_;`zz;MqyOm zSp;Luto2*ACMu}amC){F9@znnk4LRqx=~CC|Lq&Qt+-MPB|vteeK%52Cn?kjp7K{@|RY1fz|%J?B*4vx4&Vi z8RHEufQ4$5B4XOneGA=&0<*lBYouk?sEBF*PSHQcCwriCpm_s}$j1No(I_qLd&>fp zW5>N*UDD;qRZ3;2AR@#2ht}k-v*Sy<;zn1UVSz>6a_5Dt7DQw-Kose5o4GXkb1X1U zVu1Zy75z)^MmRt&(9TqIbH~3;u#hOA?7T-E`BtG=L=A<&b&>v(%lMKeyKx-oGEkvC zTyPYh!qXVWxc;PEeu18M4S1d*9ntBO;U^7{_U8)`x=dkYulSrI-ozt;_a1;x4lmN0 z-&z$Um`8q=5wKYe1a!a`1xK~bHZqj<$nW)|G?8A9LLM_{lO?|0Rv~#N#Ly97J*R|T zZ@&QBsh<5NCBUV3+aM%&lB<33HTs!LS#>!%6|k-xC*hKiD5@F8t28ySUxGxLw(gBZ zK?dC!=zxm2>w?R!DoMCvXGUFU9l+lINtXNQ(QKWuHou?2M|xcHgA9R_31<589%MgH zQAP%&gVg{a0;p!B!8K++jgtq%1$xHpORPg7U1;5HUkEt<)k>r3Wnv?b#{P2qR?g6u zO^J^Mr3*t71_SR-O>WvRjeCW|+(uuRXs`+LBX`m@mi*9yPUH2>JU;AAr8eCMJ9!*6?%NQg3f++LkKNCTaq8F^Ko**qE+L zkVP?9N3@7r#?e5S=GI8USVGMmO> zRm>eAji0Pri0)5F=bqQ#_KeC!Mwy(SQjYXEAyV5(MSX!AhH*KM`1idKRFuA5`bI6V ztPCqm8#F14V>M}2iSoj);1X|w)|es5atKjgV#mh2FwZEbtbSE;WNI}E5Yev_IajAS z05$Hy3U5=23Ov_se{yNe=P})#-hP)>s}qM)jf@8|{mRBaHQ_cUK&y5%s4LfIQuh)t zF!+ieE6iflUqO4)Sm{^jfPlgCcq~hN@*(cPl@6)BRQ=(o2BNr2JcR(AIj$nZHI_)$1^a7Z4{hA8tdT& zSO$dEJA~=F>3YQNgA6Xcc#tj^9)*68jX0nJEfikA(68zAkR>?6&#FM5myTlKp@VLn zy_PKy03yx9<42+Z#Dd=06s@zD82O% z6JzZ*UC~x9&(#pbx47RtZEd}s{ITYF2USpBUWhKj(uMLYP7^??$o5;>Gm;I`HFW*5!jF)L4U8Qh) z(zk=i2E2oW0X5dDzt85}UfZ~ zqT{>*wAWQySyJ5#lA4HWrF3w}Rl}DJfhfUZ0q|WQA}-J`v7{hOg+I(hvkB4hM>ZCT zcl$)grH2&uinq@mc)M++ioE~j2erW2xeker5A4`vltH{U8kg><3$jVNzyeVc1~E5O zH+JHCojRA;r$So*132rd+g|&w)3e{zB3{PVW6MDsGsyx_S4l3L~F9d_5Dy|iH%`fs=Ih8boY0V@(1#0ZM07rs@n=ow1fyI^r z7{!C>)~mhnjv+1A0@~8MOo6``bc1CD*r+R~H7Q2tQ1cjj*9k(LbLk;~;GRuHU z^_zd0Is;q}r`apO#2>YM#&}?P5xN|f1ag1}nu*ba`z+(m|H^GrZ9ebRQZ5RiZ>u=^ zNhfs8KJpfYRhJ3JFR#J5k7QIFe9$0hFpw$e6%o1ka6C>q1qJ7{3NO~X-E*-a?W%%; zFe+6tS^Z(NuYdR%;9QRiPYeRzI`8R#WX_$)q(NZK59oG{RfO(26P-qC?Jp2&i8ZXq z=}v`{0obI*`c*t@H{b4@Ct%4)_0JiN9D0Fy~a5 z^a_b>12jBdp3k-n&`E=e?x3Th8C#wv#vSz1f&F{Y87-PpOWHVHL4w4t&4rID_99Lh z@rP3YzFK55;*D3L|MV_}KGrNXPX)iYrX0!dl@QC{+0pDKg_{bNX^3SBH3;%A1q z1EStWtp^X$37ZNC<>1FvBp#{J z>YZSVk=8uQJNuiJc*(iizgr9Qp0WDRE&RB4ad}7ZmjEuUw)Ogx2`}0j3dD1_(2Hjc zl06QzS)I5?*2jHHg*u?hl2HFCQnszKc>4{RR)|jbYCJlJ4tSFNWd0}}vY#jB!KcVq z%w+u$^UF>*zKDPr=4rm3GamE6hHaKF$=dMw5f@6rX~3$|1%|lgk!p{iv!H}M#^0TU zcfunWsP36K98tMJpx~i%b1~?z9m3~H*~h)SP%JBDL9;-#u=o!Cu;HJ9-QfT( z_q}uNzcv`;p=Ro$sW05n?#ZdB_oNB0-(O{p6E!5*jZ=~BO?k*Ut z5Ow&9GUVbXPRQ9bdEG^Ujftxe$bit@bn9toMjpW}(5?qI=FST)V2 zE0m9Jrq?OnCr^AMf#GR4+xS1^TjxWg{GWAC+&MQdo5_#;F0C$X=$6Rmtvvw z9`jw@0=p(7Yx0W67iE+DkB{#mj)}IzFmZ# zuyfn1L66;id>|$w+W(;0LgC6V(FNWC5;$q!4ez>>*&iHG!(s`jcx$`c5oZ}J7v{UM z(0&(rbulnq{rMb9mTqDC-_5~P#RKVjnMxhmVN%rU9;c$+_8LBiXeZ6)3z z@8*WgpWRlju0&{7^UShCbdXErW-l=5ZXBD+-0$J%d-R?b-q>BaDQ=P(l;8nS60*u=w%Wl6_ zHiy&jf+>pZKh)eW3JhnqTu@l)MLOL=Sc4fT2&q`z7SRh-EnhBnh6N_#DwyPp1E8JQ zOOMxnbn^}0Y^~`gP#Vz*tOiUW752w1%(Z@I`!G`D?%}Wo2x>~a0HxmJ4|HC+lF+r>)u9?2P;#i^C^kc zd#$yF?W(Pj`)Xk_fA}yVohy<)84CK~vUbgNYe&)>koXaDp+-xE(&Jgf(qCpPU;mSp zK>R znvWgA4Ubgz9Q}eaZ1to$rn|pq%CGL?+JyjT=s0oes#H6~3;(jd*^$6F9+3vyl|?if zNClM@62{qQvHa3Y_+WH{CP=TYx=Gtj$fl&hZV51oH948Xr4%7AY|IT43q^>)L}o7} z2*eBpu_=U`h~YZaD3>N>?zJCHQ0|{CbzS3yQSn;O zpG1|Aq#!#zh@aD|f5MHXTPeajZe9cR;=Lr^m2iTw(Mv~ZFZVRBN^>)Q4Pgzo+p8Sc zMRF@rWTgoc-u5sukM|Aot>rpl^!;M=l<_t^3cJYK(eCgzaABV=;f;5(7%t8(v$XywVQ-)NZcT@P!(RkuQ@Y-;8I0cp z$nInUwgTlx00Q!CAlyLbfj43zk};piUkLZ37E`mYw4zJ`1vDxm5_O7tX(|Zm9NEA! z%3l~)O?-zuV*+6OuZe$_3~zLP@B484l6eeLi;MazVqv&CH0;Y(HKPkmtMnae>%BZ zlcT|iUW&9aU%75{r|~lgWoEkvEcZG;*+?B~kAg6wp(hEv1qXRwn%K$U^zPC%FMNyUZX^RZrJWQ`R=c#)Yer8u5R&iBAiU6Myz9VWSQYWk<@I?~Ac zL0x2idX3N}RfJh?I3C!?HF_xqKu(PClxS~91jw@N!-+`Piu2|LC_vmwO>n7GS+0M#mUz=FboAKRQgI7 zd%X}p4$(`*abuT4{KCvjKsUK1czVBT-=o=9k@NdUYq@a*yShj$)cHuf+d!4#vo3P# zU+TsgkxIxs7${->$x{)HimAt2K3m?hZmt4iG*X16YsX3xXLDp7R zjqO^}{1#F3RN@saJdtVnCcYGF|F~HW@`E+a6NBfDW$oaIHTE;GIY847R9^f|%Z1wK zI!d(ws7Z3H9d$m66|eXyohp%+b_4x@ik|15|FPt+3<73;KT3XC1poG^f_VuLv$zj_ zs7P}}OkoYq2|&NreKP_;F>wGgGqfEneV%+QQJpGU`B#@B$zggr1A8FVFXBJR#~uKc zutKsqYMx0!D55>}iW#mHtIr54*k=Tfhff4SvQ3lWiC8qfaZM=WFa!nViy!hfo;mys zsG#xv>3iTtu$E~MJ6SeZ#ewJ}tfP{CsUl!t*ouYXVl1PfoxD6Uy+^!|II&bXV%-4` z*q4Lfl!6fW$x<;)ASHGV&z88|#ZO+v6*<_MceU|obb^QNHV({gNLlW7Z? z@;%|O%sue%7D`U8sS!z^wMH#gNJaF;LBrtI2BAs zn-zYdDvc*O6*v^NHwUF2a7rWrOWZY;Z1;v^Y^NkCtx2rr21*A|gI{+|Yb%d9D(x}e33{bO#E#~R`N%DX6 zD-f2THoE}^puXEJix}Bf-mm`W;Ne}~ScovB2vL?C8v% zwce`&>1Nf-QHCAh-im@rnSl>`3#6`w=>gF85ZNFko$g)|QfrkCOZcka zG)d31aH?1>4E}AM;nwf1efQR^&hU++R(TPI#8Y{3BFOCw$bt|Q-{D-vOjYUj#cErtEnsNrE{BEbY2INE~h0*$*9Zhx3kmnsV4CGE@^TAKEDTZ^xE+!yCk zOS2f^OD~bzmF`(YAr53RRa+`{YN{_?SAwBh@3i2Y5W$tyLg+om#tfgYg}IQ$H+;fb z6PRBbwXKu?Hb-Kn&omnh^N*n-^MFn-vSNB_=Xx9_&7ji2v#20p7=}`i=Xl&7na8oV zYAqy#HF0PEcPd#4-0-!Cz0(=5rw6P*+7+9d^6gFuBd2RNSEff@yCa#s&DZj9?tr0tYi z(Z`u$*kVQ8Eg(}y6N&9s%tF2^iIwJO*pj!VfNCnBQ;f>c+&hn5Dmh6lX2#!49Hmf} zr|Wdi3+G3zMh4#%V){j8Jx3`X$#@BVsRh?R6|ZiWGym>{DelTA-_0u1yw!W_^~mi; zB~aD16g&?HIz*c=w#IRSX}L|sCdg4m1)US9Ag!~oT{ z6aYM~8a*-{BKEtHO;6CRhK=hG)tuXxy!BXUlaP`=n>`|J&0xeT%|H}Nf;imX;i&d* zYIsk7c!sACDe+}97<`E?H1CZ!ZQlR;~`{sf(vLFINtQMG0UISq(0OF?qe zHzgWWRg=GIrP-bl|7LkaXj+&~L*46vx&}#T)M%wkh@~^fX$!1K~&Q9Si8E*Y9xPl45z}u57bi&Tom~-~E)-AP^OuxqxUsYhj>-1yq^uQObHQ=#7 zc#oX|1=d4v~&nr?D0RXf&9fAz_}GCg>U;WssS&T{kD&9_y8SRy!%K)jj8 zV+$HLzY}7&LWrwcHXl4+inzd6!q2;f;W%>1E0xikOZuC&5V;GOVbs*WXfLEUuzOZJ z^c)*que!0XY`sLb0!`o!)tA?HWeiKCU83FiFNj%%^Wa#{o(H)+{eIiUwyaSiEq+~1 zbuNmw3bf8>1jf^jm(ww5I~-TPcRsj~03JaR{IXb99NG5g$KuK60~$fKW5XK@w^UHJ_5s^f!cbxR#65GNRN*iu_t;AtUCv&voH!9Jqp zZmFTVhsSS`p!%WBeDoC?D*^BF9|r#Qsufh@K;q#bJzI|Ez0o`I>;IXc$vBs?Ee5Xk z%VAw>t~2`h-#@1K`SkSnP*Qx*EHj~kGraEbL?2y+}BJ0uGAdqJdSP7!a6u})h0C3 zc3u&#Y&C`UgpCsy9@_P5xH{ima+nKBk59_pyWLPev5z{a%&=`)ZSn7+*OFQAS~xgM za$fD`G%c~|#E3Y1=X;!k-%YyO>6&dmXTHKdUXO5b8&R+lG^JW|Ed4YWh?0EZ$XX|0 zxf;m5mn9AC6XO}SVrif&@&5oqK)t^V&g5eI-LKV*Hysr@dZBH#xi1n*ZFsTLc%B&_ zST;Afa#nn`gp2 zc74(U*JtSMnlJB}0TE;-U~FkBhJ61hcQimirl}^!-fxJPPKTyef_uv`vZe(A8qyJL zdRSt`>`eU$qPK}sJaQD&vR&d})E2BZlpGqv@6~VX@3Grb#``Xt#@>Jw&bYvv$LTSJ z3)_yR;N85Vq7)PUl@S$*S2;syCTR@a9BOkXNxKY8wu3gLCmB;@ z%+?GsfQ_ZpTs$j+8CQesP`ck@dXJ1!yIc@Es3+R_B@q^@P*w;Ixl>f(wZ(=~$ZWBO z`)l&)d@-D#uS24hq5#r-;NGWe(mz83vA|ht1~NM{FLnoUU3iE4^8n7T->i6+tbs)< z1P85Km{F2uW&F~Le_VnKA7ZUS#2?E)fKZWNNLc^bl=T!232*;$8fBrq#iyHN1%r*k zFi~GnEpAgA)sHjiRI;KdGWf1{eooLg#?0aXIc}JHkl}y?5(z5gyZ-28kp#w=X2I8Y za&{)mh979nJrdRKdLqdqjgM=78&kc>x=)nnu9R6Wzlyo!!6R*$zQPSSm7BgV*jEsI zl;frms4-5djg?e^-hL+?4-rzqA20=Kzi(eLO!B68gldXLM-?$n9JmK`02|+y2AR*z zXlHrz2)M_;oeY{oBo|{PPZQTye;v3|zGf>o5^Eeo{1{@cTovK21BafnWb(Vh7w%!^ z!5Z+Bcd}vi9L&&B*QV;{@HI3X2n~M;Ln`FzvJWrDH^(1Q zxb>zBHB@SNkM>GUbpd&(XW2EBaksLp!YqN*F9m$kdpcDZ0e$9I68GORnKoNP6(wce z_>zWNcXW<4UMPXQ7cRHZ;0hL-LLW}jVayUBwXvCHH_8|yDBs1Jl(TEeLycg2d~A_u zt%C=`9sVl&(3L~3FVtV#@7L<4z~PaXZ$r~sRVMlMIf;#>4dVHl#roc0g~{-4b%A)_ zTqUzBUOJQ?x=RJhPx^~m?n^STm`+CU&eb^AW+`(8%`Xm}6 z2x2Sav90S%YV^9$BhfnAhQ{SUmJWK)r{dEl=_-9#;&b&o&sVF^1Ob~;29^BNDsT>okEL@eizpyNwY+iSw?;s z%JL|RK)M-q;87OftXFC3Z*)^7N(DJP%ih6fr3d10y`e97BM_P414v5n7^qy8J+fj-h;i~(qVxi|DGZ~eC=5w} zQdO6(B9o9Bu;y3@<95d8#XKV)IP z;FVxG4-!-b&8?M3{5c!^c;^n9ZG9-q9H;_1RGe_4Q1nB2fY6wC@#K8LHm}eA#DTG4 zV!wD`VeEnM8m-fqkg^^?dnez1rg>H?_(tv>mRKyOu9Nev9J&S`62RUE+aAy~xH!Q}XK90G~N zFN@T&!*HU01w?cno2pYTzRRy=)}TXHP#o+VHq?FZR8>vuL)(+WR`aeHi?C3U=mek!b2^e3l?kAyGoGTz+4{Tp9z zFa*N!*|7>mR7IXPY(@+gk-nmB6B7I)LR&;Q@%_##$q941r{)K%+>~OotqfJ2M)4G_ z56`oI3*_5>8F&)uC%!n~aQ73?`s7@UB8PblCBk{&I5I_pn7A@k?M>Dt{!a*yNfFL~9&v)B^Oc)8BGouT16&Y4^lDem?VghVwbK zZD-xn@u0wvQ`#wE9|h_{Nd(yqwIX_sL!z0r`f%{EiICHhh$@_6_q1+i*eZ0$4IvNM zCQ3)o^@)U*yq`>be&MfD&TmfIszBY93Qxu2BA#8+DpJ!QQu83>l==#vc;x|l_j(vd z9>R~+!YVt|}j9bE@|^G@!yadT51VRV9E z+1q-}qUKTNbkjwxHq~C8yXF^%P$|Js;#fV`IIr(v-)-04zXo!lELJsPZ#pc-WXigi|f2G?X=$a zWAP1AEusVXVCkd~G*S#xO^$Z&eOdGL^REcQmeg&R^$@8=Ct%M9j&>yBm6#Isr%`W( zm!y2+GBs+$W2=^Q%yXZ#bxfpVsBE{o)?&XOz__ku3(#h#dTLSY_|ph@RzpL)$c@9` z!(HYMF!@DctG<7k91~&3KStd!a!Gzoj%rt?mHF*U|IA@$5Exld0RAD%5imA;m&}M& zrJY(0U8VpJd3Rh;LZR#Qp{O_cLBc(eedwbNkL`0Y;Odi_Fcul5^=1@c#kO2VVDMex zs&rcWJkFpJLRzlM(?FvD{sj-gTci(iqYW);+w&CNX+wA|N-6Ipy7;bfN2%v%Lt(oO z$x>hmkxxGoQ)mIgIn1LN8IwMOxYxq+2(t1uI+z}oBt}j0(QsaZ-9|Ies3N7QdI5=Lv3}7VUZD$^n!}PXQV2h6;~+e#D?_=n{V2elA6B4 zEYeY}lz*iqn*Cl^9%%GID3MUHq;xoN;I&H`1#?$K^=F&HlU=gYKqGA`B}PbwJk6D3(Jmu zMaUVWCtKy`L;-pzA&#f#%Tv=^yPk(cX`aQ7duMP-Hav&1cK zZ`|Hd7e!3fUb|&p!KTj@u6)izjnG-H_On;Jr0ryjoUWeLm0!rt`vZAZP(PiBv`8U&MTOFcx_e3^Z2eLPQx z6zUMce&F5Y?ixuj$Cm`Oc9iN8Vl*v6&^oowQi?e?OMplx6qQiIYwMM?dtHXUzvz%nuehcEymI>rD!SLLSgIrcCw;2g=%#J>a)ZuEK~;8CU7FE8+4qR$hnzQ^Z>;npW9{HJB%o z!^w}9Cq4ARaW4+(^*wgfw9W>~##gUEwx?`=`gqe++QM`5(A94ho^4g50W1;>l5M!O z#0XbUi{8El&tEv=n+}#|@{~MOwpkY614I&j&HzkUf&KCh&Zbq09jTB5{k?7QdZ0J= zNao<{$=nziXko0N>Mi^mC=6~bK)z8q>nB$XDc{@UXf+3BZBp@t7y%J-m-~k)V=HFT z$g-d*@I7}B4>2;1H#+hV)hrzwHqI(rE+pp`xmPHM6Y1X#wQ5(5C#{#QJxFK z(<#AaH;$sF<+e4bS2{Gvya>y_oQ8k>lMIvx4TO5dVj4j1#`s-_mJa`0X{n_`wp0zY zuO7C_{Jy5XX=`|>L-C4yv2tsZ0)?nr;W@#QOg_uX-0ZKOOr?cx^0jptF~qV13r&14 z`REZF4kQsGb$DAlZFQ8WEw7Y)?zTSJ_GiDJK&8z(v#S5E$mfQ83aoG+7v`+Dq<6eU zETNovOps$}gpAuoXND#P)y~1%(uyo+ZYKJ=X~>a{K*iQE%h~F;TU3YcbrQSCL2t->%D!F35C=jtaibrT&gh^ z+6D;>L_D||PjfKV`9eIw`r`HgQbkA|K;vD)sibA)l?go{^UWRZMRfmPe|S#pi;a^h zc5cUmx6+wY&Kx8|6krN<-2W4jUo+2_EgOL~t%^987B!_W^Kj2uSNb*mj~NJm|_QemJd#@Ev!&s6zEXPg|!G;<~i3&Jp^d?~7R%i{E2T=+IuTGA6}lpjsCu1(5HJK&d(i zQ+w)F5*kduU*vfEbo;*D3G3pj%v3pWih12W^6GJk_7!Y(s^Pb*Q654%0DI4fS!8%5 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

    QYY`$oug%ajf=8 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%0AbLHL|s^ciXi$r%^(})*p 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 -<;IR_ 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/_|?*rFKzDx-ajp0w-p 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

_1mlmRLXPa;vzf_0ceGUT2wHb%(KTLx4 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≺bbD1g0wJ6u`bob+1R3? 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 `YYCqgn#`PXc>;=hYV`uv9duto!dq(@DrBn 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%0DIAhJuV!BkQMIxM5I{!qZYb0qn2NPy^s|9Ls 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⩔aF~iV~L1*5WA*g;Z5VX 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

el0c@);EoOo>#{e1-1@htK0KM>C)PQVdj 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