--- /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
+
+