class ECVerifyerTestCase(unittest.TestCase): testdata1 = 'test data to sign' testdata2 = 'other data' test_mai_id = 'testmai' ec_name = EC.NID_secp112r1 def flush_mongodb(self): mongoco = Connection() mongoco.drop_database(self.app.config['MONGODB_DB']) def setUp(self): self.app = create_app('testing') self.flush_mongodb() self.ec1 = EC.gen_params(self.ec_name) self.ec1.gen_key() bio1 = BIO.MemoryBuffer() self.ec1.save_pub_key_bio(bio1) self.mai = MetaAppInstance(mai_id=self.test_mai_id, pubkey_ec=bio1.getvalue()) self.mai.save() self.ec2 = EC.gen_params(self.ec_name) self.ec2.gen_key() self.verifyer = crypto.ECVerifier(self.mai) self.sha = sha512() self.temp = tempfile.TemporaryFile() def tearDown(self): self.flush_mongodb() self.temp.close() def test_signature(self): self.sha.update(self.testdata1) sig1 = self.ec1.sign_dsa_asn1(self.sha.digest()) self.temp.write(sig1) assert self.verifyer.verify(self.testdata1, self.temp) == True assert self.verifyer.verify(self.testdata2, self.temp) == False def test_other_signature(self): self.sha.update(self.testdata1) sig2 = self.ec2.sign_dsa_asn1(self.sha.digest()) self.temp.write(sig2) assert self.verifyer.verify(self.testdata1, self.temp) == False
def mai_pubkey(mai_id): """Process a public key uploaded for a MetaAppInstance.""" # pversion = request.args.get('pversion') pubkeyfile = request.files["pubkeyfile"] if not pubkeyfile: return "No pubkeyfile uploaded -> key not uploaded.\n" if not file_allowed(us_maipubkeys, pubkeyfile): return "Filetype not allowed -> key not uploaded.\n" if MetaAppInstance.objects(mai_id=mai_id).count() >= 1: return ("This Meta App Instance (id=%s) already exists and has a key " "-> key not uploaded.\n") % mai_id mai = MetaAppInstance(mai_id=mai_id, pubkey_ec=pubkeyfile.read()) mai.save() return "Key saved.\n"