Update contrib.
2 * Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
15 * blocktransformationshim.cpp
20 #include "bufferedtransformationshim.h"
22 #include <cryptospi/cryptospidef.h>
24 #include <cryptospi/cryptosymmetriccipherapi.h>
25 #include <cryptospi/plugincharacteristics.h>
26 #include "../common/inlines.h"
28 // CBufferedEncryptorShim
29 CBufferedEncryptorShim::CBufferedEncryptorShim(CryptoSpi::CSymmetricCipher* aSymmetricCipherImpl) :
30 iSymmetricCipherImpl(aSymmetricCipherImpl)
34 CBufferedEncryptorShim* CBufferedEncryptorShim::NewL(CBlockTransformation* aBT, CPadding* aPadding)
36 CBufferedEncryptorShim* self(0);
38 // Check whether the block transform contains an SPI plug-in
40 TInt err = aBT->GetExtension(CryptoSpi::KSymmetricCipherInterface, implPtr, NULL);
41 if (err == KErrNone && implPtr)
43 CryptoSpi::CSymmetricCipher* impl(static_cast<CryptoSpi::CSymmetricCipher*>(implPtr));
45 const CryptoSpi::TCharacteristics* c(0);
46 impl->GetCharacteristicsL(c);
48 const CryptoSpi::TSymmetricCipherCharacteristics* cipherCharacteristics(
49 static_cast<const CryptoSpi::TSymmetricCipherCharacteristics*>(c));
51 // See if the padding mode is recognised by CryptoSpi and if so, check
52 // whether the plug-in supports that padding mode.
54 TAny* paddingPtr = &paddingMode;
55 err = aPadding->GetExtension(CryptoSpi::KPaddingInterface, paddingPtr, 0);
56 if (err == KErrNone && cipherCharacteristics->IsPaddingModeSupported(paddingMode))
58 impl->SetCryptoModeL(CryptoSpi::KCryptoModeEncryptUid);
59 impl->SetPaddingModeL(paddingMode);
60 self = new(ELeave) CBufferedEncryptorShim(impl);
61 CleanupStack::PushL(self);
62 self->ConstructL(aBT, aPadding);
63 CleanupStack::Pop(self);
69 void CBufferedEncryptorShim::ConstructL(CBlockTransformation* aBT, CPadding* aPadding)
71 CBufferedEncryptor::ConstructL(aBT, aPadding);
74 void CBufferedEncryptorShim::Process(const TDesC8& aInput, TDes8& aOutput)
76 TRAP_IGNORE(iSymmetricCipherImpl->ProcessL(aInput, aOutput);)
79 TInt CBufferedEncryptorShim::MaxOutputLength(TInt aInputLength) const
81 return iSymmetricCipherImpl->MaxOutputLength(aInputLength);
84 void CBufferedEncryptorShim::Reset()
86 iSymmetricCipherImpl->Reset();
89 TInt CBufferedEncryptorShim::BlockSize() const
91 return BitsToBytes(iSymmetricCipherImpl->BlockSize());
94 TInt CBufferedEncryptorShim::KeySize() const
96 return iSymmetricCipherImpl->KeySize();
99 void CBufferedEncryptorShim::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput)
101 iSymmetricCipherImpl->ProcessFinalL(aInput, aOutput);
104 TInt CBufferedEncryptorShim::MaxFinalOutputLength(TInt aInputLength) const
106 return iSymmetricCipherImpl->MaxFinalOutputLength(aInputLength);
109 // CBufferedDecryptorShim
110 CBufferedDecryptorShim::CBufferedDecryptorShim(CryptoSpi::CSymmetricCipher* aSymmetricCipherImpl) :
111 iSymmetricCipherImpl(aSymmetricCipherImpl)
115 CBufferedDecryptorShim* CBufferedDecryptorShim::NewL(CBlockTransformation* aBT, CPadding* aPadding)
117 CBufferedDecryptorShim* self(0);
119 // Check whether the block transform contains an SPI plug-in
121 TInt err = aBT->GetExtension(CryptoSpi::KSymmetricCipherInterface, implPtr, NULL);
122 if (err == KErrNone && implPtr)
124 CryptoSpi::CSymmetricCipher* impl(static_cast<CryptoSpi::CSymmetricCipher*>(implPtr));
126 const CryptoSpi::TCharacteristics* c(0);
127 impl->GetCharacteristicsL(c);
129 const CryptoSpi::TSymmetricCipherCharacteristics* cipherCharacteristics(
130 static_cast<const CryptoSpi::TSymmetricCipherCharacteristics*>(c));
132 // See if the padding mode is recognised by CryptoSpi and if so, check
133 // whether the plug-in supports that padding mode.
135 TAny* paddingPtr = &paddingMode;
136 err = aPadding->GetExtension(CryptoSpi::KPaddingInterface, paddingPtr, 0);
137 if (err == KErrNone && cipherCharacteristics->IsPaddingModeSupported(paddingMode))
139 impl->SetCryptoModeL(CryptoSpi::KCryptoModeDecryptUid);
140 impl->SetPaddingModeL(paddingMode);
142 self = new(ELeave) CBufferedDecryptorShim(impl);
143 CleanupStack::PushL(self);
144 self->ConstructL(aBT, aPadding);
145 CleanupStack::Pop(self);
151 void CBufferedDecryptorShim::ConstructL(CBlockTransformation* aBT, CPadding* aPadding)
153 CBufferedDecryptor::ConstructL(aBT, aPadding);
156 void CBufferedDecryptorShim::Process(const TDesC8& aInput, TDes8& aOutput)
158 TRAP_IGNORE(iSymmetricCipherImpl->ProcessL(aInput, aOutput);)
161 TInt CBufferedDecryptorShim::MaxOutputLength(TInt aInputLength) const
163 return iSymmetricCipherImpl->MaxOutputLength(aInputLength);
166 void CBufferedDecryptorShim::Reset()
168 iSymmetricCipherImpl->Reset();
171 TInt CBufferedDecryptorShim::BlockSize() const
173 return BitsToBytes(iSymmetricCipherImpl->BlockSize());
176 TInt CBufferedDecryptorShim::KeySize() const
178 return iSymmetricCipherImpl->KeySize();
181 void CBufferedDecryptorShim::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput)
183 iSymmetricCipherImpl->ProcessFinalL(aInput, aOutput);
186 TInt CBufferedDecryptorShim::MaxFinalOutputLength(TInt aInputLength) const
188 return iSymmetricCipherImpl->MaxFinalOutputLength(aInputLength);