2 // CommonCrypto code generator for symmetric block cipher algorithms
5 // Sebastien Pouliot <sebastien@xamarin.com>
7 // Copyright 2012 Xamarin Inc.
15 public static class CommonCryptor {
17 static public void Generate (string namespaceName, string typeName, string baseTypeName, string ccAlgorithmName, string feedbackSize = "8", string ctorInitializers = null, string decryptorInitializers = null, string encryptorInitializers = null, string properties = null)
19 string template = @"// Generated file to bind CommonCrypto cipher algorithms - DO NOT EDIT
22 // Sebastien Pouliot <sebastien@xamarin.com>
24 // Copyright 2012-2014 Xamarin Inc.
27 using System.Security.Cryptography;
29 using Mono.Security.Cryptography;
30 using Crimson.CommonCrypto;
32 namespace %NAMESPACE% {
34 public sealed partial class %TYPE% : %BASE% {
38 FeedbackSizeValue = %FEEDBACKSIZE%;
44 public override void GenerateIV ()
46 IVValue = KeyBuilder.IV (BlockSizeValue >> 3);
49 public override void GenerateKey ()
51 KeyValue = KeyBuilder.Key (KeySizeValue >> 3);
54 public override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV)
56 %CREATEDECRYPTOR_INIT%
58 IntPtr decryptor = IntPtr.Zero;
61 decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.None, rgbKey, rgbIV);
62 return new FastCryptorTransform (decryptor, this, false, rgbIV);
64 decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
65 return new FastCryptorTransform (decryptor, this, false, rgbIV);
67 #if MONOTOUCH || XAMMAC
68 IntPtr encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
69 decryptor = Cryptor.Create (CCOperation.Decrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
70 return new CryptorTransform (decryptor, encryptor, this, false, rgbIV);
72 throw new CryptographicException (""CFB is not supported by Crimson.CommonCrypto"");
75 throw new CryptographicException (String.Format (""{0} is not supported by the .NET framework"", Mode));
79 public override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV)
81 %CREATEENCRYPTOR_INIT%
83 IntPtr encryptor = IntPtr.Zero;
86 encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.None, rgbKey, rgbIV);
87 return new FastCryptorTransform (encryptor, this, true, rgbIV);
89 encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
90 return new FastCryptorTransform (encryptor, this, true, rgbIV);
92 #if MONOTOUCH || XAMMAC
93 encryptor = Cryptor.Create (CCOperation.Encrypt, CCAlgorithm.%CCALGORITHM%, CCOptions.ECBMode, rgbKey, rgbIV);
94 return new CryptorTransform (encryptor, IntPtr.Zero, this, true, rgbIV);
96 throw new CryptographicException (""CFB is not supported by Crimson.CommonCrypto"");
99 throw new CryptographicException (String.Format (""{0} is not supported by the .NET framework"", Mode));
105 File.WriteAllText (typeName + ".g.cs", template.Replace ("%NAMESPACE%", namespaceName).
106 Replace ("%TYPE%", typeName).Replace ("%BASE%", baseTypeName).Replace("%FEEDBACKSIZE%", feedbackSize).Replace ("%CTOR_INIT%", ctorInitializers).
107 Replace ("%CREATEDECRYPTOR_INIT%", decryptorInitializers).
108 Replace ("%CREATEENCRYPTOR_INIT%", encryptorInitializers).
109 Replace ("%PROPERTIES%", properties).
110 Replace ("%CCALGORITHM%", ccAlgorithmName.ToString ()));