anchor.diff:      
   valid_key_sha_alg_ec(OID, Alg) -> 
       Curve = public_key:oid2ssh_curvename(OID),
  -    Alg == list_to_atom("ecdsa-sha2-" ++ binary_to_list(Curve)).
  +    try Alg == list_to_existing_atom("ecdsa-sha2-" ++ binary_to_list(Curve))
  +    catch
  +        _:_ -> false
  +    end.
       
   
   -dialyzer({no_match, public_algo/1}).
  
positive.code: public_algo({ed_pub, ed448,_}) -> 'ssh-ed448';
  public_algo({#'ECPoint'{},{namedCurve,OID}}) -> 
      Curve = public_key:oid2ssh_curvename(OID),
      list_to_atom("ecdsa-sha2-" ++ binary_to_list(Curve)).
  
  
  sha('ssh-rsa') -> sha;
  
negative.code: 
  
  select_all(CL, SL) when length(CL) + length(SL) < ?MAX_NUM_ALGORITHMS ->
      %% algortihms only used by client
      %% NOTE: an algorithm occuring more than once in CL will still be present
      %%       in CLonly. This is not a problem for nice clients.
      CLonly = CL -- SL,
  
      %% algorithms used by client and server (client pref)
      lists:foldr(fun(ALG, Acc) -> 
                        try [list_to_existing_atom(ALG) | Acc]
                        catch
                            %% If an malicious client uses the same non-existing algorithm twice,
                            %% we will end up here
                            _:_ -> Acc
                        end
                end, [], (CL -- CLonly));
  
  select_all(CL, SL) ->
      Error = lists:concat(["Received too many algorithms (",length(CL),"+",length(SL)," >= ",?MAX_NUM_ALGORITHMS,")."]),
      ?DISCONNECT(?SSH_DISCONNECT_PROTOCOL_ERROR,
  