diff --git a/include/dice/config/boringssl_multialg/dice/config.h b/include/dice/config/boringssl_multialg/dice/config.h
index d8a965d..1158a1b 100644
--- a/include/dice/config/boringssl_multialg/dice/config.h
+++ b/include/dice/config/boringssl_multialg/dice/config.h
@@ -42,15 +42,22 @@
   DiceKeyAlgorithm subject_algorithm;
 } DiceContext;
 
-static inline DiceKeyAlgorithm DiceGetKeyAlgorithm(void* context,
-                                                   DicePrincipal principal) {
+static inline DiceResult DiceGetKeyAlgorithm(void* context,
+                                             DicePrincipal principal,
+                                             DiceKeyAlgorithm* alg) {
   DiceContext* c = (DiceContext*)context;
+  if (context == NULL) {
+    return kDiceResultInvalidInput;
+  }
   switch (principal) {
     case kDicePrincipalAuthority:
-      return c->authority_algorithm;
+      *alg = c->authority_algorithm;
+      break;
     case kDicePrincipalSubject:
-      return c->subject_algorithm;
+      *alg = c->subject_algorithm;
+      break;
   }
+  return kDiceResultOk;
 }
 
 #ifdef __cplusplus
diff --git a/src/boringssl_multialg_ops.c b/src/boringssl_multialg_ops.c
index 80c0903..745329e 100644
--- a/src/boringssl_multialg_ops.c
+++ b/src/boringssl_multialg_ops.c
@@ -43,7 +43,12 @@
 
 DiceResult DiceGetKeyParam(void* context, DicePrincipal principal,
                            DiceKeyParam* key_param) {
-  switch (DiceGetKeyAlgorithm(context, principal)) {
+  DiceKeyAlgorithm alg;
+  DiceResult result = DiceGetKeyAlgorithm(context, principal, &alg);
+  if (result != kDiceResultOk) {
+    return result;
+  }
+  switch (alg) {
     case kDiceKeyAlgorithmEd25519:
       key_param->profile_name = DICE_PROFILE_NAME_ED25519;
       key_param->public_key_size = 32;
@@ -80,7 +85,12 @@
     const uint8_t seed[DICE_PRIVATE_KEY_SEED_SIZE],
     uint8_t public_key[DICE_PUBLIC_KEY_BUFFER_SIZE],
     uint8_t private_key[DICE_PRIVATE_KEY_BUFFER_SIZE]) {
-  switch (DiceGetKeyAlgorithm(context, principal)) {
+  DiceKeyAlgorithm alg;
+  DiceResult result = DiceGetKeyAlgorithm(context, principal, &alg);
+  if (result != kDiceResultOk) {
+    return result;
+  }
+  switch (alg) {
     case kDiceKeyAlgorithmEd25519:
       ED25519_keypair_from_seed(public_key, private_key, seed);
       return kDiceResultOk;
@@ -101,7 +111,13 @@
 DiceResult DiceSign(void* context, const uint8_t* message, size_t message_size,
                     const uint8_t private_key[DICE_PRIVATE_KEY_BUFFER_SIZE],
                     uint8_t signature[DICE_SIGNATURE_BUFFER_SIZE]) {
-  switch (DiceGetKeyAlgorithm(context, kDicePrincipalAuthority)) {
+  DiceKeyAlgorithm alg;
+  DiceResult result =
+      DiceGetKeyAlgorithm(context, kDicePrincipalAuthority, &alg);
+  if (result != kDiceResultOk) {
+    return result;
+  }
+  switch (alg) {
     case kDiceKeyAlgorithmEd25519:
       if (1 == ED25519_sign(signature, message, message_size, private_key)) {
         return kDiceResultOk;
@@ -125,7 +141,13 @@
                       size_t message_size,
                       const uint8_t signature[DICE_SIGNATURE_BUFFER_SIZE],
                       const uint8_t public_key[DICE_PUBLIC_KEY_BUFFER_SIZE]) {
-  switch (DiceGetKeyAlgorithm(context, kDicePrincipalAuthority)) {
+  DiceKeyAlgorithm alg;
+  DiceResult result =
+      DiceGetKeyAlgorithm(context, kDicePrincipalAuthority, &alg);
+  if (result != kDiceResultOk) {
+    return result;
+  }
+  switch (alg) {
     case kDiceKeyAlgorithmEd25519:
       if (1 == ED25519_verify(message, message_size, signature, public_key)) {
         return kDiceResultOk;
diff --git a/src/cbor_multialg_op_test.cc b/src/cbor_multialg_op_test.cc
index 28886bd..8e8eadd 100644
--- a/src/cbor_multialg_op_test.cc
+++ b/src/cbor_multialg_op_test.cc
@@ -35,6 +35,17 @@
 using dice::test::KeyType_P256;
 using dice::test::KeyType_P384;
 
+TEST(DiceOpsTest, InvalidContextReturnsError) {
+  DiceStateForTest current_state = {};
+  DiceStateForTest next_state = {};
+  DiceInputValues input_values = {};
+  DiceResult result = DiceMainFlow(
+      NULL, current_state.cdi_attest, current_state.cdi_seal, &input_values,
+      sizeof(next_state.certificate), next_state.certificate,
+      &next_state.certificate_size, next_state.cdi_attest, next_state.cdi_seal);
+  EXPECT_EQ(kDiceResultInvalidInput, result);
+}
+
 TEST(DiceOpsTest, Ed25519KnownAnswerZeroInput) {
   DiceContext context{.authority_algorithm = kDiceKeyAlgorithmEd25519,
                       .subject_algorithm = kDiceKeyAlgorithmEd25519};
