encryption more or less working

macdev
quadrismegistus 4 years ago
parent 8cbf1307ea
commit 2192edc0eb

@ -13,12 +13,14 @@ from kivy.uix.boxlayout import BoxLayout
from kivymd.theming import ThemableBehavior
from kivymd.uix.button import MDIconButton
from kivymd.uix.stacklayout import MDStackLayout
from main import COLOR_TEXT,rgb,COLOR_ICON
Builder.load_string(
"""
#:import DEVICE_TYPE kivymd.material_resources.DEVICE_TYPE
#:import COLOR_TEXT main.COLOR_TEXT
#:import COLOR_ICON main.COLOR_ICON
#:import rgb main.rgb
<MyChooseChip>
adaptive_height: True
@ -33,7 +35,7 @@ Builder.load_string(
self.minimum_width - (dp(10) if DEVICE_TYPE == "desktop" else dp(20)) \
if root.icon != 'checkbox-blank-circle' else self.minimum_width
theme_text_color: 'Custom'
text_color:1,0,0,1
text_color:rgb(*COLOR_TEXT)
# canvas:
# Color:
@ -65,7 +67,7 @@ Builder.load_string(
disabled: True
md_bg_color_disabled: 0, 0, 0, 0
theme_text_color: "Custom"
text_color: 1,0,0,1
text_color: rgb(*COLOR_TEXT)
Label:
id: label
@ -141,7 +143,7 @@ class MyChip(BoxLayout, ThemableBehavior):
def __init__(self, **kwargs):
super().__init__(**kwargs)
if not self.color:
self.color = (1,0,0,1) #self.theme_cls.primary_color
self.color = rgb(*COLOR_TEXT) #self.theme_cls.primary_color
def on_icon(self, instance, value):
if value == "":

@ -1,4 +1,6 @@
#:import ProfileScreen screens.profile.profile.ProfileScreen
#:import COLOR_TEXT main.COLOR_TEXT
#:import rgb main.rgb
<ProfileScreen>:
id:profile_screen
@ -9,7 +11,7 @@
# pos_hint: {'y':0}
# canvas:
# Color:
# rgb: 1,0,0,1
# rgb: rgb(*COLOR_TEXT)
# Line:
# width: 1
# rectangle: (self.x, self.y, self.width, self.height)
@ -79,13 +81,13 @@
<AuthorName>:
pos_hint: {'center_x':0.5}
theme_text_color:'Custom'
text_color: 1,0,0,1
text_color: rgb(*COLOR_TEXT)
halign:'center'
<AuthorUsername>:
pos_hint: {'center_x':0.5}
theme_text_color:'Custom'
text_color: 1,0,0,1
text_color: rgb(*COLOR_TEXT)
halign:'center'
<AuthorDesc>:
@ -93,22 +95,22 @@
<AuthorPlace>:
theme_text_color: 'Custom'
text_color:1,0,0,1
text_color:rgb(*COLOR_TEXT)
<AuthorWebsite>:
theme_text_color: 'Custom'
text_color:1,0,0,1
text_color:rgb(*COLOR_TEXT)
<AuthorFollowers>:
theme_text_color: 'Custom'
text_color:1,0,0,1
text_color:rgb(*COLOR_TEXT)
size_hint:None,None
pos_hint:{'right':1}
<AuthorFollowing>:
theme_text_color: 'Custom'
text_color:1,0,0,1
text_color:rgb(*COLOR_TEXT)
pos_hint:{'left':1}
<ProfilePageLayout>:
@ -118,7 +120,7 @@
padding:'10dp'
size_hint:1,None
adaptive_height:True
# md_bg_color:1,0,0,1
# md_bg_color:rgb(*COLOR_TEXT)
pos_hint: {'center_x':0.5,'center_y':0.5}
# md_bg_color:1,1,0,1
@ -132,5 +134,5 @@
spacing:'25dp'
height:self.minimum_height
size_hint:1,None
# md_bg_color:1,0,0,1
# md_bg_color:rgb(*COLOR_TEXT)
pos_hint: {'center_x':0.5,'center_y':0.5}

@ -1 +1 @@
{"_keys": {"private": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCwc6j5VyvdRgtx\nLhXgHnJg4qqzJjXHiJyQJhYEPChBzoI1prqspOaHPE2d9BY5ArqOzoKmZop8TUi8\npzbnQO5v44m//PqnLx17CM25E5r83TqBK2bAD8appm9kktZZ5/EVjkceKZLat0lD\nSXRI7Xaphhn8WtRJ2zexcMcs/wQamrh5/J86GWPbuqHnPM79Cd+56RWkY+ou3Eqr\ng5Xka5QZJNzXeIHe2tQvTAfMwlAHVfV9qMkf9Ui4R3TUhc9Tp++vNHdfctVAakIG\n5TAVkMVAe6ruIw5VUO9kttsJ3EJRVuNjbmwUcpT3UG+XD9lZ6bX3SOtmjP425Umm\nE4d3oUT/AgMBAAECggEAB5cCBq+kOGFh7p1f3YMRwm8djpUvLQUITv8EZWw9Aw+h\n9DLWxsRVEi4a3Jd6OTuP0MK7RfMVM+GTJmI+71WQrAlqjHKSSYyyRO+NAdABE61k\nbdfzFIHZNsTs97OFOtrKOPYkwvxgz72gjh9jvBtSxln5ViyGAyNF0wEZ4Cqb/5Tj\n37v/8Vyb34EEFHKip3pHDlsbBKEHWMLElc89JgbzL1xxo9jeHetKwzTkLYu+VxBc\nZAoFwwCuMFxBEUgacIEoPUAT5zDxP89dOPF4MTId78bCphDft1XdsH4iu66knwPm\nddMIDgtv1f4JkZXtE4mUbexh0VLVDGzmTffJ/tSTMQKBgQDUigVEMBDbkJRA7BxR\nIjy8CE8MZwqmnR6V4I+qn+qoIX/ydPYx3T5RQ8viO3LnxXK90ZlCmy+xVOks2u62\n/lAY9WULm+Z3fY8+n/Lhm9TETk5UHfQmiwqYRUH0t4iktsXZ2zaOb1MbuFcxGH7h\nd7tSYlMo3w8xsNQAt9sc5G8WVwKBgQDUiIrdOzQZ2wG6etW+aXlFax3clYXyITbR\nhyHIdlnDKhQpHBVXSmfegRmVrmCUxd10euTFW8Z7agxUXhqd3PZrnv3nJ0Y4GLVS\nvoSAiyRtBbqyASynqFlRXn8M17IfrZb81+gkvoF4kkKRzbWv6wVvhf46nCM5qCB5\nnjTJgimNmQKBgClmkUwNCNucOCTFWWa8gpQmEi/aSorWBEUxrwqPiAgkLmYuPl7M\nN/1gdXCmH+Xh4k3zbCU7UXj7j0g7hVCEDVovQvWV8rjH7oVGZutnjXSHxF5CT3LK\nls++ffCLZ8SeDcA4IVJxgQDfUaywltaYmhacLJLDkJQfW8ygA8CHBtSVAoGAD3c0\nK68gNnVyZcCEh0ujkIKf9KpIyfrSw2KC+dRq6cHJH8i0YNrAPjfExdifnJPdbpl2\nxknMYrSv2v/SDgTDRceXEFgSSwi5QSEuATCe4PQWxtdBCZ49iadHtYaIprd6EkIf\n2XSndT+nana+ruN6TMhCXL957LsoSdFSZAt9vJkCgYAoMBzZOWkPUZOuGAWGtgLo\n+CIlYWGYC8My4ynrOBXKQnVs/9ZCEupFm8PBDCkDlkdjUCRQEeYBItg4SKs4IhxX\niODoNMK+phXRRgiH9uZkV6c5wqeyLPIvDU0o62tS7jArApHXC07OS4kN+nGkMABK\nhNwy7RjbFtiLZJN85LKLLQ==\n-----END PRIVATE KEY-----\n", "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsHOo+Vcr3UYLcS4V4B5y\nYOKqsyY1x4ickCYWBDwoQc6CNaa6rKTmhzxNnfQWOQK6js6CpmaKfE1IvKc250Du\nb+OJv/z6py8dewjNuROa/N06gStmwA/GqaZvZJLWWefxFY5HHimS2rdJQ0l0SO12\nqYYZ/FrUSds3sXDHLP8EGpq4efyfOhlj27qh5zzO/QnfuekVpGPqLtxKq4OV5GuU\nGSTc13iB3trUL0wHzMJQB1X1fajJH/VIuEd01IXPU6fvrzR3X3LVQGpCBuUwFZDF\nQHuq7iMOVVDvZLbbCdxCUVbjY25sFHKU91Bvlw/ZWem190jrZoz+NuVJphOHd6FE\n/wIDAQAB\n-----END PUBLIC KEY-----\n"}}
{"_keys": {"private": "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", "public": "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA06pl3sFFlivRArbxT1fTHGE5rYqJoXiK01lIgH0P82ORRLbd3mVw1iqQ4hHuorljP1fQoTj0KGSfJC6G8PzESlYznKdkau+IsPIQeIGYz5jxLkDR4FREM3At7YrIwmKQ+ySAipgd9/UZjSroI9Ytu1PCoMXfVmHwHz3Uast4qzBKYxKlWw9iaLBeMAEfOWEYVx7AbyA2GoffQALTAR5sBaW5sNOfuq2l2t3w0NvMl1/0eJ6bqdzekVvaApaPd85+Kmz91Hnt2YFWoTXrmGFjKL0/NvdHsx53Cphi99KITXdYGXaoVKPwq8vfOCd/uxNWWy0VU7kZ+YPMhO7TKCIR124f4XSJJbHdvQrlzQku76CaCl5sC5VG5bevu3Rj69rb6vn6ZW8jPnddlixc0d3ZuvTfIjp+w2/G+ld10lyOnqFss/djeMQgJM6WHfcn0a6LVIQkGLg3EOfQI/HmQkKBZpyTJTuoW7Uoo34sUm7llQRaL+eShNSrmkB5m2tKGntHU/E6cHzTZs9gV9mUt4ZNwkKHKMqrW5+PuQ75bZ/SH+dNs0RCZfAgJXxb56Lju278SeNAzKGHpeg2z1vAXHNkgdhvhfYJva7eSzg8CwqroNd/vYCayQq2+C+2F1K/0e8/GjkJ95Ai6vubXyn4DpZbYovtp6nRADI1b1Dm3qL4M4kCAwEAAQ=="}}

@ -94,10 +94,10 @@ class Api(object):
await asyncio.sleep(60)
# pass
except asyncio.CancelledError as e:
self.log('Wasting time was canceled', e)
self.log('P2P node cancelled', e)
finally:
# when canceled, print that it finished
self.log('Done wasting time')
self.log('P2P node shutting down')
@property
async def node(self):
@ -141,7 +141,7 @@ class Api(object):
"""
import time
timestamp=time.time()
self.log('timestamp =',timestamp)
#self.log('timestamp =',timestamp)
if type(val)!=bytes:
value = str(val)
@ -154,17 +154,24 @@ class Api(object):
# encrypt?
if not receiver_pubkey: receiver_pubkey=self.public_key_global
if not receiver_pubkey:
receiver_pubkey=self.public_key_global
# self.log('value while unencrypted =',value_bytes)
# value_bytes = encrypt_msg(value_bytes, self.public_key_global)
# self.log(f"""encrypting
# val = {value_bytes}
# sender_privkey = {self.private_key}
# receiver_pubkey = {receiver_pubkey}
# """)
res = encrypt(value_bytes, self.private_key, receiver_pubkey)
#aes_ciphertext, encry_aes_key, hmac, hmac_signature, iv, metadata
self.log('value while encrypted = ',res)
# self.log('value while encrypted = ',res)
# stop
aes_ciphertext, encry_aes_key, iv = res
#self.log('value =',value)
@ -173,14 +180,14 @@ class Api(object):
#self.log('pem_public_key =',pem_public_key)
# stop
self.log('aes_ciphertext = ',aes_ciphertext,type(aes_ciphertext))
# self.log('aes_ciphertext = ',aes_ciphertext,type(aes_ciphertext))
signature = sign(aes_ciphertext, self.private_key)
self.log('signature =',signature)
# self.log('signature =',signature)
## Verify!
authentic = verify_signature(signature, aes_ciphertext, self.public_key)
self.log('message is authentic for set??',authentic)
# self.log('message is authentic for set??',authentic)
# value_bytes_ascii = ''.join([chr(x) for x in value_bytes])
@ -188,8 +195,8 @@ class Api(object):
# jsonstr=jsonify(jsond)
time_b=str(timestamp).encode()
val_encr = aes_ciphertext
val_encr_key = encry_aes_key
val_encr = base64.b64encode(aes_ciphertext)
val_encr_key = base64.b64encode(encry_aes_key)
sender_pubkey_b = serialize_pubkey(self.public_key)
receiver_pubkey_b = serialize_pubkey(receiver_pubkey)
signature = signature
@ -204,15 +211,15 @@ class Api(object):
signature
])
self.log('well_documented_val() =',WDV)
# self.log('well_documented_val() =',WDV)
return WDV
async def unpack_well_documented_val(self,WDV,sep=BSEP,private_key=None):
self.log('WDV???',WDV)
# self.log('WDV???',WDV)
if WDV is None: return WDV
#WDV=[base64.b64decode(x) for x in WDV.split(sep)]
WDV=WDV.split(sep)
self.log('WDV NEW:',WDV)
# self.log('WDV NEW:',WDV)
time_b,val_encr,val_encr_key,iv,to_pub_b,from_pub_b,signature = WDV #.split(sep)
to_pub = load_pubkey(to_pub_b)
@ -221,8 +228,8 @@ class Api(object):
# verify
val_encr_decode = base64.b64decode(val_encr)
authentic = verify_signature(signature,val_encr,from_pub)
self.log('message is authentic for GET?',authentic,signature,val_encr)
authentic = verify_signature(signature,val_encr_decode,from_pub)
# self.log('message is authentic for GET?',authentic,signature,val_encr)
if not authentic:
self.log('inauthentic message!')
@ -230,7 +237,18 @@ class Api(object):
# decrypt
# self.log('val before decryption = ',val_encr)
if private_key is None: private_key=self.private_key_global
if private_key is None:
private_key=self.private_key_global
val_encr = base64.b64decode(val_encr)
val_encr_key = base64.b64decode(val_encr_key)
# self.log(f"""decrypting
# val_encr = {val_encr}
# val_encr_key = {val_encr_key}
# iv = {iv}
# private_key = {private_key}
# """)
val = decrypt(val_encr, val_encr_key, iv, private_key)
# self.log('val after decryption = ',val)
@ -245,7 +263,7 @@ class Api(object):
'sign':signature
}
self.log('GOT WDV:',WDV)
# self.log('GOT WDV:',WDV)
return WDV
@ -277,7 +295,7 @@ class Api(object):
async def get_json(self,key_or_keys):
res = await self.get(key_or_keys)
self.log('GET_JSON',res)
# self.log('GET_JSON',res)
if res is None: return res
def jsonize(entry):
@ -307,8 +325,7 @@ class Api(object):
## PERSONS
async def get_person(self,username):
res=await self.get_json('/person/'+username)
return res.get('val') if res and type(res)==dict else res
return await self.get_val('/person/'+username)
async def set_person(self,username,pem_public_key):
# pem_public_key = save_public_key(public_key,return_instead=True)
@ -375,6 +392,7 @@ class Api(object):
return {'error':'Login failed'}
# verify keys
self.log('got person =',person)
person_public_key_pem = person['public_key']
public_key = load_pubkey(person_public_key_pem) #load_public_key(person_public_key_pem.encode())
self._public_key = real_public_key = private_key.public_key()
@ -406,26 +424,32 @@ class Api(object):
if not hasattr(self,'_public_key_global'):
try:
pem=self.app.store_global.get('_keys').get('public',None)
self._public_key_global=load_public_key(pem.encode())
self.log('PEM GLOBAL = ',pem)
self._public_key_global=load_pubkey(pem.encode())
self.log('PUBKEYGLOBAL =',self._public_key_global)
return self._public_key_global
except ValueError as e:
self.log('!!',e)
return None
else:
return self._public_key_global
@property
def private_key_global(self):
if not hasattr(self,'_private_key_global'):
try:
pem=self.app.store_global.get('_keys').get('private',None)
self._private_key_global=load_private_key(pem.encode())
#self.log('PEM PRIVATE GLOBAL',pem)
self._private_key_global=load_privkey(pem.encode())
return self._private_key_global
except ValueError as e:
self.log('!!',e)
return None
else:
return self._private_key_global
async def append_json(self,key,data):
sofar=await self.get_json(key)
sofar=await self.get_val(key)
if sofar is None: sofar = []
new=sofar + ([data] if type(data)!=list else data)
if await self.set_json(key, new):
@ -476,7 +500,7 @@ class Api(object):
return file_store
async def download(self,file_id):
file_store = await self.get_json('/file/'+file_id)
file_store = await self.get_val('/file/'+file_id)
if file_store is None: return
self.log('file_store!?',file_store)
@ -502,14 +526,25 @@ class Api(object):
return {'success':'Posted! %s' % post_id, 'post_id':post_id}
return {'error':'Post failed'}
async def get_val(self,uri):
res=await self.get_json(uri)
if res is None:
return res
elif type(res) == dict:
return res.get('val',None)
elif type(res) == list:
return [x.get('val',None) for x in res]
return None
async def get_post(self,post_id):
return self.get_json('/post/'+post_id)
return await self.get_val(post_id)
async def get_posts(self,uri='/channel/earth'):
index = await self.get_json('/posts'+uri)
index = await self.get_val('/posts'+uri)
self.log('got index?',index)
if index is None: return []
data = self.get_json(['/post/'+x for x in index])
data = self.get_val(['/post/'+x for x in index])
return await data

