129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <stdint.h>
 | 
						|
#include <transform.h>
 | 
						|
 | 
						|
#include <time.h>
 | 
						|
#include "pk.h"
 | 
						|
#include "sha256.h"
 | 
						|
#include "sha1.h"
 | 
						|
#include "aes.h"
 | 
						|
 | 
						|
 | 
						|
void mbedtls_aes_ecb_test() {
 | 
						|
    int i;
 | 
						|
    mbedtls_aes_context aes_ctx;
 | 
						|
 | 
						|
    unsigned char key[16] = "ECBPASSWD1234";
 | 
						|
    unsigned char plain[16] = "MbedTLS_AES";
 | 
						|
    unsigned char decrypted_plain[16] = {0};
 | 
						|
    unsigned char cipher[16] = {0};
 | 
						|
 | 
						|
    mbedtls_aes_init(&aes_ctx);
 | 
						|
 | 
						|
    mbedtls_aes_setkey_enc(&aes_ctx, key, 128);
 | 
						|
    printf("\nAES ECB:\nBefore encrypt: %s\n", plain);
 | 
						|
    mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_ENCRYPT, plain, cipher);
 | 
						|
 | 
						|
    printf("After encrypt: ");
 | 
						|
    for (i = 0; i < 16; ++i) {
 | 
						|
        printf("%c", cipher[i]);
 | 
						|
    }
 | 
						|
    printf(" -End\n");
 | 
						|
 | 
						|
    mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
 | 
						|
    mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_DECRYPT, cipher, decrypted_plain);
 | 
						|
    printf("After decrypt: %s\n", decrypted_plain);
 | 
						|
    mbedtls_aes_free(&aes_ctx);
 | 
						|
};
 | 
						|
 | 
						|
void mbedtls_aes_cbc_test() {
 | 
						|
    int i;
 | 
						|
    mbedtls_aes_context aes_ctx;
 | 
						|
 | 
						|
    unsigned char key[16] = "CBCPASSWD4321";
 | 
						|
    unsigned char iv[16];
 | 
						|
    unsigned char plain[64] = "Port Mbed_TLS to XiUOS success.";
 | 
						|
    unsigned char decrypted_plain[64] = {0};
 | 
						|
    unsigned char cipher[64] = {0};
 | 
						|
 | 
						|
    mbedtls_aes_init(&aes_ctx);
 | 
						|
 | 
						|
    printf("AES CBC:\nBefore encrypt: %s\n", plain);
 | 
						|
    mbedtls_aes_setkey_enc(&aes_ctx, key, 128);
 | 
						|
    for (i = 0; i < 16; ++i) {
 | 
						|
        iv[i] = 0x01;
 | 
						|
    }
 | 
						|
    mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, 64, iv, plain, cipher);
 | 
						|
    printf("After encrypt: ");
 | 
						|
    for (i = 0; i < 64; ++i) {
 | 
						|
        printf("%c", cipher[i]);
 | 
						|
    }
 | 
						|
    printf(" -End\n");
 | 
						|
 | 
						|
    mbedtls_aes_setkey_dec(&aes_ctx, key, 128);
 | 
						|
    for (i = 0; i < 16; ++i) {
 | 
						|
        iv[i] = 0x01;
 | 
						|
    }
 | 
						|
    mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, 64, iv, cipher, decrypted_plain);
 | 
						|
    printf("After decrypt: %s\n", decrypted_plain);
 | 
						|
    mbedtls_aes_free(&aes_ctx);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
const char publickey[] = {
 | 
						|
    "-----BEGIN PUBLIC KEY----- \r\n"
 | 
						|
    "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6NjtyqaRPShUnTn3OrM9CNnIxKHf3yWv4iFR/LPCcCTfnzGvIb3n/9REss3wjbeBNpZBFStPsYbY+iPWXA3ASw== \r\n"
 | 
						|
    "-----END PUBLIC KEY-----"
 | 
						|
};
 | 
						|
 | 
						|
void mbedtls_init() {
 | 
						|
    mbedtls_pk_context ctx_pk;
 | 
						|
    mbedtls_pk_init(&ctx_pk);
 | 
						|
 | 
						|
    int ret = mbedtls_pk_parse_public_key(&ctx_pk, (uint8_t *)publickey, sizeof(publickey));
 | 
						|
    if (ret != 0) {
 | 
						|
        printf("Can't import public key\n");
 | 
						|
    } else {
 | 
						|
        printf("Imported public key:\n %s\n", publickey);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
int test() {
 | 
						|
    printf("test mbedtls ......\n");
 | 
						|
    mbedtls_init();
 | 
						|
    
 | 
						|
    int i;
 | 
						|
    unsigned char content_to_encrypt[] = "Hello Mbed-TLS";
 | 
						|
    unsigned char content_encrypted[32];
 | 
						|
 | 
						|
    mbedtls_sha1_context sha1_ctx;
 | 
						|
    mbedtls_sha1_init(&sha1_ctx);
 | 
						|
    mbedtls_sha1_starts(&sha1_ctx);
 | 
						|
    mbedtls_sha1_update(&sha1_ctx, content_to_encrypt, strlen((char *)content_to_encrypt));
 | 
						|
    mbedtls_sha1_finish(&sha1_ctx, content_encrypted);
 | 
						|
    printf("\nOriginal Data: %s \nAfter encrypt by sha1:", content_to_encrypt);
 | 
						|
    mbedtls_sha1_free(&sha1_ctx);
 | 
						|
    for (i = 0; i < 20; ++i) {
 | 
						|
        printf("%02x", content_encrypted[i]);
 | 
						|
    }
 | 
						|
    printf("\n");
 | 
						|
 | 
						|
    mbedtls_sha256_context sha256_ctx;
 | 
						|
    mbedtls_sha256_init(&sha256_ctx);
 | 
						|
    mbedtls_sha256_starts(&sha256_ctx, 0);
 | 
						|
    mbedtls_sha256_update(&sha256_ctx, content_to_encrypt, strlen((char *)content_to_encrypt));
 | 
						|
    mbedtls_sha256_finish(&sha256_ctx, content_encrypted);
 | 
						|
    printf("\nOriginal Data: %s \nAfter encrypt by sha256:", content_to_encrypt);
 | 
						|
    mbedtls_sha256_free(&sha256_ctx);
 | 
						|
    for (i = 0; i < 32; ++i) {
 | 
						|
        printf("%02x", content_encrypted[i]);
 | 
						|
    }
 | 
						|
    printf("\n");
 | 
						|
 | 
						|
    mbedtls_aes_ecb_test();
 | 
						|
    mbedtls_aes_cbc_test();
 | 
						|
}
 | 
						|
 | 
						|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
 | 
						|
                                                test_mbedtls, test, test_mbedtls); |