Merge pull request #218 from vladimir-v-diaz/develop

Initial implementation of authoritative delegations.
This commit is contained in:
Vladimir Diaz 2014-06-07 21:02:34 -04:00
commit 5fc8285115
39 changed files with 282 additions and 181 deletions

View file

@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,FF468C7E762281A6
DEK-Info: DES-EDE3-CBC,8EB89B1037BC3FA7
+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
-----END RSA PRIVATE KEY-----

View file

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Aaacry3Lrf+LxjlHoM7
qkwM0K+Wm3G2dZh6SxrGEkm1/REOk51CPTFVqpVOUsw1tW0duAlxg/24cxXVX0xv
BMilTYDZ5tBk6FXZXhuN28IREz2yMo8a93nHH3fCRDz2/eViLBZO8KMVF6s2340V
tTNOFhm8x/6nfe3+M8PzEgoNPF693djhUw1OolEmQA4hb2v87L/86SFGBaA1w8De
M+2zGJmk5rckLQAZFvMErZ8828WhW8ABFkK4QaUJDrnI+o00ep4+1Qu8CvOIw+pT
lbYgv/+aXQOXQpkmKilpTCoynbQFOxIPmUmCBAnJXgYuHya8SUIeZLWxNvkChLMP
SwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqKdTRVn3mLQFUf02Rpug
wVEU4yJtechILLb6nM7+urfwLe6f7EsNCDFhkiTP7vKuQywdLYrhwZKYZMDmaVnI
q4d/tBLvb/jGY/IPFVvWbAOWtwWG7apiAFrcp3Idq6EKGaVVLn7tyv74+nisssYJ
cVKodlkzpgX1Ibrdq73BUlAxhEQNDAUM5bzyJUW0BU4OSjUoFKCgc8BSkNcSLwXO
RpyqAwDpPWiL68N1Dch7R9uD6GE9aREY9SKoYsNCvUOraIcme4fJZ3NmxpN3SVnX
tepoiJo2iAtORtEI1yTCv/dOPap/iebveeCjn667HkMezJodSR8X3pMgMKMVyxhJ
gwIDAQAB
-----END PUBLIC KEY-----

View file

@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D1A23F08038990E0
DEK-Info: DES-EDE3-CBC,B90D8CBD38BD4DE2
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
-----END RSA PRIVATE KEY-----

View file

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxqR34Ya+Nuh4+zljiPI7
idGUwTs6ALm/mwBJJZRVmIQjVDKdK69fxmh5CxXud6lJTapuDutCFOvOKG1AaEHM
Zu5r/UiuEEUU2ZTtjtFaulJpoz6lYViM2qHy8o4HJ8f5VHvcITnAy4Qu3emKolvi
CrnMoiBZjGQAGEGt1u7S9u8P9zA4Jz0ziICdDnhKH8tLvWBmF4VHmAbLXXFj+Yny
R7iOeDEiS5PNJVyfEHQmds+LdBTI1w0aBoHORvrw36kFRD2yZF0w6BZgqrcM1OQU
xuJBWf3DTMRmBdldIIzGZQ7Lv08GB8xVy3472Q6nn8dTl0Gz3Y4ujMqbcglB4Auz
lwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7J15ZaeDQPrhQsRj29wB
PhibH+Do59xsT2396L+uCg793gZlar5wZN2eHSh725cNQWyTAa9LwG+lXaKMukQ+
8176CKR2J5sv3DezrGVu3x8V1qhyJyy79FlNZRVYTVqNaYzvJzxsVnFPpg7f8B7C
ffiqWJr9XkpqwRlCpxooXm4hplZ7uek5Ku21CzQ4OWg7hbuc+ZjCGzpXfm8NuosU
7TipnKGpEt0Agiph5g6TB2/scoeFar1CKMONIl80maxzAQk+xkWgiJ00+Z2qFCsx
ESfis/YkILS6RMFyZz7oa1WwMtUjYmrsRuz+jlFcbNuxZpIkaISiG9a2YdGcJ1Aj
3QIDAQAB
-----END PUBLIC KEY-----

