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]
译者: 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
Interface IValidator
Inherits IDisposable
Sub Init()Sub Init (ByVal config As XmlNode)
Function Validate()Function Validate (ByVal filePath As String, ByVal signature As String) _
As Boolean
Function Validate()Function Validate (ByVal xml As XmlNode, ByVal signature As String) _
As Boolean
Function Sign()Function Sign (ByVal filePath As String, ByVal key As String) As String
Function Sign()Function Sign (ByVal xml As XmlNode, ByVal key As String) As String
End Interface
Inherits IDisposable
Sub Init()Sub Init (ByVal config As XmlNode)
Function Validate()Function Validate (ByVal filePath As String, ByVal signature As String) _
As Boolean
Function Validate()Function Validate (ByVal xml As XmlNode, ByVal signature As String) _
As Boolean
Function Sign()Function Sign (ByVal filePath As String, ByVal key As String) As String
Function Sign()Function Sign (ByVal xml As XmlNode, ByVal key As String) As String
End Interface