From 65d23fa5a73abd796845db973d312cde139bbcd6 Mon Sep 17 00:00:00 2001 From: Vladimir Diaz Date: Thu, 14 Jul 2016 10:31:16 -0400 Subject: [PATCH] Reference all metadata in .rolename.json format --- .../client/metadata/current/role1.json.gz | Bin 465 -> 465 bytes .../client/metadata/current/root.json | Bin 3329 -> 3329 bytes .../client/metadata/current/root.json.gz | Bin 1678 -> 1680 bytes .../client/metadata/current/snapshot.json | Bin 618 -> 636 bytes .../client/metadata/current/snapshot.json.gz | Bin 384 -> 380 bytes .../client/metadata/current/targets.json.gz | Bin 816 -> 816 bytes .../client/metadata/current/timestamp.json | Bin 536 -> 554 bytes .../client/metadata/current/timestamp.json.gz | Bin 364 -> 368 bytes .../client/metadata/previous/role1.json.gz | Bin 465 -> 465 bytes .../client/metadata/previous/root.json | Bin 3329 -> 3329 bytes .../client/metadata/previous/root.json.gz | Bin 1678 -> 1680 bytes .../client/metadata/previous/snapshot.json | Bin 618 -> 636 bytes .../client/metadata/previous/snapshot.json.gz | Bin 384 -> 380 bytes .../client/metadata/previous/targets.json.gz | Bin 816 -> 816 bytes .../client/metadata/previous/timestamp.json | Bin 536 -> 554 bytes .../metadata/previous/timestamp.json.gz | Bin 364 -> 368 bytes .../project.backup/targets/file1.txt | 1 + .../project.backup/targets/file2.txt | 1 + .../project.backup/targets/file3.txt | 1 + .../project.backup/test-flat/project.cfg | 1 + .../project.backup/test-flat/test-flat.json | Bin 0 -> 1974 bytes .../test-flat/test-flat/role1.json | Bin 0 -> 980 bytes .../test-repo/metadata/test-repo-like.json | Bin 0 -> 1979 bytes .../metadata/test-repo-like/role1.json | Bin 0 -> 980 bytes .../project.backup/test-repo/project.cfg | 1 + .../test-repo/targets/file1.txt | 1 + .../test-repo/targets/file2.txt | 1 + .../test-repo/targets/file3.txt | 1 + .../repository/metadata.staged/role1.json.gz | Bin 465 -> 465 bytes .../repository/metadata.staged/root.json | Bin 3329 -> 3329 bytes .../repository/metadata.staged/root.json.gz | Bin 1678 -> 1680 bytes .../repository/metadata.staged/snapshot.json | Bin 618 -> 636 bytes .../metadata.staged/snapshot.json.gz | Bin 384 -> 380 bytes .../metadata.staged/targets.json.gz | Bin 816 -> 816 bytes .../repository/metadata.staged/timestamp.json | Bin 536 -> 554 bytes .../metadata.staged/timestamp.json.gz | Bin 364 -> 368 bytes .../repository/metadata/role1.json.gz | Bin 465 -> 465 bytes .../repository/metadata/root.json | Bin 3329 -> 3329 bytes .../repository/metadata/root.json.gz | Bin 1678 -> 1680 bytes .../repository/metadata/snapshot.json | Bin 618 -> 636 bytes .../repository/metadata/snapshot.json.gz | Bin 384 -> 380 bytes .../repository/metadata/targets.json.gz | Bin 816 -> 816 bytes .../repository/metadata/timestamp.json | Bin 536 -> 554 bytes .../repository/metadata/timestamp.json.gz | Bin 364 -> 368 bytes tests/repository_tool.py | 2 +- tests/test_formats.py | 3 +- tests/test_repository_lib.py | 17 +++- tuf/formats.py | 12 ++- tuf/repository_lib.py | 74 ++++++++---------- tuf/repository_tool.py | 3 +- 50 files changed, 68 insertions(+), 51 deletions(-) create mode 100644 tests/repository_data/project.backup/targets/file1.txt create mode 100644 tests/repository_data/project.backup/targets/file2.txt create mode 100644 tests/repository_data/project.backup/targets/file3.txt create mode 100644 tests/repository_data/project.backup/test-flat/project.cfg create mode 100644 tests/repository_data/project.backup/test-flat/test-flat.json create mode 100644 tests/repository_data/project.backup/test-flat/test-flat/role1.json create mode 100644 tests/repository_data/project.backup/test-repo/metadata/test-repo-like.json create mode 100644 tests/repository_data/project.backup/test-repo/metadata/test-repo-like/role1.json create mode 100644 tests/repository_data/project.backup/test-repo/project.cfg create mode 100644 tests/repository_data/project.backup/test-repo/targets/file1.txt create mode 100644 tests/repository_data/project.backup/test-repo/targets/file2.txt create mode 100644 tests/repository_data/project.backup/test-repo/targets/file3.txt diff --git a/tests/repository_data/client/metadata/current/role1.json.gz b/tests/repository_data/client/metadata/current/role1.json.gz index 3d1e7d2ff0369bfb26982e692c2352246f9a3ed4..53d950b9bdf648f12a61366d5bb37b1bf079acf7 100644 GIT binary patch delta 16 Xcmcb}e36-5zMF#~e?{9y_EU@iE=C1{ delta 16 Xcmcb}e36-5zMF&L`opY^?57w3G3W*d diff --git a/tests/repository_data/client/metadata/current/root.json b/tests/repository_data/client/metadata/current/root.json index 45ecb4287c250305c109faf668601b399a0d4b20..94327a115a8938368fdbef86f472ab835e6a49e0 100644 GIT binary patch delta 786 zcmWks*$Ev<4E$IyYzmG-YTe=J=#Ieu4+mgyE}P)$!8FWFOR7>;{r>s;=ifgca=}5o z-;)|yGH%pw0A;Slw2O|@g#?9bG(s{4G6}AI6a%kT?*y%yxj`UJj@sDbF2&wYuo>T- z4$zca7cNn1`R5R_3_}gwEx%^H)9i5Rd0eM63}C^QL8StrLA@cBn>a`AwHK=B?1}s& zP+j8zyltRN?qc=ixyn}c4oHQ*$n;s*kKgZLe6f4IYplZaE>bY#zAO$Fu~DhjAn=$l z;<*x>(Rx>>V>h@0#ORz+f@jb{4LH#IoC<%MHE+%x%eHCRbQh$F^#UIt0k z$63X?Z*DFyQTf&v(-NtlnTccw2I4dr%?vHgrxwcXDDg}BdbA(So z9&@(O{=S}bSJvn4nLFOWv>=}YoiTTVZ1kS(Y6>yb zi|B_LB%s^xx9?RQE$E^m??>j8umLaZ{@Qt87ziDkM1dXLK*xt5P~I{Awgy4Cu#4bW z+umNmUiSXT!fd&Z!BW=^OnuBax`);v@7x}XvKO81=4_Y;cLmpg&7zS@s8mq399x(7 yi;BA(Gj(E<&v?`kXZ2YYjaM}B4l20Z2LVa$u`i3wZa4hLda9@Y{rTtDzyAZhy4l(Q diff --git a/tests/repository_data/client/metadata/current/root.json.gz b/tests/repository_data/client/metadata/current/root.json.gz index 5176668fc257686abfc0db89b085438e6176f4f6..4a13f7efd616dff425bc51ec67ad3e32a6f7402b 100644 GIT binary patch literal 1680 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 diff --git a/tests/repository_data/client/metadata/current/snapshot.json.gz b/tests/repository_data/client/metadata/current/snapshot.json.gz index ed43cdb1605dd5cd1fcbc28b50ee0aff21ebb5eb..51d94d42f11d77bca070ec0cef893f954472531b 100644 GIT binary patch literal 380 zcmV-?0fYV@iwFR3sD@Vp|AkP?ZW}QSyzf^CI=clWQWllpNKP$^f|4k&)6{Etw?%`% z|6c9dIkbmX&~rr04Cieyc0L|Xvi!K{Y#+?$!I-zcjQyss$J!C=*n79n%m5`otquAh z%;@?(L1h<83?!KpIw&CpFN`T;bXjY%yN&O=F5|QjYV{$wcf8AQDvh0sP@Af6{nGaA zsAS(2QUj?Vo>4P4&M|pv$gLNl-!rZ@Zc6V7~0`iRfx|O~QU%UeCH(d_2i{9;an9ZuQssc+1RsK==Tz&nJL~ zZGO5H^`_;{W9(&mQTOqAo=)$Ou|M@PA2-0Qz;$=8oR+@|N14Y>?e^{_NAY35%BKoi zwQuN(d^c(U{4Tgq$sTHLqDi+Yj$J2NgMm3r^7OKUPPaE|8lv= a<)F*_pN@um{huG#;rbgb+g8AQ0ssIZ?!p8B literal 384 zcmV-`0e}7w=sP!k3RNej$nP~Ud9j_``Qc0xZdZzo<6ACGjJ$7$KXHUB;xu07KREZhOg zd;)mb=9g=b6iqiDrO(qVGh86Vd4 zz|v)O1jdmEDVHl{7o88iCYI`Yvex<5<mgDSQN{ delta 16 XcmdnMwtd|E9X?VIG1xf z{2ac&K7pGuDhZEJwP_$4Gg)<{+MffFq-ToHV_3`3R(W^Pg%q&Do+ jqWNl}iwzdof4BR)+8>Xn#rY%NFE4Me=cg0wf7`=90@*^i delta 216 zcmWNLyKO@;3;^*ASB3|0l^OUK*<}?`qSi>C%D@8*&ycA+O4J?hn)|!Hug~9~MN#DC zsM-ch*OfZCEAeWWB^_#0!ib7gl4{liljiKsG=vt)(k#erTM`?s-a{pUOh&C4yqlL2 zajVgqC}S%Q6DBy~ydAG^Gzf))u9<|0HUyTFyC5rPS`2oKNN4lFJw>*cbJ`3;qVsb+ KF6ig|^7Rjkm^qCA diff --git a/tests/repository_data/client/metadata/current/timestamp.json.gz b/tests/repository_data/client/metadata/current/timestamp.json.gz index aea975ae4cc551154de1bf06c1afb0e84277ce57..c855737bd93eb433de834ba3fb64143eeb8bc5f3 100644 GIT binary patch literal 368 zcmV-$0gwJ4iwFR3sD@Vp|5cF9j@=*(h4*=ii1lrS4d!Q_V^*!I%78t&)7~FV(yF6T z-n}F@T~sm>93MUo{uo9xpI@%L{CbnwJdIz6as23OG(Y71+`3|%+N{Bc#DrLctqY#f zIiM7=C2wtt)U*}!s$Obys2CymMipHJbJ}?qS*F_#l!io*54}IXi4c8`m^+gt=h6y` zDrE|&z&2E6r&v;T&}>P4r(m@fUn^-*?4G76kx8921zGxSk#l{gms=GIefn;gEjI+kD=`z$UE2;r_p| O4(ngMc3Ltj0ssJ;y1kVE literal 364 zcmV-y0h9h8iwFSM;c8a`|22@=Zrm^oMc@4uhMp${7g0;TBTo&2LJJkU?JS6$pg}PI z9@#SmBtW_(4lnQ5Fq&n4J*D;iO&9YxJ`dyg)$eHj=;vI!Vz@zU&bp90(b+16xS%=gyrZtuc?W7G5sY`ekKe>bQ7LFZ5nrGNX;~`w zk=#6HwF$JpGL)z>3t9CpMa)!d3QWaPL)#=P*~bhEl8VScTj7u_sA%|~6o9D}b-35ehrTWI?g@u3U%vrQ K`-JWo0ssK%T&-sS diff --git a/tests/repository_data/client/metadata/previous/role1.json.gz b/tests/repository_data/client/metadata/previous/role1.json.gz index 3d1e7d2ff0369bfb26982e692c2352246f9a3ed4..53d950b9bdf648f12a61366d5bb37b1bf079acf7 100644 GIT binary patch delta 16 Xcmcb}e36-5zMF#~e?{9y_EU@iE=C1{ delta 16 Xcmcb}e36-5zMF&L`opY^?57w3G3W*d diff --git a/tests/repository_data/client/metadata/previous/root.json b/tests/repository_data/client/metadata/previous/root.json index 45ecb4287c250305c109faf668601b399a0d4b20..94327a115a8938368fdbef86f472ab835e6a49e0 100644 GIT binary patch delta 786 zcmWks*$Ev<4E$IyYzmG-YTe=J=#Ieu4+mgyE}P)$!8FWFOR7>;{r>s;=ifgca=}5o z-;)|yGH%pw0A;Slw2O|@g#?9bG(s{4G6}AI6a%kT?*y%yxj`UJj@sDbF2&wYuo>T- z4$zca7cNn1`R5R_3_}gwEx%^H)9i5Rd0eM63}C^QL8StrLA@cBn>a`AwHK=B?1}s& zP+j8zyltRN?qc=ixyn}c4oHQ*$n;s*kKgZLe6f4IYplZaE>bY#zAO$Fu~DhjAn=$l z;<*x>(Rx>>V>h@0#ORz+f@jb{4LH#IoC<%MHE+%x%eHCRbQh$F^#UIt0k z$63X?Z*DFyQTf&v(-NtlnTccw2I4dr%?vHgrxwcXDDg}BdbA(So z9&@(O{=S}bSJvn4nLFOWv>=}YoiTTVZ1kS(Y6>yb zi|B_LB%s^xx9?RQE$E^m??>j8umLaZ{@Qt87ziDkM1dXLK*xt5P~I{Awgy4Cu#4bW z+umNmUiSXT!fd&Z!BW=^OnuBax`);v@7x}XvKO81=4_Y;cLmpg&7zS@s8mq399x(7 yi;BA(Gj(E<&v?`kXZ2YYjaM}B4l20Z2LVa$u`i3wZa4hLda9@Y{rTtDzyAZhy4l(Q diff --git a/tests/repository_data/client/metadata/previous/root.json.gz b/tests/repository_data/client/metadata/previous/root.json.gz index 5176668fc257686abfc0db89b085438e6176f4f6..4a13f7efd616dff425bc51ec67ad3e32a6f7402b 100644 GIT binary patch literal 1680 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 diff --git a/tests/repository_data/client/metadata/previous/snapshot.json.gz b/tests/repository_data/client/metadata/previous/snapshot.json.gz index ed43cdb1605dd5cd1fcbc28b50ee0aff21ebb5eb..51d94d42f11d77bca070ec0cef893f954472531b 100644 GIT binary patch literal 380 zcmV-?0fYV@iwFR3sD@Vp|AkP?ZW}QSyzf^CI=clWQWllpNKP$^f|4k&)6{Etw?%`% z|6c9dIkbmX&~rr04Cieyc0L|Xvi!K{Y#+?$!I-zcjQyss$J!C=*n79n%m5`otquAh z%;@?(L1h<83?!KpIw&CpFN`T;bXjY%yN&O=F5|QjYV{$wcf8AQDvh0sP@Af6{nGaA zsAS(2QUj?Vo>4P4&M|pv$gLNl-!rZ@Zc6V7~0`iRfx|O~QU%UeCH(d_2i{9;an9ZuQssc+1RsK==Tz&nJL~ zZGO5H^`_;{W9(&mQTOqAo=)$Ou|M@PA2-0Qz;$=8oR+@|N14Y>?e^{_NAY35%BKoi zwQuN(d^c(U{4Tgq$sTHLqDi+Yj$J2NgMm3r^7OKUPPaE|8lv= a<)F*_pN@um{huG#;rbgb+g8AQ0ssIZ?!p8B literal 384 zcmV-`0e}7w=sP!k3RNej$nP~Ud9j_``Qc0xZdZzo<6ACGjJ$7$KXHUB;xu07KREZhOg zd;)mb=9g=b6iqiDrO(qVGh86Vd4 zz|v)O1jdmEDVHl{7o88iCYI`Yvex<5<mgDSQN{ delta 16 XcmdnMwtd|E9X?VIG1xf z{2ac&K7pGuDhZEJwP_$4Gg)<{+MffFq-ToHV_3`3R(W^Pg%q&Do+ jqWNl}iwzdof4BR)+8>Xn#rY%NFE4Me=cg0wf7`=90@*^i delta 216 zcmWNLyKO@;3;^*ASB3|0l^OUK*<}?`qSi>C%D@8*&ycA+O4J?hn)|!Hug~9~MN#DC zsM-ch*OfZCEAeWWB^_#0!ib7gl4{liljiKsG=vt)(k#erTM`?s-a{pUOh&C4yqlL2 zajVgqC}S%Q6DBy~ydAG^Gzf))u9<|0HUyTFyC5rPS`2oKNN4lFJw>*cbJ`3;qVsb+ KF6ig|^7Rjkm^qCA diff --git a/tests/repository_data/client/metadata/previous/timestamp.json.gz b/tests/repository_data/client/metadata/previous/timestamp.json.gz index aea975ae4cc551154de1bf06c1afb0e84277ce57..c855737bd93eb433de834ba3fb64143eeb8bc5f3 100644 GIT binary patch literal 368 zcmV-$0gwJ4iwFR3sD@Vp|5cF9j@=*(h4*=ii1lrS4d!Q_V^*!I%78t&)7~FV(yF6T z-n}F@T~sm>93MUo{uo9xpI@%L{CbnwJdIz6as23OG(Y71+`3|%+N{Bc#DrLctqY#f zIiM7=C2wtt)U*}!s$Obys2CymMipHJbJ}?qS*F_#l!io*54}IXi4c8`m^+gt=h6y` zDrE|&z&2E6r&v;T&}>P4r(m@fUn^-*?4G76kx8921zGxSk#l{gms=GIefn;gEjI+kD=`z$UE2;r_p| O4(ngMc3Ltj0ssJ;y1kVE literal 364 zcmV-y0h9h8iwFSM;c8a`|22@=Zrm^oMc@4uhMp${7g0;TBTo&2LJJkU?JS6$pg}PI z9@#SmBtW_(4lnQ5Fq&n4J*D;iO&9YxJ`dyg)$eHj=;vI!Vz@zU&bp90(b+16xS%=gyrZtuc?W7G5sY`ekKe>bQ7LFZ5nrGNX;~`w zk=#6HwF$JpGL)z>3t9CpMa)!d3QWaPL)#=P*~bhEl8VScTj7u_sA%|~6o9D}b-35ehrTWI?g@u3U%vrQ K`-JWo0ssK%T&-sS diff --git a/tests/repository_data/project.backup/targets/file1.txt b/tests/repository_data/project.backup/targets/file1.txt new file mode 100644 index 00000000..7bf3499f --- /dev/null +++ b/tests/repository_data/project.backup/targets/file1.txt @@ -0,0 +1 @@ +This is an example target file. \ No newline at end of file diff --git a/tests/repository_data/project.backup/targets/file2.txt b/tests/repository_data/project.backup/targets/file2.txt new file mode 100644 index 00000000..606f18ef --- /dev/null +++ b/tests/repository_data/project.backup/targets/file2.txt @@ -0,0 +1 @@ +This is an another example target file. \ No newline at end of file diff --git a/tests/repository_data/project.backup/targets/file3.txt b/tests/repository_data/project.backup/targets/file3.txt new file mode 100644 index 00000000..60464604 --- /dev/null +++ b/tests/repository_data/project.backup/targets/file3.txt @@ -0,0 +1 @@ +This is role1's target file. \ No newline at end of file diff --git a/tests/repository_data/project.backup/test-flat/project.cfg b/tests/repository_data/project.backup/test-flat/project.cfg new file mode 100644 index 00000000..135cbaed --- /dev/null +++ b/tests/repository_data/project.backup/test-flat/project.cfg @@ -0,0 +1 @@ +{"project_name": "test-flat", "targets_location": "/home/santiago/Documents/v2014/TUF/tuf/tests/repository_data/project/targets", "prefix": "prefix", "metadata_location": "test-flat", "threshold": 1, "public_keys": {"6986b667c736a3b37471e030cf4ce7aa6c7e0d530325e64c2660276b77be3754": {"keytype": "rsa", "keyval": {"public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7J15ZaeDQPrhQsRj29wB\nPhibH+Do59xsT2396L+uCg793gZlar5wZN2eHSh725cNQWyTAa9LwG+lXaKMukQ+\n8176CKR2J5sv3DezrGVu3x8V1qhyJyy79FlNZRVYTVqNaYzvJzxsVnFPpg7f8B7C\nffiqWJr9XkpqwRlCpxooXm4hplZ7uek5Ku21CzQ4OWg7hbuc+ZjCGzpXfm8NuosU\n7TipnKGpEt0Agiph5g6TB2/scoeFar1CKMONIl80maxzAQk+xkWgiJ00+Z2qFCsx\nESfis/YkILS6RMFyZz7oa1WwMtUjYmrsRuz+jlFcbNuxZpIkaISiG9a2YdGcJ1Aj\n3QIDAQAB\n-----END PUBLIC KEY-----"}}}, "layout_type": "flat"} \ No newline at end of file diff --git a/tests/repository_data/project.backup/test-flat/test-flat.json b/tests/repository_data/project.backup/test-flat/test-flat.json new file mode 100644 index 0000000000000000000000000000000000000000..98c5665e27f88737c5462ad30cc6780e8f3ec83b GIT binary patch literal 1974 zcmbtVTW{i45Pr|EKz`k(Irq!HnLtv)ErCET&8j+Aa6*g&2EwlL-#a!*wyjjDQjxLj zb9`pLZ|0ksA4iR3oy~GnZdPHPd~N)G)M)&Ge{iBD4}#2|IRw8n4|rQyyxgnXbuM;WPr2UfXKGH~vKl^Q9EHRoPCfvKQU zM5?Hf&Z;y|Q}4s#l*cTqA7W<2AD zBN~N86=$i9sE$O6kdo0D1-^;G1Q9rcxK|+9 zD-|iR9(iP=fk0WOZPZwUT^l4t20Hv(VJb**M$E_FE8YIC3!kmEu98jbL3q^!6A!tUtMp9tO7335-Ya)+QDKMIVPTr0h z-#{<5C_|-|N{q=L<-Q1&M6S(h7Rq(4o5Y7jn3*zL=9O|kRr~qUNDM>FGl&Euh6Jlg zM9wh_8ekfTX^bR<7R2TlcM2pRn4v%suttS={4jechYt{|wK)j)u)H;kpWii-Vq+JX ztH2&tzh?WqGiY2+n!V0xquai#7a#I|r_<~_ri13}>1Fyu$%%7Ca-qxNxp5L8xF3+ah8=DSq%H7Sm zG)0!4tz1Dn{zbIA=Vm(X<+9vwCHs-GBX;vsj_?$R%wz8AAw+_5YFB58B7NMGme zt3fNB^tt`MznI*h=7bH$kCWwD_jKk|bNn=Lhl^{Y$!Q6_+D@!%^Ap;QjUK z_QVe_O>vS1yA9#=F^Bf`+fzS$zgYV5NZrz+KkIk<)BWolSj={vR(h2-AM!dm?Lq6G z`Kpu&KM?1~{q4}yR?Ed_+k9`FAPQ^TQ@Mg0sGwYJLjCPQESdl4vX!a-FVF+9s$^<= zxp}VZqzvowI4(?iQX#~jaxF|b{~Lglm@NYRwR|n#IewZd=P(iG%SBa$_$Tpi@K}>i z!fTNohDJhQ92_GI*EK?4>+AkdqvdWnK%=SVwed^!a76V9H<>q)<_m1 zpOtg4OKVz(<>W8G$bSaLIB`Ky1WgxtMMGqaFc>G$3I(BD6AV3+MA(wSXc$o_aDhX# d*f3|b{x@K{ig%^9L!`H1wT3QtNW|OG+nX+Jng58P0I_ zZMB|G`|YF7e~xyVZr49n>-C#I>*<%h?z>kejSzcG6(T8FEi|CDSSjaNMz(?=tr%u* zkz2NADQW;plyqd^F?~AY{kD1cbO!vkx!Y{+ZoY0d*OpJP5Cy4829K&-3de?)B-cUM zTG5sxN=Te~XxtmuR3qmA9S1-Up;0TH7!6}H4FiUdX*JVqz<^R(GOOa4#TkU7(GazW z3_-02CP@VpyMPu=qKX_L*Axj7^)XxuTIq?~(1NbHERI-YD;82x9i=%?tlBfi;GEGk zs#c$%S<8(83rif*(OA4{1E@FGf!J(}gq*HNU^%a zF}SlTL(fdqyPB#%*MtH>8Y0xJRZ@~Bt~JDx(O)UPp&0xI;;V#3bjV;8trd6Hrvj3Y zou4J^U~v0f8db<#j9pu?oCXCWb8}cJQ*jr)#1=A#>IS7+h7|4A!RHpl42^;h&&9tZ zPPdh#B&J<^U$3N|qI4#3s#32y|2g%s6DMw!igASrry=5`_vbB^vlr$^&F4aQ- l;6GQYiyzmi9rs|5+j-}>l$W|2brtm2jwkoPJGk=l`#*y(2bBN- literal 0 HcmV?d00001 diff --git a/tests/repository_data/project.backup/test-repo/metadata/test-repo-like.json b/tests/repository_data/project.backup/test-repo/metadata/test-repo-like.json new file mode 100644 index 0000000000000000000000000000000000000000..10caafc6086b39ffb415eb949d95f16c66b87ef4 GIT binary patch literal 1979 zcmbtVTW{({5Pr|EKz=<5j~b01@HCP|*k>MQ5}}o_LP#g6Fw|1XBo2ro z7nuvv7~y0N2#4}v)&1R_#cDQ%#Vv*efB-%}{(tJ>jcoQ}uo@#T2@z61!Wjfk?= z5cr>PhMdycOV6~@A{wVClZ?fvDOVaZ$(@lf#@yN%6(vq_DOC`JMMjjg#$)X?d@>bf z#7KLhEg>EUCz+BoV53z~A~FV{kf1D5S~87X;5HHpF)@m9gw2qo3h5BN6&5T7!_hE@ z0ys2MF(ZU!ngj;FD9H(AOEasK;M@dUJ49)u#MwF#I~ZoOyR;-D>%zF5K6m}~XqwZf-qqP8A~GsoW)Jyp+McleMH$?@)9YE0_vM$Db=>uWh_byI zoVL!u@%5$Lc3-acJKwuo&v*CTyZe6Y$xQRkL;lSCN!jde?aAZ$-AU*2Y`VR%>F}o9 z-JDBPWa-)36}01@MZ0@$rqf<7%l%feFL}1vZ0;@|ayRX+{BrTVnBC%zUHfNAo0Dbw zI&WVMTIr8@2=-ef(Y2Ds(s za-?5c;=HZRsC}o$-PIigvz-jrrsJNVn=bC@;OVs((D5|CeaOpDtg?$0$N`r-S<%8y6tmKOb4zuTYgU*{0TY}aX}S84MhuZz;4RDd&GfaT2p-pud){<$Iu?{>nKV3-i^o>O}lA z`fo6-GmwPWB0HQM2>~HJMi}mEgud4I{h?9I_pbeD(qbKA_FC_X>s{X$8p+&j=5<2r zZiWPH=7w-lb(7#$IZ!%|L2f`fv?3fuhK%9TP%ORTAm7MRgP77BRF7gBK&bMQ;+unyD7Ux1PS3=DME1x1nK2zf;V94Uk;4~G#FgmO(V)}TDFBm?L! kl_+q5L$n~xppyFEfaxmV73B_@-iGxCr0!6Nx1+Z|0ZqOgXaE2J literal 0 HcmV?d00001 diff --git a/tests/repository_data/project.backup/test-repo/metadata/test-repo-like/role1.json b/tests/repository_data/project.backup/test-repo/metadata/test-repo-like/role1.json new file mode 100644 index 0000000000000000000000000000000000000000..588d8f6e5dc59551b97163f92e3a2a9e4bedd46a GIT binary patch literal 980 zcmX|=L2nc>42AFg6{|T@uw%z@xbY7V+Y<;OCvmzfN?Yv?s0j7HbJ?-nk`Ju2a1tlwKV* zcg|hCyRZ=?Nn%qW&*jZU?}x94hl}8+{fGVj!}Z7g{`D#nY(^wW(GeO7lQqC_{Sg zl?ArzsucxGb7Coj9NJ9eU6eY=H0;K6M490Ok_V=iQ>((=w?-(oR7GVf(waF@h-Da_ zm7owuC91WGw2>MPv68wHyJ3lDrl$zj^2jrGsxwWEJt7!Li9y1YOKHjLuv#;_hZaLq zjOIx}JIpT4Gg34^r=YY6#RY1>5FZmZ#s*DlA-a&~=(Z1Kn+1@4X6MmL zE5Qm335h7BV_AZe=d0b<;N=3PZ?tSMF5lMQkG>&tW2akR&lhf%;dg#(>+#`!BlkbG zmzU=k=uQuJFIa!ww71#fPmjkJ)|UhX*MMD@fuIlWz< z)_;Dx0`sahCEL&J)oP{A6EQ*1SWo~L20<+XxTsd=37@h01WNMHDr=B`M l{9MwuK3-FY?w#M?u7}V~y3M1g*M)xh=^P!z4PM3g`7eCf16Ke5 literal 0 HcmV?d00001 diff --git a/tests/repository_data/project.backup/test-repo/project.cfg b/tests/repository_data/project.backup/test-repo/project.cfg new file mode 100644 index 00000000..7cb30410 --- /dev/null +++ b/tests/repository_data/project.backup/test-repo/project.cfg @@ -0,0 +1 @@ +{"project_name": "test-repo-like", "targets_location": "targets", "prefix": "prefix", "metadata_location": "metadata", "threshold": 1, "public_keys": {"6986b667c736a3b37471e030cf4ce7aa6c7e0d530325e64c2660276b77be3754": {"keytype": "rsa", "keyval": {"public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7J15ZaeDQPrhQsRj29wB\nPhibH+Do59xsT2396L+uCg793gZlar5wZN2eHSh725cNQWyTAa9LwG+lXaKMukQ+\n8176CKR2J5sv3DezrGVu3x8V1qhyJyy79FlNZRVYTVqNaYzvJzxsVnFPpg7f8B7C\nffiqWJr9XkpqwRlCpxooXm4hplZ7uek5Ku21CzQ4OWg7hbuc+ZjCGzpXfm8NuosU\n7TipnKGpEt0Agiph5g6TB2/scoeFar1CKMONIl80maxzAQk+xkWgiJ00+Z2qFCsx\nESfis/YkILS6RMFyZz7oa1WwMtUjYmrsRuz+jlFcbNuxZpIkaISiG9a2YdGcJ1Aj\n3QIDAQAB\n-----END PUBLIC KEY-----"}}}, "layout_type": "repo-like"} \ No newline at end of file diff --git a/tests/repository_data/project.backup/test-repo/targets/file1.txt b/tests/repository_data/project.backup/test-repo/targets/file1.txt new file mode 100644 index 00000000..7bf3499f --- /dev/null +++ b/tests/repository_data/project.backup/test-repo/targets/file1.txt @@ -0,0 +1 @@ +This is an example target file. \ No newline at end of file diff --git a/tests/repository_data/project.backup/test-repo/targets/file2.txt b/tests/repository_data/project.backup/test-repo/targets/file2.txt new file mode 100644 index 00000000..606f18ef --- /dev/null +++ b/tests/repository_data/project.backup/test-repo/targets/file2.txt @@ -0,0 +1 @@ +This is an another example target file. \ No newline at end of file diff --git a/tests/repository_data/project.backup/test-repo/targets/file3.txt b/tests/repository_data/project.backup/test-repo/targets/file3.txt new file mode 100644 index 00000000..60464604 --- /dev/null +++ b/tests/repository_data/project.backup/test-repo/targets/file3.txt @@ -0,0 +1 @@ +This is role1's target file. \ No newline at end of file diff --git a/tests/repository_data/repository/metadata.staged/role1.json.gz b/tests/repository_data/repository/metadata.staged/role1.json.gz index 3d1e7d2ff0369bfb26982e692c2352246f9a3ed4..53d950b9bdf648f12a61366d5bb37b1bf079acf7 100644 GIT binary patch delta 16 Xcmcb}e36-5zMF#~e?{9y_EU@iE=C1{ delta 16 Xcmcb}e36-5zMF&L`opY^?57w3G3W*d diff --git a/tests/repository_data/repository/metadata.staged/root.json b/tests/repository_data/repository/metadata.staged/root.json index 45ecb4287c250305c109faf668601b399a0d4b20..94327a115a8938368fdbef86f472ab835e6a49e0 100644 GIT binary patch delta 786 zcmWks*$Ev<4E$IyYzmG-YTe=J=#Ieu4+mgyE}P)$!8FWFOR7>;{r>s;=ifgca=}5o z-;)|yGH%pw0A;Slw2O|@g#?9bG(s{4G6}AI6a%kT?*y%yxj`UJj@sDbF2&wYuo>T- z4$zca7cNn1`R5R_3_}gwEx%^H)9i5Rd0eM63}C^QL8StrLA@cBn>a`AwHK=B?1}s& zP+j8zyltRN?qc=ixyn}c4oHQ*$n;s*kKgZLe6f4IYplZaE>bY#zAO$Fu~DhjAn=$l z;<*x>(Rx>>V>h@0#ORz+f@jb{4LH#IoC<%MHE+%x%eHCRbQh$F^#UIt0k z$63X?Z*DFyQTf&v(-NtlnTccw2I4dr%?vHgrxwcXDDg}BdbA(So z9&@(O{=S}bSJvn4nLFOWv>=}YoiTTVZ1kS(Y6>yb zi|B_LB%s^xx9?RQE$E^m??>j8umLaZ{@Qt87ziDkM1dXLK*xt5P~I{Awgy4Cu#4bW z+umNmUiSXT!fd&Z!BW=^OnuBax`);v@7x}XvKO81=4_Y;cLmpg&7zS@s8mq399x(7 yi;BA(Gj(E<&v?`kXZ2YYjaM}B4l20Z2LVa$u`i3wZa4hLda9@Y{rTtDzyAZhy4l(Q diff --git a/tests/repository_data/repository/metadata.staged/root.json.gz b/tests/repository_data/repository/metadata.staged/root.json.gz index 5176668fc257686abfc0db89b085438e6176f4f6..4a13f7efd616dff425bc51ec67ad3e32a6f7402b 100644 GIT binary patch literal 1680 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 diff --git a/tests/repository_data/repository/metadata.staged/snapshot.json.gz b/tests/repository_data/repository/metadata.staged/snapshot.json.gz index ed43cdb1605dd5cd1fcbc28b50ee0aff21ebb5eb..51d94d42f11d77bca070ec0cef893f954472531b 100644 GIT binary patch literal 380 zcmV-?0fYV@iwFR3sD@Vp|AkP?ZW}QSyzf^CI=clWQWllpNKP$^f|4k&)6{Etw?%`% z|6c9dIkbmX&~rr04Cieyc0L|Xvi!K{Y#+?$!I-zcjQyss$J!C=*n79n%m5`otquAh z%;@?(L1h<83?!KpIw&CpFN`T;bXjY%yN&O=F5|QjYV{$wcf8AQDvh0sP@Af6{nGaA zsAS(2QUj?Vo>4P4&M|pv$gLNl-!rZ@Zc6V7~0`iRfx|O~QU%UeCH(d_2i{9;an9ZuQssc+1RsK==Tz&nJL~ zZGO5H^`_;{W9(&mQTOqAo=)$Ou|M@PA2-0Qz;$=8oR+@|N14Y>?e^{_NAY35%BKoi zwQuN(d^c(U{4Tgq$sTHLqDi+Yj$J2NgMm3r^7OKUPPaE|8lv= a<)F*_pN@um{huG#;rbgb+g8AQ0ssIZ?!p8B literal 384 zcmV-`0e}7w=sP!k3RNej$nP~Ud9j_``Qc0xZdZzo<6ACGjJ$7$KXHUB;xu07KREZhOg zd;)mb=9g=b6iqiDrO(qVGh86Vd4 zz|v)O1jdmEDVHl{7o88iCYI`Yvex<5<mgDSQN{ delta 16 XcmdnMwtd|E9X?VIG1xf z{2ac&K7pGuDhZEJwP_$4Gg)<{+MffFq-ToHV_3`3R(W^Pg%q&Do+ jqWNl}iwzdof4BR)+8>Xn#rY%NFE4Me=cg0wf7`=90@*^i delta 216 zcmWNLyKO@;3;^*ASB3|0l^OUK*<}?`qSi>C%D@8*&ycA+O4J?hn)|!Hug~9~MN#DC zsM-ch*OfZCEAeWWB^_#0!ib7gl4{liljiKsG=vt)(k#erTM`?s-a{pUOh&C4yqlL2 zajVgqC}S%Q6DBy~ydAG^Gzf))u9<|0HUyTFyC5rPS`2oKNN4lFJw>*cbJ`3;qVsb+ KF6ig|^7Rjkm^qCA diff --git a/tests/repository_data/repository/metadata.staged/timestamp.json.gz b/tests/repository_data/repository/metadata.staged/timestamp.json.gz index aea975ae4cc551154de1bf06c1afb0e84277ce57..c855737bd93eb433de834ba3fb64143eeb8bc5f3 100644 GIT binary patch literal 368 zcmV-$0gwJ4iwFR3sD@Vp|5cF9j@=*(h4*=ii1lrS4d!Q_V^*!I%78t&)7~FV(yF6T z-n}F@T~sm>93MUo{uo9xpI@%L{CbnwJdIz6as23OG(Y71+`3|%+N{Bc#DrLctqY#f zIiM7=C2wtt)U*}!s$Obys2CymMipHJbJ}?qS*F_#l!io*54}IXi4c8`m^+gt=h6y` zDrE|&z&2E6r&v;T&}>P4r(m@fUn^-*?4G76kx8921zGxSk#l{gms=GIefn;gEjI+kD=`z$UE2;r_p| O4(ngMc3Ltj0ssJ;y1kVE literal 364 zcmV-y0h9h8iwFSM;c8a`|22@=Zrm^oMc@4uhMp${7g0;TBTo&2LJJkU?JS6$pg}PI z9@#SmBtW_(4lnQ5Fq&n4J*D;iO&9YxJ`dyg)$eHj=;vI!Vz@zU&bp90(b+16xS%=gyrZtuc?W7G5sY`ekKe>bQ7LFZ5nrGNX;~`w zk=#6HwF$JpGL)z>3t9CpMa)!d3QWaPL)#=P*~bhEl8VScTj7u_sA%|~6o9D}b-35ehrTWI?g@u3U%vrQ K`-JWo0ssK%T&-sS diff --git a/tests/repository_data/repository/metadata/role1.json.gz b/tests/repository_data/repository/metadata/role1.json.gz index 3d1e7d2ff0369bfb26982e692c2352246f9a3ed4..53d950b9bdf648f12a61366d5bb37b1bf079acf7 100644 GIT binary patch delta 16 Xcmcb}e36-5zMF#~e?{9y_EU@iE=C1{ delta 16 Xcmcb}e36-5zMF&L`opY^?57w3G3W*d diff --git a/tests/repository_data/repository/metadata/root.json b/tests/repository_data/repository/metadata/root.json index 45ecb4287c250305c109faf668601b399a0d4b20..94327a115a8938368fdbef86f472ab835e6a49e0 100644 GIT binary patch delta 786 zcmWks*$Ev<4E$IyYzmG-YTe=J=#Ieu4+mgyE}P)$!8FWFOR7>;{r>s;=ifgca=}5o z-;)|yGH%pw0A;Slw2O|@g#?9bG(s{4G6}AI6a%kT?*y%yxj`UJj@sDbF2&wYuo>T- z4$zca7cNn1`R5R_3_}gwEx%^H)9i5Rd0eM63}C^QL8StrLA@cBn>a`AwHK=B?1}s& zP+j8zyltRN?qc=ixyn}c4oHQ*$n;s*kKgZLe6f4IYplZaE>bY#zAO$Fu~DhjAn=$l z;<*x>(Rx>>V>h@0#ORz+f@jb{4LH#IoC<%MHE+%x%eHCRbQh$F^#UIt0k z$63X?Z*DFyQTf&v(-NtlnTccw2I4dr%?vHgrxwcXDDg}BdbA(So z9&@(O{=S}bSJvn4nLFOWv>=}YoiTTVZ1kS(Y6>yb zi|B_LB%s^xx9?RQE$E^m??>j8umLaZ{@Qt87ziDkM1dXLK*xt5P~I{Awgy4Cu#4bW z+umNmUiSXT!fd&Z!BW=^OnuBax`);v@7x}XvKO81=4_Y;cLmpg&7zS@s8mq399x(7 yi;BA(Gj(E<&v?`kXZ2YYjaM}B4l20Z2LVa$u`i3wZa4hLda9@Y{rTtDzyAZhy4l(Q diff --git a/tests/repository_data/repository/metadata/root.json.gz b/tests/repository_data/repository/metadata/root.json.gz index 5176668fc257686abfc0db89b085438e6176f4f6..4a13f7efd616dff425bc51ec67ad3e32a6f7402b 100644 GIT binary patch literal 1680 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 diff --git a/tests/repository_data/repository/metadata/snapshot.json.gz b/tests/repository_data/repository/metadata/snapshot.json.gz index ed43cdb1605dd5cd1fcbc28b50ee0aff21ebb5eb..51d94d42f11d77bca070ec0cef893f954472531b 100644 GIT binary patch literal 380 zcmV-?0fYV@iwFR3sD@Vp|AkP?ZW}QSyzf^CI=clWQWllpNKP$^f|4k&)6{Etw?%`% z|6c9dIkbmX&~rr04Cieyc0L|Xvi!K{Y#+?$!I-zcjQyss$J!C=*n79n%m5`otquAh z%;@?(L1h<83?!KpIw&CpFN`T;bXjY%yN&O=F5|QjYV{$wcf8AQDvh0sP@Af6{nGaA zsAS(2QUj?Vo>4P4&M|pv$gLNl-!rZ@Zc6V7~0`iRfx|O~QU%UeCH(d_2i{9;an9ZuQssc+1RsK==Tz&nJL~ zZGO5H^`_;{W9(&mQTOqAo=)$Ou|M@PA2-0Qz;$=8oR+@|N14Y>?e^{_NAY35%BKoi zwQuN(d^c(U{4Tgq$sTHLqDi+Yj$J2NgMm3r^7OKUPPaE|8lv= a<)F*_pN@um{huG#;rbgb+g8AQ0ssIZ?!p8B literal 384 zcmV-`0e}7w=sP!k3RNej$nP~Ud9j_``Qc0xZdZzo<6ACGjJ$7$KXHUB;xu07KREZhOg zd;)mb=9g=b6iqiDrO(qVGh86Vd4 zz|v)O1jdmEDVHl{7o88iCYI`Yvex<5<mgDSQN{ delta 16 XcmdnMwtd|E9X?VIG1xf z{2ac&K7pGuDhZEJwP_$4Gg)<{+MffFq-ToHV_3`3R(W^Pg%q&Do+ jqWNl}iwzdof4BR)+8>Xn#rY%NFE4Me=cg0wf7`=90@*^i delta 216 zcmWNLyKO@;3;^*ASB3|0l^OUK*<}?`qSi>C%D@8*&ycA+O4J?hn)|!Hug~9~MN#DC zsM-ch*OfZCEAeWWB^_#0!ib7gl4{liljiKsG=vt)(k#erTM`?s-a{pUOh&C4yqlL2 zajVgqC}S%Q6DBy~ydAG^Gzf))u9<|0HUyTFyC5rPS`2oKNN4lFJw>*cbJ`3;qVsb+ KF6ig|^7Rjkm^qCA diff --git a/tests/repository_data/repository/metadata/timestamp.json.gz b/tests/repository_data/repository/metadata/timestamp.json.gz index aea975ae4cc551154de1bf06c1afb0e84277ce57..c855737bd93eb433de834ba3fb64143eeb8bc5f3 100644 GIT binary patch literal 368 zcmV-$0gwJ4iwFR3sD@Vp|5cF9j@=*(h4*=ii1lrS4d!Q_V^*!I%78t&)7~FV(yF6T z-n}F@T~sm>93MUo{uo9xpI@%L{CbnwJdIz6as23OG(Y71+`3|%+N{Bc#DrLctqY#f zIiM7=C2wtt)U*}!s$Obys2CymMipHJbJ}?qS*F_#l!io*54}IXi4c8`m^+gt=h6y` zDrE|&z&2E6r&v;T&}>P4r(m@fUn^-*?4G76kx8921zGxSk#l{gms=GIefn;gEjI+kD=`z$UE2;r_p| O4(ngMc3Ltj0ssJ;y1kVE literal 364 zcmV-y0h9h8iwFSM;c8a`|22@=Zrm^oMc@4uhMp${7g0;TBTo&2LJJkU?JS6$pg}PI z9@#SmBtW_(4lnQ5Fq&n4J*D;iO&9YxJ`dyg)$eHj=;vI!Vz@zU&bp90(b+16xS%=gyrZtuc?W7G5sY`ekKe>bQ7LFZ5nrGNX;~`w zk=#6HwF$JpGL)z>3t9CpMa)!d3QWaPL)#=P*~bhEl8VScTj7u_sA%|~6o9D}b-35ehrTWI?g@u3U%vrQ K`-JWo0ssK%T&-sS diff --git a/tests/repository_tool.py b/tests/repository_tool.py index e6190a00..042adea6 100755 --- a/tests/repository_tool.py +++ b/tests/repository_tool.py @@ -2766,7 +2766,7 @@ def load_repository(repository_directory): # Strip the version number if 'consistent_snapshot' is True. # Example: '10.django.json' --> 'django.json' metadata_name, version_number_junk = \ - repo_lib._strip_consistent_snapshot_version_number(metadata_name, + repo_lib._strip_version_number(metadata_name, consistent_snapshot) if metadata_name.endswith(METADATA_EXTENSION): diff --git a/tests/test_formats.py b/tests/test_formats.py index b23491bf..de85f14d 100755 --- a/tests/test_formats.py +++ b/tests/test_formats.py @@ -577,11 +577,12 @@ def test_make_fileinfo(self): # Test conditions for valid arguments. length = 1024 hashes = {'sha256': 'A4582BCF323BCEF', 'sha512': 'A4582BCF323BFEF'} + version = 8 custom = {'type': 'paintjob'} FILEINFO_SCHEMA = tuf.formats.FILEINFO_SCHEMA make_fileinfo = tuf.formats.make_fileinfo - self.assertTrue(FILEINFO_SCHEMA.matches(make_fileinfo(length, hashes, custom))) + self.assertTrue(FILEINFO_SCHEMA.matches(make_fileinfo(length, hashes, version, custom))) self.assertTrue(FILEINFO_SCHEMA.matches(make_fileinfo(length, hashes))) # Test conditions for invalid arguments. diff --git a/tests/test_repository_lib.py b/tests/test_repository_lib.py index 63b06707..534c2a39 100755 --- a/tests/test_repository_lib.py +++ b/tests/test_repository_lib.py @@ -89,8 +89,8 @@ def setUp(self): def tearDown(self): - tuf.roledb.clear_roledb() - tuf.keydb.clear_keydb() + tuf.roledb.clear_roledb() + tuf.keydb.clear_keydb() @@ -615,17 +615,26 @@ def test_generate_timestamp_metadata(self): shutil.copytree(original_repository_path, repository_directory) metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) + targets_directory = os.path.join(repository_directory, repo_lib.TARGETS_DIRECTORY_NAME) + snapshot_filename = os.path.join(metadata_directory, repo_lib.SNAPSHOT_FILENAME) # Set valid generate_timestamp_metadata() arguments. version = 1 expiration_date = '1985-10-21T13:20:00Z' + + # Load a valid repository so that top-level roles exist in roledb and + # generate_snapshot_metadata() has roles to specify in snapshot metadata. + repository = repo_tool.Repository(repository_directory, metadata_directory, + targets_directory) + + repository_junk = repo_tool.load_repository(repository_directory) - snapshot_metadata = \ + timestamp_metadata = \ repo_lib.generate_timestamp_metadata(snapshot_filename, version, expiration_date) - self.assertTrue(tuf.formats.TIMESTAMP_SCHEMA.matches(snapshot_metadata)) + self.assertTrue(tuf.formats.TIMESTAMP_SCHEMA.matches(timestamp_metadata)) # Test improperly formatted arguments. diff --git a/tuf/formats.py b/tuf/formats.py index e0905302..0a5b785f 100755 --- a/tuf/formats.py +++ b/tuf/formats.py @@ -273,6 +273,7 @@ object_name = 'FILEINFO_SCHEMA', length = LENGTH_SCHEMA, hashes = HASHDICT_SCHEMA, + version = SCHEMA.Optional(METADATAVERSION_SCHEMA), custom = SCHEMA.Optional(SCHEMA.Object())) # Version information specified in "snapshot.json" for each role available on @@ -287,7 +288,7 @@ # A dict holding the version or file information for a particular metadata # role. The dict keys hold the relative file paths, and the dict values the -# corresponding version numbers or file information. +# corresponding version numbers and/or file information. FILEINFODICT_SCHEMA = SCHEMA.DictOf( key_schema = RELPATH_SCHEMA, value_schema = SCHEMA.OneOf([VERSIONINFO_SCHEMA, FILEINFO_SCHEMA])) @@ -993,7 +994,7 @@ def make_signable(object): -def make_fileinfo(length, hashes, custom=None): +def make_fileinfo(length, hashes, version=None, custom=None): """ Create a dictionary conformant to 'FILEINFO_SCHEMA'. @@ -1007,6 +1008,9 @@ def make_fileinfo(length, hashes, custom=None): A dict of hashes in 'HASHDICT_SCHEMA' format, which has the form: {'sha256': 123df8a9b12, 'sha512': 324324dfc121, ...} + version: + An optional integer representing the version of the file. + custom: An optional object providing additional information about the file. @@ -1025,6 +1029,10 @@ def make_fileinfo(length, hashes, custom=None): """ fileinfo = {'length' : length, 'hashes' : hashes} + + if version is not None: + fileinfo['version'] = version + if custom is not None: fileinfo['custom'] = custom diff --git a/tuf/repository_lib.py b/tuf/repository_lib.py index 61bacb2a..205b0295 100755 --- a/tuf/repository_lib.py +++ b/tuf/repository_lib.py @@ -447,14 +447,15 @@ def _delete_obsolete_metadata(metadata_directory, snapshot_metadata, metadata_path[len(metadata_directory):].lstrip(os.path.sep) # Strip the version number if 'consistent_snapshot' is True. Example: - # '10.django.json' --> 'django.json', or '123456789abcdef.root.json' - # --> 'root.json' . Consistent and non-consistent metadata might - # co-exist if write() and write(consistent_snapshot=True) are mixed, so - # ensure only '.filename' metadata is stripped. + # '10.django.json' --> 'django.json'. Consistent and non-consistent + # metadata might co-exist if write() and + # write(consistent_snapshot=True) are mixed, so ensure only + # '.filename' metadata is stripped. embedded_version_number = None + if metadata_name not in snapshot_metadata['meta']: metadata_name, embedded_version_number = \ - _strip_version_number_or_digest(metadata_name, consistent_snapshot) + _strip_version_number(metadata_name, consistent_snapshot) # Strip filename extensions. The role database does not include the # metadata extension. @@ -502,25 +503,23 @@ def _get_written_metadata(metadata_signable): -def _strip_version_number_or_digest(metadata_filename, - consistent_snapshot): +def _strip_version_number(metadata_filename, consistent_snapshot): """ - Strip from 'metadata_filename' any version / digest information (in the - expected '{dirname}/.rolename.' format) that - it may contain, and return the stripped filename and consistent attachment, + Strip from 'metadata_filename' any version number (in the + expected '{dirname}/.rolename.' format) that + it may contain, and return the stripped filename and version number, as a tuple. 'consistent_snapshot' is a boolean indicating if a version - number or digest is appended to 'metadata_filename'. + number is prepended to 'metadata_filename'. """ - # Strip the version number or digest if 'consistent_snapshot' is True. - # Example: '10.django.json' --> 'django.json', or - # '123456789abcdef.root.json' --> 'root.json'. + # Strip the version number if 'consistent_snapshot' is True. + # Example: '10.django.json' --> 'django.json' if consistent_snapshot: dirname, basename = os.path.split(metadata_filename) - consistent_attachment, basename = basename.split('.', 1) + version_number, basename = basename.split('.', 1) stripped_metadata_filename = os.path.join(dirname, basename) - return stripped_metadata_filename, embedded_version_number + return stripped_metadata_filename, version_number else: return metadata_filename, '' @@ -594,7 +593,7 @@ def _load_top_level_metadata(repository, top_level_filenames): roleinfo = tuf.roledb.get_roleinfo('timestamp') roleinfo['expires'] = timestamp_metadata['expires'] roleinfo['version'] = timestamp_metadata['version'] - if os.path.exists(timestamp_filename+'.gz'): + if os.path.exists(timestamp_filename + '.gz'): roleinfo['compressions'].append('gz') if _metadata_is_partially_loaded('timestamp', signable, roleinfo): @@ -614,10 +613,11 @@ def _load_top_level_metadata(repository, top_level_filenames): if consistent_snapshot: snapshot_hashes = timestamp_metadata['meta'][SNAPSHOT_FILENAME]['hashes'] snapshot_hash = random.choice(list(snapshot_hashes.values())) + snapshot_version = timestamp_metadata['meta'][SNAPSHOT_FILENAME]['version'] dirname, basename = os.path.split(snapshot_filename) basename = basename.split(METADATA_EXTENSION, 1)[0] - snapshot_filename = os.path.join(dirname, basename + '.' + str(snapshot_hash) + METADATA_EXTENSION) + snapshot_filename = os.path.join(dirname, str(snapshot_version) + '.' + basename + METADATA_EXTENSION) if os.path.exists(snapshot_filename): signable = tuf.util.load_json_file(snapshot_filename) @@ -1272,7 +1272,7 @@ def get_metadata_fileinfo(filename, custom=None): filesize, filehashes = \ tuf.util.get_file_details(filename, tuf.conf.REPOSITORY_HASH_ALGORITHMS) - return tuf.formats.make_fileinfo(filesize, filehashes, custom) + return tuf.formats.make_fileinfo(filesize, filehashes, custom=custom) @@ -1662,7 +1662,8 @@ def generate_snapshot_metadata(metadata_directory, version, expiration_date, fileinfodict = {} root_path = os.path.join(metadata_directory, root_filename + '.json') length, hashes = tuf.util.get_file_details(root_path) - fileinfodict[ROOT_FILENAME] = tuf.formats.make_fileinfo(length, hashes) + root_version = get_metadata_versioninfo('root') + fileinfodict[ROOT_FILENAME] = tuf.formats.make_fileinfo(length, hashes, version=root_version['version']) fileinfodict[TARGETS_FILENAME] = get_metadata_versioninfo(targets_filename) # We previously also stored the compressed versions of roles in @@ -1678,7 +1679,7 @@ def generate_snapshot_metadata(metadata_directory, version, expiration_date, # Strip the version number if 'consistent_snapshot' is True. # Example: '10.django.json' --> 'django.json' metadata_name, version_number_junk = \ - _strip_version_number_or_digest(metadata_filename, consistent_snapshot) + _strip_version_number(metadata_filename, consistent_snapshot) # All delegated roles are added to the snapshot file. for metadata_extension in METADATA_EXTENSIONS: @@ -1746,7 +1747,9 @@ def generate_timestamp_metadata(snapshot_filename, version, expiration_date): # Retrieve the versioninfo of the Snapshot metadata file. snapshot_fileinfo = {} length, hashes = tuf.util.get_file_details(snapshot_filename) - snapshot_fileinfo[SNAPSHOT_FILENAME] = tuf.formats.make_fileinfo(length, hashes) + snapshot_version = get_metadata_versioninfo('snapshot') + snapshot_fileinfo[SNAPSHOT_FILENAME] = \ + tuf.formats.make_fileinfo(length, hashes, version=snapshot_version['version']) # We previously saved the versioninfo of the compressed versions of # 'snapshot.json' in 'versioninfo'. Since version numbers are now stored, @@ -1965,20 +1968,9 @@ def write_metadata_file(metadata, filename, version_number, if consistent_snapshot: dirname, basename = os.path.split(written_filename) - if basename in ['root.json', 'snapshot.json']: - hash_algorithms = tuf.conf.REPOSITORY_HASH_ALGORITHMS - file_length_junk, digests = \ - tuf.util.get_file_details(written_filename, hash_algorithms) - - for digest in digests.values(): - basename= basename.split(METADATA_EXTENSION, 1)[0] - digest_and_filename = str(digest) + '.' + basename + METADATA_EXTENSION - written_consistent_filename = os.path.join(dirname, digest_and_filename) - - else: - basename = basename.split(METADATA_EXTENSION, 1)[0] - version_and_filename = str(version_number) + '.' + basename + METADATA_EXTENSION - written_consistent_filename = os.path.join(dirname, version_and_filename) + basename = basename.split(METADATA_EXTENSION, 1)[0] + version_and_filename = str(version_number) + '.' + basename + METADATA_EXTENSION + written_consistent_filename = os.path.join(dirname, version_and_filename) logger.info('Linking ' + repr(written_consistent_filename)) os.link(written_filename, written_consistent_filename) @@ -2017,7 +2009,7 @@ def write_metadata_file(metadata, filename, version_number, # unexpectedly change (gzip includes a timestamp) even though content has # not changed. _write_compressed_metadata(file_object, compressed_filename, - write_new_metadata, consistent_snapshot) + write_new_metadata, consistent_snapshot, version_number) return written_filename @@ -2025,7 +2017,7 @@ def write_metadata_file(metadata, filename, version_number, def _write_compressed_metadata(file_object, compressed_filename, - write_new_metadata, consistent_snapshot): + write_new_metadata, consistent_snapshot, version_number): """ Write compressed versions of metadata, ensuring compressed file that have not changed are not re-written, the digest of the compressed file is properly @@ -2060,15 +2052,15 @@ def _write_compressed_metadata(file_object, compressed_filename, digest_object.update(compressed_content) new_digests.append(digest_object.hexdigest()) - # Attach each digest to the compressed consistent snapshot filename. + # Attach each version nu to the compressed consistent snapshot filename. for new_digest in new_digests: dirname, basename = os.path.split(compressed_filename) for compression_extension in SUPPORTED_COMPRESSION_EXTENSIONS: if basename.endswith(compression_extension): basename = basename.split(compression_extension, 1)[0] - digest_and_filename = basename + '.' + new_digest + compression_extension + version_and_filename = str(version_number) + '.' + basename + compression_extension - consistent_filenames.append(os.path.join(dirname, digest_and_filename)) + consistent_filenames.append(os.path.join(dirname, version_and_filename)) # Move the 'tuf.util.TempFile' object to one of the filenames so that it is # saved and the temporary file closed. Any remaining consistent snapshots diff --git a/tuf/repository_tool.py b/tuf/repository_tool.py index bc58d22f..d528a7af 100755 --- a/tuf/repository_tool.py +++ b/tuf/repository_tool.py @@ -2821,8 +2821,7 @@ def load_repository(repository_directory): # Strip the version number if 'consistent_snapshot' is True. # Example: '10.django.json' --> 'django.json' metadata_name, version_number_junk = \ - repo_lib._strip_version_number_or_digest(metadata_name, - consistent_snapshot) + repo_lib._strip_version_number(metadata_name, consistent_snapshot) if metadata_name.endswith(METADATA_EXTENSION): extension_length = len(METADATA_EXTENSION)