Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
src
serialization
crypto.h
Go to the documentation of this file.
1
// Copyright (c) 2014-2022, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
//
29
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
30
31
#pragma once
32
33
#include <vector>
34
35
#include "
serialization.h
"
36
#include "
debug_archive.h
"
37
#include "
crypto/chacha.h
"
38
#include "
crypto/crypto.h
"
39
#include "
crypto/hash.h
"
40
41
// read
42
template
<
template
<
bool
>
class
Archive>
43
bool
do_serialize
(Archive<false> &
ar
, std::vector<crypto::signature> &v)
44
{
45
size_t
cnt = v.size();
46
v.clear();
47
48
// very basic sanity check
49
if
(
ar
.remaining_bytes() < cnt*
sizeof
(
crypto::signature
)) {
50
ar
.set_fail();
51
return
false
;
52
}
53
54
v.reserve(cnt);
55
for
(
size_t
i = 0; i < cnt; i++) {
56
v.resize(i+1);
57
ar
.serialize_blob(&(v[i]),
sizeof
(
crypto::signature
),
""
);
58
if
(!
ar
.good())
59
return
false
;
60
}
61
return
true
;
62
}
63
64
// write
65
template
<
template
<
bool
>
class
Archive>
66
bool
do_serialize
(Archive<true> &
ar
, std::vector<crypto::signature> &v)
67
{
68
if
(0 == v.size())
return
true
;
69
ar
.begin_string();
70
size_t
cnt = v.size();
71
for
(
size_t
i = 0; i < cnt; i++) {
72
ar
.serialize_blob(&(v[i]),
sizeof
(
crypto::signature
),
""
);
73
if
(!
ar
.good())
74
return
false
;
75
}
76
ar
.end_string();
77
return
true
;
78
}
79
80
BLOB_SERIALIZER
(crypto::chacha_iv);
81
BLOB_SERIALIZER
(
crypto::hash
);
82
BLOB_SERIALIZER
(
crypto::hash8
);
83
BLOB_SERIALIZER
(
crypto::public_key
);
84
BLOB_SERIALIZER
(
crypto::secret_key
);
85
BLOB_SERIALIZER
(
crypto::key_derivation
);
86
BLOB_SERIALIZER
(
crypto::key_image
);
87
BLOB_SERIALIZER
(
crypto::signature
);
88
BLOB_SERIALIZER
(
crypto::view_tag
);
89
VARIANT_TAG
(
debug_archive
,
crypto::hash
,
"hash"
);
90
VARIANT_TAG
(
debug_archive
,
crypto::hash8
,
"hash8"
);
91
VARIANT_TAG
(
debug_archive
,
crypto::public_key
,
"public_key"
);
92
VARIANT_TAG
(
debug_archive
,
crypto::secret_key
,
"secret_key"
);
93
VARIANT_TAG
(
debug_archive
,
crypto::key_derivation
,
"key_derivation"
);
94
VARIANT_TAG
(
debug_archive
,
crypto::key_image
,
"key_image"
);
95
VARIANT_TAG
(
debug_archive
,
crypto::signature
,
"signature"
);
96
VARIANT_TAG
(
debug_archive
,
crypto::view_tag
,
"view_tag"
);
97
chacha.h
ar
binary_archive< false > ar
Definition
cold-outputs.cpp:54
crypto.h
debug_archive.h
hash.h
BLOB_SERIALIZER
#define BLOB_SERIALIZER(T)
VARIANT_TAG
#define VARIANT_TAG(Archive, Type, Tag)
crypto::signature
POD_CLASS signature
Definition
crypto.h:98
crypto::secret_key
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition
crypto.h:72
crypto::hash8
POD_CLASS hash8
Definition
hash.h:52
crypto::key_derivation
POD_CLASS key_derivation
Definition
crypto.h:91
crypto::view_tag
POD_CLASS view_tag
Definition
crypto.h:103
crypto::public_key
POD_CLASS public_key
Definition
crypto.h:64
crypto::key_image
POD_CLASS key_image
Definition
crypto.h:95
crypto::hash
POD_CLASS hash
Definition
hash.h:49
do_serialize
bool do_serialize(Archive< false > &ar, std::vector< crypto::signature > &v)
Definition
crypto.h:43
serialization.h
Simple DSL AAPI based on.
debug_archive
Definition
debug_archive.h:37
Generated on
for Monero by
1.17.0