diff -r f5050f1da672 -r 04becd199f91 javaextensions/satsa/pki/src.s60/usercredentialmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/satsa/pki/src.s60/usercredentialmanager.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,219 @@ +/* +* 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: +* +*/ + + +// INCLUDE FILES + +#include "javax_microedition_pki_UserCredentialManager.h" +#include "cstscredentialmanager.h" +#include "satsajnitools.h" +#include "s60commonutils.h" +#include "fs_methodcall.h" + + + +LOCAL_C void CallCreateCredentialManagerAddToEventSourceL( + TInt* aManagerHandle) +{ + CSTSCredentialManager* manager = CSTSCredentialManager::NewLC(); + TInt managerHandle = reinterpret_cast(manager) ; + CleanupStack::Pop(manager); + *aManagerHandle = managerHandle; +} + +JNIEXPORT jint JNICALL +Java_javax_microedition_pki_UserCredentialManager__1createUCManager( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */) +{ + + + TInt managerHandle = KErrGeneral; + + TInt error = KErrNone; + TRAP(error, + CallCreateCredentialManagerAddToEventSourceL( + &managerHandle)); + + if (error != KErrNone) + { + return error; + } + + return managerHandle; +} + +JNIEXPORT jint +JNICALL Java_javax_microedition_pki_UserCredentialManager__1addCredential( + JNIEnv* aJniEnv, + jobject /* aPeer */, + jint aManagerHandle, + jstring aCertDisplayName, jbyteArray aPkiPath) +{ + + + CSTSCredentialManager* manager = + reinterpret_cast(aManagerHandle); + + const RJString certDisplayName(*aJniEnv, aCertDisplayName); + const TInt pkiPathLength = aJniEnv->GetArrayLength(aPkiPath); + jbyte* pkiPath = aJniEnv->GetByteArrayElements(aPkiPath, NULL); + if (!pkiPath) + { + return KErrNoMemory; + } + TPtrC8 pkiDes(reinterpret_cast< const TUint8 * >(pkiPath), + pkiPathLength); + + TBool completed = EFalse; + TInt arg1 = reinterpret_cast(&certDisplayName); + TInt arg2 = reinterpret_cast(&pkiDes); + + TInt error = KErrNone; + TRAP(error,CallMethodL(completed,manager, + &CSTSCredentialManager::AddCredentialL, + arg1, + arg2,manager)); + + aJniEnv->ReleaseByteArrayElements(aPkiPath, pkiPath, 0); + + if (error == KErrNone) + { + return !completed; + } + return error; +} + +JNIEXPORT jint +JNICALL Java_javax_microedition_pki_UserCredentialManager__1removeCredential( + JNIEnv* aJniEnv, + jobject /* aPeer */, + jint aManagerHandle, + jstring aCertDisplayName, jbyteArray aIssuerAndSerialNumber, + jstring aSecurityElementID, jstring aSecurityElementPrompt) +{ + + CSTSCredentialManager* manager = + reinterpret_cast(aManagerHandle); + + const RJString certDisplayName(*aJniEnv, aCertDisplayName); + const TInt issuerLength = + aJniEnv->GetArrayLength(aIssuerAndSerialNumber); + jbyte* issuerAndSerialNumber = + aJniEnv->GetByteArrayElements(aIssuerAndSerialNumber, NULL); + if (!issuerAndSerialNumber) + { + return KErrNoMemory; + } + + TPtrC8 issuerDes( + reinterpret_cast< const TUint8 * >(issuerAndSerialNumber), + issuerLength); + + const RJString securityElementID(*aJniEnv, aSecurityElementID); + const RJString securityElementPrompt(*aJniEnv, aSecurityElementPrompt); + + TBool completed = EFalse; + TInt arg1 = reinterpret_cast(&certDisplayName); + TInt arg2 = reinterpret_cast(&issuerDes); + TInt arg3 = reinterpret_cast(&securityElementID); + TInt arg4 = reinterpret_cast(&securityElementPrompt); + TInt arg5 = reinterpret_cast(&completed); + + TInt error = KErrNone; + TRAP(error, + CallMethodL(manager,&CSTSCredentialManager::StaticRemoveCredentialL, + arg1, + arg2, + arg3, + arg4, + arg5,manager)); + + aJniEnv->ReleaseByteArrayElements(aIssuerAndSerialNumber, + issuerAndSerialNumber, 0); + + + if (error == KErrNone) + { + return completed ? 0 : 1; + } + return error; +} + + +JNIEXPORT jbyteArray +JNICALL Java_javax_microedition_pki_UserCredentialManager__1generateCSR( + JNIEnv* aJniEnv, + jobject /*aPeer*/, + jint aManagerHandle, jstring aNameInfo, + jstring aAlgorithm, jint aKeyLen, jint aKeyUsage, + jstring aSecurityElementID, jstring aSecurityElementPrompt, + jintArray aError) +{ + CSTSCredentialManager* manager = + reinterpret_cast(aManagerHandle); + + const RJString nameInfo(*aJniEnv, aNameInfo); + const RJString algorithm(*aJniEnv, aAlgorithm); + const RJString securityElementID(*aJniEnv, aSecurityElementID); + const RJString securityElementPrompt(*aJniEnv, aSecurityElementPrompt); + + TDesC8* retVal = NULL; + + CSTSCredentialManager::TGenerateCSRParams params = + { + static_cast< const TDesC* >(&nameInfo), + static_cast< const TDesC* >(&algorithm), + aKeyLen, aKeyUsage, + static_cast< const TDesC* >(&securityElementID), + static_cast< const TDesC* >(&securityElementPrompt) + }; + + TInt arg1 = reinterpret_cast(¶ms); + TInt arg2 = reinterpret_cast(&retVal); + + TInt error = KErrNone; + TRAP(error, + CallMethodL(manager,&CSTSCredentialManager::StaticGenerateCSRL, + arg1, arg2, + manager)); + + + STSSetJavaErrorCode(aJniEnv, aError, error); + + if (error != KErrNone) + { + return NULL; + } + + const TInt numBytes = retVal->Length(); + jbyteArray javaValue = aJniEnv->NewByteArray(numBytes); + + if (!javaValue) + { + STSSetJavaErrorCode(aJniEnv, aError, KErrNoMemory); + return NULL; + } + + if (numBytes > 0) + { + aJniEnv->SetByteArrayRegion( + javaValue, 0, numBytes, + JAVA_PTR(retVal->Ptr())); + } + return javaValue; +}