1#![forbid(unsafe_code)]
55
56pub use crypto_core as core;
57
58#[cfg(feature = "jwk")]
60pub use envelopes_jwk as jwk;
61
62#[cfg(feature = "jwk-multikey")]
64pub use envelopes_jwk_multikey as jwk_multikey;
65
66#[cfg(feature = "dispatch")]
69pub mod dispatch {
70 pub use crypto_dispatch::{
71 aead_decrypt, aead_encrypt, derive_shared_secret, generate_keypair,
72 generate_multikey_keypair, hash_digest, kem_decapsulate, kem_encapsulate, mac_authenticate,
73 mac_verify, public_key_to_multikey, sign, validate_verification_method_multikey, verify,
74 AeadParams, AlgorithmError, GeneratedKeypair, MacParams,
75 };
76}
77
78#[cfg(feature = "signer")]
81pub mod signer {
82 pub use crypto_signer::{
83 DispatchSigner, DispatchVerifier, Signer, SignerError, SignerFailureKind, Verifier,
84 VerifierError, VerifierFailureKind,
85 };
86}
87
88#[cfg(feature = "aes")]
91pub mod aes {
92 pub use crypto_aes256_gcm::{
93 decrypt, encrypt, Aes256GcmKey, Aes256GcmNonce, CiphertextWithTag, DecryptRequest,
94 EncryptRequest, AES_256_GCM_KEY_LENGTH, AES_256_GCM_NONCE_LENGTH, AES_256_GCM_TAG_LENGTH,
95 };
96}
97
98#[cfg(feature = "aes-kw")]
100pub mod aes_kw {
101 pub use crypto_aes_kw::{
102 unwrap_key, wrap_key, Aes256KwKek, AesKwKeyData, AesKwWrappedKey, AES_256_KW_KEK_LENGTH,
103 AES_KW_BLOCK_LENGTH, AES_KW_INTEGRITY_CHECK_LENGTH, AES_KW_MAX_KEY_DATA_LENGTH,
104 AES_KW_MIN_KEY_DATA_LENGTH, AES_KW_MIN_WRAPPED_KEY_LENGTH,
105 };
106}
107
108#[cfg(feature = "aes-gcm-siv")]
111pub mod aes_gcm_siv {
112 pub use crypto_aes256_gcm_siv::{
113 decrypt, encrypt, Aes256GcmSivKey, Aes256GcmSivNonce, CiphertextWithTag, DecryptRequest,
114 EncryptRequest, AES_256_GCM_SIV_KEY_LENGTH, AES_256_GCM_SIV_NONCE_LENGTH,
115 AES_256_GCM_SIV_TAG_LENGTH,
116 };
117}
118
119#[cfg(feature = "chacha20-poly1305")]
122pub mod chacha20_poly1305 {
123 pub use crypto_chacha20_poly1305::{
124 decrypt, decrypt_xchacha20_poly1305, encrypt, encrypt_xchacha20_poly1305,
125 ChaCha20Poly1305Key, ChaCha20Poly1305Nonce, CiphertextWithTag, DecryptRequest,
126 EncryptRequest, XChaCha20Poly1305DecryptRequest, XChaCha20Poly1305EncryptRequest,
127 XChaCha20Poly1305Nonce, CHACHA20_POLY1305_KEY_LENGTH, CHACHA20_POLY1305_NONCE_LENGTH,
128 CHACHA20_POLY1305_TAG_LENGTH, XCHACHA20_POLY1305_NONCE_LENGTH,
129 };
130}
131
132#[cfg(feature = "argon2id")]
135pub mod argon2id {
136 pub use crypto_argon2id::{
137 derive_key, derive_key_for_version, resolve_mobile_profile_for_unlock,
138 resolve_profile_params_for_platform, resolve_profile_params_with_caps, Argon2Caps,
139 Argon2KdfVersion, Argon2ParamsProfile, Argon2PlatformClass, Argon2Profile, Argon2Salt,
140 Argon2Secret, Argon2idDerivedKey, DeriveKeyRequest, ARGON2ID_DERIVED_KEY_LENGTH,
141 ARGON2ID_SALT_MAX_LENGTH, ARGON2ID_SALT_MIN_LENGTH, ARGON2ID_V1_LANES,
142 ARGON2ID_V1_MEMORY_COST_KIB, ARGON2ID_V1_TIME_COST, ARGON2ID_V2_LANES,
143 ARGON2ID_V2_MEMORY_COST_KIB, ARGON2ID_V2_TIME_COST,
144 };
145}
146
147#[cfg(feature = "constant-time")]
149pub mod constant_time {
150 pub use crypto_constant_time::{ct_eq, ct_eq_fixed, require_ct_eq};
151}
152
153#[cfg(feature = "csprng")]
156pub mod csprng {
157 pub use crypto_csprng::{
158 generate_aead_nonce_12, generate_argon2_salt_16, generate_argon2_salt_32, generate_bytes,
159 AeadNonce12, Argon2Salt16, Argon2Salt32, OsSecureRandom, RandomBytes, SecureRandom,
160 AEAD_NONCE_12_LENGTH, ARGON2_SALT_16_LENGTH, ARGON2_SALT_32_LENGTH,
161 };
162}
163
164#[cfg(feature = "ed25519")]
166pub mod ed25519 {
167 pub use crypto_ed25519::{
168 assert_public_key, decode_public_key, encode_public_key, generate_ed25519_keypair,
169 generate_ed25519_keypair_from_seed, sign_ed25519, verify_ed25519,
170 };
171}
172
173#[cfg(feature = "hmac")]
175pub mod hmac {
176 pub use crypto_hmac::{
177 authenticate, verify, HmacKey, HmacTag, HMAC_MAX_KEY_LENGTH, HMAC_SHA256_TAG_LENGTH,
178 HMAC_SHA512_TAG_LENGTH,
179 };
180}
181
182#[cfg(feature = "p256")]
185pub mod p256 {
186 pub use crypto_p256::{
187 compress_public_key, decode_se_handle, decompress_public_key, derive_p256_shared_secret,
188 encode_se_handle, generate_p256_keypair, generate_p256_keypair_from_secret_key,
189 p256_ecdsa_der_to_jose_signature, p256_ecdsa_der_to_jose_signature_permissive,
190 p256_ecdsa_jose_signature_to_der, sign_p256_der_prehash, verify_p256_der_prehash,
191 P256_ECDSA_JOSE_SIGNATURE_LEN, SE_HANDLE_PREFIX,
192 };
193}
194
195#[cfg(feature = "p384")]
198pub mod p384 {
199 pub use crypto_p384::{
200 compress_p384, decompress_p384, generate_p384_keypair,
201 generate_p384_keypair_from_secret_key, sign_p384_der_prehash, verify_p384_der_prehash,
202 P384_PUBLIC_KEY_COMPRESSED_LEN, P384_PUBLIC_KEY_RAW_LEN, P384_PUBLIC_KEY_UNCOMPRESSED_LEN,
203 P384_SECRET_KEY_LEN, P384_SIGNATURE_DER_MAX_LEN,
204 };
205}
206
207#[cfg(feature = "p521")]
210pub mod p521 {
211 pub use crypto_p521::{
212 compress_p521, decompress_p521, generate_p521_keypair,
213 generate_p521_keypair_from_secret_key, sign_p521_der_prehash, verify_p521_der_prehash,
214 P521_PUBLIC_KEY_COMPRESSED_LEN, P521_PUBLIC_KEY_RAW_LEN, P521_PUBLIC_KEY_UNCOMPRESSED_LEN,
215 P521_SECRET_KEY_LEN, P521_SIGNATURE_DER_MAX_LEN,
216 };
217}
218
219#[cfg(feature = "pbkdf2")]
221pub mod pbkdf2 {
222 pub use crypto_pbkdf2::{
223 derive_key, Pbkdf2Iterations, Pbkdf2Output, Pbkdf2Password, Pbkdf2Prf, Pbkdf2Request,
224 Pbkdf2Salt, PBKDF2_MAX_OUTPUT_LENGTH, PBKDF2_MAX_PASSWORD_LENGTH, PBKDF2_MAX_SALT_LENGTH,
225 PBKDF2_MIN_ITERATIONS, PBKDF2_MIN_OUTPUT_LENGTH, PBKDF2_MIN_PASSWORD_LENGTH,
226 PBKDF2_MIN_SALT_LENGTH,
227 };
228}
229
230#[cfg(feature = "rsa")]
232pub mod rsa {
233 pub use crypto_rsa::{
234 verify_rsa_pkcs1v15, verify_rsa_pss, RsaHash, RsaPssParams, RsaPublicKeyDerEncoding,
235 RSA_MAX_MODULUS_BITS, RSA_MIN_MODULUS_BITS, RSA_PUBLIC_KEY_DER_MAX_LEN,
236 RSA_SIGNATURE_MAX_LEN,
237 };
238}
239
240#[cfg(feature = "secp256k1")]
243pub mod secp256k1 {
244 pub use crypto_secp256k1::{
245 decode_bip340_schnorr_public_key, decode_public_key, decompress_public_key,
246 derive_bip340_schnorr_public_key, encode_bip340_schnorr_public_key, encode_public_key,
247 generate_secp256k1_keypair, generate_secp256k1_keypair_from_secret_key,
248 secp256k1_ecdsa_der_to_jose_signature, secp256k1_ecdsa_der_to_jose_signature_permissive,
249 secp256k1_ecdsa_jose_signature_to_der, sign_bip340_schnorr, sign_secp256k1,
250 verify_bip340_schnorr, verify_secp256k1, BIP340_SCHNORR_AUX_RAND_LEN,
251 BIP340_SCHNORR_MESSAGE_LEN, BIP340_SCHNORR_PUBLIC_KEY_LEN, BIP340_SCHNORR_SIGNATURE_LEN,
252 SECP256K1_ECDSA_JOSE_SIGNATURE_LEN, SECP256K1_SECRET_KEY_LEN,
253 };
254}
255
256#[cfg(feature = "x25519")]
258pub mod x25519 {
259 pub use crypto_x25519::{
260 decode_public_key, derive_x25519_shared_secret, encode_public_key, generate_x25519_keypair,
261 generate_x25519_keypair_from_seed,
262 };
263}
264
265#[cfg(feature = "x-wing")]
267pub mod x_wing {
268 pub use crypto_x_wing::{
269 generate_x_wing_1024_keypair, generate_x_wing_1024_keypair_derand,
270 generate_x_wing_768_keypair, generate_x_wing_768_keypair_derand, x_wing_1024_decapsulate,
271 x_wing_1024_encapsulate, x_wing_1024_encapsulate_derand, x_wing_768_decapsulate,
272 x_wing_768_encapsulate, x_wing_768_encapsulate_derand, X_WING_1024_CIPHERTEXT_LEN,
273 X_WING_1024_PUBLIC_KEY_LEN, X_WING_768_CIPHERTEXT_LEN, X_WING_768_PUBLIC_KEY_LEN,
274 X_WING_ENCAPS_SEED_LEN, X_WING_SECRET_KEY_LEN, X_WING_SHARED_SECRET_LEN,
275 };
276}
277
278#[cfg(feature = "hpke")]
280pub mod hpke {
281 pub use crypto_hpke::{
282 open_base, seal_base, HpkeError, HpkeOpenOutput, HpkeOpenRequest, HpkePrivateKeyBytes,
283 HpkeSealOutput, HpkeSealRequest, HpkeSuite, HPKE_AEAD_AES_256_GCM,
284 HPKE_AEAD_CHACHA20_POLY1305, HPKE_AEAD_TAG_LEN, HPKE_ENCAPSULATED_KEY_MAX_LEN,
285 HPKE_KDF_HKDF_SHA256, HPKE_KEM_DHKEM_P256_HKDF_SHA256, HPKE_KEM_DHKEM_X25519_HKDF_SHA256,
286 HPKE_P256_PRIVATE_KEY_LEN, HPKE_P256_PUBLIC_KEY_LEN, HPKE_X25519_PRIVATE_KEY_LEN,
287 HPKE_X25519_PUBLIC_KEY_LEN,
288 };
289}
290
291#[cfg(feature = "hkdf")]
294pub mod hkdf {
295 pub use crypto_hkdf::{
296 derive, derive_domain_key_32, DeriveRequest, DomainKeyPurpose, DomainTag, HkdfInfo,
297 HkdfInputKeyMaterial, HkdfOutput, HkdfSalt, HkdfSuite,
298 };
299}
300
301#[cfg(feature = "ml-dsa-44")]
304pub mod ml_dsa_44 {
305 pub use crypto_ml_dsa_44::{
306 decode_public_key, encode_public_key, generate_ml_dsa_44_keypair,
307 generate_ml_dsa_44_keypair_from_seed, sign_ml_dsa_44, verify_ml_dsa_44,
308 };
309}
310
311#[cfg(feature = "ml-dsa-65")]
314pub mod ml_dsa_65 {
315 pub use crypto_ml_dsa_65::{
316 decode_public_key, encode_public_key, generate_ml_dsa_65_keypair,
317 generate_ml_dsa_65_keypair_from_seed, sign_ml_dsa_65, verify_ml_dsa_65,
318 };
319}
320
321#[cfg(feature = "ml-dsa-87")]
324pub mod ml_dsa_87 {
325 pub use crypto_ml_dsa_87::{
326 decode_public_key, encode_public_key, generate_ml_dsa_87_keypair,
327 generate_ml_dsa_87_keypair_from_seed, sign_ml_dsa_87, verify_ml_dsa_87,
328 };
329}
330
331#[cfg(feature = "slh-dsa")]
333pub mod slh_dsa {
334 pub use crypto_slh_dsa::{
335 decode_slh_dsa_sha2_128s_public_key, derive_slh_dsa_sha2_128s_keypair,
336 encode_slh_dsa_sha2_128s_public_key, generate_slh_dsa_sha2_128s_keypair,
337 sign_slh_dsa_sha2_128s, verify_slh_dsa_sha2_128s, SLH_DSA_SHA2_128S_KEYGEN_SEED_LEN,
338 SLH_DSA_SHA2_128S_PUBLIC_KEY_LEN, SLH_DSA_SHA2_128S_SECRET_KEY_LEN,
339 SLH_DSA_SHA2_128S_SIGNATURE_LEN,
340 };
341}
342
343#[cfg(feature = "ml-kem-512")]
346pub mod ml_kem_512 {
347 pub use crypto_ml_kem_512::{
348 generate_ml_kem_512_keypair, generate_ml_kem_512_keypair_from_seed, ml_kem_512_decapsulate,
349 ml_kem_512_encapsulate, ml_kem_512_encapsulate_derand,
350 };
351}
352
353#[cfg(feature = "ml-kem-768")]
356pub mod ml_kem_768 {
357 pub use crypto_ml_kem_768::{
358 generate_ml_kem_768_keypair, generate_ml_kem_768_keypair_from_seed, ml_kem_768_decapsulate,
359 ml_kem_768_encapsulate, ml_kem_768_encapsulate_derand,
360 };
361}
362
363#[cfg(feature = "ml-kem-1024")]
366pub mod ml_kem_1024 {
367 pub use crypto_ml_kem_1024::{
368 generate_ml_kem_1024_keypair, generate_ml_kem_1024_keypair_from_seed,
369 ml_kem_1024_decapsulate, ml_kem_1024_encapsulate, ml_kem_1024_encapsulate_derand,
370 };
371}
372
373#[cfg(feature = "sha2")]
375pub mod sha2 {
376 pub use crypto_sha2::{
377 digest_sha2_384, digest_sha2_512, Sha2_384Digest, Sha2_512Digest, SHA2_384_DIGEST_LENGTH,
378 SHA2_512_DIGEST_LENGTH,
379 };
380 pub use crypto_sha2_256::{digest, Sha2_256Digest, SHA2_256_DIGEST_LENGTH};
381}
382
383#[cfg(feature = "sha3")]
385pub mod sha3 {
386 pub use crypto_sha3::{
387 digest_sha3_224, digest_sha3_384, digest_sha3_512, Sha3_224Digest, Sha3_384Digest,
388 Sha3_512Digest, SHA3_224_DIGEST_LENGTH, SHA3_384_DIGEST_LENGTH, SHA3_512_DIGEST_LENGTH,
389 };
390 pub use crypto_sha3_256::{digest, Sha3_256Digest, SHA3_256_DIGEST_LENGTH};
391}
392
393#[cfg(feature = "codec")]
396pub mod codec {
397 #[cfg(feature = "codec-base64")]
399 pub mod base64 {
400 pub use codec_base64::{base64_to_bytes, bytes_to_base64, Base64Error};
401 }
402
403 #[cfg(feature = "codec-base64url")]
405 pub mod base64url {
406 pub use codec_base64url::{
407 base64url_bytes_to_bytes, base64url_to_bytes, bytes_to_base64url, Base64UrlError,
408 };
409 }
410
411 #[cfg(feature = "codec-cbor")]
414 pub mod cbor {
415 pub use codec_cbor::{
416 compute_cid_dag_cbor, dag_cbor_multihash, decode_dag_cbor, encode_dag_cbor,
417 is_valid_cid_string, sha2_256_content_hash, try_parse_cid, verify_dag_cbor_cid,
418 CborError, CborValue, ContentHash, DagCborMultihash, DAG_CBOR_CODEC,
419 };
420 }
421
422 #[cfg(feature = "codec-jcs")]
424 pub mod jcs {
425 pub use codec_jcs::{canonicalize_json, JcsError};
426 }
427
428 #[cfg(feature = "codec-multibase")]
430 pub mod multibase {
431 pub use codec_multibase::{
432 base58btc_decode, base58btc_encode, bytes_to_multibase58btc,
433 bytes_to_multibase_base64url, multibase_to_bytes, Base58Error, MultibaseError,
434 };
435 }
436
437 #[cfg(feature = "codec-multicodec")]
439 pub mod multicodec {
440 pub use codec_multicodec::{
441 lookup_codec_prefix, strip_codec_prefix, CodecLookupResult, CodecSpec, MULTICODEC_TABLE,
442 };
443 }
444
445 #[cfg(feature = "codec-multikey")]
447 pub mod multikey {
448 pub use codec_multikey::{
449 binding_type_matches_codec, encode_multikey, parse_multikey, validate_key_binding,
450 KeyBindingInput, MultikeyError, ParsedMultikey,
451 };
452 }
453}