--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptomgmtlibs/cryptotokenfw/source/ctframework/KeyUsage.cpp Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "securitydefs.h"
+
+////////////////////////////////////////////////////////////////////////////////
+// TKeyUsagePKCS15 & TKeyUsageX509
+////////////////////////////////////////////////////////////////////////////////
+
+// x509 PKCS15 Public PKCS15 Private
+
+// DataEncipherment Encrypt Decrypt
+// DigitalSignature, keyCertSign, cRLSign Verify Sign
+// DigitalSignature, keyCertSign, cRLSign VerifyRecover SignRecover
+// KeyAgreement Derive Derive
+// KeyEncipherment Wrap Unwrap
+// NonRepudiation NonRepudiation NonRepudiation
+
+EXPORT_C TKeyUsagePKCS15 KeyUsageX509ToPKCS15Private(TKeyUsageX509 aUsage)
+ {
+ TKeyUsagePKCS15 result = EPKCS15UsageNone;
+
+ if (EX509UsageAll == aUsage)
+ {
+ result = EPKCS15UsageAll;
+ }
+ else
+ {
+ if (aUsage & EX509UsageDataEncipherment)
+ {
+ result |= EPKCS15UsageDecrypt;
+ }
+ if (aUsage & (EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign))
+ {
+ result |= EPKCS15UsageSign | EPKCS15UsageSignRecover;
+ }
+ if (aUsage & EX509UsageKeyAgreement)
+ {
+ result |= EPKCS15UsageDerive;
+ }
+ if (aUsage & EX509UsageKeyEncipherment)
+ {
+ result |= EPKCS15UsageUnwrap;
+ }
+ if (aUsage & EX509UsageNonRepudiation)
+ {// This shouldn't really happen, ENonRepudiation should be sole usage
+ result |= EPKCS15UsageNonRepudiation;
+ }
+ }
+
+ return result;
+ }
+
+EXPORT_C TKeyUsagePKCS15 KeyUsageX509ToPKCS15Public(TKeyUsageX509 aUsage)
+ {
+ TKeyUsagePKCS15 result = EPKCS15UsageNone;
+
+ if (EX509UsageAll == aUsage)
+ {
+ result = EPKCS15UsageAll;
+ }
+ else
+ {
+ if (aUsage & EX509UsageDataEncipherment)
+ {
+ result |= EPKCS15UsageEncrypt;
+ }
+ if (aUsage & (EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign))
+ {
+ result |= EPKCS15UsageVerify | EPKCS15UsageVerifyRecover;
+ }
+ if (aUsage & EX509UsageKeyAgreement)
+ {
+ result |= EPKCS15UsageDerive;
+ }
+ if (aUsage & EX509UsageKeyEncipherment)
+ {
+ result |= EPKCS15UsageWrap;
+ }
+ if (aUsage & EX509UsageNonRepudiation)
+ {// This shouldn't really happen, ENonRepudiation should be sole usage
+ result |= EPKCS15UsageNonRepudiation;
+ }
+ }
+
+ return result;
+ }
+
+EXPORT_C TKeyUsageX509 KeyUsagePKCS15ToX509(TKeyUsagePKCS15 aUsage)
+ {
+ TKeyUsageX509 result = EX509UsageNone;
+
+ if (EPKCS15UsageAll == aUsage)
+ {
+ result = EX509UsageAll;
+ }
+ else
+ {
+ if (aUsage & (EPKCS15UsageEncrypt | EPKCS15UsageDecrypt))
+ {
+ result |= EX509UsageDataEncipherment;
+ }
+ if (aUsage & (EPKCS15UsageVerify | EPKCS15UsageSign | EPKCS15UsageVerifyRecover | EPKCS15UsageSignRecover))
+ {
+ result |= EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign;
+ }
+ if (aUsage & EPKCS15UsageDerive)
+ {
+ result |= EX509UsageKeyAgreement;
+ }
+ if (aUsage & (EPKCS15UsageWrap | EPKCS15UsageUnwrap))
+ {
+ result |= EX509UsageKeyEncipherment;
+ }
+ if (aUsage & EPKCS15UsageNonRepudiation)
+ {
+ result |= EX509UsageNonRepudiation;
+ }
+ }
+
+ return result;
+ }