def setUp(self): super(RelayPublicKeysConfigTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.text_type(uuid4()) self.relay = Relay.objects.create( relay_id=self.relay_id, public_key=six.binary_type(self.public_key), is_internal=True ) self.relay_a = Relay.objects.create( relay_id=six.text_type(uuid4()), public_key=six.binary_type(self.public_key), is_internal=False, ) self.relay_b = Relay.objects.create( relay_id=six.text_type(uuid4()), public_key=six.binary_type(self.public_key), is_internal=False, ) self.project = self.create_project() self.path = reverse("sentry-api-0-relay-publickeys")
def setUp(self): super(RelayPublicKeysConfigTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.text_type(uuid4()) self.relay = Relay.objects.create( relay_id=self.relay_id, public_key=six.binary_type(self.public_key), is_internal=True ) self.relay_a = Relay.objects.create( relay_id=six.text_type(uuid4()), public_key=six.binary_type(self.public_key), is_internal=False ) self.relay_b = Relay.objects.create( relay_id=six.text_type(uuid4()), public_key=six.binary_type(self.public_key), is_internal=False ) self.project = self.create_project() self.path = reverse( 'sentry-api-0-relay-publickeys' )
def setUp(self): super(RelayRegisterTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(self.public_key)) self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.path = reverse("sentry-api-0-relay-register-challenge")
def test_expired_challenge(self): data = { 'public_key': six.binary_type(self.public_key), 'relay_id': self.relay_id, } raw_json, signature = self.private_key.pack(data) resp = self.client.post( self.path, data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 200, resp.content result = json.loads(resp.content) raw_json, signature = self.private_key.pack(result) self.client.post( reverse( 'sentry-api-0-relay-register-response' ), data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) keys = generate_key_pair() data = { 'token': six.binary_type(result.get('token')), 'relay_id': self.relay_id, } raw_json, signature = keys[0].pack(data) resp = self.client.post( reverse( 'sentry-api-0-relay-register-response' ), data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 401, resp.content
def test_forge_public_key(self): data = { 'public_key': six.binary_type(self.public_key), 'relay_id': self.relay_id, } raw_json, signature = self.private_key.pack(data) resp = self.client.post( self.path, data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 200, resp.content result = json.loads(resp.content) raw_json, signature = self.private_key.pack(result) self.client.post( reverse( 'sentry-api-0-relay-register-response' ), data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) keys = generate_key_pair() settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(keys[1])) data = { 'public_key': six.binary_type(keys[1]), 'relay_id': self.relay_id, } raw_json, signature = keys[0].pack(data) resp = self.client.post( self.path, data=raw_json, content_type='application/json', HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 400, resp.content
def setUp(self): super(RelayRegisterTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(self.public_key)) self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.path = reverse( 'sentry-api-0-relay-register-challenge' )
def setUp(self): super(RelayQueryGetProjectConfigTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.relay = Relay.objects.create(relay_id=self.relay_id, public_key=six.binary_type( self.public_key), is_internal=True) self.project = self.create_project() self.path = reverse('sentry-api-0-relay-heartbeat')
def setUp(self): super(RelayQueryGetProjectConfigTest, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.relay = Relay.objects.create( relay_id=self.relay_id, public_key=six.binary_type(self.public_key), is_internal=True ) self.project = self.create_project() self.path = reverse( 'sentry-api-0-relay-projectconfigs' )
def test_forge_public_key_on_register(self): data = {"public_key": six.binary_type(self.public_key), "relay_id": self.relay_id} raw_json, signature = self.private_key.pack(data) resp = self.client.post( self.path, data=raw_json, content_type="application/json", HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) result = json.loads(resp.content) resp = self.client.post( self.path, data=raw_json, content_type="application/json", HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 200, resp.content keys = generate_key_pair() data = {"token": six.binary_type(result.get("token")), "relay_id": self.relay_id} raw_json, signature = keys[0].pack(data) resp = self.client.post( reverse("sentry-api-0-relay-register-response"), data=raw_json, content_type="application/json", HTTP_X_SENTRY_RELAY_ID=self.relay_id, HTTP_X_SENTRY_RELAY_SIGNATURE=signature, ) assert resp.status_code == 400, resp.content
def setUp(self): super(RelayChangeSetStoreV7Test, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.relay = Relay.objects.create( relay_id=self.relay_id, public_key=six.binary_type(self.public_key), is_internal=True ) self.project = self.create_project() self.path = reverse( 'sentry-api-0-relay-heartbeat' ) self.data = { 'changesets': [ { 'type': 'store_v7', 'project_id': self.project.id, 'data': { 'public_key': self.projectkey.public_key, 'meta': { 'origin': 'http://*****:*****@sentry/browser configured' }, { 'timestamp': 1524557689, 'type': 'default', 'category': 'console', 'level': 'warning', 'message': '4 exceptions captured and queued' }, { 'timestamp': 1524557689, 'type': 'default', 'category': 'console', 'level': 'warning', 'message': 'Draining queue...' } ], 'exception': { 'values': [ { 'type': 'Error', 'value': 'regular exception no. 1', 'stacktrace': { 'frames': [ { 'function': '?', 'filename': 'http://localhost:1337/error.js', 'lineno': 29, 'colno': 3, 'in_app': True }, { 'function': '?', 'filename': 'http://localhost:1337/error.js', 'lineno': 28, 'colno': 3, 'in_app': True }, { 'function': 'foo', 'filename': 'http://localhost:1337/error.js', 'lineno': 13, 'colno': 11, 'in_app': True } ] } } ] }, 'extra': { 'session:duration': 8 }, 'sdk': { 'name': 'sentry-browser', 'version': '3.23.3' }, 'project': '10', 'trimHeadFrames': 0 } } } ], 'queries': {} }
def setUp(self): super(RelayChangeSetStoreV7Test, self).setUp() self.key_pair = generate_key_pair() self.public_key = self.key_pair[1] self.private_key = self.key_pair[0] self.relay_id = six.binary_type(uuid4()) self.relay = Relay.objects.create( relay_id=self.relay_id, public_key=six.binary_type(self.public_key), ) self.project = self.create_project() self.path = reverse('sentry-api-0-relay-heartbeat') self.data = { 'changesets': [{ 'type': 'store_v7', 'project_id': self.project.id, 'data': { 'public_key': self.projectkey.public_key, 'meta': { 'origin': 'http://*****:*****@sentry/browser configured' }, { 'timestamp': 1524557689, 'type': 'default', 'category': 'console', 'level': 'warning', 'message': '4 exceptions captured and queued' }, { 'timestamp': 1524557689, 'type': 'default', 'category': 'console', 'level': 'warning', 'message': 'Draining queue...' }], 'exception': { 'values': [{ 'type': 'Error', 'value': 'regular exception no. 1', 'stacktrace': { 'frames': [{ 'function': '?', 'filename': 'http://localhost:1337/error.js', 'lineno': 29, 'colno': 3, 'in_app': True }, { 'function': '?', 'filename': 'http://localhost:1337/error.js', 'lineno': 28, 'colno': 3, 'in_app': True }, { 'function': 'foo', 'filename': 'http://localhost:1337/error.js', 'lineno': 13, 'colno': 11, 'in_app': True }] } }] }, 'extra': { 'session:duration': 8 }, 'sdk': { 'name': 'sentry-browser', 'version': '3.23.3' }, 'project': '10', 'trimHeadFrames': 0 } } }], 'queries': {} }
def test_basic_key_functions(): sk, pk = semaphore.generate_key_pair() signature = sk.sign(b'some secret data') assert pk.verify(b'some secret data', signature) assert not pk.verify(b'some other data', signature)
def test_basic_key_functions(): sk, pk = semaphore.generate_key_pair() signature = sk.sign(b"some secret data") assert pk.verify(b"some secret data", signature) assert not pk.verify(b"some other data", signature)