summaryrefslogtreecommitdiff
path: root/shared-bindings/aesio/__init__.h
diff options
context:
space:
mode:
authorSean Cross <sean@xobs.io>2020-04-14 11:18:45 +0800
committerSean Cross <sean@xobs.io>2020-05-06 17:40:06 +0800
commitb168784fa0fd97b17807836b390c79abaadfa8e4 (patch)
treec7573841c97a534e12e54bfb1923d2f9db370105 /shared-bindings/aesio/__init__.h
parent90625d169a776e3ec2c6f5a690396085a7f4d521 (diff)
aesio: add basic AES encryption and decryption
This adds initial support for an AES module named aesio. This implementation supports only a subset of AES modes, namely ECB, CBC, and CTR modes. Example usage: ``` >>> import aesio >>> >>> key = b'Sixteen byte key' >>> cipher = aesio.AES(key, aesio.MODE_ECB) >>> output = bytearray(16) >>> cipher.encrypt_into(b'Circuit Python!!', output) >>> output bytearray(b'E\x14\x85\x18\x9a\x9c\r\x95>\xa7kV\xa2`\x8b\n') >>> ``` This key is 16-bytes, so it uses AES128. If your key is 24- or 32- bytes long, it will switch to AES192 or AES256 respectively. This has been tested with many of the official NIST test vectors, such as those used in `pycryptodome` at https://github.com/Legrandin/pycryptodome/tree/39626a5b01ce5c1cf51d022be166ad0aea722177/lib/Crypto/SelfTest/Cipher/test_vectors/AES CTR has not been tested as NIST does not provide test vectors for it. Signed-off-by: Sean Cross <sean@xobs.io>
Diffstat (limited to 'shared-bindings/aesio/__init__.h')
-rw-r--r--shared-bindings/aesio/__init__.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/shared-bindings/aesio/__init__.h b/shared-bindings/aesio/__init__.h
new file mode 100644
index 000000000..634fed2e5
--- /dev/null
+++ b/shared-bindings/aesio/__init__.h
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AESIO_H
+#define MICROPY_INCLUDED_SHARED_BINDINGS_AESIO_H
+
+#include "shared-module/aesio/__init__.h"
+
+extern const mp_obj_type_t aesio_aes_type;
+
+void common_hal_aesio_aes_construct(aesio_aes_obj_t* self,
+ const uint8_t* key,
+ uint32_t key_length,
+ const uint8_t* iv,
+ int mode,
+ int counter);
+void common_hal_aesio_aes_rekey(aesio_aes_obj_t* self,
+ const uint8_t* key,
+ uint32_t key_length,
+ const uint8_t* iv);
+void common_hal_aesio_aes_set_mode(aesio_aes_obj_t* self,
+ int mode);
+void common_hal_aesio_aes_encrypt(aesio_aes_obj_t* self,
+ uint8_t* buffer,
+ size_t len);
+void common_hal_aesio_aes_decrypt(aesio_aes_obj_t* self,
+ uint8_t* buffer,
+ size_t len);
+
+#endif // MICROPY_INCLUDED_SHARED_BINDINGS_AESIO_H