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

Commit 7ee0db8

Browse files
committed
use m2crypto instead of rsa
The pubkey is converted from PKCS#1 to X.501 format to be usable by M2Crypto. Signed-off-by: Lokesh Mandvekar <[email protected]>
1 parent 99f7d0c commit 7ee0db8

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ python:
77
before_install:
88
- sudo apt-get update
99
- sudo apt-get install redis-server
10-
- sudo apt-get install libevent-dev liblzma-dev
10+
- sudo apt-get install libevent-dev liblzma-dev libssl-dev
11+
- sudo apt-get install swig
1112

1213
install:
1314
## This below should be separated when core lives elsewhere

docker_registry/lib/config.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import os
44

5-
import rsa
5+
from M2Crypto import BIO
6+
from M2Crypto import RSA
67
import yaml
78

89
from docker_registry.core import compat
@@ -109,7 +110,13 @@ def _init():
109110
'Heads-up! File is missing: %s' % conf.privileged_key)
110111

111112
try:
112-
conf.privileged_key = rsa.PublicKey.load_pkcs1(f.read())
113+
pk = f.read().split('\n')
114+
pk = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A' + ''.join(pk[1:-2])
115+
pk = [pk[i: i + 64] for i in range(0, len(pk), 64)]
116+
pk = ('-----BEGIN PUBLIC KEY-----\n' + '\n'.join(pk) +
117+
'\n-----END PUBLIC KEY-----')
118+
bio = BIO.MemoryBuffer(pk)
119+
conf.privileged_key = RSA.load_pub_key_bio(bio)
113120
except Exception:
114121
raise exceptions.ConfigError(
115122
'Key at %s is not a valid RSA key' % conf.privileged_key)

docker_registry/toolkit.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import urllib
1212

1313
import flask
14+
from M2Crypto import RSA
1415
import requests
15-
import rsa
1616

1717
from docker_registry.core import compat
1818
json = compat.json
@@ -21,6 +21,7 @@
2121
from .lib import config
2222

2323
cfg = config.load()
24+
2425
logger = logging.getLogger(__name__)
2526
_re_docker_version = re.compile('docker/([^\s]+)')
2627
_re_authorization = re.compile(r'(\w+)[:=][\s"]?([^",]+)"?')
@@ -232,8 +233,8 @@ def check_signature():
232233
['{}:{}'.format(k, headers[k]) for k in header_keys])
233234
logger.debug('Signed message: {}'.format(message))
234235
try:
235-
return rsa.verify(message, sigdata, cfg.privileged_key)
236-
except rsa.VerificationError:
236+
return RSA.verify(cfg.privileged_key, sigdata, message, 'sha1')
237+
except RSA.ValueError:
237238
return False
238239

239240

requirements/main.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ gevent==1.0.1
44
gunicorn==19.1
55
PyYAML==3.11
66
requests==2.3.0
7-
rsa==3.1.4
7+
M2Crypto==0.22.3
88
sqlalchemy==0.9.4
99
setuptools==5.8

0 commit comments

Comments
 (0)