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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! # sphincsplus
//!
//! This crate provides bindings to and wrappers around the following
//! implementations from [PQClean][pqc]:
//!
//! * sphincs-shake-128f-simple - clean
//! * sphincs-shake-128s-simple - clean
//! * sphincs-shake-192f-simple - clean
//! * sphincs-shake-192s-simple - clean
//! * sphincs-shake-256f-simple - clean
//! * sphincs-shake-256s-simple - clean
//! * sphincs-sha2-128f-simple - clean
//! * sphincs-sha2-128s-simple - clean
//! * sphincs-sha2-192f-simple - clean
//! * sphincs-sha2-192s-simple - clean
//! * sphincs-sha2-256f-simple - clean
//! * sphincs-sha2-256s-simple - clean
//!
//! [pqc]: https://github.com/pqclean/pqclean/
//!

#![no_std]
#![allow(clippy::len_without_is_empty)]

// For no-std vectors
extern crate alloc;

// For tests
#[cfg(feature = "std")]
extern crate std;

pub mod ffi;
pub mod sphincssha2128fsimple;
pub mod sphincssha2128ssimple;
pub mod sphincssha2192fsimple;
pub mod sphincssha2192ssimple;
pub mod sphincssha2256fsimple;
pub mod sphincssha2256ssimple;
pub mod sphincsshake128fsimple;
pub mod sphincsshake128ssimple;
pub mod sphincsshake192fsimple;
pub mod sphincsshake192ssimple;
pub mod sphincsshake256fsimple;
pub mod sphincsshake256ssimple;

