anchor.diff:  
   -spec generate_key(Type, Params)
                    -> {PublicKey, PrivKeyOut}
  -                        when Type :: dh | ecdh | eddsa | rsa | srp,
  +                        when Type :: dh | ecdh | eddh | 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()
  
positive.code:                                       | {rsa_opts, RSAopts},
                               Hashs :: [sha1() | sha2() | sha3() | blake2() | ripemd160 | compatibility_only_hash()],
                               Ciphers :: [cipher()],
                               PKs :: [rsa | dss | ecdsa | dh | ecdh | ec_gf2m],
                               Macs :: [hmac | cmac | poly1305],
                               Curves :: [ec_named_curve() | edwards_curve_dh() | edwards_curve_ed()],
                               RSAopts :: [rsa_sign_verify_opt() | rsa_opt()] .
  
negative.code:                                       | RSAopts,
                               Hashs :: [sha1() | sha2() | sha3() | blake2() | ripemd160 | compatibility_only_hash()],
                               Ciphers :: [cipher()],
                               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()] .
  