public SM2_SM3Digest(SM2_SM3Digest t) : base(t)
            {
                Array.Copy(t.X, 0, X, 0, t.X.Length);
                xOff = t.xOff;

                Array.Copy(t.v, 0, v, 0, t.v.Length);
            }
Exemplo n.º 2
0
            private void NextKey()
            {
                var sm3Keycur = new SM2_SM3Digest(sm3keybase);

                sm3Keycur.Update((byte)(ct >> 24 & 0xff));
                sm3Keycur.Update((byte)(ct >> 16 & 0xff));
                sm3Keycur.Update((byte)(ct >> 8 & 0xff));
                sm3Keycur.Update((byte)(ct & 0xff));
                sm3Keycur.DoFinal(key, 0);
                keyOff = 0;
                ct++;
            }
Exemplo n.º 3
0
            private void Reset()
            {
                sm3keybase = new SM2_SM3Digest();
                sm3c3      = new SM2_SM3Digest();

                var p = byteConvert32Bytes(p2.Normalize().XCoord.ToBigInteger());

                sm3keybase.BlockUpdate(p, 0, p.Length);
                sm3c3.BlockUpdate(p, 0, p.Length);

                p = byteConvert32Bytes(p2.Normalize().YCoord.ToBigInteger());
                sm3keybase.BlockUpdate(p, 0, p.Length);
                ct = 1;
                NextKey();
            }
        public virtual byte[] Sm2GetZ(byte[] userId, ECPoint userKey)
        {
            SM2_SM3Digest sm3 = new SM2_SM3Digest();

            byte[] p;
            // userId length
            int len = userId.Length * 8;

            sm3.Update((byte)(len >> 8 & 0xff));  //sm3.Update((byte) (len >> 8 & 0x00ff));
            sm3.Update((byte)(len & 0xff));       //sm3.Update((byte) (len & 0x00ff));

            // userId
            sm3.BlockUpdate(userId, 0, userId.Length);

            // a,b
            p = ecc_a.ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);
            p = ecc_b.ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);
            // gx,gy
            p = ecc_gx.ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);
            p = ecc_gy.ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);

            var a0 = userKey.XCoord;
            var a1 = a0.ToBigInteger();
            var a2 = a1.ToByteArray();

            // x,y
            p = userKey.AffineXCoord.ToBigInteger().ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);
            p = userKey.AffineYCoord.ToBigInteger().ToByteArray();
            sm3.BlockUpdate(p, 0, p.Length);

            // Z
            byte[] md = new byte[sm3.GetDigestSize()];
            sm3.DoFinal(md, 0);

            return(md);
        }