sl@0: /* sl@0: * Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "securitydefs.h" sl@0: sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: // TKeyUsagePKCS15 & TKeyUsageX509 sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: sl@0: // x509 PKCS15 Public PKCS15 Private sl@0: sl@0: // DataEncipherment Encrypt Decrypt sl@0: // DigitalSignature, keyCertSign, cRLSign Verify Sign sl@0: // DigitalSignature, keyCertSign, cRLSign VerifyRecover SignRecover sl@0: // KeyAgreement Derive Derive sl@0: // KeyEncipherment Wrap Unwrap sl@0: // NonRepudiation NonRepudiation NonRepudiation sl@0: sl@0: EXPORT_C TKeyUsagePKCS15 KeyUsageX509ToPKCS15Private(TKeyUsageX509 aUsage) sl@0: { sl@0: TKeyUsagePKCS15 result = EPKCS15UsageNone; sl@0: sl@0: if (EX509UsageAll == aUsage) sl@0: { sl@0: result = EPKCS15UsageAll; sl@0: } sl@0: else sl@0: { sl@0: if (aUsage & EX509UsageDataEncipherment) sl@0: { sl@0: result |= EPKCS15UsageDecrypt; sl@0: } sl@0: if (aUsage & (EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign)) sl@0: { sl@0: result |= EPKCS15UsageSign | EPKCS15UsageSignRecover; sl@0: } sl@0: if (aUsage & EX509UsageKeyAgreement) sl@0: { sl@0: result |= EPKCS15UsageDerive; sl@0: } sl@0: if (aUsage & EX509UsageKeyEncipherment) sl@0: { sl@0: result |= EPKCS15UsageUnwrap; sl@0: } sl@0: if (aUsage & EX509UsageNonRepudiation) sl@0: {// This shouldn't really happen, ENonRepudiation should be sole usage sl@0: result |= EPKCS15UsageNonRepudiation; sl@0: } sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: EXPORT_C TKeyUsagePKCS15 KeyUsageX509ToPKCS15Public(TKeyUsageX509 aUsage) sl@0: { sl@0: TKeyUsagePKCS15 result = EPKCS15UsageNone; sl@0: sl@0: if (EX509UsageAll == aUsage) sl@0: { sl@0: result = EPKCS15UsageAll; sl@0: } sl@0: else sl@0: { sl@0: if (aUsage & EX509UsageDataEncipherment) sl@0: { sl@0: result |= EPKCS15UsageEncrypt; sl@0: } sl@0: if (aUsage & (EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign)) sl@0: { sl@0: result |= EPKCS15UsageVerify | EPKCS15UsageVerifyRecover; sl@0: } sl@0: if (aUsage & EX509UsageKeyAgreement) sl@0: { sl@0: result |= EPKCS15UsageDerive; sl@0: } sl@0: if (aUsage & EX509UsageKeyEncipherment) sl@0: { sl@0: result |= EPKCS15UsageWrap; sl@0: } sl@0: if (aUsage & EX509UsageNonRepudiation) sl@0: {// This shouldn't really happen, ENonRepudiation should be sole usage sl@0: result |= EPKCS15UsageNonRepudiation; sl@0: } sl@0: } sl@0: sl@0: return result; sl@0: } sl@0: sl@0: EXPORT_C TKeyUsageX509 KeyUsagePKCS15ToX509(TKeyUsagePKCS15 aUsage) sl@0: { sl@0: TKeyUsageX509 result = EX509UsageNone; sl@0: sl@0: if (EPKCS15UsageAll == aUsage) sl@0: { sl@0: result = EX509UsageAll; sl@0: } sl@0: else sl@0: { sl@0: if (aUsage & (EPKCS15UsageEncrypt | EPKCS15UsageDecrypt)) sl@0: { sl@0: result |= EX509UsageDataEncipherment; sl@0: } sl@0: if (aUsage & (EPKCS15UsageVerify | EPKCS15UsageSign | EPKCS15UsageVerifyRecover | EPKCS15UsageSignRecover)) sl@0: { sl@0: result |= EX509UsageDigitalSignature | EX509UsageKeyCertSign | EX509UsageCRLSign; sl@0: } sl@0: if (aUsage & EPKCS15UsageDerive) sl@0: { sl@0: result |= EX509UsageKeyAgreement; sl@0: } sl@0: if (aUsage & (EPKCS15UsageWrap | EPKCS15UsageUnwrap)) sl@0: { sl@0: result |= EX509UsageKeyEncipherment; sl@0: } sl@0: if (aUsage & EPKCS15UsageNonRepudiation) sl@0: { sl@0: result |= EX509UsageNonRepudiation; sl@0: } sl@0: } sl@0: sl@0: return result; sl@0: }