1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*
* Copyright (c) 2015 Egor Tensin <egor@tensin.name>
* This file is part of the "AES tools" project.
* For details, see https://github.com/egor-tensin/aes-tools.
* Distributed under the MIT License.
*/
#include <aes/all.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
AES_StatusCode aes128_format_key(
AES128_KeyString* str,
const AES128_Key* key,
AES_ErrorDetails* err_details
) {
if (str == NULL)
return aes_error_null_argument(err_details, "str");
if (key == NULL)
return aes_error_null_argument(err_details, "key");
char* cursor = aes_format_block_hex(str->str, key->key);
*cursor = '\0';
return AES_SUCCESS;
}
AES_StatusCode aes192_format_key(
AES192_KeyString* str,
const AES192_Key* key,
AES_ErrorDetails* err_details
) {
if (str == NULL)
return aes_error_null_argument(err_details, "str");
if (key == NULL)
return aes_error_null_argument(err_details, "key");
char* cursor = aes_format_block_hex(str->str, key->lo);
cursor = aes_format_block_hex_partial(cursor, key->hi, 8);
*cursor = '\0';
return AES_SUCCESS;
}
AES_StatusCode aes256_format_key(
AES256_KeyString* str,
const AES256_Key* key,
AES_ErrorDetails* err_details
) {
if (str == NULL)
return aes_error_null_argument(err_details, "str");
if (key == NULL)
return aes_error_null_argument(err_details, "key");
char* cursor = aes_format_block_hex(str->str, key->lo);
cursor = aes_format_block_hex(cursor, key->hi);
*cursor = '\0';
return AES_SUCCESS;
}
AES_StatusCode aes128_parse_key(AES128_Key* dest, const char* src, AES_ErrorDetails* err_details) {
if (dest == NULL)
return aes_error_null_argument(err_details, "dest");
if (src == NULL)
return aes_error_null_argument(err_details, "src");
return aes_parse_block(&dest->key, src, err_details);
}
AES_StatusCode aes192_parse_key(AES192_Key* dest, const char* src, AES_ErrorDetails* err_details) {
if (dest == NULL)
return aes_error_null_argument(err_details, "dest");
if (src == NULL)
return aes_error_null_argument(err_details, "src");
AES_ALIGN(unsigned char, 16) bytes[32];
memset(bytes, 0x00, sizeof(bytes));
AES_StatusCode status = aes_parse_hex_string(bytes, src, 24, err_details);
if (aes_is_error(status))
return status;
dest->lo = aes_load_block_aligned(bytes);
dest->hi = aes_load_block_aligned(bytes + 16);
return status;
}
AES_StatusCode aes256_parse_key(AES256_Key* dest, const char* src, AES_ErrorDetails* err_details) {
if (dest == NULL)
return aes_error_null_argument(err_details, "dest");
if (src == NULL)
return aes_error_null_argument(err_details, "src");
AES_ALIGN(unsigned char, 16) bytes[32];
AES_StatusCode status = aes_parse_hex_string(bytes, src, sizeof(bytes), err_details);
if (aes_is_error(status))
return status;
dest->lo = aes_load_block_aligned(bytes);
dest->hi = aes_load_block_aligned(bytes + 16);
return status;
}
|