self.key=ptr
self.cansign=cansign
if not privkey is None or not pubkey is None:
- raise TypeError("Just one of pubkey or privkey can be specified")
+ raise TypeError("Just one of ptr, pubkey or privkey can be specified")
elif not privkey is None:
if not pubkey is None:
- raise TypeError("Just one of pubkey or privkey can be specified")
+ raise TypeError("Just one of ptr, pubkey or privkey can be specified")
b=Membio(privkey)
self.cansign=True
if format == "PEM":
raise PKeyError("Initailizing derive context")
if libcrypto.EVP_PKEY_derive_init(ctx)<1:
raise PKeyError("derive_init")
- self._configure_context(self,ctx,kwargs)
+
+
+ self._configure_context(ctx,kwargs,["ukm"])
if libcrypto.EVP_PKEY_derive_set_peer(ctx,peerkey.key)<=0:
raise PKeyError("Cannot set peer key")
+ if "ukm" in kwargs:
+ if libcrypto.EVP_PKEY_CTX_ctrl(ctx,-1,1<<10,8,8,kwargs["ukm"])<=0:
+ raise PKeyError("Cannot set UKM")
keylen=c_long(0)
if libcrypto.EVP_PKEY_derive(ctx,None,byref(keylen))<=0:
raise PKeyError("computing shared key length")
- buf=create_string_buffer(keylen)
+ buf=create_string_buffer(keylen.value)
if libcrypto.EVP_PKEY_derive(ctx,buf,byref(keylen))<=0:
raise PKeyError("computing actual shared key")
libcrypto.EVP_PKEY_CTX_free(ctx)
- return buf.raw[:keylen]
+ return buf.raw[:keylen.value]
@staticmethod
def generate(algorithm,**kwargs):
"""
rsa_keygen_bits=number - size of key to be generated
rsa_keygen_pubexp - RSA public expontent(default 65537)
- Algorithn specific parameters for DSA,DH and EC
+ Algorithm specific parameters for DSA,DH and EC
paramsfrom=PKey object
clear_err_stack()
pkey_id=c_int(0)
libcrypto.EVP_PKEY_asn1_get0_info(byref(pkey_id),None,None,None,None,ameth)
- libcrypto.ENGINE_finish(tmpeng)
+ #libcrypto.ENGINE_finish(tmpeng)
if "paramsfrom" in kwargs:
ctx=libcrypto.EVP_PKEY_CTX_new(kwargs["paramsfrom"].key,None)
else:
libcrypto.EVP_PKEY_cmp.restype=c_int
libcrypto.EVP_PKEY_cmp.argtypes=(c_void_p,c_void_p)
libcrypto.EVP_PKEY_CTX_ctrl_str.restype=c_int
-libcrypto.EVP_PKEY_CTX_ctrl_str.argtypes=(c_void_p,)
+libcrypto.EVP_PKEY_CTX_ctrl_str.argtypes=(c_void_p,c_void_p,c_void_p)
+libcrypto.EVP_PKEY_CTX_ctrl.restype=c_int
+libcrypto.EVP_PKEY_CTX_ctrl.argtypes=(c_void_p,c_int,c_int,c_int,c_int,c_void_p)
libcrypto.EVP_PKEY_CTX_free.argtypes=(c_void_p,)
libcrypto.EVP_PKEY_CTX_new.restype=c_void_p
libcrypto.EVP_PKEY_CTX_new.argtypes=(c_void_p,c_void_p)
libcrypto.PEM_write_bio_PUBKEY.argtypes=(c_void_p,c_void_p)
libcrypto.i2d_PUBKEY_bio.argtypes=(c_void_p,c_void_p)
libcrypto.i2d_PrivateKey_bio.argtypes=(c_void_p,c_void_p)
+libcrypto.ENGINE_finish.argtypes=(c_void_p,)