File 3733-crypto-Remove-helper-notsup_to_error-from-crypto.erl.patch of Package erlang

From 8193cc9ff1fe1afb6f91c15725de90122dead6a5 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Thu, 24 Aug 2023 14:15:09 +0200
Subject: [PATCH 3/3] crypto: Remove helper notsup_to_error from crypto.erl

and instead raise notsup exceptions directly from NIFs.

Just to make the crypto.erl code easier to read.
---
 lib/crypto/c_src/common.h |  3 ++-
 lib/crypto/c_src/engine.c | 30 ++++++++++++------------
 lib/crypto/c_src/hash.c   |  4 ++--
 lib/crypto/c_src/srp.c    |  6 ++---
 lib/crypto/src/crypto.erl | 49 ++++++++++++++-------------------------
 5 files changed, 40 insertions(+), 52 deletions(-)

diff --git a/lib/crypto/c_src/common.h b/lib/crypto/c_src/common.h
index 5da20fd0c8..b8ce47b704 100644
--- a/lib/crypto/c_src/common.h
+++ b/lib/crypto/c_src/common.h
@@ -39,13 +39,14 @@
 /* All nif functions return a valid value or throws an exception */
 ERL_NIF_TERM raise_exception(ErlNifEnv* env, ERL_NIF_TERM id, int arg_num, char* explanation, char* file, int Line);
 
-
 #define EXCP_ERROR(Env,  Str)           raise_exception((Env), atom_error,  -1,       (Str), __FILE__, __LINE__)
 #define EXCP_NOTSUP(Env,  Str)          raise_exception((Env), atom_notsup, -1,       (Str), __FILE__, __LINE__)
 #define EXCP_ERROR_N(Env, ArgNum, Str)  raise_exception((Env), atom_error,  (ArgNum), (Str), __FILE__, __LINE__)
 #define EXCP_NOTSUP_N(Env, ArgNum, Str) raise_exception((Env), atom_notsup, (ArgNum), (Str), __FILE__, __LINE__)
 #define EXCP_BADARG_N(Env, ArgNum, Str) raise_exception((Env), atom_badarg, (ArgNum), (Str), __FILE__, __LINE__)
 
+#define RAISE_NOTSUP(Env) enif_raise_exception((Env), atom_notsup)
+
 #define assign_goto(Var, Goto, CALL) {Var = (CALL); goto Goto;}
 
 #endif /* E_COMMON_H__ */
