diff options
Diffstat (limited to 'SoftHSMv2/src/lib/P11Objects.cpp')
-rw-r--r-- | SoftHSMv2/src/lib/P11Objects.cpp | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/SoftHSMv2/src/lib/P11Objects.cpp b/SoftHSMv2/src/lib/P11Objects.cpp index 3e663b2..8ba9801 100644 --- a/SoftHSMv2/src/lib/P11Objects.cpp +++ b/SoftHSMv2/src/lib/P11Objects.cpp @@ -886,6 +886,51 @@ bool P11ECPublicKeyObj::init(OSObject *inobject) } // 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() { initialized = false; @@ -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; |