I am working with charm crypto using python 3.7.1 and I have created a small database as shown in the codes as I run the code getting this error
What is the problem the charm is not being successfully installed or what I am confused
What is the problem the charm is not being successfully installed or what I am confused
Error:ImportError: /home/ali/Documents/test/charm/core/crypto/AES.cpython-39-x86_64-linux-gnu.so: undefined symbol: _Py_FatalErrorFuncThe codes i use import json
import hashlib
from charm.toolbox.pairinggroup import PairingGroup, ZR, G1, G2, GT, pair, extract_key
from charm.toolbox.symcrypto import SymmetricCryptoAbstraction
import pymysql as pm
from abenc_bsw07 import *
# This is the cpabe BSW07 scheme's cryptosystem.
# It provides the relevant methods for the objects
group = PairingGroup('SS512')
system = CPabe_BSW07(group)
class CASB:
'''
This is a Cloud Access Security Broker.
'''
def __init__(self):
self.cdb = CDB()
self.dk_name = None
self.dk_score = None
self.users = {}
def store(self, name, buffer):
'''
buffer is a dict with information related to name.
'''
if name in self.users.keys():
for key in buffer.keys():
self.users[name][key] = buffer[key]
else:
self.users[name] = {} # if this is a new user, new a dict for the user.
for key in buffer.keys():
self.users[name][key] = buffer[key]
def setpolicy(self, name, policy):
'''
set policy on different columns;
'''
if name in self.users.keys():
self.users[name]['policy'] = policy
else:
print('please return to "store"!!!')
return -1
print(self.users[name]['policy'])
def upload(self, name, data):
'''
upload data to CDB.
'''
# generate dk for columns(name and score).
if self.dk_name == None:
dk_name = group.random(GT)
if self.dk_score == None:
dk_score = group.random(GT)
# encrypt data with dk
for i in range(0, len(data)):
cipher_name = self.symmetric_encrypt(data[i][1], dk_name)
cipher_score = self.symmetric_encrypt(data[i][2], dk_score)
# store cipher in CDB
self.cdb.cdb_insert(data[i][0], cipher_name, cipher_score)
# encrypt dk with CP-ABE and store
self.dk_name = system.encrypt(self.users[name]['pk'], dk_name, self.users[name]['policy']['name'])
self.dk_score = system.encrypt(self.users[name]['pk'], dk_score, self.users[name]['policy']['score'])
def accessdata(self, name, sql):
'''
sql is just for demonstration.
'''
# decrypt dk
dk_name = system.decrypt(self.users[name]['pk'], self.users[name]['sk'], self.dk_name)
dk_score = system.decrypt(self.users[name]['pk'], self.users[name]['sk'], self.dk_score)
print('\n// {} //****** // {} //'.format(name, sql))
datas = self.cdb.cdb_select() # select data from CDB
# decrypt data with dk
newdatas = []
for data in datas:
temp = data[1]
temp2 = data[2]
if dk_name != False:
temp = self.symmetric_decrypt(data[1], dk_name).decode('utf-8')
if dk_score != False:
temp2 = self.symmetric_decrypt(data[2], dk_score).decode('utf-8')
newdata = [data[0], temp, temp2]
newdatas.append(newdata)
return newdatas
def end(self):
self.cdb.cdb_deleteall()
def symmetric_encrypt(self, msg, dk):
k = extract_key(dk)
a = SymmetricCryptoAbstraction(k)
c = a.encrypt(msg)
return c
def symmetric_decrypt(self, cipher, dk):
k = extract_key(dk)
a = SymmetricCryptoAbstraction(k)
msg = a.decrypt(cipher)
return msg
class CDB():
'''
This is Cloud DataBase.
'''
def __init__(self):
self.conn = pm.connect(host="127.0.0.1",
port=3306,
user="debian-sys-maint", password="ou5vsQ2OZESjaKJG",
database="education",
charset="utf8",
autocommit=True)
self.cursor = self.conn.cursor()
def cdb_insert(self, number, name, score):
sql = "INSERT INTO math (number, name, score) VALUES (%s, %s, %s);"
try:
self.cursor.execute(sql, [number, name, score])
self.conn.commit()
except Exception as e:
print(repr(e))
self.conn.rollback() # Rollback in case there is any error
def cdb_select(self):
sql = "SELECT * FROM math;"
try:
self.cursor.execute(sql)
self.conn.commit()
except Exception as e:
print(repr(e))
self.conn.rollback()
results = self.cursor.fetchall()
return results
def cdb_deleteall(self):
sql = "DELETE FROM math;"
try:
self.cursor.execute(sql)
self.conn.commit()
except Exception as e:
print(repr(e))
self.conn.rollback()
def cdb_close(self):
self.conn.close()
class KMS:
'''
This is KMS(Key Management Server), which provides key management service for users.
'''
def __init__(self):
pass
def setup(self):
'''
Execute "Setup" in CP-ABE.
'''
(master_public_key, master_key) = system.setup()
return master_public_key, master_key
class UE():
'''
This is UE(user edge). There is two attributes('admin' and 'user') in it.
'''
def __init__(self, name, attributes): # init a ue
self.pk = None
self.mk = None
self.sk = None
self.name = name
self.attributes = attributes
def show(self, datas):
print('number\tname\tscore')
for data in datas:
for column in data:
print(column, end='\t')
print('\n')
def main():
'''
In this function, I'll show you the process.
'''
# init
kms = KMS()
casb = CASB()
# 1.GENERATE USER MASTER KEY AND SECRET KEYS
alice = UE('alice', ['ADMIN'])
bob = UE('bob', ['USER'])
alice.pk, alice.mk = kms.setup() # kms setup publickey and master key for alice(admin).
# generate secret keys for alice and bob
alice.sk = system.keygen(alice.pk, alice.mk, alice.attributes)
bob.sk = system.keygen(alice.pk, alice.mk, bob.attributes)
# store pk, sk and mk in CASB
casb.store(alice.name, {'pk': alice.pk, 'sk': alice.sk, 'mk': alice.mk})
casb.store(bob.name, {'pk': alice.pk, 'sk': bob.sk, 'mk': alice.mk})
# 2.CUSTOMIZE ACCESS POLICIES
alice.policy = {'name': '((user and admin) or admin)', 'score': '(user or admin)'}
casb.setpolicy(alice.name, alice.policy) # set access policy on different columns.
# 3.UPLOAD DATA
alice.data = [['1', 'bob', '99'], ['2', 'charles', '98'], ['3', 'david', '96'], ['4', 'emily', '100']]
casb.upload(alice.name, alice.data) # upload data to CASB
# 4.ACCESS DATA
# alice access data
alicedatas = casb.accessdata(alice.name, 'SELECT * FROM math')
alice.show(alicedatas)
# bob access data
bobdatas = casb.accessdata(bob.name, 'SELECT * FROM math')
bob.show(bobdatas)
casb.end() # delete all the data in table math for next round
main()The error i got Error:"/home/ali/anaconda3/envs/env55 /bin/python" /home/ali/Documents/test/casb_process.py
name 'downcaseTokens' is not defined
type mismatch between src='<class 'NoneType'>' and targ='<class 'dict'>'
{'name': '((user and admin) or admin)', 'score': '(user or admin)'}
Traceback (most recent call last):
File "/home/ali/Documents/test/casb_process.py", line 237, in <module>
main()
File "/home/ali/Documents/test/casb_process.py", line 224, in main
casb.upload(alice.name, alice.data) # upload data to CASB
File "/home/ali/Documents/test/casb_process.py", line 65, in upload
cipher_name = self.symmetric_encrypt(data[i][1], dk_name)
File "/home/ali/Documents/test/casb_process.py", line 106, in symmetric_encrypt
c = a.encrypt(msg)
File "/home/ali/Documents/test/charm/toolbox/symcrypto.py", line 143, in encrypt
ct = self._encrypt(message)
File "/home/ali/Documents/test/charm/toolbox/symcrypto.py", line 151, in _encrypt
cipher = self._initCipher()
File "/home/ali/Documents/test/charm/toolbox/symcrypto.py", line 123, in _initCipher
return selectPRP(self._alg,(self._key,self._mode,self._IV))
File "/home/ali/Documents/test/charm/core/crypto/AES.py", line 9, in <module>
__bootstrap__()
File "/home/ali/Documents/test/charm/core/crypto/AES.py", line 7, in __bootstrap__
mod = importlib.util.module_from_spec(spec)
ImportError: /home/ali/Documents/test/charm/core/crypto/AES.cpython-39-x86_64-linux-gnu.so: undefined symbol: _Py_FatalErrorFunc
Process finished with exit code 1Debugger errorError:"/home/ali/anaconda3/envs/env55 /bin/python" /snap/pycharm-community/276/plugins/python-ce/helpers/pydev/pydevd.py --multiprocess --qt-support=auto --client 127.0.0.1 --port 38999 --file /home/ali/Documents/test/casb_process.py
Connected to pydev debugger (build 221.5080.212)
name 'downcaseTokens' is not defined
type mismatch between src='<class 'NoneType'>' and targ='<class 'dict'>'
{'name': '((user and admin) or admin)', 'score': '(user or admin)'}
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/ali/Documents/test/charm/core/crypto/AES.py", line 9, in <module>
__bootstrap__()
File "/home/ali/Documents/test/charm/core/crypto/AES.py", line 7, in __bootstrap__
mod = importlib.util.module_from_spec(spec)
ImportError: /home/ali/Documents/test/charm/core/crypto/AES.cpython-39-x86_64-linux-gnu.so: undefined symbol: _Py_FatalErrorFunc
python-BaseException
Process finished with exit code 1
