There seems to be a bug in ToBigInteger, that causes the output of 
ECFieldElement to sometimes be 33 bits long.

The problem seems to be a leading zero is appended (or left in) during the 
conversion.  This byte seems to be located in byte[0].  So far it seems that 
the value is always zero with these outside-in tests, however further 
investigation is warranted.

Then again, if I do have any error in my code, please let me know.



  while (true)

            {

                ECKeyPairGenerator gen = new ECKeyPairGenerator("ECDSA");

                Org.BouncyCastle.Asn1.X9.X9ECParameters ecp = 
Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");

                ECDomainParameters ecSpec = new ECDomainParameters(ecp.Curve, 
ecp.G, ecp.N, ecp.H, ecp.GetSeed());

                SecureRandom secureRandom = new SecureRandom();

                ECKeyGenerationParameters ecgp = new 
ECKeyGenerationParameters(ecSpec, secureRandom);

                gen.Init(ecgp);

                AsymmetricCipherKeyPair eckp = gen.GenerateKeyPair();


                // Cast it

                var publicKey = (ECPublicKeyParameters)(eckp.Public);

                var privateKey = (ECPrivateKeyParameters)(eckp.Private);


                // Get X and Y

                var pubxBigInt = publicKey.Q.X.ToBigInteger();

                var pubyBigInt = publicKey.Q.Y.ToBigInteger();


                // Get Byte Array... whoa, why is the length 33? Can I simply 
trim the leading zero?

                var pubxBigIntArray = pubyBigInt.ToByteArray();

                var pubyBigIntArray = pubyBigInt.ToByteArray();


                if (pubyBigIntArray.Length > 32 || pubxBigIntArray.Length > 32)

                {

                    StringBuilder sb = new StringBuilder();


                    if (pubxBigIntArray.Length > 32)

                    {

                        sb.Append(String.Format("X is {0} bits.  Bit[0] = {1}", 
pubxBigIntArray.Length, pubxBigIntArray[0]));

                    }

                    if (pubyBigIntArray.Length > 32)

                    {

                        sb.Append(String.Format(" Y is {0} bits.  Bit[0] = 
{1}",pubyBigIntArray.Length, pubyBigIntArray[0]));

                    }

                    Console.WriteLine(sb.ToString());

                }

                else

                {

                    Console.WriteLine("OK");

                }

            }


Chris Mankowski

**********************************************************************
Notice: This e-mail message and any attachment to this e-mail message may 
contain information that is confidential, proprietary, privileged, legally 
privileged and/or exempt from disclosure under applicable law.  If you are not 
the intended recipient, please accept this as notice that any disclosure, 
copying, distribution or use of the information contained in this transmission 
is strictly prohibited. NFP reserves the right, to the extent and under 
circumstances permitted by applicable law, to retain, monitor and intercept 
e-mail messages to and from its systems.

Any views or opinions expressed in this e-mail are those of the sender and do 
not necessarily express those of NFP.  Although this transmission and any 
attachment are believed to be free of any virus or other defect that might 
affect any computer system into which it is received and opened, it is the 
responsibility of the recipient to ensure that it is virus free and no 
responsibility is accepted by NFP, its subsidiaries and affiliates, as 
applicable, for any loss or damage arising in any way from its use.

If you have received this e-mail in error, please immediately contact the 
sender by return e-mail or by telephone at 212-301-4000 and destroy the 
material in its entirety, whether electronic or hard copy format.

Reply via email to