xiuos/APP_Framework/Framework/security/mbedtls/test.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);