oauth_rsa_sha1.erl 1.0 KB

123456789101112131415161718192021222324252627282930
  1. -module(oauth_rsa_sha1).
  2. -export([signature/2, verify/3]).
  3. -include_lib("public_key/include/public_key.hrl").
  4. signature(BaseString, PrivateKeyPath) ->
  5. {ok, Contents} = file:read_file(PrivateKeyPath),
  6. [Info] = public_key:pem_decode(Contents),
  7. PrivateKey = public_key:pem_entry_decode(Info),
  8. base64:encode_to_string(public_key:sign(list_to_binary(BaseString), sha, PrivateKey)).
  9. verify(Signature, BaseString, Cert) ->
  10. public_key:verify(to_binary(BaseString), sha, base64:decode(Signature), pkey(Cert)).
  11. to_binary(Term) when is_list(Term) ->
  12. list_to_binary(Term);
  13. to_binary(Term) when is_binary(Term) ->
  14. Term.
  15. pkey(Path) when is_list(Path) ->
  16. {ok, Contents} = file:read_file(Path),
  17. [{'Certificate', DerCert, not_encrypted}] = public_key:pem_decode(Contents),
  18. pkey(public_key:pkix_decode_cert(DerCert, otp));
  19. pkey(#'OTPCertificate'{tbsCertificate=Cert}) ->
  20. pkey(Cert);
  21. pkey(#'OTPTBSCertificate'{subjectPublicKeyInfo=Info}) ->
  22. pkey(Info);
  23. pkey(#'OTPSubjectPublicKeyInfo'{subjectPublicKey=Key}) ->
  24. Key.