crypto:是指加密,有很多种不同的加密方式
aes:对称分组加密, 密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。
des:分组加密。以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法
ecc:椭圆曲线加密,它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。
pka:非对称加解密,
rng:没有搜到是什么加密方式
sha1:sha1哈希算法,跟md5差不多
程序里调用了libcrypto.a库,基本没有具体实现
int main(void)
{
rcc_enable_peripheral_clk(RCC_PERIPHERAL_SAC, true);
aes_ecb();//改为不同的加密方式
/* Infinite loop */
while (1) { }
return 0;
}
void aes_ecb(void)
{
aes_init(AES_Key, 16, 0, NULL);
aes_crypto(AES_PLAIN, AES_BYTELEN, 0, AES_OUT);
aes_close();
}
void des_ecb(void)
{
U8 key[8] = {
0x01,
0x23,
0x45,
0x67,
0x89,
0xab,
0xcd,
0xef,
};
U8 in[8] = {
0x5a,
0x5a,
0x5a,
0x5a,
0x5a,
0x5a,
0x5a,
0x5a,
};
U8 cipher[8] = {
0x72,
0xaa,
0xe3,
0xb3,
0xd6,
0x91,
0x6e,
0x92,
};
U8 out[8];
des_init(key, 0, NULL);
des_crypto(in, 8, 0, out);
des_close();
if (!memcmp(out, cipher, 8)) {
//OK
} else {
//ERROR
}
}
bool ecc_test(void)
{
ECC_PARA ecc256_para;
U8 sign_r[32];
U8 sign_s[32];
ECC_POINT sign_rs;
U8 prikey[32];
U8 pubkey_x[32];
U8 pubkey_y[32];
ECC_POINT pubkey;
U8 message[16] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
U8 sha256_digest[32];
U8 error_status;
// clear message digest buffer
memset(sha256_digest, 0x00, 32);
// gernerate digest by SHA-256
error_status = sha256_hash(message, 16, sha256_digest);
if (error_status != HashSuccess) {
return false;
}
// Initialize the ECC_PARA stucture
ecc256_para.ECC_p = g_ecc256_p;
ecc256_para.ECC_a = g_ecc256_a;
ecc256_para.ECC_b = g_ecc256_b;
ecc256_para.ECC_n = g_ecc256_n;
ecc256_para.ECC_G0x = g_ecc256_Gx;
ecc256_para.ECC_G0y = g_ecc256_Gy;
ecc256_para.ECC_NUMBIT = 256;
// Initialize the ECC engine
error_status = ecc_init(&ecc256_para); // initial ecc para
if (error_status != ECCSUCCESS) {
return false;
}
// Initialize the ECC_POINT stucture of public key
pubkey.x = pubkey_x;
pubkey.y = pubkey_y;
// gernerate the ECC key para
error_status = ecc_genkey(prikey, &pubkey);
if (error_status != ECCSUCCESS) {
return false;
}
// Initialize the ECC_POINT stucture of signature
sign_rs.x = sign_r;
sign_rs.y = sign_s;
// sign the digest by private key
error_status = ecdsa_sign(prikey, sha256_digest, &sign_rs);
if (error_status != ECCSUCCESS) {
return false;
}
// verify the signature by public key
error_status = ecdsa_verify(&pubkey, sha256_digest, &sign_rs);
if (error_status == ECCSUCCESS) {
return true;
} else {
return false;
}
}
…………估计不会用到,用的时候还是要调用库