Esempio n. 1
0
int main(){

	int i, j;
	pthread_t *threads;
	int *thread_index;
	char dummy;

	// Checking CPU support
	if (!Check_CPU_support_AES()){
		verbose("Cpu does not support AES instruction set. Bailing out."); return 1;
	}
	verbose("CPU support AES instruction set.");

	// Reading input
	cipher_text = talloc(uint8_t, LENGTH);
	for(i=0; i<LENGTH; i++)
		fscanf(stdin, "%02x", &cipher_text[i]);
	
	// Printing input
	printf(" - Input: ");
	for(i=0; i< LENGTH; i++)
		printf("%02x", cipher_text[i]);
	printf("\n");

	// Allocating thread indexes
	threads = talloc(pthread_t, NTHREADS);
	thread_index = talloc(int, NTHREADS);

	// Creating threads
	for(i=0; i< NTHREADS; i++){
		thread_index[i] = i;
		if(pthread_create(&threads[i], NULL, &thread_function, &thread_index[i]))
			error("Creation of thread #%d failed.", i);
		else
			verbose("Thread #%d created successfully.", i);
	}
	
	// Waiting for threads
	for(i=0; i< NTHREADS; i++)
		pthread_join(threads[i], NULL);
	verbose("All threads are done.");

	return 1;
}
Esempio n. 2
0
void main(void)
{
    printf("CPU supports AES: %s\n", Check_CPU_support_AES() ? "true":"false");
}
Esempio n. 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");
}