1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* crypto/ec/ec_lib.c */
2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/*
3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Originally written by Bodo Moeller for the OpenSSL project.
4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */
5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* ====================================================================
6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Copyright (c) 1998-2003 The OpenSSL Project.  All rights reserved.
7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Redistribution and use in source and binary forms, with or without
9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * modification, are permitted provided that the following conditions
10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * are met:
11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 1. Redistributions of source code must retain the above copyright
13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    notice, this list of conditions and the following disclaimer.
14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 2. Redistributions in binary form must reproduce the above copyright
16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    notice, this list of conditions and the following disclaimer in
17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    the documentation and/or other materials provided with the
18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    distribution.
19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 3. All advertising materials mentioning features or use of this
21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    software must display the following acknowledgment:
22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    "This product includes software developed by the OpenSSL Project
23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    endorse or promote products derived from this software without
27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    prior written permission. For written permission, please contact
28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    openssl-core@openssl.org.
29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 5. Products derived from this software may not be called "OpenSSL"
31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    nor may "OpenSSL" appear in their names without prior written
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    permission of the OpenSSL Project.
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 6. Redistributions of any form whatsoever must retain the following
35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    acknowledgment:
36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    "This product includes software developed by the OpenSSL Project
37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * OF THE POSSIBILITY OF SUCH DAMAGE.
51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ====================================================================
52392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * This product includes cryptographic software written by Eric Young
54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * (eay@cryptsoft.com).  This product includes software written by Tim
55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Hudson (tjh@cryptsoft.com).
56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom *
57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */
58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* ====================================================================
59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Binary polynomial ECC support in OpenSSL originally developed by
61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
62392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */
63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
64392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <string.h>
65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <openssl/err.h>
67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <openssl/opensslv.h>
68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "ec_lcl.h"
70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,
72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	const BIGNUM *x, int y_bit, BN_CTX *ctx)
73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	{
74392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth->point_set_compressed_coordinates == 0
75392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		&& !(group->meth->flags & EC_FLAGS_DEFAULT_OCT))
76392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
77392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
79392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
80392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth != point->meth)
81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
82392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, EC_R_INCOMPATIBLE_OBJECTS);
83392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if(group->meth->flags & EC_FLAGS_DEFAULT_OCT)
86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
87392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		if (group->meth->field_type == NID_X9_62_prime_field)
88392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GFp_simple_set_compressed_coordinates(
89392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom					group, point, x, y_bit, ctx);
90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		else
91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef OPENSSL_NO_EC2M
92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			{
93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, EC_R_GF2M_NOT_SUPPORTED);
94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return 0;
95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			}
96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GF2m_simple_set_compressed_coordinates(
98392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom					group, point, x, y_bit, ctx);
99392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
100392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
101392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	return group->meth->point_set_compressed_coordinates(group, point, x, y_bit, ctx);
102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	}
103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
104392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_EC2M
105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *point,
106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	const BIGNUM *x, int y_bit, BN_CTX *ctx)
107392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	{
108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth->point_set_compressed_coordinates == 0
109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		&& !(group->meth->flags & EC_FLAGS_DEFAULT_OCT))
110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
111392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
113392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth != point->meth)
115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
116392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M, EC_R_INCOMPATIBLE_OBJECTS);
117392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
118392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
119392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if(group->meth->flags & EC_FLAGS_DEFAULT_OCT)
120392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
121392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		if (group->meth->field_type == NID_X9_62_prime_field)
122392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GFp_simple_set_compressed_coordinates(
123392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom					group, point, x, y_bit, ctx);
124392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		else
125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GF2m_simple_set_compressed_coordinates(
126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom					group, point, x, y_bit, ctx);
127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	return group->meth->point_set_compressed_coordinates(group, point, x, y_bit, ctx);
129392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	}
130392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
131392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
132392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromsize_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *point, point_conversion_form_t form,
133392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        unsigned char *buf, size_t len, BN_CTX *ctx)
134392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	{
135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth->point2oct == 0
136392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		&& !(group->meth->flags & EC_FLAGS_DEFAULT_OCT))
137392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
138392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_POINT2OCT, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
140392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
141392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth != point->meth)
142392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
143392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_POINT2OCT, EC_R_INCOMPATIBLE_OBJECTS);
144392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
145392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
146392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if(group->meth->flags & EC_FLAGS_DEFAULT_OCT)
147392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
148392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		if (group->meth->field_type == NID_X9_62_prime_field)
149392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GFp_simple_point2oct(group, point,
150392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom							form, buf, len, ctx);
151392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		else
152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef OPENSSL_NO_EC2M
153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			{
154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			ECerr(EC_F_EC_POINT_POINT2OCT, EC_R_GF2M_NOT_SUPPORTED);
155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return 0;
156392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			}
157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GF2m_simple_point2oct(group, point,
159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom							form, buf, len, ctx);
160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
163392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	return group->meth->point2oct(group, point, form, buf, len, ctx);
164392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	}
165392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
167392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *point,
168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        const unsigned char *buf, size_t len, BN_CTX *ctx)
169392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	{
170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth->oct2point == 0
171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		&& !(group->meth->flags & EC_FLAGS_DEFAULT_OCT))
172392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
173392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_OCT2POINT, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
174392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
176392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (group->meth != point->meth)
177392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
178392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		ECerr(EC_F_EC_POINT_OCT2POINT, EC_R_INCOMPATIBLE_OBJECTS);
179392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
180392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
181392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if(group->meth->flags & EC_FLAGS_DEFAULT_OCT)
182392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
183392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		if (group->meth->field_type == NID_X9_62_prime_field)
184392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GFp_simple_oct2point(group, point,
185392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom							buf, len, ctx);
186392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		else
187392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef OPENSSL_NO_EC2M
188392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			{
189392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			ECerr(EC_F_EC_POINT_OCT2POINT, EC_R_GF2M_NOT_SUPPORTED);
190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return 0;
191392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			}
192392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
193392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom			return ec_GF2m_simple_oct2point(group, point,
194392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom							buf, len, ctx);
195392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
196392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
197392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	return group->meth->oct2point(group, point, buf, len, ctx);
198392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	}
199392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
200