]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blobdiff - ctypescrypto/ec.py
fixed derive for GOST2001
[oss/ctypescrypto.git] / ctypescrypto / ec.py
index 3d880cb6a5c174ec671b24e42de555ec11680dab..047aad97a1d6db7225d8f6b5c967647df364ba22 100644 (file)
@@ -5,12 +5,14 @@ from ctypescrypto.pkey import PKey, PKeyError
 from ctypes import c_void_p,c_char_p,c_int,byref
 from ctypescrypto import libcrypto
 
+__all__ = [ 'create']
+
 def create(curve,data):
        """
                Creates EC keypair from the just secret key and curve name
                
                @param curve - name of elliptic curve
-               @param num - long number representing key
+               @param num - byte array or long number representing key
        """
        ec=libcrypto.EC_KEY_new_by_curve_name(curve.nid)
        if ec is None:  
@@ -20,13 +22,16 @@ def create(curve,data):
                raise PKeyError("EC_KEY_get0_group")
        libcrypto.EC_GROUP_set_asn1_flag(group,1)
        raw_key=libcrypto.BN_new()
-       if raw_key is None:
-               raise PKeyError("BN_new")
+       if isinstance(data,int):
+               BN_hex2bn(byref(raw_key),hex(data))
+       else:
+               if raw_key is None:
+                       raise PKeyError("BN_new")
+               if libcrypto.BN_bin2bn(data,len(data),raw_key) is None:
+                       raise PKeyError("BN_bin2bn")
        ctx=libcrypto.BN_CTX_new()
        if ctx is None:
                raise PKeyError("BN_CTX_new")
-       if libcrypto.BN_bin2bn(data,len(data),raw_key) is None:
-               raise PKeyError("BN_bin2bn")
        order=libcrypto.BN_new()
        if order is None:
                raise PKeyError("BN_new")