[erlang-questions] Crypto and public_key usage....

Seth Falcon seth@REDACTED
Thu Apr 14 17:49:14 CEST 2011


Hi Peter,

On Thu, Apr 14, 2011 at 7:55 AM, Peter W. Morreale <pmorreale@REDACTED> wrote:
> I'm attempting to use the crypto and public key modules to decrypt
> an encrypted response I get in a server.
>
> I found this
> http://erlang.2086793.n4.nabble.com/rsa-encryption-decryption-example-code-doesn-t-work-td2114965.html
>
> example on the web, however in my case, I already have the public key as
> a string.

If your string represents an RSA public key in SubjectPublicKeyInfo
PEM format and you are using the latest Erlang release, I think you
can obtain the key record that you can use in the encrypt/decrpyt
functions in the public_key module as follows:

    {ok, RSAPubPem} = file:read_file("rsa_pub.pem"),
    PemEntries = public_key:pem_decode(RSAPubPem),
    RSAPubKey = public_key:pem_entry_decode(hd(PemEntries)),
    % now use RSAPubKey to decrypt/encrypt

You will have a few more hoops to jump through for older versions of
Erlang.  Here's one way:

    read_rsa_public_key(Key) ->
        Bin = erlang:iolist_to_binary(public_key_lines(re:split(Key,
"\n"), [])),
        Spki = public_key:der_decode('SubjectPublicKeyInfo',
base64:mime_decode(Bin)),
        {_, _, {0, KeyDer}} = Spki,
        public_key:der_decode('RSAPublicKey', KeyDer).

    public_key_lines([<<"-----BEGIN PUBLIC KEY-----">>|Rest], Acc) ->
        public_key_lines(Rest, Acc);
    public_key_lines([<<"-----END PUBLIC KEY-----">>|_Rest], Acc) ->
        lists:reverse(Acc);
    public_key_lines([Line|Rest], Acc) ->
        public_key_lines(Rest, [Line|Acc]).

If this isn't what you are looking for, it would be helpful to provide
more detail on the type of key you have and what you want to do with
it.

+ seth



-- 
Seth Falcon | @sfalcon | http://userprimary.net/



More information about the erlang-questions mailing list