のXMLをロードするための必須/オプションの要件について少し混乱していますDSACryptoServiceProvider
。
このWebサイトからのスキーマは、次のとおりです。スキーマ定義:
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
ただし、MSDNによると、DsaKeyValueXMLは次のように定義されています。
<DSAKeyValue>
<!-- Child elements -->
P,
Q,
G?,
Y,
J?,
Seed,
PgenCounter
</DSAKeyValue>
XMLからインポートするときに不正なデータを取得しています。以下は私のコードです:
JsonDictionary privateKeyDictionary = (JsonDictionary) JsonReader.Parse(privateKey);
//FYI: this private signing key was generated using Keyczar.
var dsaParameterArray = privateKeyDictionary["publicKey"] as JsonDictionary;
DSACryptoServiceProvider signer = new DSACryptoServiceProvider(1024);
var pArray = Encoding.UTF8.GetBytes(dsaParameterArray["p"].ToString());
string p = Convert.ToBase64String(pArray);
var qArray = Encoding.UTF8.GetBytes(dsaParameterArray["q"].ToString());
string q = Convert.ToBase64String(qArray);
var gArray = Encoding.UTF8.GetBytes(dsaParameterArray["g"].ToString());
string g = Convert.ToBase64String(gArray);
var yArray = Encoding.UTF8.GetBytes(dsaParameterArray["y"].ToString());
string y = Convert.ToBase64String(yArray);
xml = String.Format("<DSAKeyValue><P>{0}</P><Q>{1}</Q><G>{2}</G><Y>{3}</Y><J/><Seed/><PgenCounter/></DSAKeyValue>", p, q, g, y);
doc = new XmlDocument();
doc.LoadXml(xml);
signer.FromXmlString(doc.InnerXml);
とはいえ、私の問題は、キーに「J」、「Seed」、「PgenCounter」が含まれていないため、それらを提供しなかったことです。W3Cによると、それはオプションです。ただし、キーに「x」が含まれていますが、それが何であるかはわかりませんでした。
W3Cによると、SeedタグとPgenCounterタグはオプションです。ただし、MSDNでは必要に応じて定義しています。
J、Seed、PgenCounterタグを削除しようとしましたが、役に立たなかったようです。
ありがとう!