Exemplo n.º 1
0
        public void GenEcdhKeys()
        {
            IntPtr ec_key = Libcrypto.EC_KEY_new_by_curve_name(415);

            Libcrypto.EC_KEY_generate_key(ec_key);

            IntPtr ec_group = Libcrypto.EC_KEY_get0_group(ec_key);
            IntPtr ec_point = Libcrypto.EC_KEY_get0_public_key(ec_key);

            Publen   = Libcrypto.EC_POINT_point2oct(ec_group, ec_point, 4, PublicKey, 65, 0);
            ec_point = Libcrypto.EC_KEY_get0_private_key(ec_key);
            Prilen   = Libcrypto.BN_bn2mpi(ec_point, PrivateKey);
        }
Exemplo n.º 2
0
        private byte[] GenShareKeyByte(byte[] publicKey, byte[] privateKey)
        {
            IntPtr ec_key = Libcrypto.EC_KEY_new_by_curve_name(415);
            IntPtr bn     = Libcrypto.BN_new();

            Libcrypto.BN_mpi2bn(privateKey, privateKey.Length, bn);
            Libcrypto.EC_KEY_set_private_key(ec_key, bn);
            Libcrypto.BN_free(bn);

            IntPtr ec_group = Libcrypto.EC_KEY_get0_group(ec_key);
            IntPtr ec_point = Libcrypto.EC_POINT_new(ec_group);

            Libcrypto.EC_POINT_oct2point(ec_group, ec_point, publicKey, publicKey.Length, 0);
            Libcrypto.ECDH_compute_key(ShareKey, 16, ec_point, ec_key, 0);
            return(ShareKey);
        }