Packages
hackney
2.0.0-beta.1
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/boringssl/crypto/fipsmodule/slhdsa/address.h
// Copyright 2024 The BoringSSL Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_ADDRESS_H
#define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_ADDRESS_H
#include <openssl/mem.h>
#include "../../internal.h"
#include "./params.h"
#if defined(__cplusplus)
extern "C" {
#endif
#define SLHDSA_ADDR_TYPE_WOTS 0
#define SLHDSA_ADDR_TYPE_WOTSPK 1
#define SLHDSA_ADDR_TYPE_HASHTREE 2
#define SLHDSA_ADDR_TYPE_FORSTREE 3
#define SLHDSA_ADDR_TYPE_FORSPK 4
#define SLHDSA_ADDR_TYPE_WOTSPRF 5
#define SLHDSA_ADDR_TYPE_FORSPRF 6
static inline void slhdsa_set_chain_addr(const slh_dsa_config *config, uint8_t addr[32],
uint32_t chain) {
if (config->compressed_addresses) {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_CHAIN, chain);
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_CHAIN, chain);
}
}
static inline void slhdsa_set_hash_addr(const slh_dsa_config *config, uint8_t addr[32],
uint32_t hash) {
if (config->compressed_addresses) {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_HASH, hash);
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_HASH, hash);
}
}
static inline void slhdsa_set_keypair_addr(const slh_dsa_config *config,
uint8_t addr[32], uint32_t keypair) {
if (config->compressed_addresses) {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_KEYPAIR, keypair);
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_KEYPAIR, keypair);
}
}
static inline void slhdsa_copy_keypair_addr(const slh_dsa_config *config,
uint8_t out[32], const uint8_t in[32]) {
if (config->compressed_addresses) {
OPENSSL_memcpy(out, in, SLHDSA_ADDR_COMP_OFFSET_TYPE);
OPENSSL_memcpy(out + SLHDSA_ADDR_COMP_OFFSET_KEYPAIR,
in + SLHDSA_ADDR_COMP_OFFSET_KEYPAIR, 4);
} else {
OPENSSL_memcpy(out, in, SLHDSA_ADDR_FULL_OFFSET_TYPE);
OPENSSL_memcpy(out + SLHDSA_ADDR_FULL_OFFSET_KEYPAIR,
in + SLHDSA_ADDR_FULL_OFFSET_KEYPAIR, 4);
}
}
static inline void slhdsa_set_layer_addr(const slh_dsa_config *config, uint8_t addr[32],
uint32_t layer) {
if (config->compressed_addresses) {
addr[SLHDSA_ADDR_COMP_OFFSET_LAYER] = (uint8_t)layer;
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_LAYER, layer);
}
}
static inline void slhdsa_set_tree_addr(const slh_dsa_config *config, uint8_t addr[32],
uint64_t tree) {
if (config->compressed_addresses) {
CRYPTO_store_u64_be(addr + SLHDSA_ADDR_COMP_OFFSET_TREE, tree);
} else {
// The tree address is 12 bytes in this configuration. Just zero the top
// four bytes.
OPENSSL_memset(addr + SLHDSA_ADDR_FULL_OFFSET_TREE, 0, 4);
CRYPTO_store_u64_be(addr + SLHDSA_ADDR_FULL_OFFSET_TREE + 4, tree);
}
}
static inline void slhdsa_set_type(const slh_dsa_config *config, uint8_t addr[32],
uint32_t type) {
// FIPS 205 relies on this setting parts of the address to 0, so we do it
// here to avoid confusion.
//
// The behavior here is only correct for the SHA-2 instantiations.
if (config->compressed_addresses) {
OPENSSL_memset(addr + SLHDSA_ADDR_COMP_ZERO_START, 0,
SLHDSA_ADDR_COMP_ZERO_LEN);
addr[SLHDSA_ADDR_COMP_OFFSET_TYPE] = (uint8_t)type;
} else {
OPENSSL_memset(addr + SLHDSA_ADDR_FULL_ZERO_START, 0,
SLHDSA_ADDR_FULL_ZERO_LEN);
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_TYPE, type);
}
}
static inline void slhdsa_set_tree_height(const slh_dsa_config *config, uint8_t addr[32],
uint32_t tree_height) {
if (config->compressed_addresses) {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_TREE_HEIGHT,
tree_height);
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_TREE_HEIGHT,
tree_height);
}
}
static inline void slhdsa_set_tree_index(const slh_dsa_config *config, uint8_t addr[32],
uint32_t tree_index) {
if (config->compressed_addresses) {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_TREE_INDEX,
tree_index);
} else {
CRYPTO_store_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_TREE_INDEX,
tree_index);
}
}
static inline uint32_t slhdsa_get_tree_index(const slh_dsa_config *config,
uint8_t addr[32]) {
if (config->compressed_addresses) {
return CRYPTO_load_u32_be(addr + SLHDSA_ADDR_COMP_OFFSET_TREE_INDEX);
}
return CRYPTO_load_u32_be(addr + SLHDSA_ADDR_FULL_OFFSET_TREE_INDEX);
}
#if defined(__cplusplus)
} // extern C
#endif
#endif // OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_ADDRESS_H