974
1015
0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8,
975
1016
0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 }
1018
#endif /* POLARSSL_CIPHER_MODE_CFB */
1020
#if defined(POLARSSL_CIPHER_MODE_CTR)
1022
* AES-CTR test vectors from:
1024
* http://www.faqs.org/rfcs/rfc3686.html
1027
static const unsigned char aes_test_ctr_key[3][16] =
1029
{ 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC,
1030
0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E },
1031
{ 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7,
1032
0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 },
1033
{ 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8,
1034
0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC }
1037
static const unsigned char aes_test_ctr_nonce_counter[3][16] =
1039
{ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
1040
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
1041
{ 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59,
1042
0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 },
1043
{ 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F,
1044
0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 }
1047
static const unsigned char aes_test_ctr_pt[3][48] =
1049
{ 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62,
1050
0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 },
1052
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1053
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1054
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1055
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F },
1057
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1058
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1059
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1060
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1061
0x20, 0x21, 0x22, 0x23 }
1064
static const unsigned char aes_test_ctr_ct[3][48] =
1066
{ 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79,
1067
0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 },
1068
{ 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9,
1069
0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88,
1070
0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8,
1071
0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 },
1072
{ 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9,
1073
0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7,
1074
0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36,
1075
0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53,
1076
0x25, 0xB2, 0x07, 0x2F }
1079
static const int aes_test_ctr_len[3] =
1081
#endif /* POLARSSL_CIPHER_MODE_CTR */
979
1084
* Checkup routine
981
1086
int aes_self_test( int verbose )
983
int i, j, u, v, offset;
984
1089
unsigned char key[32];
985
1090
unsigned char buf[64];
986
1091
unsigned char prv[16];
987
1092
unsigned char iv[16];
1093
#if defined(POLARSSL_CIPHER_MODE_CTR) || defined(POLARSSL_CIPHER_MODE_CFB)
1096
#if defined(POLARSSL_CIPHER_MODE_CTR)
1098
unsigned char nonce_counter[16];
1099
unsigned char stream_block[16];
988
1101
aes_context ctx;
990
1103
memset( key, 0, 32 );