Exemple #1
0
QByteArray QTinyAes::encryptRaw(const QByteArray &plain) const
{
	Q_ASSERT_X(!d->key.isEmpty(), Q_FUNC_INFO, "The key must not be empty to encrypt data");
	Q_ASSERT_X(plain.size() % BlockSize == 0, Q_FUNC_INFO, "plain must be a multiple of QTinyAes::BlockSize");
	auto buffer = plain;

	AES_ctx ctx;
	if(d->iv.isNull())
		AES_init_ctx(&ctx, (uint8_t*)d->key.constData());
	else
		AES_init_ctx_iv(&ctx, (uint8_t*)d->key.constData(), (uint8_t*)d->iv.constData());

	switch(d->mode) {
	case CTR:
		AES_CTR_xcrypt_buffer(&ctx, (uint8_t*)buffer.data(), (uint32_t)buffer.size());
		break;
	case CBC:
		AES_CBC_encrypt_buffer(&ctx, (uint8_t*)buffer.data(),  (uint32_t)buffer.size());
		break;
	case ECB:
		for(auto i = 0; i < buffer.size(); i += BlockSize) {
			auto ctxCopy = ctx;
			AES_ECB_encrypt(&ctxCopy, (uint8_t*)(buffer.data() + i));
		}
		break;
	default:
		Q_UNREACHABLE();
		break;
	}

	memset(&ctx, 0, sizeof(AES_ctx));

	return buffer;

}
Exemple #2
0
int main(void)
{
	
	//256
    uint8_t key[] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
                      0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 };
    uint8_t in[]  = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a};
    uint8_t out[16];
	
	for(int i = 0; i < 16; i++)
	{
		out[i] = in[i];
	}
	phex(out,16);
	
    struct AES_ctx ctx;
    AES_init_ctx(&ctx, key);
    AES_ECB_encrypt(&ctx, in);
	phex(in,16);
	AES_init_ctx(&ctx, key);
	AES_ECB_decrypt(&ctx, in);
	phex(out,16);


    return 0;
}
Exemple #3
0
int main(){
    AES_KEY key;
    AES_KEY decrypt_key;
    uint8_t *PLAINTEXT;
    uint8_t *CIPHERTEXT;
    uint8_t *DECRYPTEDTEXT;
    uint8_t *EXPECTED_CIPHERTEXT;
    uint8_t *CIPHER_KEY;
    int i,j;
    int key_length;
    if (!Check_CPU_support_AES()){
        printf("Cpu does not support AES instruction set. Bailing out.\n");
        return 1;
        }
    printf("CPU support AES instruction set.\n\n");
#ifdef AES128
#define STR "Performing AES128 ECB.\n"
    CIPHER_KEY = AES128_TEST_KEY;
    EXPECTED_CIPHERTEXT = ECB128_EXPECTED;
    key_length = 128;
#elif defined AES192
#define STR "Performing AES192 ECB.\n"
    CIPHER_KEY = AES192_TEST_KEY;
    EXPECTED_CIPHERTEXT = ECB192_EXPECTED;
    key_length = 192;
#elif defined AES256
#define STR "Performing AES256 ECB.\n"
    CIPHER_KEY = AES256_TEST_KEY;
    EXPECTED_CIPHERTEXT = ECB256_EXPECTED;
    key_length = 256;
#endif
    PLAINTEXT = (uint8_t*)malloc(LENGTH);
    CIPHERTEXT = (uint8_t*)malloc(LENGTH);
    DECRYPTEDTEXT = (uint8_t*)malloc(LENGTH);
    for(i=0 ;i<LENGTH/16/4; i++){
        for(j=0; j<4; j++){
            _mm_storeu_si128(&((__m128i*)PLAINTEXT)[i*4+j],
                              ((__m128i*)AES_TEST_VECTOR)[j]);
            }
        }
    for(j=i*4 ; j<LENGTH/16; j++){
        _mm_storeu_si128(&((__m128i*)PLAINTEXT)[j],
                         ((__m128i*)AES_TEST_VECTOR)[j%4]);
        }
    if (LENGTH%16){
        _mm_storeu_si128(&((__m128i*)PLAINTEXT)[j],
                          ((__m128i*)AES_TEST_VECTOR)[j%4]);
        }
    AES_set_encrypt_key(CIPHER_KEY, key_length, &key);
    AES_set_decrypt_key(CIPHER_KEY, key_length, &decrypt_key);
    AES_ECB_encrypt(PLAINTEXT,
                    CIPHERTEXT,
                    LENGTH,
                    key.KEY,
                    key.nr);
    AES_ECB_decrypt(CIPHERTEXT,
                    DECRYPTEDTEXT,
                    LENGTH,
                    decrypt_key.KEY,
                    decrypt_key.nr);
    printf("%s\n",STR);
    printf("The Cipher Key:\n");
    print_m128i_with_string("",((__m128i*)CIPHER_KEY)[0]);
    if (key_length > 128)
      print_m128i_with_string_short("",((__m128i*)CIPHER_KEY)[1],(key_length/8) -16);
    printf("The Key Schedule:\n");
    for (i=0; i< key.nr; i++)
        print_m128i_with_string("",((__m128i*)key.KEY)[i]);
printf("The PLAINTEXT:\n");
for (i=0; i< LENGTH/16; i++)
    print_m128i_with_string("",((__m128i*)PLAINTEXT)[i]);
if (LENGTH%16)
    print_m128i_with_string_short("",((__m128i*)PLAINTEXT)[i],LENGTH%16);
printf("\n\nThe CIPHERTEXT:\n");
for (i=0; i< LENGTH/16; i++)
    print_m128i_with_string("",((__m128i*)CIPHERTEXT)[i]);
if (LENGTH%16)
    print_m128i_with_string_short("",((__m128i*)CIPHERTEXT)[i],LENGTH%16);
for(i=0; i<LENGTH; i++){
    if (CIPHERTEXT[i] != EXPECTED_CIPHERTEXT[i%(16*4)]){
      printf("The CIPHERTEXT is not equal to the EXPECTED CIHERTEXT.\n\n");
      return 1;
      }
    }
printf("The CIPHERTEXT equals to the EXPECTED CIHERTEXT.\n\n");
for(i=0; i<LENGTH; i++){
    if (DECRYPTEDTEXT[i] != PLAINTEXT[i%(16*4)]){
        printf("The DECRYPTED TEXT isn't equal to the original PLAINTEXT!");
        printf("\n\n");
        return 1;
        }
    }
printf("The DECRYPTED TEXT equals to the original PLAINTEXT.\n\n");
}