测试代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-  

'''
author: xjump.me#gmail.com
reference: 
    http://bitcoin.org/bitcoin.pdf‎
    http://www.heikkitoivonen.net/m2crypto/api
    http://openssl.org
'''

from M2Crypto import EC,EVP
import base64 

ec_curve = EC.NID_secp256k1
priv_file = '%s-ecc-priv-key.pem' % (ec_curve)
pub_file = '%s-ecc-pub-key.pem' % (ec_curve)

#generate the ECC keys
ec = EC.gen_params(ec_curve)
ec.gen_key()
ec.save_key(priv_file, None )
ec.save_pub_key(pub_file)

#load the keys from files
ec2=EC.load_key(priv_file)
print "the result of check key is: ",ec2.check_key()

ec_pub = ec2.pub()
#print dir(ec2)
pub_der = ec_pub.get_der()
pub_pem = base64.b64encode(pub_der)
print 'PEM public key is: \n',pub_pem

md = EVP.MessageDigest("ripemd160")
md.update('why bitcoin use ecc-secp256k1 and ripemd160?')
hash = md.digest()
r,s = ec2.sign_dsa(hash)
print "ecdsa signature is: r=",base64.b64encode(r),",s=",base64.b64encode(s)
print "ecdsa signature verify result is:",ec2.verify_dsa(hash, r, s)
print "END"