from conans import ConanFile, CMake from conans.errors import ConanException class TinyAesCConan(ConanFile): name = "tiny-AES-c" version = "1.0.0" license = "The Unlicense" url = "https://github.com/kokke/tiny-AES-c" description = "Small portable AES128/192/256 in C" topics = ("encryption", "crypto", "AES") settings = "os", "compiler", "build_type", "arch" generators = "cmake" exports_sources = ["CMakeLists.txt", "*.c", '*.h', '*.hpp'] exports = ["unlicense.txt"] _options_dict = { # enable AES128 "AES128": [True, False], # enable AES192 "AES192": [True, False], # enable AES256 "AES256": [True, False], # enable AES encryption in CBC-mode of operation "CBC": [True, False], # enable the basic ECB 16-byte block algorithm "ECB": [True, False], # enable encryption in counter-mode "CTR": [True, False], } options = _options_dict default_options = { "AES128": True, "AES192": False, "AES256": False, "CBC": True, "ECB": True, "CTR": True } def configure(self): if not self.options.CBC and not self.options.ECB and not self.options.CTR: raise ConanException("Need to at least specify one of CBC, ECB or CTR modes") if not self.options.AES128 and not self.options.AES192 and not self.options.AES256: raise ConanException("Need to at least specify one of AES{128, 192, 256} modes") def build(self): cmake = CMake(self) for key in self._options_dict.keys(): if self.options[key]: cmake.definitions["CMAKE_CFLAGS"].append(key) cmake.configure() cmake.build() def package(self): self.copy("*.h", dst="include") self.copy("*.hpp", dst="include") self.copy("*.a", dst="lib", keep_path=False) self.copy("unlicense.txt") def package_info(self): self.cpp_info.libs = ["tiny-aes"]