View file

@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,CA9413D527FF4F37
DEK-Info: DES-EDE3-CBC,9DA302AB20EFABC8
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
-----END RSA PRIVATE KEY-----

View file

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhC3ksoCUEqNJZfvI3rgI
RuknTl3DQjO8H4wA98Y1ZfWSCGRCkD7z9wCtnRcP0r/DdRDozzIn0w5POYyZt+ql
aPBdigwWVZs4rB73U8Pjh/ZQ/QS2qngQlNmpkp6Fnh9FzmqQmIj0QYwZC6TPuB/2
dVsnbyUDt+tLH4FCN688tOvV9fATO22rzT5XAeDCU046yD6fNtooCRVwd7mxV8Ug
npREULBq0cs82Cl581aM5znN1ydFr7cLMaxzvyAzJzAvdITOTdO7ZO171qm4OrGD
9W2ex+88ca3XYhjaEJGsoMXa00NPzrZPtFFUv6wSi9nqa5mpHmcEWAQABRRARlkp
mQIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9XqJohXw46tOKUiOMzPx
lDtrSlpy3WLH2zFSppN0eLIqByD4mk5nbyWKOzzGetQYgv9FzyER4AbmG40kD9bT
2jm3zxjoTnCoM+1Qt7khZm3LxcKBa7q1yrAlvSfNLauIC220kauVRn4Kehd+IqeS
/LhfOT6YyHUMH9SjZKM8XVHU1ehxTiA69eos4AosMK1Gf7jr042FzfiBTygqV1h5
LXxO0IUYXiI4eCYTwzK4ChfQBmG3DGFGh2G8yrgqQZ5ERaBQPYG9rqQnfF8T8RUQ
o4n7yKpEKSWLOr6Uz9Y1pnHZG4YiKKbTe9EKGtrRbDMIfI+Mv5f3+n600nwZrN7K
OwIDAQAB
-----END PUBLIC KEY-----

View file

@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,112A90551702BF36
DEK-Info: DES-EDE3-CBC,807D96406E906425
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
-----END RSA PRIVATE KEY-----

View file

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkbEPgkqMnOfprFY5XhCo
ppl6E89rfIzKv0AAZH6L6CruIzm2wgf3YRGl5Xle1+uyq9Wt0fcC32cZaoQPqpik
JWKYXdeuQjkUbPzON5wgV/MrjsidTC02296pmfHvGGlwUstjqwcbcCcAliw0V97G
IJ4JKnbelGmFFpUzzow8tp7uxxbM+ihLA1V2QdAJBDSIuma+A36zN0M23vvt6fBg
cDzJ+ij5Z3N0O2WAyQDONepRtHjKKdhAuzKRluLMwYO0sMjp+E88LMw1vUapxsEm
9jrYmY7aV6RFTe5OeZupH/0HyMwv7jua+aNzNxxD6/xYbh4Kp0jFke1zEBsoNrc8
pwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqF3xKdM9FySLLp0PiwIx
2O9CFikFBo4Xfm4Z0HW69lu2X5WQFx8/GL9kmo1QjZrOwYToYDe287nidbbLs/rT
lq3buN5wPMiD1GbVgGN/nknkkzv9KkJtrSF4RLbKrUnKo7/9C6IUmMt30wBk4GpJ
RZ+8wFfRhUE6859/f6Xl4XbtBJofbIGwV/OBdIzO5zIgB3uBktbbqBVjJb8Oj6Oi
YYskEIacP+TUrpa1iuC6nONj6ahI5NnEjt2B4/pLaUcEPm43kktJTabznkfNZXOa
2nMjngY8v8EbNLBpG6Y7MqZwwLZ4wnaTOe5Bp323YN9eVONXfU2gtT2MBoWExvFV
FwIDAQAB
-----END PUBLIC KEY-----

View file

