Merge pull request #5638 from jepler/test-aesio

Test aesio
This commit is contained in:
Scott Shawcroft 2021-12-01 10:05:37 -08:00 committed by GitHub
commit fea0103ff2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 162 additions and 18 deletions

View File

@ -31,10 +31,14 @@ SRC_BITMAP := \
$(patsubst ../../%,%,$(wildcard ../../shared-bindings/gifio/*.c ../../shared-module/gifio/*.c)) \
shared/runtime/context_manager_helpers.c \
displayio_min.c \
shared-bindings/aesio/aes.c \
shared-bindings/aesio/__init__.c \
shared-bindings/bitmaptools/__init__.c \
shared-bindings/displayio/Bitmap.c \
shared-bindings/rainbowio/__init__.c \
shared-bindings/util.c \
shared-module/aesio/aes.c \
shared-module/aesio/__init__.c \
shared-module/bitmaptools/__init__.c \
shared-module/displayio/area.c \
shared-module/displayio/Bitmap.c \
@ -45,7 +49,7 @@ SRC_BITMAP := \
$(info $(SRC_BITMAP))
SRC_C += $(SRC_BITMAP)
CFLAGS += -DCIRCUITPY_GIFIO=1 -DCIRCUITPY_DISPLAYIO_UNIX=1 -DCIRCUITPY_BITMAPTOOLS=1 -DCIRCUITPY_RAINBOWIO=1
CFLAGS += -DCIRCUITPY_GIFIO=1 -DCIRCUITPY_DISPLAYIO_UNIX=1 -DCIRCUITPY_BITMAPTOOLS=1 -DCIRCUITPY_RAINBOWIO=1 -DCIRCUITPY_AESIO=1
SRC_C += coverage.c
SRC_CXX += coveragecpp.cpp

View File

@ -9,6 +9,10 @@
// Defined at the end of this file
//| MODE_ECB: int
//| MODE_CBC: int
//| MODE_CTR: int
//|
//| class AES:
//| """Encrypt and decrypt AES streams"""
//|
@ -16,8 +20,8 @@
//| """Create a new AES state with the given key.
//|
//| :param ~_typing.ReadableBuffer key: A 16-, 24-, or 32-byte key
//| :param int mode: AES mode to use. One of: AES.MODE_ECB, AES.MODE_CBC, or
//| AES.MODE_CTR
//| :param int mode: AES mode to use. One of: `MODE_ECB`, `MODE_CBC`, or
//| `MODE_CTR`
//| :param ~_typing.ReadableBuffer iv: Initialization vector to use for CBC or CTR mode
//|
//| Additional arguments are supported for legacy reasons.
@ -30,7 +34,7 @@
//| key = b'Sixteen byte key'
//| inp = b'CircuitPython!!!' # Note: 16-bytes long
//| outp = bytearray(len(inp))
//| cipher = aesio.AES(key, aesio.mode.MODE_ECB)
//| cipher = aesio.AES(key, aesio.MODE_ECB)
//| cipher.encrypt_into(inp, outp)
//| hexlify(outp)"""
//| ...
@ -41,10 +45,10 @@ STATIC mp_obj_t aesio_aes_make_new(const mp_obj_type_t *type, size_t n_args,
(void)type;
enum { ARG_key, ARG_mode, ARG_IV, ARG_counter, ARG_segment_size };
static const mp_arg_t allowed_args[] = {
{MP_QSTR_key, MP_ARG_OBJ | MP_ARG_REQUIRED},
{MP_QSTR_mode, MP_ARG_INT, {.u_int = AES_MODE_ECB}},
{MP_QSTR_IV, MP_ARG_OBJ},
{MP_QSTR_counter, MP_ARG_OBJ},
{MP_QSTR_key, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_OBJ_NULL} },
{MP_QSTR_mode, MP_ARG_INT, {.u_int = AES_MODE_ECB} },
{MP_QSTR_IV, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
{MP_QSTR_counter, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
{MP_QSTR_segment_size, MP_ARG_INT, {.u_int = 8}},
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];

View File

@ -0,0 +1,99 @@
import aesio
from binascii import hexlify, unhexlify
# doc example
key = b"Sixteen byte key"
inp = b"CircuitPython!!!" # Note: 16-bytes long
outp = bytearray(len(inp))
cipher = aesio.AES(key, aesio.MODE_ECB)
cipher.encrypt_into(inp, outp)
print(str(hexlify(outp), ""))
cipher = aesio.AES(key, aesio.MODE_ECB)
cipher.decrypt_into(outp, outp)
print(str(outp, ""))
print()
print("ECB")
# ECB mode test vector, from the aes.c source
plaintext = unhexlify(
"6bc1bee22e409f96e93d7e117393172a"
"ae2d8a571e03ac9c9eb76fac45af8e51"
"30c81c46a35ce411e5fbc1191a0a52ef"
"f69f2445df4f9b17ad2b417be66c3710"
)
key = unhexlify("2b7e151628aed2a6abf7158809cf4f3c")
cyphertext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_ECB)
for i in range(0, len(plaintext), 16):
output = memoryview(cyphertext)[i : i + 16]
cipher.encrypt_into(plaintext[i : i + 16], output)
print(str(hexlify(output), ""))
print()
plaintext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_ECB)
for i in range(0, len(plaintext), 16):
output = memoryview(plaintext)[i : i + 16]
cipher.decrypt_into(cyphertext[i : i + 16], output)
print(str(hexlify(output), ""))
print()
print("CBC")
# CBC128-AES128 test vector from NIST Special Publication 800-38A, 2001 edition, p50
plaintext = unhexlify(
"6bc1bee22e409f96e93d7e117393172a"
"ae2d8a571e03ac9c9eb76fac45af8e51"
"30c81c46a35ce411e5fbc1191a0a52ef"
"f69f2445df4f9b17ad2b417be66c3710"
)
key = unhexlify("2b7e151628aed2a6abf7158809cf4f3c")
iv = unhexlify("000102030405060708090a0b0c0d0e0f")
cyphertext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_CBC, IV=iv)
for i in range(0, len(plaintext), 16):
output = memoryview(cyphertext)[i : i + 16]
cipher.encrypt_into(plaintext[i : i + 16], output)
print(str(hexlify(output), ""))
print()
plaintext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_CBC, IV=iv)
for i in range(0, len(plaintext), 16):
output = memoryview(plaintext)[i : i + 16]
cipher.decrypt_into(cyphertext[i : i + 16], output)
print(str(hexlify(output), ""))
print()
print("CTR")
# CTR128-AES128 test vector from NIST Special Publication 800-38A, 2001 edition, p55
plaintext = unhexlify(
"6bc1bee22e409f96e93d7e117393172a"
"ae2d8a571e03ac9c9eb76fac45af8e51"
"30c81c46a35ce411e5fbc1191a0a52ef"
"f69f2445df4f9b17ad2b417be66c3710"
)
key = unhexlify("2b7e151628aed2a6abf7158809cf4f3c")
counter = unhexlify("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff")
cyphertext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_CTR, IV=counter)
for i in range(0, len(plaintext), 16):
output = memoryview(cyphertext)[i : i + 16]
cipher.encrypt_into(plaintext[i : i + 16], output)
print(str(hexlify(output), ""))
print()
plaintext = bytearray(len(plaintext))
cipher = aesio.AES(key, aesio.MODE_CTR, IV=counter)
for i in range(0, len(plaintext), 16):
output = memoryview(plaintext)[i : i + 16]
cipher.decrypt_into(cyphertext[i : i + 16], output)
print(str(hexlify(output), ""))
print()

View File

@ -0,0 +1,36 @@
abb1a1f98f57409e455ac06e71535ffe
CircuitPython!!!
ECB
3ad77bb40d7a3660a89ecaf32466ef97
f5d3d58503b9699de785895a96fdbaaf
43b1cd7f598ece23881b00e3ed030688
7b0c785e27e8ad3f8223207104725dd4
6bc1bee22e409f96e93d7e117393172a
ae2d8a571e03ac9c9eb76fac45af8e51
30c81c46a35ce411e5fbc1191a0a52ef
f69f2445df4f9b17ad2b417be66c3710
CBC
7649abac8119b246cee98e9b12e9197d
5086cb9b507219ee95db113a917678b2
73bed6b8e3c1743b7116e69e22229516
3ff1caa1681fac09120eca307586e1a7
6bc1bee22e409f96e93d7e117393172a
ae2d8a571e03ac9c9eb76fac45af8e51
30c81c46a35ce411e5fbc1191a0a52ef
f69f2445df4f9b17ad2b417be66c3710
CTR
874d6191b620e3261bef6864990db6ce
9806f66b7970fdff8617187bb9fffdff
5ae4df3edbd5d35e5b4f09020db03eab
1e031dda2fbe03d1792170a0f3009cee
6bc1bee22e409f96e93d7e117393172a
ae2d8a571e03ac9c9eb76fac45af8e51
30c81c46a35ce411e5fbc1191a0a52ef
f69f2445df4f9b17ad2b417be66c3710

View File

@ -29,16 +29,17 @@ RuntimeError:
ame__
mport
builtins micropython _thread array
binascii bitmaptools btree cexample
cmath collections cppexample displayio
errno ffi framebuf gc
gifio hashlib json math
qrio rainbowio re sys
termios ubinascii uctypes uerrno
uheapq uio ujson ulab
uos urandom ure uselect
ustruct utime utimeq uzlib
builtins micropython _thread aesio
array binascii bitmaptools btree
cexample cmath collections cppexample
displayio errno ffi framebuf
gc gifio hashlib json
math qrio rainbowio re
sys termios ubinascii uctypes
uerrno uheapq uio ujson
ulab uos urandom ure
uselect ustruct utime utimeq
uzlib
ime
utime utimeq