diff options
| author | miod <> | 2014-11-09 23:06:52 +0000 |
|---|---|---|
| committer | miod <> | 2014-11-09 23:06:52 +0000 |
| commit | b6d8b8dcb0f5eb1f67698fd5bcb64941d16bfd9a (patch) | |
| tree | b5ab6541799b27d966cb82da9df9e0fb55b9236b /src/lib/libcrypto/gost/streebog.c | |
| parent | 0f21158a0ba59dad2c09ecb37433e5e76240a822 (diff) | |
| download | openbsd-b6d8b8dcb0f5eb1f67698fd5bcb64941d16bfd9a.tar.gz openbsd-b6d8b8dcb0f5eb1f67698fd5bcb64941d16bfd9a.tar.bz2 openbsd-b6d8b8dcb0f5eb1f67698fd5bcb64941d16bfd9a.zip | |
KNF (when not conflicting with other cleanup changes in progress)
Diffstat (limited to 'src/lib/libcrypto/gost/streebog.c')
| -rw-r--r-- | src/lib/libcrypto/gost/streebog.c | 85 |
1 files changed, 51 insertions, 34 deletions
diff --git a/src/lib/libcrypto/gost/streebog.c b/src/lib/libcrypto/gost/streebog.c index c621c41daa..0a49fca5d9 100644 --- a/src/lib/libcrypto/gost/streebog.c +++ b/src/lib/libcrypto/gost/streebog.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: streebog.c,v 1.1 2014/11/09 19:17:13 miod Exp $ */ | 1 | /* $OpenBSD: streebog.c,v 1.2 2014/11/09 23:06:52 miod Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
| 4 | * Copyright (c) 2005-2006 Cryptocom LTD | 4 | * Copyright (c) 2005-2006 Cryptocom LTD |
| @@ -1166,7 +1166,9 @@ static const STREEBOG_LONG64 C16[12][8] = | |||
| 1166 | #define PULL64(x) (B(x,0,0)|B(x,1,1)|B(x,2,2)|B(x,3,3)|B(x,4,4)|B(x,5,5)|B(x,6,6)|B(x,7,7)) | 1166 | #define PULL64(x) (B(x,0,0)|B(x,1,1)|B(x,2,2)|B(x,3,3)|B(x,4,4)|B(x,5,5)|B(x,6,6)|B(x,7,7)) |
| 1167 | #define SWAB64(x) (B(x,0,7)|B(x,1,6)|B(x,2,5)|B(x,3,4)|B(x,4,3)|B(x,5,2)|B(x,6,1)|B(x,7,0)) | 1167 | #define SWAB64(x) (B(x,0,7)|B(x,1,6)|B(x,2,5)|B(x,3,4)|B(x,4,3)|B(x,5,2)|B(x,6,1)|B(x,7,0)) |
| 1168 | 1168 | ||
| 1169 | static inline STREEBOG_LONG64 multipermute(const STREEBOG_LONG64 *in, int i) { | 1169 | static inline STREEBOG_LONG64 |
| 1170 | multipermute(const STREEBOG_LONG64 *in, int i) | ||
| 1171 | { | ||
| 1170 | STREEBOG_LONG64 t = 0; | 1172 | STREEBOG_LONG64 t = 0; |
| 1171 | 1173 | ||
| 1172 | t ^= A_PI_table[0][(in[0] >> (i * 8)) & 0xff]; | 1174 | t ^= A_PI_table[0][(in[0] >> (i * 8)) & 0xff]; |
| @@ -1181,30 +1183,33 @@ static inline STREEBOG_LONG64 multipermute(const STREEBOG_LONG64 *in, int i) { | |||
| 1181 | return t; | 1183 | return t; |
| 1182 | } | 1184 | } |
| 1183 | 1185 | ||
| 1184 | static void transform(STREEBOG_LONG64 *out, const STREEBOG_LONG64 *a, const STREEBOG_LONG64 *b) | 1186 | static void |
| 1187 | transform(STREEBOG_LONG64 *out, const STREEBOG_LONG64 *a, | ||
| 1188 | const STREEBOG_LONG64 *b) | ||
| 1185 | { | 1189 | { |
| 1186 | STREEBOG_LONG64 tmp[8]; | 1190 | STREEBOG_LONG64 tmp[8]; |
| 1187 | 1191 | ||
| 1188 | tmp[0] = a[0] ^ b[0]; | 1192 | tmp[0] = a[0] ^ b[0]; |
| 1189 | tmp[1] = a[1] ^ b[1]; | 1193 | tmp[1] = a[1] ^ b[1]; |
| 1190 | tmp[2] = a[2] ^ b[2]; | 1194 | tmp[2] = a[2] ^ b[2]; |
| 1191 | tmp[3] = a[3] ^ b[3]; | 1195 | tmp[3] = a[3] ^ b[3]; |
| 1192 | tmp[4] = a[4] ^ b[4]; | 1196 | tmp[4] = a[4] ^ b[4]; |
| 1193 | tmp[5] = a[5] ^ b[5]; | 1197 | tmp[5] = a[5] ^ b[5]; |
| 1194 | tmp[6] = a[6] ^ b[6]; | 1198 | tmp[6] = a[6] ^ b[6]; |
| 1195 | tmp[7] = a[7] ^ b[7]; | 1199 | tmp[7] = a[7] ^ b[7]; |
| 1196 | 1200 | ||
| 1197 | out[0] = multipermute(tmp, 0); | 1201 | out[0] = multipermute(tmp, 0); |
| 1198 | out[1] = multipermute(tmp, 1); | 1202 | out[1] = multipermute(tmp, 1); |
| 1199 | out[2] = multipermute(tmp, 2); | 1203 | out[2] = multipermute(tmp, 2); |
| 1200 | out[3] = multipermute(tmp, 3); | 1204 | out[3] = multipermute(tmp, 3); |
| 1201 | out[4] = multipermute(tmp, 4); | 1205 | out[4] = multipermute(tmp, 4); |
| 1202 | out[5] = multipermute(tmp, 5); | 1206 | out[5] = multipermute(tmp, 5); |
| 1203 | out[6] = multipermute(tmp, 6); | 1207 | out[6] = multipermute(tmp, 6); |
| 1204 | out[7] = multipermute(tmp, 7); | 1208 | out[7] = multipermute(tmp, 7); |
| 1205 | } | 1209 | } |
| 1206 | 1210 | ||
| 1207 | static inline void gN(STREEBOG_LONG64 *h, STREEBOG_LONG64 *m, STREEBOG_LONG64 *N) | 1211 | static inline void |
| 1212 | gN(STREEBOG_LONG64 *h, STREEBOG_LONG64 *m, STREEBOG_LONG64 *N) | ||
| 1208 | { | 1213 | { |
| 1209 | STREEBOG_LONG64 K[8]; | 1214 | STREEBOG_LONG64 K[8]; |
| 1210 | STREEBOG_LONG64 T[8]; | 1215 | STREEBOG_LONG64 T[8]; |
| @@ -1230,7 +1235,8 @@ static inline void gN(STREEBOG_LONG64 *h, STREEBOG_LONG64 *m, STREEBOG_LONG64 *N | |||
| 1230 | } | 1235 | } |
| 1231 | 1236 | ||
| 1232 | 1237 | ||
| 1233 | static void streebog_single_block(STREEBOG_CTX * ctx, const unsigned char *in, size_t num) | 1238 | static void |
| 1239 | streebog_single_block(STREEBOG_CTX *ctx, const unsigned char *in, size_t num) | ||
| 1234 | { | 1240 | { |
| 1235 | STREEBOG_LONG64 M[8], l; | 1241 | STREEBOG_LONG64 M[8], l; |
| 1236 | int i; | 1242 | int i; |
| @@ -1261,14 +1267,17 @@ static void streebog_single_block(STREEBOG_CTX * ctx, const unsigned char *in, s | |||
| 1261 | 1267 | ||
| 1262 | 1268 | ||
| 1263 | 1269 | ||
| 1264 | static void streebog_block_data_order(STREEBOG_CTX * ctx, const void *in, size_t num) | 1270 | static void |
| 1271 | streebog_block_data_order(STREEBOG_CTX *ctx, const void *in, size_t num) | ||
| 1265 | { | 1272 | { |
| 1266 | int i; | 1273 | int i; |
| 1274 | |||
| 1267 | for (i = 0; i < num; i++) | 1275 | for (i = 0; i < num; i++) |
| 1268 | streebog_single_block(ctx, in + i * STREEBOG_CBLOCK, 64 * 8); | 1276 | streebog_single_block(ctx, in + i * STREEBOG_CBLOCK, 64 * 8); |
| 1269 | } | 1277 | } |
| 1270 | 1278 | ||
| 1271 | int STREEBOG512_Final(unsigned char *md, STREEBOG_CTX * c) | 1279 | int |
| 1280 | STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | ||
| 1272 | { | 1281 | { |
| 1273 | int n; | 1282 | int n; |
| 1274 | unsigned char *p = (unsigned char *)c->data; | 1283 | unsigned char *p = (unsigned char *)c->data; |
| @@ -1281,7 +1290,7 @@ int STREEBOG512_Final(unsigned char *md, STREEBOG_CTX * c) | |||
| 1281 | 1290 | ||
| 1282 | n = c->num; | 1291 | n = c->num; |
| 1283 | p[n++] = 1; | 1292 | p[n++] = 1; |
| 1284 | memset(p+n, 0, STREEBOG_CBLOCK - n); | 1293 | memset(p + n, 0, STREEBOG_CBLOCK - n); |
| 1285 | 1294 | ||
| 1286 | streebog_single_block(c, p, c->num * 8); | 1295 | streebog_single_block(c, p, c->num * 8); |
| 1287 | 1296 | ||
| @@ -1291,7 +1300,7 @@ int STREEBOG512_Final(unsigned char *md, STREEBOG_CTX * c) | |||
| 1291 | for (n = 0; n < STREEBOG_LBLOCK; n++) | 1300 | for (n = 0; n < STREEBOG_LBLOCK; n++) |
| 1292 | c->h[n] = SWAB64(c->h[n]); | 1301 | c->h[n] = SWAB64(c->h[n]); |
| 1293 | 1302 | ||
| 1294 | if (md == 0) | 1303 | if (md == NULL) |
| 1295 | return 0; | 1304 | return 0; |
| 1296 | 1305 | ||
| 1297 | switch (c->md_len) { | 1306 | switch (c->md_len) { |
| @@ -1332,12 +1341,14 @@ int STREEBOG512_Final(unsigned char *md, STREEBOG_CTX * c) | |||
| 1332 | return 1; | 1341 | return 1; |
| 1333 | } | 1342 | } |
| 1334 | 1343 | ||
| 1335 | int STREEBOG256_Final(unsigned char *md, STREEBOG_CTX * c) | 1344 | int |
| 1345 | STREEBOG256_Final(unsigned char *md, STREEBOG_CTX * c) | ||
| 1336 | { | 1346 | { |
| 1337 | return STREEBOG512_Final(md, c); | 1347 | return STREEBOG512_Final(md, c); |
| 1338 | } | 1348 | } |
| 1339 | 1349 | ||
| 1340 | int STREEBOG512_Update(STREEBOG_CTX * c, const void *_data, size_t len) | 1350 | int |
| 1351 | STREEBOG512_Update(STREEBOG_CTX *c, const void *_data, size_t len) | ||
| 1341 | { | 1352 | { |
| 1342 | unsigned char *p = (unsigned char *)c->data; | 1353 | unsigned char *p = (unsigned char *)c->data; |
| 1343 | const unsigned char *data = (const unsigned char *)_data; | 1354 | const unsigned char *data = (const unsigned char *)_data; |
| @@ -1376,17 +1387,20 @@ int STREEBOG512_Update(STREEBOG_CTX * c, const void *_data, size_t len) | |||
| 1376 | return 1; | 1387 | return 1; |
| 1377 | } | 1388 | } |
| 1378 | 1389 | ||
| 1379 | int STREEBOG256_Update(STREEBOG_CTX * c, const void *data, size_t len) | 1390 | int |
| 1391 | STREEBOG256_Update(STREEBOG_CTX *c, const void *data, size_t len) | ||
| 1380 | { | 1392 | { |
| 1381 | return STREEBOG512_Update(c, data, len); | 1393 | return STREEBOG512_Update(c, data, len); |
| 1382 | } | 1394 | } |
| 1383 | 1395 | ||
| 1384 | void STREEBOG512_Transform(STREEBOG_CTX * c, const unsigned char *data) | 1396 | void |
| 1397 | STREEBOG512_Transform(STREEBOG_CTX *c, const unsigned char *data) | ||
| 1385 | { | 1398 | { |
| 1386 | streebog_block_data_order(c, data, 1); | 1399 | streebog_block_data_order(c, data, 1); |
| 1387 | } | 1400 | } |
| 1388 | 1401 | ||
| 1389 | int STREEBOG256_Init(STREEBOG_CTX * c) | 1402 | int |
| 1403 | STREEBOG256_Init(STREEBOG_CTX *c) | ||
| 1390 | { | 1404 | { |
| 1391 | memset(c, 0, sizeof(*c)); | 1405 | memset(c, 0, sizeof(*c)); |
| 1392 | memset(c->h, 1, sizeof(c->h)); | 1406 | memset(c->h, 1, sizeof(c->h)); |
| @@ -1395,7 +1409,8 @@ int STREEBOG256_Init(STREEBOG_CTX * c) | |||
| 1395 | return 1; | 1409 | return 1; |
| 1396 | } | 1410 | } |
| 1397 | 1411 | ||
| 1398 | int STREEBOG512_Init(STREEBOG_CTX * c) | 1412 | int |
| 1413 | STREEBOG512_Init(STREEBOG_CTX *c) | ||
| 1399 | { | 1414 | { |
| 1400 | memset(c, 0, sizeof(*c)); | 1415 | memset(c, 0, sizeof(*c)); |
| 1401 | memset(c->h, 0, sizeof(c->h)); | 1416 | memset(c->h, 0, sizeof(c->h)); |
| @@ -1405,7 +1420,8 @@ int STREEBOG512_Init(STREEBOG_CTX * c) | |||
| 1405 | return 1; | 1420 | return 1; |
| 1406 | } | 1421 | } |
| 1407 | 1422 | ||
| 1408 | unsigned char *STREEBOG256(const unsigned char *d, size_t n, unsigned char *md) | 1423 | unsigned char * |
| 1424 | STREEBOG256(const unsigned char *d, size_t n, unsigned char *md) | ||
| 1409 | { | 1425 | { |
| 1410 | STREEBOG_CTX c; | 1426 | STREEBOG_CTX c; |
| 1411 | static unsigned char m[STREEBOG256_LENGTH]; | 1427 | static unsigned char m[STREEBOG256_LENGTH]; |
| @@ -1419,7 +1435,8 @@ unsigned char *STREEBOG256(const unsigned char *d, size_t n, unsigned char *md) | |||
| 1419 | return (md); | 1435 | return (md); |
| 1420 | } | 1436 | } |
| 1421 | 1437 | ||
| 1422 | unsigned char *STREEBOG512(const unsigned char *d, size_t n, unsigned char *md) | 1438 | unsigned char * |
| 1439 | STREEBOG512(const unsigned char *d, size_t n, unsigned char *md) | ||
| 1423 | { | 1440 | { |
| 1424 | STREEBOG_CTX c; | 1441 | STREEBOG_CTX c; |
| 1425 | static unsigned char m[STREEBOG512_LENGTH]; | 1442 | static unsigned char m[STREEBOG512_LENGTH]; |
