Skip to content
This repository was archived by the owner on Sep 12, 2018. It is now read-only.

Commit 9812fd1

Browse files
committed
Fixed check_signature
1 parent 94ff91c commit 9812fd1

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

docker_registry/toolkit.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import base64
44
import distutils.version
55
import functools
6+
import hashlib
67
import logging
78
import os
89
import random
@@ -216,7 +217,8 @@ def check_token(args):
216217

217218

218219
def check_signature():
219-
if not cfg.privileged_key:
220+
pkey = cfg.privileged_key
221+
if not pkey:
220222
return False
221223
headers = flask.request.headers
222224
signature = headers.get('X-Signature')
@@ -232,9 +234,11 @@ def check_signature():
232234
message = ','.join([flask.request.method, flask.request.path] +
233235
['{}:{}'.format(k, headers[k]) for k in header_keys])
234236
logger.debug('Signed message: {}'.format(message))
235-
if RSA.verify(cfg.privileged_key, sigdata, message, 'sha1') is False:
237+
try:
238+
return pkey.verify(message_digest(message), sigdata, 'sha1')
239+
except RSA.RSAError as e:
240+
logger.exception(e)
236241
return False
237-
return True
238242

239243

240244
def parse_content_signature(s):
@@ -245,6 +249,12 @@ def parse_content_signature(s):
245249
return ret
246250

247251

252+
def message_digest(s):
253+
m = hashlib.new('sha1')
254+
m.update(s)
255+
return m.digest()
256+
257+
248258
def requires_auth(f):
249259
@functools.wraps(f)
250260
def wrapper(*args, **kwargs):

0 commit comments

Comments
 (0)