/* forward declaration because parse_sign_sha256()/parse_encrypt_aes256() and
* network_parse() need to call each other. */
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts);
/* forward declaration because parse_sign_sha256()/parse_encrypt_aes256() and
* network_parse() need to call each other. */
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts);
static int init_gcrypt() {
/* http://lists.gnupg.org/pipermail/gcrypt-devel/2003-August/000458.html
* Because you can't know in a library whether another library has
static int init_gcrypt() {
/* http://lists.gnupg.org/pipermail/gcrypt-devel/2003-August/000458.html
* Because you can't know in a library whether another library has
state->values = calloc(sizeof(*state->values), state->values_len);
state->values_types = calloc(sizeof(*state->values_types), state->values_len);
if ((state->values == NULL) || (state->values_types == NULL)) {
state->values = calloc(sizeof(*state->values), state->values_len);
state->values_types = calloc(sizeof(*state->values_types), state->values_len);
if ((state->values == NULL) || (state->values_types == NULL)) {
static int verify_sha256(void *payload, size_t payload_size,
char const *username, char const *password,
uint8_t hash_provided[32]) {
static int verify_sha256(void *payload, size_t payload_size,
char const *username, char const *password,
uint8_t hash_provided[32]) {
+#else /* !HAVE_GCRYPT_H */
+static int verify_sha256(void *payload, size_t payload_size,
+ char const *username, char const *password,
+ uint8_t hash_provided[32]) {
+ return ENOTSUP;
+}
+#endif
static int parse_sign_sha256(void *signature, size_t signature_len,
void *payload, size_t payload_size,
lcc_network_parse_options_t const *opts) {
if (opts->password_lookup == NULL) {
static int parse_sign_sha256(void *signature, size_t signature_len,
void *payload, size_t payload_size,
lcc_network_parse_options_t const *opts) {
if (opts->password_lookup == NULL) {
return network_parse(payload, payload_size, NONE, opts);
}
return network_parse(payload, payload_size, NONE, opts);
}
return network_parse(payload, payload_size, SIGN, opts);
}
return network_parse(payload, payload_size, SIGN, opts);
}
static int decrypt_aes256(buffer_t *b, void *iv, size_t iv_size,
char const *password) {
gcry_cipher_hd_t cipher = NULL;
static int decrypt_aes256(buffer_t *b, void *iv, size_t iv_size,
char const *password) {
gcry_cipher_hd_t cipher = NULL;
static int parse_encrypt_aes256(void *data, size_t data_size,
lcc_network_parse_options_t const *opts) {
if (opts->password_lookup == NULL) {
static int parse_encrypt_aes256(void *data, size_t data_size,
lcc_network_parse_options_t const *opts) {
if (opts->password_lookup == NULL) {
return network_parse(b->data, b->len, ENCRYPT, opts);
}
return network_parse(b->data, b->len, ENCRYPT, opts);
}
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts) {
static int network_parse(void *data, size_t data_size, lcc_security_level_t sl,
lcc_network_parse_options_t const *opts) {
case TYPE_VALUES: {
lcc_value_list_t vl = state;
if (parse_values(payload, sizeof(payload), &vl)) {
case TYPE_VALUES: {
lcc_value_list_t vl = state;
if (parse_values(payload, sizeof(payload), &vl)) {
int lcc_network_parse(void *data, size_t data_size,
lcc_network_parse_options_t opts) {
if (opts.password_lookup) {
int lcc_network_parse(void *data, size_t data_size,
lcc_network_parse_options_t opts) {
if (opts.password_lookup) {
}
return network_parse(data, data_size, NONE, &opts);
}
return network_parse(data, data_size, NONE, &opts);