anchor.diff:  	#alert{} = Alert ->
   	    Alert;
   	_ ->
  -	    ?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER)
  +	    throw(?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER))
       end.
   
   handle_psk_identity(_PSKIdentity, LookupFun)
  
positive.code: 		    dh_public = PublicDhKey}, PrivateKey, #'DHParameter'{} = Params, PSKLookup) ->
      PremasterSecret = premaster_secret(PublicDhKey, PrivateKey, Params),
      psk_secret(PSKIdentity, PSKLookup, PremasterSecret).
  
  premaster_secret(#client_psk_identity{identity = PSKIdentity}, PSKLookup) ->
      psk_secret(PSKIdentity, PSKLookup);
  
  premaster_secret({psk, PSKIdentity}, PSKLookup) ->
      psk_secret(PSKIdentity, PSKLookup);
  
  premaster_secret(#'ECPoint'{} = ECPoint, #'ECPrivateKey'{} = ECDHKeys) ->
      public_key:compute_key(ECPoint, ECDHKeys);
  premaster_secret(EncSecret, #'RSAPrivateKey'{} = RSAPrivateKey) ->
  
negative.code: %%     end.
  
  premaster_secret(OtherPublicDhKey, MyPrivateKey, #'DHParameter'{} = Params) ->
      try 
  	public_key:compute_key(OtherPublicDhKey, MyPrivateKey, Params)  
      catch 
  	error:computation_failed -> 
  	    throw(?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER))
      end;	   
  premaster_secret(PublicDhKey, PrivateDhKey, #server_dh_params{dh_p = Prime, dh_g = Base}) ->
      try 
  	crypto:compute_key(dh, PublicDhKey, PrivateDhKey, [Prime, Base])
      catch 
  	error:computation_failed -> 
  	    throw(?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER))
      end;
  premaster_secret(#client_srp_public{srp_a = ClientPublicKey}, ServerKey, #srp_user{prime = Prime,
  										   verifier = Verifier}) ->
      case crypto:compute_key(srp, ClientPublicKey, ServerKey, {host, [Verifier, Prime, '6a']}) of
  	error ->
  	    throw(?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER));
  	PremasterSecret ->
  	    PremasterSecret
      end;
  premaster_secret(#server_srp_params{srp_n = Prime, srp_g = Generator, srp_s = Salt, srp_b = Public},
  		 ClientKeys, {Username, Password}) ->
      case ssl_srp_primes:check_srp_params(Generator, Prime) of
  