You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
104
mcs/tools/commoncryptogenerator/CommonCryptorGenerator.cs
Normal file
104
mcs/tools/commoncryptogenerator/CommonCryptorGenerator.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// CommonCrypto code generator for symmetric block cipher algorithms
|
||||
//
|
||||
// Authors:
|
||||
// Sebastien Pouliot <sebastien@xamarin.com>
|
||||
//
|
||||
// Copyright 2012 Xamarin Inc.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Xamarin {
|
||||
|
||||
public static class CommonCryptor {
|
||||
|
||||
static public void Generate (string namespaceName, string typeName, string baseTypeName, string ccAlgorithmName, string feedbackSize = "8", string ctorInitializers = null)
|
||||
{
|
||||
string template = @"// Generated file to bind CommonCrypto cipher algorithms - DO NOT EDIT
|
||||
//
|
||||
// Authors:
|
||||
// Sebastien Pouliot <sebastien@xamarin.com>
|
||||
//
|
||||
// Copyright 2012-2014 Xamarin Inc.
|
||||
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
using Mono.Security.Cryptography;
|
||||
using Crimson.CommonCrypto;
|
||||
|
||||
namespace %NAMESPACE% {
|
||||
|
||||
public sealed partial class %TYPE% : %BASE% {
|
||||
|
||||
public %TYPE% ()
|
||||
{
|
||||
FeedbackSizeValue = %FEEDBACKSIZE%;
|
||||
%CTOR_INIT%
|
||||
}
|
||||
|
||||
public override void GenerateIV ()
|
||||
{
|
||||
IVValue = KeyBuilder.IV (BlockSizeValue >> 3);
|
||||
}
|
||||
|
||||
public override void GenerateKey ()
|
||||
{
|
||||
KeyValue = KeyBuilder.Key (KeySizeValue >> 3);
|
||||
}
|
||||
|
||||
public override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV)
|
||||
{
|
||||
IntPtr decryptor = IntPtr.Zero;
|
||||
switch (Mode) {
|
||||
case CipherMode.CBC:
|
||||
decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.None, rgbKey, rgbIV);
|
||||
return new FastCryptorTransform (decryptor, this, false, rgbIV);
|
||||
case CipherMode.ECB:
|
||||
decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
|
||||
return new FastCryptorTransform (decryptor, this, false, rgbIV);
|
||||
case CipherMode.CFB:
|
||||
#if MONOTOUCH || XAMMAC
|
||||
IntPtr encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
|
||||
decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
|
||||
return new CryptorTransform (decryptor, encryptor, this, false, rgbIV);
|
||||
#else
|
||||
throw new CryptographicException (""CFB is not supported by Crimson.CommonCrypto"");
|
||||
#endif
|
||||
default:
|
||||
throw new CryptographicException (String.Format (""{0} is not supported by the .NET framework"", Mode));
|
||||
}
|
||||
}
|
||||
|
||||
public override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV)
|
||||
{
|
||||
IntPtr encryptor = IntPtr.Zero;
|
||||
switch (Mode) {
|
||||
case CipherMode.CBC:
|
||||
encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.None, rgbKey, rgbIV);
|
||||
return new FastCryptorTransform (encryptor, this, true, rgbIV);
|
||||
case CipherMode.ECB:
|
||||
encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
|
||||
return new FastCryptorTransform (encryptor, this, true, rgbIV);
|
||||
case CipherMode.CFB:
|
||||
#if MONOTOUCH || XAMMAC
|
||||
encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
|
||||
return new CryptorTransform (encryptor, IntPtr.Zero, this, true, rgbIV);
|
||||
#else
|
||||
throw new CryptographicException (""CFB is not supported by Crimson.CommonCrypto"");
|
||||
#endif
|
||||
default:
|
||||
throw new CryptographicException (String.Format (""{0} is not supported by the .NET framework"", Mode));
|
||||
}
|
||||
}
|
||||
}
|
||||
}";
|
||||
|
||||
File.WriteAllText (typeName + ".g.cs", template.Replace ("%NAMESPACE%", namespaceName).
|
||||
Replace ("%TYPE%", typeName).Replace ("%BASE%", baseTypeName).Replace("%FEEDBACKSIZE%", feedbackSize).Replace ("%CTOR_INIT%", ctorInitializers).
|
||||
Replace ("%CCALGORITHM%", ccAlgorithmName.ToString ()));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user