資源簡介
SM9.zip

代碼片段和文件信息
using?System;
using?System.Text;
using?Org.BouncyCastle.Crypto;
using?Org.BouncyCastle.Crypto.Parameters;
using?Org.BouncyCastle.Crypto.Generators;
using?Org.BouncyCastle.Math;
using?Org.BouncyCastle.Math.EC;
using?Org.BouncyCastle.Security;?//SecureRandom
using?Org.BouncyCastle.Utilities.Encoders;
namespace?CTIDTestKit
{
????#region?SM9工具類函數
????public?class?SM9Tools
????{
????????#region?二次擴域下操作(實一次多項式操作)
????????//一次多項式相乘【(a?*?x?+?b)?*?(c?*?x?+?d)?mod?(x^2?+?2)?mod?q】
????????public?static?BigInteger[]?FxMultiply(BigInteger?q?BigInteger[]?Fxa?BigInteger[]?Fxb)
????????{
????????????BigInteger[]?Fx?=?new?BigInteger[2];
????????????if?(null?!=?Fxa[0]?&&?null?!=?Fxa[1]?&&?null?!=?Fxb[0]?&&?null?!=?Fxb[1])
????????????{
????????????????Fx[0]?=?Fxa[0].Multiply(Fxb[1]).Add(Fxa[1].Multiply(Fxb[0])).Mod(q);
????????????????Fx[1]?=?Fxa[1].Multiply(Fxb[1]).Subtract(BigInteger.Two.Multiply(Fxa[0].Multiply(Fxb[0]))).Mod(q);
????????????}
????????????return?Fx;
????????}
????????//一次多項式逆【(a?*?x?+?b)^-1?mod?(x^2?+?2)?mod?q】
????????public?static?BigInteger[]?FxInverse(BigInteger?q?BigInteger[]?Fxa)
????????{
????????????BigInteger[]?Fx?=?new?BigInteger[2];
????????????BigInteger?temp?=?null;
????????????if(BigInteger.Zero.CompareTo(Fxa[0])?!=?0?&&?BigInteger.Zero.CompareTo(Fxa[1])?!=?0)
????????????{
????????????????temp?=?Fxa[1].Pow(2).Add(BigInteger.Two.Multiply(Fxa[0].Pow(2)).Mod(q)).ModInverse(q);
????????????????Fx[0]?=?(BigInteger.Zero.Subtract(Fxa[0])).Multiply(temp).Mod(q);
????????????????Fx[1]?=?Fxa[1].Multiply(temp).Mod(q);
????????????}????????????
????????????return?Fx;
????????}
????????//一次多項式與整數相乘【(a?*?x?+?b)?*?n?mod?(x^2?+?2)?mod?q】
????????public?static?BigInteger[]?nFx(BigInteger?q?BigInteger[]?Fxa?BigInteger?n)
????????{
????????????BigInteger[]?Fx?=?new?BigInteger[2];
????????????Fx[0]?=?Fxa[0].Multiply(n).Mod(q);
????????????Fx[1]?=?Fxa[1].Multiply(n).Mod(q);
????????????return?Fx;
????????}
????????//一次多項式加減【(a?*?x?+?b)?±?(c?*?x?+?d)?mod?(x^2?+?2)?mod?q?type?=?true:加法?/?type?=?false:減法】
????????public?static?BigInteger[]?FxAddSub(BigInteger?q?BigInteger[]?Fxa?BigInteger[]?Fxb?bool?type)
????????{
????????????BigInteger[]?Fx?=?new?BigInteger[2];
????????????if?(null?!=?Fxa[0]?&&?null?!=?Fxa[1]?&&?null?!=?Fxb[0]?&&?null?!=?Fxb[1])
????????????{?
????????????????if?(type)?{?Fx[0]?=?Fxa[0].Add(Fxb[0]).Mod(q);?Fx[1]?=?Fxa[1].Add(Fxb[1]).Mod(q);?}
????????????????else?{?Fx[0]?=?Fxa[0].Subtract(Fxb[0]).Mod(q);?Fx[1]?=?Fxa[1].Subtract(Fxb[1]).Mod(q);}
????????????}????????????
????????????return?Fx;
????????}
????????#endregion?
????????#region?十二次擴域乘法盒
????????public?static?void?G12boxik(int?a?int?b?ref?int?i?ref?BigInteger?k)
????????{
????????????int[]?box?=?{?11?5?8?2?10?4?7?1?9?3?6?0?};
????????????if?(box[a]?+?box[b]?12)?{?k?=?BigInteger.One;?}?else?{?k?=?BigInteger.ValueOf(-2);?}
????????????i?=?Array.IndexOf(box?(box[a]?+?box[b])?%?12)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????43722??2020-09-23?11:56??SM9.cs
?????文件????10278867??2020-09-07?14:18??GB∕T?38635.2-2020?信息安全技術?SM9標識密碼算法?第2部分:算法.pdf
?????文件?????2602857??2020-05-15?20:45??GB∕T?38635.1-2020?信息安全技術?SM9標識密碼算法?第1部分:總則.pdf
評論
共有 條評論