• 大小: 10.73M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-05
  • 语言: 其他
  • 标签: 其他  

资源简介

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

评论

共有 条评论