Add the number of bits a curve has to the ecc_curve definition to be able
to derive the number of bytes a curve requires for its coordinates from it.
It also allows one to identify a curve by its particular size. Set the
number of bits on all curve definitions.
Tested-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Vitaly Chikunov <vt@altlinux.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
                                0x64210519E59C80E7ull };
 static struct ecc_curve nist_p192 = {
        .name = "nist_192",
+       .nbits = 192,
        .g = {
                .x = nist_p192_g_x,
                .y = nist_p192_g_y,
                                0xB3EBBD55769886BCull, 0x5AC635D8AA3A93E7ull };
 static struct ecc_curve nist_p256 = {
        .name = "nist_256",
+       .nbits = 256,
        .g = {
                .x = nist_p256_g_x,
                .y = nist_p256_g_y,
                                0x988e056be3f82d19ull, 0xb3312fa7e23ee7e4ull };
 static struct ecc_curve nist_p384 = {
        .name = "nist_384",
+       .nbits = 384,
        .g = {
                .x = nist_p384_g_x,
                .y = nist_p384_g_y,
                                0x0000000000000000, 0x0000000000000000 };
 static const struct ecc_curve ecc_25519 = {
        .name = "curve25519",
+       .nbits = 255,
        .g = {
                .x = curve25519_g_x,
                .ndigits = 4,
 
 
 static struct ecc_curve gost_cp256a = {
        .name = "cp256a",
+       .nbits = 256,
        .g = {
                .x = cp256a_g_x,
                .y = cp256a_g_y,
 
 static struct ecc_curve gost_cp256b = {
        .name = "cp256b",
+       .nbits = 256,
        .g = {
                .x = cp256b_g_x,
                .y = cp256b_g_y,
 
 static struct ecc_curve gost_cp256c = {
        .name = "cp256c",
+       .nbits = 256,
        .g = {
                .x = cp256c_g_x,
                .y = cp256c_g_y,
 
 static struct ecc_curve gost_tc512a = {
        .name = "tc512a",
+       .nbits = 512,
        .g = {
                .x = tc512a_g_x,
                .y = tc512a_g_y,
 
 static struct ecc_curve gost_tc512b = {
        .name = "tc512b",
+       .nbits = 512,
        .g = {
                .x = tc512b_g_x,
                .y = tc512b_g_y,
 
  * struct ecc_curve - definition of elliptic curve
  *
  * @name:      Short name of the curve.
+ * @nbits:     The number of bits of a curve.
  * @g:         Generator point of the curve.
  * @p:         Prime number, if Barrett's reduction is used for this curve
  *             pre-calculated value 'mu' is appended to the @p after ndigits.
  */
 struct ecc_curve {
        char *name;
+       u32 nbits;
        struct ecc_point g;
        u64 *p;
        u64 *n;