@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E950DB75AA748728
DEK-Info: DES-EDE3-CBC,261BF7F755E46B73
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
-----END RSA PRIVATE KEY-----

View file

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0EhQ6twjA/9HywnQWNey
rthMpF2S3yeRQiU90TPWAAVsGYvKSgra/BjNTUdFZxf2twZONq/PW1CSQYya230i
16+4/6wTY47pSAoDfk71ISjFEdkZa7Cbvzv0CEv25sA+elaaCtRnmc6G7RuofwM/
AnKqWdPfkJcdkjkmNGYVhNU7sF96hNSdG3liWG0rbByZVxPYMYru18gziGQOkp82
Ex/6SWEkUzdjZHqvL7A3bEUJ2KzHoHvf3SdyRP1HbASphnWEvBqC5/3TnmsAHvWi
d4NRqKLJlsLnySGP5gSinjc53bN8CTJz+ThSaIFlt46RpNtkjm5ZU8YjmmqfbUSG
FwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyw8QAC0PNyyf0AV3qzSp
DgT74sGKC/72HIO1EskP4VEkdfh67PROHCm0YJTYLch9zH+uHIsmyyuzNr6go2Nv
GPSRwYEP34LJlmqr699zkjSXw79T/t244keFiL8SFWTlWmQyTPDdn+N2v4acAmvW
xSFcjTl8cVIGyGuU2s/vHrBn0zoOJ7ZIGAFzzCGAm0j6VvGvkxy3mymE+8VjzrAV
9P1aOMdRVmlqCyPlGVW66Lvz7wkQKcp7rf0CEKkBGlYMtgTqiiagHJy0Sv6qAapw
LXzE6ZdM40E1J1rT9GUitd0K4LhpSjW1lfipSbNQDLiZTG9R2EhnDMl5suaIaFh0
UQIDAQAB
-----END PUBLIC KEY-----

View file

@ -878,7 +878,8 @@ def test_delegations(self):
threshold = 1
self.targets_object.delegate(rolename, public_keys, list_of_targets,
threshold, restricted_paths=None,
threshold, backtrack=True,
restricted_paths=None,
path_hash_prefixes=None)
# Test that a valid Targets() object is returned by delegations().
@ -1012,8 +1013,9 @@ def test_delegate(self):
path_hash_prefixes = ['e3a3', '8fae', 'd543']
self.targets_object.delegate(rolename, public_keys, list_of_targets,
threshold, restricted_paths,
path_hash_prefixes)
threshold, backtrack=True,
restricted_paths=restricted_paths,
path_hash_prefixes=path_hash_prefixes)
self.assertEqual(self.targets_object.get_delegated_rolenames(),
['targets/tuf'])

View file

