tiny-AES-c, 在C 中,小型便携式 AES128/192/256

分享于 

5分钟阅读

GitHub

  繁體 雙語
Small portable AES128 ECB in C
  • 源代码名称:tiny-AES-c
  • 源代码网址:http://www.github.com/kokke/tiny-AES-c
  • tiny-AES-c源代码文档
  • tiny-AES-c源代码下载
  • Git URL:
    git://www.github.com/kokke/tiny-AES-c.git
    Git Clone代码到本地:
    git clone http://www.github.com/kokke/tiny-AES-c
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/kokke/tiny-AES-c
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    C C 中的微 AES

    这是 AES ECBCTR和CBC加密算法的小型和便携式的实现。

    可以通过定义符号的AES192或者 AES256,将默认键大小设置为1 位或者2 位,以定义符号的。

    这个API非常简单,看起来像这个(。我使用 <stdint.h> -style注释类型):

    /* Initialize context calling one of: */voidAES_init_ctx(struct AES_ctx* ctx, constuint8_t* key);voidAES_init_ctx_iv(struct AES_ctx* ctx, constuint8_t* key, constuint8_t* iv);/*.. . or reset IV at random point: */voidAES_ctx_set_iv(struct AES_ctx* ctx, constuint8_t* iv);/* Then start encrypting and decrypting with the functions below: */voidAES_ECB_encrypt(struct AES_ctx* ctx, constuint8_t* buf);voidAES_ECB_decrypt(struct AES_ctx* ctx, constuint8_t* buf);voidAES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);voidAES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);/* Same function for encrypting as for decrypting in CTR mode */voidAES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);

    注:

    • 不提供任何填充,所以CBC和ECB都应该是 16字节的mutiples。 对于 pad PKCS7,推荐使用。
    • ECB模式在大多数情况下被认为不安全,并且在流模式中没有实现。 如果需要这里模式,请为需要加密的16字节的每个块调用该函数。 有关更详细的信息,请参阅关于ECB的维基百科的文章。

    你可以选择使用任何或者全部 modes-of-operations,通过定义符号 CBC。CTR或者 ECB。 查看头文件以进行澄清。

    C++ 用户应该使用 #includeaes.hpp,而不是aes.h

    由于恶意输入,没有内置的错误检查或者out-of-bounds内存访问错误的保护。

    当为ARM编译时,MODULE 使用小于 200字节的RAM和 1 -2K ROM,但是YMMV取决于启用的模式。

    它是C 中最小的实现之一,但如果你知道更小的( 或者对代码进行了改进),请与我联系。

    我已经成功使用 64bit 位 x86,32bit ARM和 8位AVR平台的代码。

    当为ARM编译CTR模式时,GCC的大小输出:

    
    $ arm-none-eabi-gcc -Os -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
    
    
    $ size aes.o
    
    
     text data bss dec hex filename
    
    
     1203 0 0 1203 4b3 aes.o
    
    
    
    

    在编译THUMB指令集时,我们的代码大小在 1K 以下。

    
    $ arm-none-eabi-gcc -Os -mthumb -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
    
    
    $ size aes.o
    
    
     text data bss dec hex filename
    
    
     955 0 0 955 3bb aes.o
    
    
    
    

    我使用自由软件基金会,ARM GCC编译器:

    
    $ arm-none-eabi-gcc --version
    
    
    arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)
    
    
    Copyright (C) 2013 Free Software Foundation, Inc.
    
    
    This is free software; see the source for copying conditions. There is NO
    
    
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    
    

    这里实现根据以下数据验证:

    国家标准与技术专题出版物 800 -38A 2001 ED附录 Appendix AES AES的操作模式矢量。

    文档中的它的他附录对于 比如 填充的实现详细信息,以及在点击率模式下生成in和nonces有。

    衷心感谢你给这个项目贡献了所有优秀的人。

    这里存储库中的所有材料都位于 public 域中。


    portable  AES