pub use crate::sphincssha2128fsimple::{
    detached_sign as sphincssha2128fsimple_detached_sign, keypair as sphincssha2128fsimple_keypair,
    open as sphincssha2128fsimple_open, public_key_bytes as sphincssha2128fsimple_public_key_bytes,
    secret_key_bytes as sphincssha2128fsimple_secret_key_bytes, sign as sphincssha2128fsimple_sign,
    signature_bytes as sphincssha2128fsimple_signature_bytes,
    verify_detached_signature as sphincssha2128fsimple_verify_detached_signature,
};
pub use crate::sphincssha2128ssimple::{
    detached_sign as sphincssha2128ssimple_detached_sign, keypair as sphincssha2128ssimple_keypair,
    open as sphincssha2128ssimple_open, public_key_bytes as sphincssha2128ssimple_public_key_bytes,
    secret_key_bytes as sphincssha2128ssimple_secret_key_bytes, sign as sphincssha2128ssimple_sign,
    signature_bytes as sphincssha2128ssimple_signature_bytes,
    verify_detached_signature as sphincssha2128ssimple_verify_detached_signature,
};
pub use crate::sphincssha2192fsimple::{
    detached_sign as sphincssha2192fsimple_detached_sign, keypair as sphincssha2192fsimple_keypair,
    open as sphincssha2192fsimple_open, public_key_bytes as sphincssha2192fsimple_public_key_bytes,
    secret_key_bytes as sphincssha2192fsimple_secret_key_bytes, sign as sphincssha2192fsimple_sign,
    signature_bytes as sphincssha2192fsimple_signature_bytes,
    verify_detached_signature as sphincssha2192fsimple_verify_detached_signature,
};
pub use crate::sphincssha2192ssimple::{
    detached_sign as sphincssha2192ssimple_detached_sign, keypair as sphincssha2192ssimple_keypair,
    open as sphincssha2192ssimple_open, public_key_bytes as sphincssha2192ssimple_public_key_bytes,
    secret_key_bytes as sphincssha2192ssimple_secret_key_bytes, sign as sphincssha2192ssimple_sign,
    signature_bytes as sphincssha2192ssimple_signature_bytes,
    verify_detached_signature as sphincssha2192ssimple_verify_detached_signature,
};
pub use crate::sphincssha2256fsimple::{
    detached_sign as sphincssha2256fsimple_detached_sign, keypair as sphincssha2256fsimple_keypair,
    open as sphincssha2256fsimple_open, public_key_bytes as sphincssha2256fsimple_public_key_bytes,
    secret_key_bytes as sphincssha2256fsimple_secret_key_bytes, sign as sphincssha2256fsimple_sign,
    signature_bytes as sphincssha2256fsimple_signature_bytes,
    verify_detached_signature as sphincssha2256fsimple_verify_detached_signature,
};
pub use crate::sphincssha2256ssimple::{
    detached_sign as sphincssha2256ssimple_detached_sign, keypair as sphincssha2256ssimple_keypair,
    open as sphincssha2256ssimple_open, public_key_bytes as sphincssha2256ssimple_public_key_bytes,
    secret_key_bytes as sphincssha2256ssimple_secret_key_bytes, sign as sphincssha2256ssimple_sign,
    signature_bytes as sphincssha2256ssimple_signature_bytes,
    verify_detached_signature as sphincssha2256ssimple_verify_detached_signature,
};
pub use crate::sphincsshake128fsimple::{
    detached_sign as sphincsshake128fsimple_detached_sign,
    keypair as sphincsshake128fsimple_keypair, open as sphincsshake128fsimple_open,
    public_key_bytes as sphincsshake128fsimple_public_key_bytes,
    secret_key_bytes as sphincsshake128fsimple_secret_key_bytes,
    sign as sphincsshake128fsimple_sign, signature_bytes as sphincsshake128fsimple_signature_bytes,
    verify_detached_signature as sphincsshake128fsimple_verify_detached_signature,
};
pub use crate::sphincsshake128ssimple::{
    detached_sign as sphincsshake128ssimple_detached_sign,
    keypair as sphincsshake128ssimple_keypair, open as sphincsshake128ssimple_open,
    public_key_bytes as sphincsshake128ssimple_public_key_bytes,
    secret_key_bytes as sphincsshake128ssimple_secret_key_bytes,
    sign as sphincsshake128ssimple_sign, signature_bytes as sphincsshake128ssimple_signature_bytes,
    verify_detached_signature as sphincsshake128ssimple_verify_detached_signature,
};
pub use crate::sphincsshake192fsimple::{
    detached_sign as sphincsshake192fsimple_detached_sign,
    keypair as sphincsshake192fsimple_keypair, open as sphincsshake192fsimple_open,
    public_key_bytes as sphincsshake192fsimple_public_key_bytes,
    secret_key_bytes as sphincsshake192fsimple_secret_key_bytes,
    sign as sphincsshake192fsimple_sign, signature_bytes as sphincsshake192fsimple_signature_bytes,
    verify_detached_signature as sphincsshake192fsimple_verify_detached_signature,
};
pub use crate::sphincsshake192ssimple::{
    detached_sign as sphincsshake192ssimple_detached_sign,
    keypair as sphincsshake192ssimple_keypair, open as sphincsshake192ssimple_open,
    public_key_bytes as sphincsshake192ssimple_public_key_bytes,
    secret_key_bytes as sphincsshake192ssimple_secret_key_bytes,
    sign as sphincsshake192ssimple_sign, signature_bytes as sphincsshake192ssimple_signature_bytes,
    verify_detached_signature as sphincsshake192ssimple_verify_detached_signature,
};
pub use crate::sphincsshake256fsimple::{
    detached_sign as sphincsshake256fsimple_detached_sign,
    keypair as sphincsshake256fsimple_keypair, open as sphincsshake256fsimple_open,
    public_key_bytes as sphincsshake256fsimple_public_key_bytes,
    secret_key_bytes as sphincsshake256fsimple_secret_key_bytes,
    sign as sphincsshake256fsimple_sign, signature_bytes as sphincsshake256fsimple_signature_bytes,
    verify_detached_signature as sphincsshake256fsimple_verify_detached_signature,
};
pub use crate::sphincsshake256ssimple::{
    detached_sign as sphincsshake256ssimple_detached_sign,
    keypair as sphincsshake256ssimple_keypair, open as sphincsshake256ssimple_open,
    public_key_bytes as sphincsshake256ssimple_public_key_bytes,
    secret_key_bytes as sphincsshake256ssimple_secret_key_bytes,
    sign as sphincsshake256ssimple_sign, signature_bytes as sphincsshake256ssimple_signature_bytes,
    verify_detached_signature as sphincsshake256ssimple_verify_detached_signature,
};