mirror of
https://github.com/twiglet/cs2j.git
synced 2025-01-18 13:15:17 +01:00
Add code to count unsigned translation files
This commit is contained in:
parent
b12fce2bff
commit
257b7fc186
@ -11,6 +11,9 @@ using Antlr.Runtime.Tree;
|
|||||||
using Antlr.Runtime;
|
using Antlr.Runtime;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Security.Cryptography.Xml;
|
||||||
|
|
||||||
using Antlr.StringTemplate;
|
using Antlr.StringTemplate;
|
||||||
|
|
||||||
using NDesk.Options;
|
using NDesk.Options;
|
||||||
@ -31,8 +34,12 @@ namespace Twiglet.CS2J.Translator
|
|||||||
private const string VERSION = "2011.1.1.x";
|
private const string VERSION = "2011.1.1.x";
|
||||||
private static DirectoryHT<TypeRepTemplate> AppEnv { get; set; }
|
private static DirectoryHT<TypeRepTemplate> AppEnv { get; set; }
|
||||||
private static CS2JSettings cfg = new CS2JSettings();
|
private static CS2JSettings cfg = new CS2JSettings();
|
||||||
private static StringTemplateGroup templates = null;
|
private static StringTemplateGroup templates = null;
|
||||||
|
|
||||||
|
private static RSACryptoServiceProvider RsaKey = null;
|
||||||
|
private int badXmlTxCountTrigger = 3 + 4 - 2;
|
||||||
|
private int badXmlTxCount = badXmlTxCountTrigger;
|
||||||
|
|
||||||
public delegate void FileProcessor(string fName);
|
public delegate void FileProcessor(string fName);
|
||||||
|
|
||||||
private static void showVersion()
|
private static void showVersion()
|
||||||
@ -112,6 +119,7 @@ namespace Twiglet.CS2J.Translator
|
|||||||
.Add ("appdir=", dirs => addDirectories(cfg.AppRoot, dirs))
|
.Add ("appdir=", dirs => addDirectories(cfg.AppRoot, dirs))
|
||||||
.Add ("exappdir=", dirs => addDirectories(cfg.ExAppRoot, dirs))
|
.Add ("exappdir=", dirs => addDirectories(cfg.ExAppRoot, dirs))
|
||||||
.Add ("exclude=", dirs => addDirectories(cfg.Exclude, dirs))
|
.Add ("exclude=", dirs => addDirectories(cfg.Exclude, dirs))
|
||||||
|
.Add ("keyfile=", v => cfg.KeyFile = v)
|
||||||
.Add ("translator-keep-parens=", v => cfg.TranslatorKeepParens = Boolean.Parse(v))
|
.Add ("translator-keep-parens=", v => cfg.TranslatorKeepParens = Boolean.Parse(v))
|
||||||
.Add ("translator-timestamp-files=", v => cfg.TranslatorAddTimeStamp = Boolean.Parse(v))
|
.Add ("translator-timestamp-files=", v => cfg.TranslatorAddTimeStamp = Boolean.Parse(v))
|
||||||
.Add ("translator-exception-is-throwable=", v => cfg.TranslatorExceptionIsThrowable = Boolean.Parse(v))
|
.Add ("translator-exception-is-throwable=", v => cfg.TranslatorExceptionIsThrowable = Boolean.Parse(v))
|
||||||
@ -125,6 +133,19 @@ namespace Twiglet.CS2J.Translator
|
|||||||
// No work
|
// No work
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
|
|
||||||
|
|
||||||
|
// Initialise RSA signing key so that we can verify signatures
|
||||||
|
RsaKey = new RSACryptoServiceProvider();
|
||||||
|
string rsaPubXml = RSAPubKey.PubKey;
|
||||||
|
// Comment out code to read pub key from a file. To easy to re-sign xml files and import your own key!
|
||||||
|
// if (!String.IsNullOrEmpty(cfg.KeyFile))
|
||||||
|
// {
|
||||||
|
// XmlReader reader = XmlReader.Create(cfg.KeyFile);
|
||||||
|
// reader.MoveToContent();
|
||||||
|
// rsaPubXml = reader.ReadOuterXml();
|
||||||
|
// }
|
||||||
|
RsaKey.FromXmlString(rsaPubXml);
|
||||||
|
|
||||||
// Load .Net templates
|
// Load .Net templates
|
||||||
foreach (string r in cfg.NetRoot)
|
foreach (string r in cfg.NetRoot)
|
||||||
doFile(r, ".xml", addNetTranslation, cfg.ExNetRoot);
|
doFile(r, ".xml", addNetTranslation, cfg.ExNetRoot);
|
||||||
@ -263,11 +284,82 @@ namespace Twiglet.CS2J.Translator
|
|||||||
return nodes;
|
return nodes;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Verify the signature of an XML file against an asymmetric
|
||||||
|
// algorithm and return the result.
|
||||||
|
public static Boolean VerifyXml(XmlDocument Doc, RSA Key)
|
||||||
|
{
|
||||||
|
// Check arguments.
|
||||||
|
if (Doc == null)
|
||||||
|
throw new ArgumentException("Doc");
|
||||||
|
if (Key == null)
|
||||||
|
throw new ArgumentException("Key");
|
||||||
|
|
||||||
|
// Create a new SignedXml object and pass it
|
||||||
|
// the XML document class.
|
||||||
|
SignedXml signedXml = new SignedXml(Doc);
|
||||||
|
|
||||||
|
// Find the "Signature" node and create a new
|
||||||
|
// XmlNodeList object.
|
||||||
|
XmlNodeList nodeList = Doc.GetElementsByTagName("Signature");
|
||||||
|
|
||||||
|
// Throw an exception if no signature was found.
|
||||||
|
if (nodeList.Count <= 0)
|
||||||
|
{
|
||||||
|
throw new CryptographicException("Verification failed: No Signature was found in the document.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// This example only supports one signature for
|
||||||
|
// the entire XML document. Throw an exception
|
||||||
|
// if more than one signature was found.
|
||||||
|
if (nodeList.Count >= 2)
|
||||||
|
{
|
||||||
|
throw new CryptographicException("Verification failed: More that one signature was found for the document.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the first <signature> node.
|
||||||
|
signedXml.LoadXml((XmlElement)nodeList[0]);
|
||||||
|
|
||||||
|
// Check the signature and return the result.
|
||||||
|
return signedXml.CheckSignature(Key);
|
||||||
|
}
|
||||||
|
|
||||||
// Here's where we do the real work...
|
// Here's where we do the real work...
|
||||||
public static void addNetTranslation(string fullName)
|
public static void addNetTranslation(string fullName)
|
||||||
{
|
{
|
||||||
Stream s = new FileStream(fullName, FileMode.Open, FileAccess.Read);
|
|
||||||
TypeRepTemplate t = TypeRepTemplate.newInstance(s);
|
// Suchk in translation file
|
||||||
|
Stream txStream = new FileStream(fullName, FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
|
// Create a new XML document.
|
||||||
|
XmlDocument xmlDoc = new XmlDocument();
|
||||||
|
|
||||||
|
// Load an XML file into the XmlDocument object.
|
||||||
|
xmlDoc.PreserveWhitespace = true;
|
||||||
|
xmlDoc.Load(txStream);
|
||||||
|
|
||||||
|
// Verify the signature of the signed XML.
|
||||||
|
Console.WriteLine("Verifying signature...");
|
||||||
|
bool result = VerifyXml(xmlDoc, RsaKey);
|
||||||
|
|
||||||
|
// Display the results of the signature verification to
|
||||||
|
// the console.
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
// badXmlTxCount--;
|
||||||
|
if (badCountTrigger <= 0)
|
||||||
|
{
|
||||||
|
Console.Out.WriteLine("This is a trial version of CS2J. It is to be used for evaluation purposes only.");
|
||||||
|
Console.Out.WriteLine("The .Net translations that you are using contain more than " + badXmlTxCountTrigger + " unsigned or modified translation files.");
|
||||||
|
Console.Out.WriteLine("Please reduce your number of unsigned and modified translation files and try again.");
|
||||||
|
Console.Out.WriteLine("Contact Twiglet Software at info@twigletsoftware.com (http://www.twigletsoftware.com) for licensing details.");
|
||||||
|
Environment.Exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
txStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
TypeRepTemplate t = TypeRepTemplate.newInstance(txStream);
|
||||||
// Fullname has form: <path>/<key>.xml
|
// Fullname has form: <path>/<key>.xml
|
||||||
AppEnv[t.TypeName+(t.TypeParams != null && t.TypeParams.Length > 0 ? "'" + t.TypeParams.Length.ToString() : "")] = t;
|
AppEnv[t.TypeName+(t.TypeParams != null && t.TypeParams.Length > 0 ? "'" + t.TypeParams.Length.ToString() : "")] = t;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,8 @@ namespace Twiglet.CS2J.Translator
|
|||||||
public string EnumDir { get; set; }
|
public string EnumDir { get; set; }
|
||||||
public int Verbosity { get; set; }
|
public int Verbosity { get; set; }
|
||||||
|
|
||||||
|
public string KeyFile { get; set; }
|
||||||
|
|
||||||
public bool DebugTemplateExtraction { get; set; }
|
public bool DebugTemplateExtraction { get; set; }
|
||||||
public int DebugLevel { get; set; }
|
public int DebugLevel { get; set; }
|
||||||
|
|
||||||
@ -76,6 +78,7 @@ namespace Twiglet.CS2J.Translator
|
|||||||
MacroDefines = new List<string>();
|
MacroDefines = new List<string>();
|
||||||
XmlDir = Path.Combine(Directory.GetCurrentDirectory(), "tmpXMLs");
|
XmlDir = Path.Combine(Directory.GetCurrentDirectory(), "tmpXMLs");
|
||||||
EnumDir = Path.Combine(Directory.GetCurrentDirectory(), "enums");
|
EnumDir = Path.Combine(Directory.GetCurrentDirectory(), "enums");
|
||||||
|
KeyFile = null;
|
||||||
Verbosity = 0;
|
Verbosity = 0;
|
||||||
DebugTemplateExtraction = true;
|
DebugTemplateExtraction = true;
|
||||||
DebugLevel = 0;
|
DebugLevel = 0;
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2010,2011 Kevin Glynn (kevin.glynn@twigletsoftware.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Twiglet.CS2J.Translator
|
||||||
|
{
|
||||||
|
public class RSAPubKey
|
||||||
|
{
|
||||||
|
|
||||||
|
private static string _key = @"
|
||||||
|
<RSAKeyValue>
|
||||||
|
<Modulus>iTXgwMVVIk25/pstsBVNNsONs5Q4haeikef5YcRBuTh6slndGs5cj7h0LSHRqPNesp3EwVmwJYY11bDkutN1+rzs9EH3X4vJI6SKgKEHDi5ZV1kfZ8eA3xos8TKNvE4WK33+0ZmZJYkL0sknFyEOIGVek/OiAlsriNZ7NmerWuU=</Modulus>
|
||||||
|
<Exponent>EQ==</Exponent>
|
||||||
|
</RSAKeyValue>
|
||||||
|
";
|
||||||
|
|
||||||
|
public static string PubKey { get
|
||||||
|
{ return _key; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
@ -24,6 +24,7 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Commandlineparameters>-translator-timestamp-files=false -translator-keep-parens=false -netdir=/Users/keving/gitrepos/cs2j/CS2JLibrary/NetFramework/ -dumpxmls -xmldir=/Users/keving/tmp/xml/se -odir=/Users/keving/tmp/java/se/src -appdir=/Users/keving/svnrepos/ScormEngineNet/src/app/ScormEngine.Core /Users/keving/svnrepos/ScormEngineNet/src/app/ScormEngine.Core/Logic/Integration/IntegrationInterface.cs</Commandlineparameters>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
@ -63,6 +64,7 @@
|
|||||||
<Compile Include="CS2JUtil\Constants.cs" />
|
<Compile Include="CS2JUtil\Constants.cs" />
|
||||||
<Compile Include="CS2JUtil\DirectoryHT.cs" />
|
<Compile Include="CS2JUtil\DirectoryHT.cs" />
|
||||||
<Compile Include="CS2JUtil\Set.cs" />
|
<Compile Include="CS2JUtil\Set.cs" />
|
||||||
|
<Compile Include="CS2JMain\RSAPubKey.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\CSharpParser\cs.g">
|
<None Include="..\CSharpParser\cs.g">
|
||||||
@ -82,6 +84,7 @@
|
|||||||
<HintPath>..\..\dll\StringTemplate.dll</HintPath>
|
<HintPath>..\..\dll\StringTemplate.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Security" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Antlr.Runtime\Antlr3.Runtime.csproj">
|
<ProjectReference Include="..\Antlr.Runtime\Antlr3.Runtime.csproj">
|
||||||
|
@ -766,7 +766,7 @@ public get_accessor_declaration:
|
|||||||
public set_accessor_declaration:
|
public set_accessor_declaration:
|
||||||
accessor_modifier? 'set' accessor_body ;
|
accessor_modifier? 'set' accessor_body ;
|
||||||
public accessor_modifier:
|
public accessor_modifier:
|
||||||
'protected' 'internal'? | 'private' | 'internal' 'protected'?;
|
'protected' 'internal'? | 'private' | 'internal' 'protected'? ;
|
||||||
public accessor_body:
|
public accessor_body:
|
||||||
block ;
|
block ;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user