1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (c) 2023, Google LLC 2*8fb009dcSAndroid Build Coastguard Worker * 3*8fb009dcSAndroid Build Coastguard Worker * Permission to use, copy, modify, and/or distribute this software for any 4*8fb009dcSAndroid Build Coastguard Worker * purpose with or without fee is hereby granted, provided that the above 5*8fb009dcSAndroid Build Coastguard Worker * copyright notice and this permission notice appear in all copies. 6*8fb009dcSAndroid Build Coastguard Worker * 7*8fb009dcSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8*8fb009dcSAndroid Build Coastguard Worker * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9*8fb009dcSAndroid Build Coastguard Worker * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10*8fb009dcSAndroid Build Coastguard Worker * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11*8fb009dcSAndroid Build Coastguard Worker * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12*8fb009dcSAndroid Build Coastguard Worker * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13*8fb009dcSAndroid Build Coastguard Worker * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 14*8fb009dcSAndroid Build Coastguard Worker 15*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H 16*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H 17*8fb009dcSAndroid Build Coastguard Worker 18*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base.h> 19*8fb009dcSAndroid Build Coastguard Worker #include <openssl/experimental/dilithium.h> 20*8fb009dcSAndroid Build Coastguard Worker 21*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 22*8fb009dcSAndroid Build Coastguard Worker extern "C" { 23*8fb009dcSAndroid Build Coastguard Worker #endif 24*8fb009dcSAndroid Build Coastguard Worker 25*8fb009dcSAndroid Build Coastguard Worker 26*8fb009dcSAndroid Build Coastguard Worker // DILITHIUM_GENERATE_KEY_ENTROPY is the number of bytes of uniformly random 27*8fb009dcSAndroid Build Coastguard Worker // entropy necessary to generate a key pair. 28*8fb009dcSAndroid Build Coastguard Worker #define DILITHIUM_GENERATE_KEY_ENTROPY 32 29*8fb009dcSAndroid Build Coastguard Worker 30*8fb009dcSAndroid Build Coastguard Worker // DILITHIUM_SIGNATURE_RANDOMIZER_BYTES is the number of bytes of uniformly 31*8fb009dcSAndroid Build Coastguard Worker // random entropy necessary to generate a signature in randomized mode. 32*8fb009dcSAndroid Build Coastguard Worker #define DILITHIUM_SIGNATURE_RANDOMIZER_BYTES 32 33*8fb009dcSAndroid Build Coastguard Worker 34*8fb009dcSAndroid Build Coastguard Worker // DILITHIUM_generate_key_external_entropy generates a public/private key pair 35*8fb009dcSAndroid Build Coastguard Worker // using the given seed, writes the encoded public key to 36*8fb009dcSAndroid Build Coastguard Worker // |out_encoded_public_key| and sets |out_private_key| to the private key, 37*8fb009dcSAndroid Build Coastguard Worker // returning 1 on success and 0 on failure. Returns 1 on success and 0 on 38*8fb009dcSAndroid Build Coastguard Worker // failure. 39*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int DILITHIUM_generate_key_external_entropy( 40*8fb009dcSAndroid Build Coastguard Worker uint8_t out_encoded_public_key[DILITHIUM_PUBLIC_KEY_BYTES], 41*8fb009dcSAndroid Build Coastguard Worker struct DILITHIUM_private_key *out_private_key, 42*8fb009dcSAndroid Build Coastguard Worker const uint8_t entropy[DILITHIUM_GENERATE_KEY_ENTROPY]); 43*8fb009dcSAndroid Build Coastguard Worker 44*8fb009dcSAndroid Build Coastguard Worker // DILITHIUM_sign_deterministic generates a signature for the message |msg| of 45*8fb009dcSAndroid Build Coastguard Worker // length |msg_len| using |private_key| following the deterministic algorithm, 46*8fb009dcSAndroid Build Coastguard Worker // and writes the encoded signature to |out_encoded_signature|. Returns 1 on 47*8fb009dcSAndroid Build Coastguard Worker // success and 0 on failure. 48*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int DILITHIUM_sign_deterministic( 49*8fb009dcSAndroid Build Coastguard Worker uint8_t out_encoded_signature[DILITHIUM_SIGNATURE_BYTES], 50*8fb009dcSAndroid Build Coastguard Worker const struct DILITHIUM_private_key *private_key, const uint8_t *msg, 51*8fb009dcSAndroid Build Coastguard Worker size_t msg_len); 52*8fb009dcSAndroid Build Coastguard Worker 53*8fb009dcSAndroid Build Coastguard Worker 54*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 55*8fb009dcSAndroid Build Coastguard Worker } // extern C 56*8fb009dcSAndroid Build Coastguard Worker #endif 57*8fb009dcSAndroid Build Coastguard Worker 58*8fb009dcSAndroid Build Coastguard Worker #endif // OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H 59