diff --git a/lib/crypto/c_src/engine.c b/lib/crypto/c_src/engine.c
index ff35ca614e..9b1c16e1ce 100644
--- a/lib/crypto/c_src/engine.c
+++ b/lib/crypto/c_src/engine.c
@@ -402,7 +402,7 @@ ERL_NIF_TERM engine_by_id_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[
     return ret;
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -427,7 +427,7 @@ ERL_NIF_TERM engine_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
     return enif_make_badarg(env);
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -463,7 +463,7 @@ ERL_NIF_TERM engine_free_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
  err:
     return enif_make_badarg(env);
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -479,7 +479,7 @@ ERL_NIF_TERM engine_load_dynamic_nif(ErlNifEnv* env, int argc, const ERL_NIF_TER
 # endif
     return atom_ok;
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -555,7 +555,7 @@ ERL_NIF_TERM engine_ctrl_cmd_strings_nif(ErlNifEnv* env, int argc, const ERL_NIF
     return ret;
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -584,7 +584,7 @@ ERL_NIF_TERM engine_add_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
     return ERROR_Atom(env, "add_engine_failed");
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -612,7 +612,7 @@ ERL_NIF_TERM engine_remove_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
  failed:
     return ERROR_Atom(env, "remove_engine_failed");
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -656,7 +656,7 @@ ERL_NIF_TERM engine_register_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
      return ERROR_Atom(env, "engine_method_not_supported");
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -684,7 +684,7 @@ ERL_NIF_TERM engine_unregister_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
     return enif_make_badarg(env);
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -724,7 +724,7 @@ ERL_NIF_TERM engine_get_first_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
     return ret;
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -778,7 +778,7 @@ ERL_NIF_TERM engine_get_next_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
     return ret;
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -817,7 +817,7 @@ ERL_NIF_TERM engine_get_id_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
     return enif_make_badarg(env);
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -856,7 +856,7 @@ ERL_NIF_TERM engine_get_name_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
     return enif_make_badarg(env);
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -907,7 +907,7 @@ ERL_NIF_TERM engine_get_all_methods_nif(ErlNifEnv* env, int argc, const ERL_NIF_
 
     return enif_make_list_from_array(env, method_array, i);
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
 
@@ -1035,6 +1035,6 @@ ERL_NIF_TERM ensure_engine_loaded_nif(ErlNifEnv* env, int argc, const ERL_NIF_TE
     return ret;
 
 #else
-    return atom_notsup;
+    return RAISE_NOTSUP(env);
 #endif
 }
diff --git a/lib/crypto/c_src/hash.c b/lib/crypto/c_src/hash.c
index b0c1a00fda..53b205090f 100644
--- a/lib/crypto/c_src/hash.c
+++ b/lib/crypto/c_src/hash.c
@@ -83,10 +83,10 @@ ERL_NIF_TERM hash_info_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
     if ((digp = get_digest_type(argv[0])) == NULL)
         return enif_make_badarg(env);
     if (DIGEST_FORBIDDEN_IN_FIPS(digp))
-        return atom_notsup;
+        return RAISE_NOTSUP(env);
 
     if ((md = digp->md.p) == NULL)
-        return atom_notsup;
+        return RAISE_NOTSUP(env);
 
     values[0] = enif_make_int(env, EVP_MD_type(md));
     values[1] = enif_make_int(env, EVP_MD_size(md));
diff --git a/lib/crypto/c_src/srp.c b/lib/crypto/c_src/srp.c
index 330c579d47..9760fdcea5 100644
--- a/lib/crypto/c_src/srp.c
+++ b/lib/crypto/c_src/srp.c
@@ -30,7 +30,7 @@ ERL_NIF_TERM srp_value_B_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
     int dlen;
     ERL_NIF_TERM ret;
 
-    if (FIPS_MODE()) return atom_notsup;
+    if (FIPS_MODE()) return RAISE_NOTSUP(env);
 
     ASSERT(argc == 5);
 
@@ -122,7 +122,7 @@ ERL_NIF_TERM srp_user_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
     int dlen;
     ERL_NIF_TERM ret;
 
-    if (FIPS_MODE()) return atom_notsup;
+    if (FIPS_MODE()) return RAISE_NOTSUP(env);
 
     ASSERT(argc == 7);
 
@@ -232,7 +232,7 @@ ERL_NIF_TERM srp_host_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
     int dlen;
     ERL_NIF_TERM ret;
 
-    if (FIPS_MODE()) return atom_notsup;
+    if (FIPS_MODE()) return RAISE_NOTSUP(env);
 
     ASSERT(argc == 5);
 
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index 1cc11aa6eb..fa64917cf8 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -632,7 +632,7 @@ pbkdf2_hmac_nif(_, _, _, _, _) -> ?nif_stub.
                                               type := integer()
                                              } .
 hash_info(Type) ->
-    notsup_to_error(hash_info_nif(Type)).
+    hash_info_nif(Type).
 
 -spec hash(Type, Data) -> Digest when Type :: hash_algorithm(),
                                       Data :: iodata(),
@@ -1733,9 +1733,8 @@ compute_key(srp, HostPublic, {UserPublic, UserPrivate},
 					HostPubBin, Prime);
 		    [S] -> S
 		end,
-    notsup_to_error(
     srp_user_secret_nif(ensure_int_as_bin(UserPrivate), Scrambler, HostPubBin,
-                          Multiplier, Generator, DerivedKey, Prime));
+                        Multiplier, Generator, DerivedKey, Prime);
 
 compute_key(srp, UserPublic, {HostPublic, HostPrivate},
 	    {host,[Verifier, Prime, Version | ScramblerArg]}) when
@@ -1747,9 +1746,8 @@ compute_key(srp, UserPublic, {HostPublic, HostPrivate},
 		    [] -> srp_scrambler(Version, UserPubBin, ensure_int_as_bin(HostPublic), Prime);
 		    [S] -> S
 		end,
-    notsup_to_error(
     srp_host_secret_nif(Verifier, ensure_int_as_bin(HostPrivate), Scrambler,
-                          UserPubBin, Prime));
+                          UserPubBin, Prime);
 
 compute_key(ecdh, Others, My, Curve) when Curve == x448 ;
                                           Curve == x25519 ->
@@ -1838,7 +1836,7 @@ mod_pow(Base, Exponent, Prime) ->
 
 -spec engine_get_all_methods() -> Result when Result :: [engine_method_type()].
 engine_get_all_methods() ->
-     notsup_to_error(engine_get_all_methods_nif()).
+    engine_get_all_methods_nif().
 
 %%----------------------------------------------------------------------
 %% Function: engine_load/3
@@ -1851,8 +1849,8 @@ engine_get_all_methods() ->
 engine_load(EngineId, PreCmds, PostCmds) when is_list(PreCmds),
                                               is_list(PostCmds) ->
     try
-        ok = notsup_to_error(engine_load_dynamic_nif()),
-        case notsup_to_error(engine_by_id_nif(ensure_bin_chardata(EngineId))) of
+        ok = engine_load_dynamic_nif(),
+        case engine_by_id_nif(ensure_bin_chardata(EngineId)) of
             {ok, Engine} ->
                 engine_load_1(Engine, PreCmds, PostCmds);
             {error, Error1} ->
@@ -1930,7 +1928,7 @@ engine_unload(Engine, _EngineMethods) ->
                                             Result :: {ok, Engine::engine_ref()} | {error, Reason::term()} .
 engine_by_id(EngineId) ->
     try
-        notsup_to_error(engine_by_id_nif(ensure_bin_chardata(EngineId)))
+        engine_by_id_nif(ensure_bin_chardata(EngineId))
     catch
        throw:Error ->
           Error
@@ -1942,7 +1940,7 @@ engine_by_id(EngineId) ->
 -spec engine_add(Engine) -> Result when Engine :: engine_ref(),
                                         Result ::  ok | {error, Reason::term()} .
 engine_add(Engine) ->
-    notsup_to_error(engine_add_nif(Engine)).
+    engine_add_nif(Engine).
 
 %%----------------------------------------------------------------------
 %% Function: engine_remove/1
@@ -1950,7 +1948,7 @@ engine_add(Engine) ->
 -spec engine_remove(Engine) -> Result when Engine :: engine_ref(),
                                            Result ::  ok | {error, Reason::term()} .
 engine_remove(Engine) ->
-    notsup_to_error(engine_remove_nif(Engine)).
+    engine_remove_nif(Engine).
 
 %%----------------------------------------------------------------------
 %% Function: engine_register/2
@@ -1988,7 +1986,7 @@ engine_unregister(Engine, EngineMethods) when is_list(EngineMethods) ->
 -spec engine_get_id(Engine) -> EngineId when Engine :: engine_ref(),
                                              EngineId :: unicode:chardata().
 engine_get_id(Engine) ->
-    notsup_to_error(engine_get_id_nif(Engine)).
+    engine_get_id_nif(Engine).
 
 %%----------------------------------------------------------------------
 %% Function: engine_get_name/1
@@ -1996,18 +1994,18 @@ engine_get_id(Engine) ->
 -spec engine_get_name(Engine) -> EngineName when Engine :: engine_ref(),
                                                  EngineName :: unicode:chardata().
 engine_get_name(Engine) ->
-    notsup_to_error(engine_get_name_nif(Engine)).
+    engine_get_name_nif(Engine).
 
 %%----------------------------------------------------------------------
 %% Function: engine_list/0
 %%----------------------------------------------------------------------
 -spec engine_list() -> Result when Result :: [EngineId::unicode:chardata()].
 engine_list() ->
-    case notsup_to_error(engine_get_first_nif()) of
+    case engine_get_first_nif() of
         {ok, <<>>} ->
             [];
         {ok, Engine} ->
-            case notsup_to_error(engine_get_id_nif(Engine)) of
+            case engine_get_id_nif(Engine) of
                 <<>> ->
                     engine_list(Engine, []);
                 EngineId ->
@@ -2016,11 +2014,11 @@ engine_list() ->
     end.
 
 engine_list(Engine0, IdList) ->
-    case notsup_to_error(engine_get_next_nif(Engine0)) of
+    case engine_get_next_nif(Engine0) of
         {ok, <<>>} ->
             lists:reverse(IdList);
         {ok, Engine1} ->
-            case notsup_to_error(engine_get_id_nif(Engine1)) of
+            case engine_get_id_nif(Engine1) of
                 <<>> ->
                     engine_list(Engine1, IdList);
                 EngineId ->
@@ -2054,8 +2052,6 @@ engine_ctrl_cmd_string(Engine, CmdName, CmdArg, Optional) ->
                                      bool_to_int(Optional)) of
         ok ->
             ok;
-        notsup ->
-            erlang:error(notsup);
         {error, Error} ->
             {error, Error}
     end.
@@ -2069,8 +2065,8 @@ engine_ctrl_cmd_string(Engine, CmdName, CmdArg, Optional) ->
 						 Result :: {ok, Engine::engine_ref()} |
 	{error, Reason::term()}.
 ensure_engine_loaded(EngineId, LibPath) ->
-    case notsup_to_error(ensure_engine_loaded_nif(ensure_bin_chardata(EngineId),
-                                                  ensure_bin_chardata(LibPath))) of
+    case ensure_engine_loaded_nif(ensure_bin_chardata(EngineId),
+                                  ensure_bin_chardata(LibPath)) of
         {ok, Engine} ->
             {ok, Engine};
         {error, Error1} ->
@@ -2190,11 +2186,6 @@ path2bin(Path) when is_list(Path) ->
 max_bytes() ->
     ?MAX_BYTES_TO_NIF.
 
-notsup_to_error(notsup) ->
-    erlang:error(notsup);
-notsup_to_error(Other) ->
-    Other.
-
 %% HASH --------------------------------------------------------------------
 hash(Hash, Data, Size, Max) when Size =< Max ->
     ?nif_call(hash_nif(Hash, Data));
@@ -2245,8 +2236,6 @@ host_srp_gen_key(Private, Verifier, Generator, Prime, Version) ->
    case srp_value_B_nif(Multiplier, Verifier, Generator, Private, Prime) of
    error ->
        error;
-   notsup ->
-       erlang:error(notsup);
    Public ->
        {Public, Private}
    end.
@@ -2545,8 +2534,6 @@ ensure_engine_loaded_nif(_EngineId, _LibPath) -> ?nif_stub.
 %% Engine internals
 engine_nif_wrapper(ok) ->
     ok;
-engine_nif_wrapper(notsup) ->
-    erlang:error(notsup);
 engine_nif_wrapper({error, Error}) ->
     throw({error, Error}).
 
-- 
2.35.3

openSUSE Build Service is sponsored by