Update block_cipher.c

This commit is contained in:
Zhi Guan
2026-06-10 22:12:38 +08:00
parent 26f7b9f04b
commit a21bdf02b2

View File

@@ -8,17 +8,54 @@
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <gmssl/oid.h>
#include <gmssl/block_cipher.h>
#include <gmssl/error.h>
#include <gmssl/endian.h>
#include <gmssl/block_cipher.h>
const BLOCK_CIPHER *block_cipher_from_name(const char *name)
{
if (!name) {
error_print();
return NULL;
}
if (!strcmp(name, "sm4")) {
return BLOCK_CIPHER_sm4();
#ifdef ENABLE_AES
} else if (!strcmp(name, "aes128")) {
return BLOCK_CIPHER_aes128();
#endif
}
error_print();
return NULL;
}
const char *block_cipher_name(const BLOCK_CIPHER *cipher)
{
if (!cipher) {
error_print();
return NULL;
}
switch (cipher->oid) {
case OID_sm4: return "sm4";
#ifdef ENABLE_AES
case OID_aes128: return "aes128";
#endif
}
error_print();
return NULL;
}
int block_cipher_set_encrypt_key(BLOCK_CIPHER_KEY *key, const BLOCK_CIPHER *cipher, const uint8_t *raw_key)
{
if (!key || !cipher || !cipher->set_encrypt_key || !raw_key) {
error_print();
return -1;
}
memset(key, 0, sizeof(BLOCK_CIPHER_KEY));
cipher->set_encrypt_key(key, raw_key);
key->cipher = cipher;
@@ -27,6 +64,10 @@ int block_cipher_set_encrypt_key(BLOCK_CIPHER_KEY *key, const BLOCK_CIPHER *ciph
int block_cipher_set_decrypt_key(BLOCK_CIPHER_KEY *key, const BLOCK_CIPHER *cipher, const uint8_t *raw_key)
{
if (!key || !cipher || !cipher->set_decrypt_key || !raw_key) {
error_print();
return -1;
}
memset(key, 0, sizeof(BLOCK_CIPHER_KEY));
cipher->set_decrypt_key(key, raw_key);
key->cipher = cipher;
@@ -35,12 +76,20 @@ int block_cipher_set_decrypt_key(BLOCK_CIPHER_KEY *key, const BLOCK_CIPHER *ciph
int block_cipher_encrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *in, uint8_t *out)
{
if (!key || !key->cipher || !key->cipher->encrypt|| !in || !out) {
error_print();
return -1;
}
key->cipher->encrypt(key, in, out);
return 1;
}
int block_cipher_decrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *in, uint8_t *out)
{
if (!key || !key->cipher || !key->cipher->decrypt|| !in || !out) {
error_print();
return -1;
}
key->cipher->decrypt(key, in, out);
return 1;
}