javaextensions/satsa/crypto/src/stscipherfactory.cpp
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/crypto/src/stscipherfactory.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of STSCipherFactory.
+ *
+*/
+
+
+// INCLUDE FILES
+#include "stscipherfactory.h"
+#include "stssymmetriccipher.h"
+#include "ststransformation.h"
+#include "stsrsacipher.h"
+#include "logger.h"
+
+namespace java
+{
+namespace satsa
+{
+
+//factory method which creates the cipher based on the transformation
+STSCipher* STSCipherFactory::CreateCipher(JNIEnv* aJni,
+        jstring aTransformation, int* errCode)
+{
+    LOG(ESATSA, EInfo, "STSCipherFactory::CreateCipher+");
+    OpenSSL_add_all_algorithms();
+
+    // Create the transformation object
+    // Transformation is a form of algorithm/mode/padding or
+    // algorithm
+    STSTransformation* transformation = STSTransformation::Create(aJni,
+                                        aTransformation, errCode);
+
+    if (transformation == NULL)
+    {
+        // transformation was not created successfully and errCode is set approriately
+        ELOG(ESATSA, "transformation was not created successfully");
+        return NULL;
+    }
+
+    // Transformation succeeded, create the cipher object.
+    STSCipher* cipher = NULL;
+
+    if ((transformation->Algorithm() == STSAlgorithm3DES)
+            || (transformation->Algorithm() == STSAlgorithmAES)
+            || (transformation->Algorithm() == STSAlgorithmRC2)
+            || (transformation->Algorithm() == STSAlgorithmDES))
+    {
+        // Create the native symmetric cipher
+        LOG(ESATSA, EInfo, "STSCipherFactory::CreateCipher: Create the native symmetric cipher");
+        cipher = STSSymmetricCipher::Create(transformation, errCode);
+    }
+    else if (transformation->Algorithm() == STSAlgorithmRSA)
+    {
+        // Create the native RSA cipher.
+        LOG(ESATSA, EInfo, "STSCipherFactory::CreateCipher: Create the native RSA cipher");
+        cipher = STSRSACipher::Create(errCode);
+    }
+    else
+    {
+        // Unsupported algorithm, return NULL.
+        ELOG(ESATSA, "STSCipherFactory::CreateCipher: Unsupported algorithm, return NULL.");
+        *errCode = KSTSErrNoSuchAlgorithm;
+        return NULL;
+    }
+
+    if (cipher != NULL)
+    {
+        // Cipher created successfully.
+        // Set the transformation that is expected in the cipher object that was created above
+        LOG(ESATSA, EInfo, "STSCipherFactory::CreateCipher: Cipher created successfully.");
+        cipher->SetTransformation(transformation);
+    }
+
+    LOG(ESATSA, EInfo, "STSCipherFactory::CreateCipher: return cipher");
+    // return the cipher object.
+    return cipher;
+}
+} // namespace satsa
+} // namespace java
+
+