14f52dfbbSDag-Erling Smørgrav // cc_fuzz_target test for public key parsing.
24f52dfbbSDag-Erling Smørgrav 
34f52dfbbSDag-Erling Smørgrav #include <stddef.h>
44f52dfbbSDag-Erling Smørgrav #include <stdio.h>
54f52dfbbSDag-Erling Smørgrav #include <stdint.h>
64f52dfbbSDag-Erling Smørgrav #include <stdlib.h>
74f52dfbbSDag-Erling Smørgrav #include <string.h>
84f52dfbbSDag-Erling Smørgrav 
94f52dfbbSDag-Erling Smørgrav extern "C" {
104f52dfbbSDag-Erling Smørgrav 
114f52dfbbSDag-Erling Smørgrav #include "includes.h"
124f52dfbbSDag-Erling Smørgrav #include "sshkey.h"
134f52dfbbSDag-Erling Smørgrav #include "ssherr.h"
144f52dfbbSDag-Erling Smørgrav 
generate_or_die(int type,unsigned bits)154f52dfbbSDag-Erling Smørgrav static struct sshkey *generate_or_die(int type, unsigned bits) {
164f52dfbbSDag-Erling Smørgrav   int r;
174f52dfbbSDag-Erling Smørgrav   struct sshkey *ret;
184f52dfbbSDag-Erling Smørgrav   if ((r = sshkey_generate(type, bits, &ret)) != 0) {
194f52dfbbSDag-Erling Smørgrav     fprintf(stderr, "generate(%d, %u): %s", type, bits, ssh_err(r));
204f52dfbbSDag-Erling Smørgrav     abort();
214f52dfbbSDag-Erling Smørgrav   }
224f52dfbbSDag-Erling Smørgrav   return ret;
234f52dfbbSDag-Erling Smørgrav }
244f52dfbbSDag-Erling Smørgrav 
LLVMFuzzerTestOneInput(const uint8_t * sig,size_t slen)254f52dfbbSDag-Erling Smørgrav int LLVMFuzzerTestOneInput(const uint8_t* sig, size_t slen)
264f52dfbbSDag-Erling Smørgrav {
274f52dfbbSDag-Erling Smørgrav #ifdef WITH_OPENSSL
284f52dfbbSDag-Erling Smørgrav   static struct sshkey *rsa = generate_or_die(KEY_RSA, 2048);
294f52dfbbSDag-Erling Smørgrav   static struct sshkey *dsa = generate_or_die(KEY_DSA, 1024);
304f52dfbbSDag-Erling Smørgrav   static struct sshkey *ecdsa256 = generate_or_die(KEY_ECDSA, 256);
314f52dfbbSDag-Erling Smørgrav   static struct sshkey *ecdsa384 = generate_or_die(KEY_ECDSA, 384);
324f52dfbbSDag-Erling Smørgrav   static struct sshkey *ecdsa521 = generate_or_die(KEY_ECDSA, 521);
334f52dfbbSDag-Erling Smørgrav #endif
34*19261079SEd Maste   struct sshkey_sig_details *details = NULL;
354f52dfbbSDag-Erling Smørgrav   static struct sshkey *ed25519 = generate_or_die(KEY_ED25519, 0);
364f52dfbbSDag-Erling Smørgrav   static const char *data = "If everyone started announcing his nose had "
374f52dfbbSDag-Erling Smørgrav       "run away, I don’t know how it would all end";
384f52dfbbSDag-Erling Smørgrav   static const size_t dlen = strlen(data);
394f52dfbbSDag-Erling Smørgrav 
404f52dfbbSDag-Erling Smørgrav #ifdef WITH_OPENSSL
41*19261079SEd Maste   sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
42*19261079SEd Maste   sshkey_sig_details_free(details);
43*19261079SEd Maste   details = NULL;
44*19261079SEd Maste   sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
45*19261079SEd Maste   sshkey_sig_details_free(details);
46*19261079SEd Maste   details = NULL;
47*19261079SEd Maste   sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
48*19261079SEd Maste   sshkey_sig_details_free(details);
49*19261079SEd Maste   details = NULL;
50*19261079SEd Maste   sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
51*19261079SEd Maste   sshkey_sig_details_free(details);
52*19261079SEd Maste   details = NULL;
53*19261079SEd Maste   sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
54*19261079SEd Maste   sshkey_sig_details_free(details);
55*19261079SEd Maste   details = NULL;
564f52dfbbSDag-Erling Smørgrav #endif
57*19261079SEd Maste   sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, NULL, 0, &details);
58*19261079SEd Maste   sshkey_sig_details_free(details);
594f52dfbbSDag-Erling Smørgrav   return 0;
604f52dfbbSDag-Erling Smørgrav }
614f52dfbbSDag-Erling Smørgrav 
624f52dfbbSDag-Erling Smørgrav } // extern
63