DEV Community

loading...

Erlang/OTP の public_key モジュールを使って Android のアプリ内課金情報のデジタル署名の検証を行う

voluntas
A software developer using Erlang/OTP at work. Founder of 時雨堂 (shiguredo).
・1 min read
  • PublicKey は priv などどこかにある前提
  • 署名は base64 でエンコードされて送られてくる前提
  • データは JSON を jsonx:decode(RawSignedData, [{format, proplist}]) でデコードされている前提

-include_lib("public_key/include/public_key.hrl"). 

-spec public_key(binary()) -> #'RSAPublicKey'{}.
public_key(Filename) ->
    {ok, RawPublicKey} = file:read_file(Filename),
    [PemEntryPublicKey] = public_key:pem_decode(RawPublicKey),
    public_key:pem_entry_decode(PemEntryPublicKey).


-spec verify(binary(), binary(), #'RSAPublicKey'{}) -> boolan().
verify(SignedData, Signature, PublicKey) when is_binary(SignedData) ->
    RawSignature = base64:decode(Signature),
    RawSignedData = jsonx:encode(SignedData),
    public_key:verify(RawSignedData, sha, RawSignature, PublicKey).

Discussion (0)