@ -843,7 +843,73 @@ def test_6_target(self):
# Test: invalid target path.
self.assertRaises(tuf.UnknownTargetError, self.repository_updater.target,
self.random_path())
# Test updater.target() backtracking behavior (enabled by default.)
targets_directory = os.path.join(self.repository_directory, 'targets')
foo_directory = os.path.join(targets_directory, 'foo')
os.makedirs(foo_directory)
foo_package = os.path.join(foo_directory, 'foo1.1.tar.gz')
with open(foo_package, 'wb') as file_object:
file_object.write(b'new release')
# Modify delegations on the remote repository to test backtracking behavior.
repository = repo_tool.load_repository(self.repository_directory)
repository.targets.delegate('role2', [self.role_keys['targets']['public']],
[], restricted_paths=[foo_directory])
repository.targets.delegate('role3', [self.role_keys['targets']['public']],
[foo_package], restricted_paths=[foo_directory])
repository.targets.load_signing_key(self.role_keys['targets']['private'])
repository.targets('role2').load_signing_key(self.role_keys['targets']['private'])
repository.targets('role3').load_signing_key(self.role_keys['targets']['private'])
repository.snapshot.load_signing_key(self.role_keys['snapshot']['private'])
repository.timestamp.load_signing_key(self.role_keys['timestamp']['private'])
repository.write()
# Move the staged metadata to the "live" metadata.
shutil.rmtree(os.path.join(self.repository_directory, 'metadata'))
shutil.copytree(os.path.join(self.repository_directory, 'metadata.staged'),
os.path.join(self.repository_directory, 'metadata'))
# updater.target() should find 'foo1.1.tar.gz' by backtracking to
# 'targets/role3'. 'targets/role2' allows backtracking.
self.repository_updater.refresh()
self.repository_updater.target('foo/foo1.1.tar.gz')
# Test when 'targets/role2' does *not* allow backtracking. If
# 'foo/foo1.1.tar.gz' is not provided by the authoritative 'target/role2',
# updater.target() should return a 'tuf.UnknownTargetError' exception.
repository = repo_tool.load_repository(self.repository_directory)
repository.targets.revoke('role2')
repository.targets.revoke('role3')
# Ensure we delegate in trusted order (i.e., 'role2' has higher priority.)
repository.targets.delegate('role2', [self.role_keys['targets']['public']],
[], backtrack=False, restricted_paths=[foo_directory])
repository.targets.delegate('role3', [self.role_keys['targets']['public']],
[foo_package], restricted_paths=[foo_directory])
repository.targets('role2').load_signing_key(self.role_keys['targets']['private'])
repository.targets('role3').load_signing_key(self.role_keys['targets']['private'])
repository.targets.load_signing_key(self.role_keys['targets']['private'])
repository.snapshot.load_signing_key(self.role_keys['snapshot']['private'])
repository.timestamp.load_signing_key(self.role_keys['timestamp']['private'])
repository.write()
# Move the staged metadata to the "live" metadata.
shutil.rmtree(os.path.join(self.repository_directory, 'metadata'))
shutil.copytree(os.path.join(self.repository_directory, 'metadata.staged'),
os.path.join(self.repository_directory, 'metadata'))
# Verify that 'tuf.UnknownTargetError' is raised by updater.target().
self.repository_updater.refresh()
self.assertRaises(tuf.UnknownTargetError, self.repository_updater.target,
'foo/foo1.1.tar.gz')

View file

@ -2300,15 +2300,28 @@ def _preorder_depth_first_walk(self, target_filepath):
if target is None:
# Push children in reverse order of appearance onto the stack.
child_roles_to_visit = []
# NOTE: This may be a slow operation if there are many delegated roles.
for child_role in reversed(child_roles):
for child_role in child_roles:
child_role_name = self._visit_child_role(child_role, target_filepath)
if child_role_name is None:
if not child_role['backtrack'] and child_role_name is not None:
logger.debug('Adding child role '+repr(child_role_name))
logger.debug('Not backtracking to other roles.')
role_names = []
child_roles_to_visit.append(child_role_name)
break
elif child_role_name is None:
logger.debug('Skipping child role '+repr(child_role_name))
else:
logger.debug('Adding child role '+repr(child_role_name))
role_names.append(child_role_name)
child_roles_to_visit.append(child_role_name)
# Push 'child_roles_to_visit' in reverse order of appearance onto
# 'role_names'. Roles are popped from the end of the 'role_names' list.
child_roles_to_visit.reverse()
role_names.extend(child_roles_to_visit)
else:
logger.debug('Found target in current role '+repr(role_name))
@ -2350,13 +2363,15 @@ def _get_target_from_targets_role(self, role_name, targets, target_filepath):
target = None
# Does the current role name have our target?
logger.debug('Asking role '+repr(role_name)+' about target '+\
logger.debug('Asking role ' + repr(role_name) + ' about target '+\
repr(target_filepath))
for filepath, fileinfo in six.iteritems(targets):
if filepath == target_filepath:
logger.debug('Found target '+target_filepath+' in role '+role_name)
logger.debug('Found target ' + target_filepath + ' in role ' + role_name)
target = {'filepath': filepath, 'fileinfo': fileinfo}
break
else:
logger.debug('No target '+target_filepath+' in role '+role_name)
@ -2434,7 +2449,7 @@ def _visit_child_role(self, child_role, target_filepath):
# The 'paths' or 'path_hash_prefixes' fields should not be missing,
# so we raise a format error here in case they are both missing.
raise tuf.FormatError(repr(child_role_name)+' has neither ' \
'"paths" nor "path_hash_prefixes"!')
'"paths" nor "path_hash_prefixes".')
if child_role_is_relevant:
logger.debug('Child role '+repr(child_role_name)+' has target '+

View file

@ -369,6 +369,7 @@
name = SCHEMA.Optional(ROLENAME_SCHEMA),
keyids = KEYIDS_SCHEMA,
threshold = THRESHOLD_SCHEMA,
backtrack = SCHEMA.Optional(BOOLEAN_SCHEMA),
paths = SCHEMA.Optional(RELPATHS_SCHEMA),
path_hash_prefixes = SCHEMA.Optional(PATH_HASH_PREFIXES_SCHEMA))

