Changeset 117

Show
Ignore:
Timestamp:
02/11/08 10:16:41 (2 years ago)
Author:
lrousseau
Message:

add support of C_GetMechanismInfo

See Ticket #11

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pykcs11/trunk/PyKCS11/__init__.py

    r116 r117  
    4949        if x[3:] != "_VENDOR_DEFINED": 
    5050            eval(x[:3])[eval(x)] = x # => CKM[CKM_RSA_PKCS] = 'CKM_RSA_PKCS' 
     51            eval(x[:3])[x] = eval(x) # => CKM['CKM_RSA_PKCS'] = CKM_RSA_PKCS 
    5152 
    5253class CK_SLOT_INFO: 
     
    177178            if self.flags & v: 
    178179                r.append(CK_TOKEN_INFO.flags_dict[v]) 
     180        return r 
     181 
     182class CK_MECHANISM_INFO: 
     183    """ 
     184    matches the PKCS#11 CK_MECHANISM_INFO structure 
     185 
     186    @ivar ulMinKeySize: minimum size of the key 
     187    @type ulMinKeySize: integer 
     188    @ivar ulMaxKeySize: maximum size of the key 
     189    @type ulMaxKeySize: integer 
     190    @ivar flags: bit flags specifying mechanism capabilities 
     191    @type flags: integer 
     192    """ 
     193 
     194    flags_dict = { 
     195        CKF_HW: "CKF_HW", 
     196        CKF_ENCRYPT: "CKF_ENCRYPT", 
     197        CKF_DECRYPT: "CKF_DECRYPT", 
     198        CKF_DIGEST: "CKF_DIGEST", 
     199        CKF_SIGN: "CKF_SIGN", 
     200        CKF_SIGN_RECOVER: "CKF_SIGN_RECOVER", 
     201        CKF_VERIFY: "CKF_VERIFY", 
     202        CKF_VERIFY_RECOVER: "CKF_VERIFY_RECOVER", 
     203        CKF_GENERATE: "CKF_GENERATE", 
     204        CKF_GENERATE_KEY_PAIR: "CKF_GENERATE_KEY_PAIR", 
     205        CKF_WRAP: "CKF_WRAP", 
     206        CKF_UNWRAP: "CKF_UNWRAP", 
     207        CKF_DERIVE: "CKF_DERIVE", 
     208        CKF_EXTENSION: "CKF_EXTENSION", 
     209    } 
     210 
     211    def flags2text(self): 
     212        """ 
     213        parse the L{self.flags} field and create a list of "CKF_*" strings 
     214        corresponding to bits set in flags 
     215 
     216        @return: a list of strings 
     217        @rtype: list 
     218        """ 
     219        r = [] 
     220        for v in CK_MECHANISM_INFO.flags_dict.keys(): 
     221            if self.flags & v: 
     222                r.append(CK_MECHANISM_INFO.flags_dict[v]) 
    179223        return r 
    180224 
     
    462506        return m 
    463507 
     508    def getMechanismInfo(self, slot, type): 
     509        """ 
     510        C_GetMechanismInfo 
     511 
     512        @return: information about a mechanism 
     513        @rtype: a L{CK_MECHANISM_INFO} object 
     514        """ 
     515        info = PyKCS11.LowLevel.CK_MECHANISM_INFO() 
     516        rv = self.lib.C_GetMechanismInfo(slot, CKM[type], info) 
     517        if rv != CKR_OK: 
     518            raise PyKCS11Error(rv) 
     519 
     520        i = CK_MECHANISM_INFO() 
     521        i.ulMinKeySize = info.ulMinKeySize 
     522        i.ulMaxKeySize = info.ulMaxKeySize 
     523        i.flags = info.flags 
     524 
     525        return i 
     526 
    464527class Mechanism: 
    465528    """Wraps CK_MECHANISM""" 
  • pykcs11/trunk/samples/getinfo.py

    r115 r117  
    120120    for x in m: 
    121121        print "   " + blue + x + normal 
     122        i = pkcs11.getMechanismInfo(slots[slot], x) 
     123        colorize("    ulMinKeySize:", i.ulMinKeySize) 
     124        colorize("    ulMaxKeySize:", i.ulMaxKeySize) 
     125        colorize("    flags:", i.flags2text()) 
    122126 
    123127    if pin_available: 
  • pykcs11/trunk/src/pkcs11lib.cpp

    r115 r117  
    971971} 
    972972 
     973CK_RV CPKCS11Lib::C_GetMechanismInfo( 
     974        unsigned long slotID, 
     975        unsigned long type, 
     976        CK_MECHANISM_INFO* pInfo) 
     977{ 
     978        CPKCS11LIB_PROLOGUE(C_GetMechanismInfo); 
     979 
     980        rv = m_pFunc->C_GetMechanismInfo(slotID, type, pInfo); 
     981 
     982        CPKCS11LIB_EPILOGUE; 
     983        return rv; 
     984} 
     985 
    973986/////////////////////////////////////////////////////////////////////////////// 
    974987 
  • pykcs11/trunk/src/pkcs11lib.h

    r115 r117  
    287287                vector<long> &mechanismList); 
    288288 
     289        CK_RV C_GetMechanismInfo( 
     290                unsigned long slotID, 
     291                unsigned long type, 
     292                CK_MECHANISM_INFO* pInfo); 
     293 
    289294}; 
    290295 
(C) 2006 bit4id srl, for informations please contact info@bit4id.com
visitors since August 21, 2006