diff options
author | miod <> | 2014-11-09 23:06:52 +0000 |
---|---|---|
committer | miod <> | 2014-11-09 23:06:52 +0000 |
commit | 5e0d7292a5c4ca2fd250914d9a0878c0cd5823c4 (patch) | |
tree | b5ab6541799b27d966cb82da9df9e0fb55b9236b /src/lib/libcrypto/gost/streebog.c | |
parent | 9cb69d828dde1cb87a2f0c992067f541e6629179 (diff) | |
download | openbsd-5e0d7292a5c4ca2fd250914d9a0878c0cd5823c4.tar.gz openbsd-5e0d7292a5c4ca2fd250914d9a0878c0cd5823c4.tar.bz2 openbsd-5e0d7292a5c4ca2fd250914d9a0878c0cd5823c4.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]; |