1// cc_fuzz_target test for public key parsing. 2 3#include <stddef.h> 4#include <stdio.h> 5#include <stdint.h> 6#include <stdlib.h> 7#include <string.h> 8 9extern "C" { 10 11#include "includes.h" 12#include "sshkey.h" 13#include "ssherr.h" 14 15static struct sshkey *generate_or_die(int type, unsigned bits) { 16 int r; 17 struct sshkey *ret; 18 if ((r = sshkey_generate(type, bits, &ret)) != 0) { 19 fprintf(stderr, "generate(%d, %u): %s", type, bits, ssh_err(r)); 20 abort(); 21 } 22 return ret; 23} 24 25int LLVMFuzzerTestOneInput(const uint8_t* sig, size_t slen) 26{ 27#ifdef WITH_OPENSSL 28 static struct sshkey *rsa = generate_or_die(KEY_RSA, 2048); 29 static struct sshkey *dsa = generate_or_die(KEY_DSA, 1024); 30 static struct sshkey *ecdsa256 = generate_or_die(KEY_ECDSA, 256); 31 static struct sshkey *ecdsa384 = generate_or_die(KEY_ECDSA, 384); 32 static struct sshkey *ecdsa521 = generate_or_die(KEY_ECDSA, 521); 33#endif 34 static struct sshkey *ed25519 = generate_or_die(KEY_ED25519, 0); 35 static const char *data = "If everyone started announcing his nose had " 36 "run away, I don���t know how it would all end"; 37 static const size_t dlen = strlen(data); 38 39#ifdef WITH_OPENSSL 40 sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, NULL, 0); 41 sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, NULL, 0); 42 sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, NULL, 0); 43 sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, NULL, 0); 44 sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, NULL, 0); 45#endif 46 sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, NULL, 0); 47 return 0; 48} 49 50} // extern 51