Handle NULL arguments in some i2d_* functions.

Prior to 5d7c2f8b1d, these i2d functions would fail, rather than crash,
if passed a NULL argument. While we don't generally have much truck with
the idea that functions should be expected to handle NULL arguments
where not documented, it seems that a fair amount of code is depending
on this.

Change-Id: I928b35533aa2a7beed57d7f58ba44681a8eb05c6
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/42464
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/crypto/evp/evp_asn1.c b/crypto/evp/evp_asn1.c
index 4d13d59..2f3e115 100644
--- a/crypto/evp/evp_asn1.c
+++ b/crypto/evp/evp_asn1.c
@@ -407,6 +407,10 @@
 }
 
 int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp) {
+  if (pkey == NULL) {
+    return 0;
+  }
+
   CBB cbb;
   if (!CBB_init(&cbb, 128) ||
       !EVP_marshal_public_key(&cbb, pkey)) {
@@ -440,6 +444,10 @@
 }
 
 int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp) {
+  if (rsa == NULL) {
+    return 0;
+  }
+
   int ret = -1;
   EVP_PKEY *pkey = EVP_PKEY_new();
   if (pkey == NULL ||
@@ -478,6 +486,10 @@
 }
 
 int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp) {
+  if (dsa == NULL) {
+    return 0;
+  }
+
   int ret = -1;
   EVP_PKEY *pkey = EVP_PKEY_new();
   if (pkey == NULL ||
@@ -516,6 +528,10 @@
 }
 
 int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp) {
+  if (ec_key == NULL) {
+    return 0;
+  }
+
   int ret = -1;
   EVP_PKEY *pkey = EVP_PKEY_new();
   if (pkey == NULL ||