@ -5,7 +5,10 @@ from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.exceptions import InvalidSignature
import os
from .syfr import * #import syfr
try:
from .syfr import * #import syfr
except ImportError:
from syfr import *
key_dir = os.path.join(os.path.expanduser('~'),'.keys','komrade')
if not os.path.exists(key_dir): os.makedirs(key_dir)
@ -176,7 +179,7 @@ def verify_msg(message, signature, public_key):
## ONLY NEEDS RUN ONCE!
def gen_global_keys(fn='.keys.global.json'):
def gen_global_keys1(fn='.keys.global.json'):
from kivy.storage.jsonstore import JsonStore
private_key,public_key=new_keys(save=False,password=None)
@ -187,6 +190,18 @@ def gen_global_keys(fn='.keys.global.json'):
store.put('_keys',private=str(pem_private_key.decode()),public=str(pem_public_key.decode())) #(private_key,password=passkey)
def gen_global_keys(fn='.keys.global.json'):
from kivy.storage.jsonstore import JsonStore
store = JsonStore('./.keys.global.json')
#store.put('_keys',private=str(pem_private_key.decode()),public=str(pem_public_key.decode())) #(private_key,password=passkey)
private_key = generate_rsa_key()
pem_private_key = serialize_privkey(private_key, password=None)# save_private_key(private_key,password=passkey,return_instead=True)
pem_public_key = serialize_pubkey(private_key.public_key())
store.put('_keys',private=pem_private_key.decode(),public=pem_public_key.decode()) #(private_key,password=passkey)
"""
import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes

@ -53,10 +53,10 @@ class HalfForgetfulStorage(ForgetfulStorage):
def get(self, key, default=None):
# self.cull()
print('looking for key: ', key)
# print('looking for key: ', key)
if key in self.data:
val=self[key]
print('...found it! = %s' % val)
# print('...found it! = %s' % val)
return self[key]
return default
@ -232,17 +232,18 @@ class KadServer(Server):
# log.info(f'spider found value: {found}')
# return found
# async def set(self, key, value):
# """
# Set the given string key to the given value in the network.
# """
# if not check_dht_value_type(value):
# raise TypeError(
# "Value must be of type int, float, bool, str, or bytes"
# )
# log.info("setting '%s' = '%s' on network", key, value)
# dkey = digest(key)
# return await self.set_digest(dkey, value)
async def set(self, key, value):
"""
Set the given string key to the given value in the network.
"""
if not check_dht_value_type(value):
raise TypeError(
"Value must be of type int, float, bool, str, or bytes"
)
log.info("setting '%s' = '%s' on network", key, value)
dkey = digest(key)
self.storage[dkey]=value
return await self.set_digest(dkey, value)
async def set_digest(self, dkey, value):
"""

Loading…
Cancel
Save