anchor.diff:                                        | RSAopts,
                                Hashs :: [sha1() | sha2() | sha3() | blake2() | ripemd160 | compatibility_only_hash()],
                                Ciphers :: [cipher()],
  -                             PKs :: [rsa | dss | ecdsa | dh | ecdh | ec_gf2m],
  +                             PKs :: [rsa | dss | ecdsa | dh | ecdh | eddh | ec_gf2m],
                                Macs :: [hmac | cmac | poly1305],
                                Curves :: [ec_named_curve() | edwards_curve_dh() | edwards_curve_ed()],
                                RSAopts :: [rsa_sign_verify_opt() | rsa_opt()] .
  
positive.code: 
  -spec generate_key(Type, Params)
                   -> {PublicKey, PrivKeyOut}
                          when Type :: dh | ecdh | eddsa | rsa | srp,
                               PublicKey :: dh_public() | ecdh_public() | rsa_public() | srp_public(),
                               PrivKeyOut :: dh_private() | ecdh_private() | rsa_private() | {srp_public(),srp_private()},
                               Params :: dh_params() | ecdh_params() | eddsa_params() | rsa_params() | srp_gen_params()
  
negative.code: 
  -spec compute_key(Type, OthersPublicKey, MyPrivateKey, Params)
                   -> SharedSecret
                          when Type :: dh | ecdh | eddh |  srp,
                               SharedSecret :: binary(),
                               OthersPublicKey :: dh_public() | ecdh_public() | srp_public(),
                               MyPrivateKey :: dh_private() | ecdh_private() | {srp_public(),srp_private()},
  