On Thursday, January 17, 2013 1:32:25 AM UTC+1, Piet van Oostrum wrote: > Marc Aymerich <glicer...@gmail.com> writes: > > > > > Hi, > > > I've been trying very, very hard to load an RSA key using M2Crypto but > > without any success. > > > > > > basically this is what I'm trying to do: > > >>>> from M2Crypto import BIO, RSA > > >>>> > > >>>> pubkey = """-----BEGIN RSA PUBLIC KEY----- > > > ... MIIBCgKCAQEApwotnfHT9RAmxnuaGEMdI3lYPYE4aaqSD9v4KbTh1E7Le3GNJQb7 > > > ... wCpmDe8+n8S5Kp/gBEpWiYuvsVA/T4KseoX7NMcacP+DJMwjmNd9U58USn2vLz0Z > > > ... TMtXpc/FUhW5PZdgCiuNzw6IFgGn9ZCCv85jjUIW3KD8fUNdrUfVSv4olDoL9NkR > > > ... dTRg3Os/znC6l0gv/mqnLaqj2bJ/tx47kUmj6Oq13JuEq34T+DVmsUCFVundQnRp > > > ... c/vVEqQot7Rvj9UmSvTi4WKt/qxiAnyZf3gXOdrXvxfVTGzD5I/Xg+By+a4C2JwB > > > ... A5RGvZP3fyfhkCnnhFDpfws5lc20FA6ryQIDAQAB > > > ... -----END RSA PUBLIC KEY-----""" > > >>>> > > >>>> bio = BIO.MemoryBuffer(pubkey.encode('ascii')) > > >>>> RSA.load_pub_key_bio(bio) > > > Traceback (most recent call last): > > > File "<stdin>", line 1, in <module> > > > File "/usr/lib/python2.7/dist-packages/M2Crypto/RSA.py", line 422, in > > load_pub_key_bio > > > rsa_error() > > > File "/usr/lib/python2.7/dist-packages/M2Crypto/RSA.py", line 302, in > > rsa_error > > > raise RSAError, m2.err_reason_error_string(m2.err_get_error()) > > > M2Crypto.RSA.RSAError: no start line > > > > > > > > > Reading all whats in Internet about this problem it seems that my key is in > > PKCS#1 format but M2Crypto only reads X.501 RSA keys. > > > > > > I know that python-crypto doesn't have any problem loading this key, but > > I'll prefer to stick with M2Crypto because I already have lots code using > > M2Crypto. > > > > > > So my question is, is there any way to load this key using M2Crypto? Can I > > convert somehow the key to X.501? > > > > > Converting to X.501 isn't difficult (assuming this is a 2048 bit key): > > Get rid of the 'RSA' in header and trailer > > Prepend X.501 header 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A' to the data > > Reformat the lines to 64 characters. > > > > from M2Crypto import BIO, RSA > > > > pubkey="""-----BEGIN RSA PUBLIC KEY----- > > MIIBCgKCAQEApwotnfHT9RAmxnuaGEMdI3lYPYE4aaqSD9v4KbTh1E7Le3GNJQb7 > > wCpmDe8+n8S5Kp/gBEpWiYuvsVA/T4KseoX7NMcacP+DJMwjmNd9U58USn2vLz0Z > > TMtXpc/FUhW5PZdgCiuNzw6IFgGn9ZCCv85jjUIW3KD8fUNdrUfVSv4olDoL9NkR > > dTRg3Os/znC6l0gv/mqnLaqj2bJ/tx47kUmj6Oq13JuEq34T+DVmsUCFVundQnRp > > c/vVEqQot7Rvj9UmSvTi4WKt/qxiAnyZf3gXOdrXvxfVTGzD5I/Xg+By+a4C2JwB > > A5RGvZP3fyfhkCnnhFDpfws5lc20FA6ryQIDAQAB > > -----END RSA PUBLIC KEY----- > > """ > > > > pk = pubkey.split('\n') > > pk = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A' + ''.join(pk[1:-2]) > > pk = [pk[i:i+64] for i in range(0, len(pk), 64)] > > pk = '-----BEGIN PUBLIC KEY-----\n' + '\n'.join(pk) + '\n-----END PUBLIC > KEY-----' > > > > bio = BIO.MemoryBuffer(pk) # pk is ASCII, don't encode > > key = RSA.load_pub_key_bio(bio) > >
Piet, that was really awesome, it seems so easy to do now :) Thank you very, very much! really. -- http://mail.python.org/mailman/listinfo/python-list