View file

@ -1920,9 +1920,8 @@ def get_delegated_rolenames(self):
return tuf.roledb.get_delegated_rolenames(self.rolename)
def delegate(self, rolename, public_keys, list_of_targets,
threshold=1, restricted_paths=None, path_hash_prefixes=None):
def delegate(self, rolename, public_keys, list_of_targets, threshold=1,
backtrack=True, restricted_paths=None, path_hash_prefixes=None):
"""
<Purpose>
Create a new delegation, where 'rolename' is a child delegation of this
@ -1953,6 +1952,17 @@ def delegate(self, rolename, public_keys, list_of_targets,
threshold:
The threshold number of keys of 'rolename'.
backtrack:
Boolean that indicates whether this role allows the updater client
to continue searching for targets (target files it is trusted to list
but has not yet specified) in other delegations. If 'backtrack' is
False and 'updater.target()' does not find 'example_target.tar.gz' in
this role, a 'tuf.UnknownTargetError' exception should be raised. If
'backtrack' is True (default), and 'target/other_role' is also trusted
with 'example_target.tar.gz' and has listed it, updater.target()
should backtrack and return the target file specified by
'target/other_role'.
restricted_paths:
A list of restricted directory or file paths of 'rolename'. Any target
@ -1986,17 +1996,21 @@ def delegate(self, rolename, public_keys, list_of_targets,
tuf.formats.ANYKEYLIST_SCHEMA.check_match(public_keys)
tuf.formats.RELPATHS_SCHEMA.check_match(list_of_targets)
tuf.formats.THRESHOLD_SCHEMA.check_match(threshold)
tuf.formats.BOOLEAN_SCHEMA.check_match(backtrack)
if restricted_paths is not None:
tuf.formats.RELPATHS_SCHEMA.check_match(restricted_paths)
if path_hash_prefixes is not None:
tuf.formats.PATH_HASH_PREFIXES_SCHEMA.check_match(path_hash_prefixes)
# Check if 'rolename' is not already a delegation. 'tuf.roledb' expects the
# full rolename.
full_rolename = self._rolename+'/'+rolename
full_rolename = self._rolename + '/' + rolename
if tuf.roledb.role_exists(full_rolename):
raise tuf.Error(repr(full_rolename)+' already delegated.')
raise tuf.Error(repr(full_rolename) + ' already delegated.')
# Keep track of the valid keyids (added to the new Targets object) and their
# keydicts (added to this Targets delegations).
@ -2068,9 +2082,12 @@ def delegate(self, rolename, public_keys, list_of_targets,
roleinfo = {'name': full_rolename,
'keyids': roleinfo['keyids'],
'threshold': roleinfo['threshold'],
'backtrack': backtrack,
'paths': roleinfo['paths']}
if restricted_paths is not None:
roleinfo['paths'] = relative_restricted_paths
if path_hash_prefixes is not None:
roleinfo['path_hash_prefixes'] = path_hash_prefixes
# A role in a delegations must list either 'path_hash_prefixes'