/work/toxcore/crypto_core_pack.c
Line | Count | Source |
1 | | /* SPDX-License-Identifier: GPL-3.0-or-later |
2 | | * Copyright © 2016-2025 The TokTok team. |
3 | | * Copyright © 2013 Tox project. |
4 | | */ |
5 | | |
6 | | #include "crypto_core_pack.h" |
7 | | |
8 | | #include <string.h> |
9 | | |
10 | | #include "bin_pack.h" |
11 | | #include "bin_unpack.h" |
12 | | #include "ccompat.h" |
13 | | #include "crypto_core.h" |
14 | | |
15 | | bool pack_extended_public_key(const Extended_Public_Key *_Nonnull key, Bin_Pack *_Nonnull bp) |
16 | 1.33k | { |
17 | 1.33k | uint8_t ext_key[EXT_PUBLIC_KEY_SIZE]; |
18 | 1.33k | static_assert(sizeof(ext_key) == sizeof(key->enc) + sizeof(key->sig), |
19 | 1.33k | "extended secret key size is not the sum of the encryption and sign secret key sizes"); |
20 | 1.33k | memcpy(ext_key, key->enc, sizeof(key->enc)); |
21 | 1.33k | memcpy(&ext_key[sizeof(key->enc)], key->sig, sizeof(key->sig)); |
22 | | |
23 | 1.33k | return bin_pack_bin(bp, ext_key, sizeof(ext_key)); |
24 | 1.33k | } |
25 | | |
26 | | bool pack_extended_secret_key(const Extended_Secret_Key *_Nonnull key, Bin_Pack *_Nonnull bp) |
27 | 890 | { |
28 | 890 | uint8_t ext_key[EXT_SECRET_KEY_SIZE]; |
29 | 890 | static_assert(sizeof(ext_key) == sizeof(key->enc) + sizeof(key->sig), |
30 | 890 | "extended secret key size is not the sum of the encryption and sign secret key sizes"); |
31 | 890 | memcpy(ext_key, key->enc, sizeof(key->enc)); |
32 | 890 | memcpy(&ext_key[sizeof(key->enc)], key->sig, sizeof(key->sig)); |
33 | | |
34 | 890 | const bool result = bin_pack_bin(bp, ext_key, sizeof(ext_key)); |
35 | 890 | crypto_memzero(ext_key, sizeof(ext_key)); |
36 | 890 | return result; |
37 | 890 | } |
38 | | |
39 | | bool unpack_extended_public_key(Extended_Public_Key *_Nonnull key, Bin_Unpack *_Nonnull bu) |
40 | 1.01k | { |
41 | 1.01k | uint8_t ext_key[EXT_PUBLIC_KEY_SIZE]; |
42 | | |
43 | 1.01k | if (!bin_unpack_bin_fixed(bu, ext_key, sizeof(ext_key))) { |
44 | 86 | return false; |
45 | 86 | } |
46 | | |
47 | 928 | memcpy(key->enc, ext_key, sizeof(key->enc)); |
48 | 928 | memcpy(key->sig, &ext_key[sizeof(key->enc)], sizeof(key->sig)); |
49 | | |
50 | 928 | return true; |
51 | 1.01k | } |
52 | | |
53 | | bool unpack_extended_secret_key(Extended_Secret_Key *_Nonnull key, Bin_Unpack *_Nonnull bu) |
54 | 457 | { |
55 | 457 | uint8_t ext_key[EXT_SECRET_KEY_SIZE]; |
56 | | |
57 | 457 | if (!bin_unpack_bin_fixed(bu, ext_key, sizeof(ext_key))) { |
58 | 53 | return false; |
59 | 53 | } |
60 | | |
61 | 404 | memcpy(key->enc, ext_key, sizeof(key->enc)); |
62 | 404 | memcpy(key->sig, &ext_key[sizeof(key->enc)], sizeof(key->sig)); |
63 | 404 | crypto_memzero(ext_key, sizeof(ext_key)); |
64 | | |
65 | 404 | return true; |
66 | 457 | } |