Update SoftHSM v2.0 to the latest version
[aaf/sshsm.git] / SoftHSMv2 / src / lib / P11Objects.cpp
index 3e663b2..8ba9801 100644 (file)
@@ -885,6 +885,51 @@ bool P11ECPublicKeyObj::init(OSObject *inobject)
        return true;
 }
 
+// Constructor
+P11EDPublicKeyObj::P11EDPublicKeyObj()
+{
+       initialized = false;
+}
+
+// Add attributes
+bool P11EDPublicKeyObj::init(OSObject *inobject)
+{
+       if (initialized) return true;
+       if (inobject == NULL) return false;
+
+       if (!inobject->attributeExists(CKA_KEY_TYPE) || inobject->getUnsignedLongValue(CKA_KEY_TYPE, CKK_VENDOR_DEFINED) != CKK_EC_EDWARDS) {
+               OSAttribute setKeyType((unsigned long)CKK_EC_EDWARDS);
+               inobject->setAttribute(CKA_KEY_TYPE, setKeyType);
+       }
+
+       // Create parent
+       if (!P11PublicKeyObj::init(inobject)) return false;
+
+       // Create attributes
+       P11Attribute* attrEcParams = new P11AttrEcParams(osobject,P11Attribute::ck3);
+       P11Attribute* attrEcPoint = new P11AttrEcPoint(osobject);
+
+       // Initialize the attributes
+       if
+       (
+               !attrEcParams->init() ||
+               !attrEcPoint->init()
+       )
+       {
+               ERROR_MSG("Could not initialize the attribute");
+               delete attrEcParams;
+               delete attrEcPoint;
+               return false;
+       }
+
+       // Add them to the map
+       attributes[attrEcParams->getType()] = attrEcParams;
+       attributes[attrEcPoint->getType()] = attrEcPoint;
+
+       initialized = true;
+       return true;
+}
+
 // Constructor
 P11DHPublicKeyObj::P11DHPublicKeyObj()
 {
@@ -1247,7 +1292,51 @@ bool P11ECPrivateKeyObj::init(OSObject *inobject)
        // Add them to the map
        attributes[attrEcParams->getType()] = attrEcParams;
        attributes[attrValue->getType()] = attrValue;
-        attributes[attrPrivateHandle->getType()] = attrPrivateHandle;
+       attributes[attrPrivateHandle->getType()] = attrPrivateHandle;
+       initialized = true;
+       return true;
+}
+
+// Constructor
+P11EDPrivateKeyObj::P11EDPrivateKeyObj()
+{
+       initialized = false;
+}
+
+// Add attributes
+bool P11EDPrivateKeyObj::init(OSObject *inobject)
+{
+       if (initialized) return true;
+       if (inobject == NULL) return false;
+
+       if (!inobject->attributeExists(CKA_KEY_TYPE) || inobject->getUnsignedLongValue(CKA_KEY_TYPE, CKK_VENDOR_DEFINED) != CKK_EC_EDWARDS) {
+               OSAttribute setKeyType((unsigned long)CKK_EC_EDWARDS);
+               inobject->setAttribute(CKA_KEY_TYPE, setKeyType);
+       }
+
+       // Create parent
+       if (!P11PrivateKeyObj::init(inobject)) return false;
+
+       // Create attributes
+       P11Attribute* attrEcParams = new P11AttrEcParams(osobject,P11Attribute::ck4|P11Attribute::ck6);
+       P11Attribute* attrValue = new P11AttrValue(osobject,P11Attribute::ck1|P11Attribute::ck4|P11Attribute::ck6|P11Attribute::ck7);
+
+       // Initialize the attributes
+       if
+       (
+               !attrEcParams->init() ||
+               !attrValue->init()
+       )
+       {
+               ERROR_MSG("Could not initialize the attribute");
+               delete attrEcParams;
+               delete attrValue;
+               return false;
+       }
+
+       // Add them to the map
+       attributes[attrEcParams->getType()] = attrEcParams;
+       attributes[attrValue->getType()] = attrValue;
 
        initialized = true;
        return true;