#!/usr/bin/python # # Python bindings to libcryptsetup test # # Copyright (C) 2011-2018, Red Hat, Inc. All rights reserved. # # This file is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this file; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from __future__ import print_function import sys import os sys.path.insert(0, ".libs") import pycryptsetup IMG = "test.img" PASSWORD = "password" PASSWORD2 = "password2" DEVICE = "pycryptsetup_test_dev" def log(level, txt): if level == pycryptsetup.CRYPT_LOG_ERROR: print(txt,end="") return def askyes(txt): print("Question:", txt) return 1 def print_status(c): r = c.status() print("status :",end="") if r == pycryptsetup.CRYPT_ACTIVE: print("ACTIVE") elif r == pycryptsetup.CRYPT_INACTIVE: print("INACTIVE") else: print("ERROR") return if os.geteuid() != 0: print("WARNING: You must be root to run this test, test skipped.") sys.exit(77) os.system("dd if=/dev/zero of=" + IMG + " bs=1M count=32 >/dev/null 2>&1") c = pycryptsetup.CryptSetup( device = IMG, name = DEVICE, yesDialog = askyes, logFunc = log) #c.debugLevel(pycryptsetup.CRYPT_DEBUG_ALL); c.debugLevel(pycryptsetup.CRYPT_DEBUG_NONE); c.iterationTime(1) r = c.isLuks() print("isLuks :", r) c.askyes(message = "Is there anybody out there?") c.log(priority = pycryptsetup.CRYPT_LOG_ERROR, message = "Nobody there...\n") c.luksFormat(cipher = "aes", cipherMode= "xts-plain64", keysize = 512, hashMode = "sha256") print("isLuks :", c.isLuks()) print("luksUUID:", c.luksUUID()) print("addKeyVK:", c.addKeyByVolumeKey(newPassphrase = PASSWORD, slot = 2)) print("addKeyP :", c.addKeyByPassphrase(passphrase = PASSWORD, newPassphrase = PASSWORD2, slot = 3)) print("removeP :", c.removePassphrase(passphrase = PASSWORD2)) print("addKeyP :", c.addKeyByPassphrase(PASSWORD, PASSWORD2)) # original api required wrong passphrase parameter here # print "killSlot:", c.killSlot(passphrase = "xxx", slot = 0) print("killSlot:", c.killSlot(slot = 0)) print("activate:", c.activate(name = DEVICE, passphrase = PASSWORD)) print("suspend :", c.suspend()) # os.system("dmsetup info -c " + DEVICE) print("resume :", c.resume(passphrase = PASSWORD)) print_status(c) info = c.info() print("cipher :", info["cipher"]) print("cmode :", info["cipher_mode"]) print("keysize :", info["keysize"]) print("dir :", info["dir"]) print("device :", info["device"]) print("offset :", info["offset"]) print("name :", info["name"]) print("uuid :", info["uuid"]) # os.system("cryptsetup luksDump " + info["device"]) print("deact. :", c.deactivate()) del c c = pycryptsetup.CryptSetup( device = IMG, name = DEVICE, yesDialog = askyes, logFunc = log) print("activate:", c.activate(name = DEVICE, passphrase = PASSWORD)) c2 = pycryptsetup.CryptSetup( name = DEVICE, yesDialog = askyes, logFunc = log) info = c2.info() print("cipher :", info["cipher"]) print("cmode :", info["cipher_mode"]) print("keysize :", info["keysize"]) print("deact. :", c.deactivate()) r = c2.deactivate() print("deact. :", r) del c del c2 os.remove(IMG)