Annotation of embedaddon/strongswan/src/libstrongswan/plugins/ntru/ntru_param_set.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2014 Andreas Steffen
        !             3:  * HSR Hochschule fuer Technik Rapperswil
        !             4:  *
        !             5:  * Copyright (C) 2009-2013  Security Innovation
        !             6:  *
        !             7:  * This program is free software; you can redistribute it and/or modify it
        !             8:  * under the terms of the GNU General Public License as published by the
        !             9:  * Free Software Foundation; either version 2 of the License, or (at your
        !            10:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !            11:  *
        !            12:  * This program is distributed in the hope that it will be useful, but
        !            13:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            14:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            15:  * for more details.
        !            16:  */
        !            17: 
        !            18: #include "ntru_param_set.h"
        !            19: 
        !            20: #include <utils/test.h>
        !            21: 
        !            22: ENUM(ntru_param_set_id_names, NTRU_EES401EP1, NTRU_EES743EP1,
        !            23:        "ees401ep1",
        !            24:        "ees449ep1",
        !            25:        "ees677ep1",
        !            26:        "ees1087ep2",
        !            27:        "ees541ep1",
        !            28:        "ees613ep1",
        !            29:        "ees887ep1",
        !            30:        "ees1171ep1",
        !            31:        "ees659ep1",
        !            32:        "ees761ep1",
        !            33:        "ees1087ep1",
        !            34:        "ees1499ep1",
        !            35:        "ees401ep2",
        !            36:        "ees439ep1",
        !            37:        "ees593ep1",
        !            38:        "ees743ep1"
        !            39: );
        !            40: 
        !            41: /**
        !            42:  * NTRU encryption parameter set definitions
        !            43:  */
        !            44: static const ntru_param_set_t ntru_param_sets[] = {
        !            45: 
        !            46:        /* X9.98/IEEE 1363.1 parameter sets for best bandwidth (smallest size) */
        !            47:     {
        !            48:         NTRU_EES401EP1,              /* parameter-set id */
        !            49:         {0x00, 0x02, 0x04},          /* OID */
        !            50:         0x22,                        /* DER id */
        !            51:         9,                           /* no. of bits in N (i.e., in an index) */
        !            52:         401,                         /* N */
        !            53:         14,                          /* security strength in octets */
        !            54:         2048,                        /* q */
        !            55:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !            56:         FALSE,                       /* product form */
        !            57:         113,                         /* df, dr */
        !            58:         133,                         /* dg */
        !            59:         60,                          /* maxMsgLenBytes */
        !            60:         113,                         /* dm0 */
        !            61:         11,                          /* c */
        !            62:         1,                           /* lLen */
        !            63:     },
        !            64: 
        !            65:     {
        !            66:         NTRU_EES449EP1,              /* parameter-set id */
        !            67:         {0x00, 0x03, 0x03},          /* OID */
        !            68:         0x23,                        /* DER id */
        !            69:         9,                           /* no. of bits in N (i.e., in an index) */
        !            70:         449,                         /* N */
        !            71:         16,                          /* security strength in octets */
        !            72:         2048,                        /* q */
        !            73:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !            74:         FALSE,                       /* product form */
        !            75:         134,                         /* df, dr */
        !            76:         149,                         /* dg */
        !            77:         67,                          /* maxMsgLenBytes */
        !            78:         134,                         /* dm0 */
        !            79:         9,                           /* c */
        !            80:         1,                           /* lLen */
        !            81:     },
        !            82: 
        !            83:     {
        !            84:         NTRU_EES677EP1,              /* parameter-set id */
        !            85:         {0x00, 0x05, 0x03},          /* OID */
        !            86:         0x24,                        /* DER id */
        !            87:         10,                          /* no. of bits in N (i.e., in an index) */
        !            88:         677,                         /* N */
        !            89:         24,                          /* security strength in octets */
        !            90:         2048,                        /* q */
        !            91:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !            92:         FALSE,                       /* product form */
        !            93:         157,                         /* df, dr */
        !            94:         225,                         /* dg */
        !            95:         101,                         /* maxMsgLenBytes */
        !            96:         157,                         /* dm0 */
        !            97:         11,                          /* c */
        !            98:         1,                           /* lLen */
        !            99:     },
        !           100: 
        !           101:     {
        !           102:         NTRU_EES1087EP2,             /* parameter-set id */
        !           103:         {0x00, 0x06, 0x03},          /* OID */
        !           104:         0x25,                        /* DER id */
        !           105:         11,                          /* no. of bits in N (i.e., in an index) */
        !           106:         1087,                        /* N */
        !           107:         32,                          /* security strength in octets */
        !           108:         2048,                        /* q */
        !           109:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           110:         FALSE,                       /* product form */
        !           111:         120,                         /* df, dr */
        !           112:         362,                         /* dg */
        !           113:         170,                         /* maxMsgLenBytes */
        !           114:         120,                         /* dm0 */
        !           115:         13,                          /* c */
        !           116:         1,                           /* lLen */
        !           117:     },
        !           118: 
        !           119:        /* X9.98/IEEE 1363.1 parameter sets balancing speed and bandwidth */
        !           120:     {
        !           121:         NTRU_EES541EP1,              /* parameter-set id */
        !           122:         {0x00, 0x02, 0x05},          /* OID */
        !           123:         0x26,                        /* DER id */
        !           124:         10,                          /* no. of bits in N (i.e., in an index) */
        !           125:         541,                         /* N */
        !           126:         14,                          /* security strength in octets */
        !           127:         2048,                        /* q */
        !           128:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           129:         FALSE,                       /* product form */
        !           130:         49,                          /* df, dr */
        !           131:         180,                         /* dg */
        !           132:         86,                          /* maxMsgLenBytes */
        !           133:         49,                          /* dm0 */
        !           134:         12,                          /* c */
        !           135:         1,                           /* lLen */
        !           136:     },
        !           137: 
        !           138:     {
        !           139:         NTRU_EES613EP1,              /* parameter-set id */
        !           140:         {0x00, 0x03, 0x04},          /* OID */
        !           141:         0x27,                        /* DER id */
        !           142:         10,                          /* no. of bits in N (i.e., in an index) */
        !           143:         613,                         /* N */
        !           144:         16,                          /* security strength in octets */
        !           145:         2048,                        /* q */
        !           146:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           147:         FALSE,                       /* product form */
        !           148:         55,                          /* df, dr */
        !           149:         204,                         /* dg */
        !           150:         97,                          /* maxMsgLenBytes */
        !           151:         55,                          /* dm0 */
        !           152:         11,                          /* c */
        !           153:         1,                           /* lLen */
        !           154:     },
        !           155: 
        !           156:     {
        !           157:         NTRU_EES887EP1,              /* parameter-set id */
        !           158:         {0x00, 0x05, 0x04},          /* OID */
        !           159:         0x28,                        /* DER id */
        !           160:         10,                          /* no. of bits in N (i.e., in an index) */
        !           161:         887,                         /* N */
        !           162:         24,                          /* security strength in octets */
        !           163:         2048,                        /* q */
        !           164:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           165:         FALSE,                       /* product form */
        !           166:         81,                          /* df, dr */
        !           167:         295,                         /* dg */
        !           168:         141,                         /* maxMsgLenBytes */
        !           169:         81,                          /* dm0 */
        !           170:         10,                          /* c */
        !           171:         1,                           /* lLen */
        !           172:     },
        !           173: 
        !           174:     {
        !           175:         NTRU_EES1171EP1,             /* parameter-set id */
        !           176:         {0x00, 0x06, 0x04},          /* OID */
        !           177:         0x29,                        /* DER id */
        !           178:         11,                          /* no. of bits in N (i.e., in an index) */
        !           179:         1171,                        /* N */
        !           180:         32,                          /* security strength in octets */
        !           181:         2048,                        /* q */
        !           182:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           183:         FALSE,                       /* product form */
        !           184:         106,                         /* df, dr */
        !           185:         390,                         /* dg */
        !           186:         186,                         /* maxMsgLenBytes */
        !           187:         106,                         /* dm0 */
        !           188:         12,                          /* c */
        !           189:         1,                           /* lLen */
        !           190:     },
        !           191: 
        !           192:        /* X9.98/IEEE 1363.1 parameter sets for best speed */
        !           193:     {
        !           194:         NTRU_EES659EP1,              /* parameter-set id */
        !           195:         {0x00, 0x02, 0x06},          /* OID */
        !           196:         0x2a,                        /* DER id */
        !           197:         10,                          /* no. of bits in N (i.e., in an index) */
        !           198:         659,                         /* N */
        !           199:         14,                          /* security strength in octets */
        !           200:         2048,                        /* q */
        !           201:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           202:         FALSE,                       /* product form */
        !           203:         38,                          /* df, dr */
        !           204:         219,                         /* dg */
        !           205:         108,                         /* maxMsgLenBytes */
        !           206:         38,                          /* dm0 */
        !           207:         11,                          /* c */
        !           208:         1,                           /* lLen */
        !           209:     },
        !           210: 
        !           211:     {
        !           212:         NTRU_EES761EP1,              /* parameter-set id */
        !           213:         {0x00, 0x03, 0x05},          /* OID */
        !           214:         0x2b,                        /* DER id */
        !           215:         10,                          /* no. of bits in N (i.e., in an index) */
        !           216:         761,                         /* N */
        !           217:         16,                          /* security strength in octets */
        !           218:         2048,                        /* q */
        !           219:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           220:         FALSE,                       /* product form */
        !           221:         42,                          /* df, dr */
        !           222:         253,                         /* dg */
        !           223:         125,                         /* maxMsgLenBytes */
        !           224:         42,                          /* dm0 */
        !           225:         12,                          /* c */
        !           226:         1,                           /* lLen */
        !           227:     },
        !           228: 
        !           229:     {
        !           230:         NTRU_EES1087EP1,             /* parameter-set id */
        !           231:         {0x00, 0x05, 0x05},          /* OID */
        !           232:         0x2c,                        /* DER id */
        !           233:         11,                          /* no. of bits in N (i.e., in an index) */
        !           234:         1087,                        /* N */
        !           235:         24,                          /* security strength in octets */
        !           236:         2048,                        /* q */
        !           237:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           238:         FALSE,                       /* product form */
        !           239:         63,                          /* df, dr */
        !           240:         362,                         /* dg */
        !           241:         178,                         /* maxMsgLenBytes */
        !           242:         63,                          /* dm0 */
        !           243:         13,                          /* c */
        !           244:         1,                           /* lLen */
        !           245:     },
        !           246: 
        !           247:     {
        !           248:         NTRU_EES1499EP1,             /* parameter-set id */
        !           249:         {0x00, 0x06, 0x05},          /* OID */
        !           250:         0x2d,                        /* DER id */
        !           251:         11,                          /* no. of bits in N (i.e., in an index) */
        !           252:         1499,                        /* N */
        !           253:         32,                          /* security strength in octets */
        !           254:         2048,                        /* q */
        !           255:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           256:         FALSE,                       /* product form */
        !           257:         79,                          /* df, dr */
        !           258:         499,                         /* dg */
        !           259:         247,                         /* maxMsgLenBytes */
        !           260:         79,                          /* dm0 */
        !           261:         13,                          /* c */
        !           262:         1,                           /* lLen */
        !           263:     },
        !           264: 
        !           265:        /* Best bandwidth and speed, no X9.98 compatibility */
        !           266:     {
        !           267:         NTRU_EES401EP2,              /* parameter-set id */
        !           268:         {0x00, 0x02, 0x10},          /* OID */
        !           269:         0x2e,                        /* DER id */
        !           270:         9,                           /* no. of bits in N (i.e., in an index) */
        !           271:         401,                         /* N */
        !           272:         14,                          /* security strength in octets */
        !           273:         2048,                        /* q */
        !           274:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           275:         TRUE,                        /* product form */
        !           276:         8 + (8 << 8) + (6 << 16),    /* df, dr */
        !           277:         133,                         /* dg */
        !           278:         60,                          /* maxMsgLenBytes */
        !           279:         136,                         /* m(1)_max */
        !           280:         11,                          /* c */
        !           281:         1,                           /* lLen */
        !           282:    },
        !           283: 
        !           284:     {
        !           285:         NTRU_EES439EP1,              /* parameter-set id */
        !           286:         {0x00, 0x03, 0x10},          /* OID */
        !           287:         0x2f,                        /* DER id */
        !           288:         9,                           /* no. of bits in N (i.e., in an index) */
        !           289:         439,                         /* N */
        !           290:         16,                          /* security strength in octets */
        !           291:         2048,                        /* q */
        !           292:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           293:         TRUE,                        /* product form */
        !           294:         9 + (8 << 8) + (5 << 16),    /* df, dr */
        !           295:         146,                         /* dg */
        !           296:         65,                          /* maxMsgLenBytes */
        !           297:         126,                         /* m(1)_max */
        !           298:         9,                           /* c */
        !           299:         1,                           /* lLen */
        !           300:     },
        !           301: 
        !           302:     {
        !           303:         NTRU_EES593EP1,              /* parameter-set id */
        !           304:         {0x00, 0x05, 0x10},          /* OID */
        !           305:         0x30,                        /* DER id */
        !           306:         10,                          /* no. of bits in N (i.e., in an index) */
        !           307:         593,                         /* N */
        !           308:         24,                          /* security strength in octets */
        !           309:         2048,                        /* q */
        !           310:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           311:         TRUE,                        /* product form */
        !           312:         10 + (10 << 8) + (8 << 16),  /* df, dr */
        !           313:         197,                         /* dg */
        !           314:         86,                          /* maxMsgLenBytes */
        !           315:         90,                          /* m(1)_max */
        !           316:         11,                          /* c */
        !           317:         1,                           /* lLen */
        !           318:     },
        !           319: 
        !           320:     {
        !           321:         NTRU_EES743EP1,              /* parameter-set id */
        !           322:         {0x00, 0x06, 0x10},          /* OID */
        !           323:         0x31,                        /* DER id */
        !           324:         10,                          /* no. of bits in N (i.e., in an index) */
        !           325:         743,                         /* N */
        !           326:         32,                          /* security strength in octets */
        !           327:         2048,                        /* q */
        !           328:         11,                          /* no. of bits in q (i.e., in a coeff) */
        !           329:         TRUE,                        /* product form */
        !           330:         11 + (11 << 8) + (15 << 16), /* df, dr */
        !           331:         247,                         /* dg */
        !           332:         106,                         /* maxMsgLenBytes */
        !           333:         60,                          /* m(1)_max */
        !           334:         13,                          /* c */
        !           335:         1,                           /* lLen */
        !           336:     },
        !           337: 
        !           338: };
        !           339: 
        !           340: /**
        !           341:  * See header.
        !           342:  */
        !           343: const ntru_param_set_t* ntru_param_set_get_by_id(ntru_param_set_id_t id)
        !           344: {
        !           345:        int i;
        !           346: 
        !           347:        for (i = 0; i < countof(ntru_param_sets); i++)
        !           348:        {
        !           349:                if (ntru_param_sets[i].id == id)
        !           350:                {
        !           351:                        return &ntru_param_sets[i];
        !           352:                }
        !           353:        }
        !           354:        return NULL;
        !           355: }
        !           356: 
        !           357: 
        !           358: /**
        !           359:  * See header.
        !           360:  */
        !           361: const ntru_param_set_t* ntru_param_set_get_by_oid(uint8_t const *oid)
        !           362: {
        !           363:        int i;
        !           364: 
        !           365:        for (i = 0; i < countof(ntru_param_sets); i++)
        !           366:        {
        !           367:                if (memeq(ntru_param_sets[i].oid, oid, 3))
        !           368:                {
        !           369:                        return &ntru_param_sets[i];
        !           370:                }
        !           371:        }
        !           372:        return NULL;
        !           373: }
        !           374: 
        !           375: EXPORT_FUNCTION_FOR_TESTS(ntru, ntru_param_set_get_by_id);

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>