Microsoft Updater Application Block 1.4.2 IValidator接口设计 [翻译]
Microsoft Updater Application Block IValidator接口设计
译者:Tony Qu
IValidator接口使得通过实现验证器扩展Updater Application Block成为可能。
问题描述
为了允许程序员把自己的验证器实现插入到Updater Application Block中,一个用于定义验证器类型的公共接口必须被显露出来,验证器类型将被manifest工具使用。
设计目的、权衡和问题
Updater Application Block的开发人员认识到以下一些目标、权衡和问题
1. Updater Application Block应该有足够的灵活性来支持各式各样的验证技术和密钥。
2. 验证器应该既能够生成签名,又能够验证这些签名。
3. 虽然大多数加密技术内部包含对字节数组或流的修改,但这决定了验证器必须以字符串类型暴露所有的密钥和签名。这使得验证基于xml的manifest文件中的签名变得更加简单,并且给了开发人员在选择验证算法方面更多的自由。
解决方案
IValidator接口形成的构建验证器类的基础,它暴露出三个方法:
1. Init —— 用于初始化验证器
2. Validate —— 重载方法,该方法用于验证一个文件或一个xml节点
3. Sign —— 重载方法,用于为一个文件或xml节点生成签名。
具体实现
IValidator接口位于Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces命名空间。
[VB.NET]
[C#]
暴露出来的IValidator接口的方法将在下面讨论:
1. Init方法用于初始化验证器,它从应用程序升级配置文件中读取<validator>配置节。在大多数情况下,该配置节将包含一个<key>元素,该元素提供用于签名生成和验证的加密密钥。
2. Validate方法被重载,使其可以接受一个string类型或一个XmlNode类型的参数作为验证内容。在两个重载函数,另一个参数是一个包含签名的string值,返回值是一个反映验证是否成功的bool值。
3. Sign方法被重载,使其接受一个包含文件路径的字符串或者包含<ServerApplicationInfo>节点信息的XmlNode值。两个重载函数的第二个参数是一个包含密钥的字符串,该密钥用于生成签名。该方法返回一个包含签名的字符串。
注意:由于IValidator接口派生与IDisposable接口,任何一个验证器类还必须实现IDisposable接口,该接口提供一种通用而有效的释放资源的模式。
译者:Tony Qu
IValidator接口使得通过实现验证器扩展Updater Application Block成为可能。
问题描述
为了允许程序员把自己的验证器实现插入到Updater Application Block中,一个用于定义验证器类型的公共接口必须被显露出来,验证器类型将被manifest工具使用。
设计目的、权衡和问题
Updater Application Block的开发人员认识到以下一些目标、权衡和问题
1. Updater Application Block应该有足够的灵活性来支持各式各样的验证技术和密钥。
2. 验证器应该既能够生成签名,又能够验证这些签名。
3. 虽然大多数加密技术内部包含对字节数组或流的修改,但这决定了验证器必须以字符串类型暴露所有的密钥和签名。这使得验证基于xml的manifest文件中的签名变得更加简单,并且给了开发人员在选择验证算法方面更多的自由。
解决方案
IValidator接口形成的构建验证器类的基础,它暴露出三个方法:
1. Init —— 用于初始化验证器
2. Validate —— 重载方法,该方法用于验证一个文件或一个xml节点
3. Sign —— 重载方法,用于为一个文件或xml节点生成签名。
具体实现
IValidator接口位于Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces命名空间。
[VB.NET]
Public Interface IValidator
Inherits IDisposable
Sub Init (ByVal config As XmlNode)
Function Validate (ByVal filePath As String, ByVal signature As String) _
As Boolean
Function Validate (ByVal xml As XmlNode, ByVal signature As String) _
As Boolean
Function Sign (ByVal filePath As String, ByVal key As String) As String
Function Sign (ByVal xml As XmlNode, ByVal key As String) As String
End Interface
Inherits IDisposable
Sub Init (ByVal config As XmlNode)
Function Validate (ByVal filePath As String, ByVal signature As String) _
As Boolean
Function Validate (ByVal xml As XmlNode, ByVal signature As String) _
As Boolean
Function Sign (ByVal filePath As String, ByVal key As String) As String
Function Sign (ByVal xml As XmlNode, ByVal key As String) As String
End Interface
public interface IValidator : IDisposable
{
void Init( XmlNode config );
bool Validate( string filePath, string signature );
bool Validate( XmlNode xml, string signature );
string Sign( string filePath, string key );
string Sign( XmlNode xml, string key );
}
{
void Init( XmlNode config );
bool Validate( string filePath, string signature );
bool Validate( XmlNode xml, string signature );
string Sign( string filePath, string key );
string Sign( XmlNode xml, string key );
}
1. Init方法用于初始化验证器,它从应用程序升级配置文件中读取<validator>配置节。在大多数情况下,该配置节将包含一个<key>元素,该元素提供用于签名生成和验证的加密密钥。
2. Validate方法被重载,使其可以接受一个string类型或一个XmlNode类型的参数作为验证内容。在两个重载函数,另一个参数是一个包含签名的string值,返回值是一个反映验证是否成功的bool值。
3. Sign方法被重载,使其接受一个包含文件路径的字符串或者包含<ServerApplicationInfo>节点信息的XmlNode值。两个重载函数的第二个参数是一个包含密钥的字符串,该密钥用于生成签名。该方法返回一个包含签名的字符串。
注意:由于IValidator接口派生与IDisposable接口,任何一个验证器类还必须实现IDisposable接口,该接口提供一种通用而有效的释放资源的模式。
版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。