summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/gost/streebog.c
diff options
context:
space:
mode:
authormiod <>2014-11-09 23:06:52 +0000
committermiod <>2014-11-09 23:06:52 +0000
commit5e0d7292a5c4ca2fd250914d9a0878c0cd5823c4 (patch)
treeb5ab6541799b27d966cb82da9df9e0fb55b9236b /src/lib/libcrypto/gost/streebog.c
parent9cb69d828dde1cb87a2f0c992067f541e6629179 (diff)
downloadopenbsd-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.c85
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
1169static inline STREEBOG_LONG64 multipermute(const STREEBOG_LONG64 *in, int i) { 1169static inline STREEBOG_LONG64
1170multipermute(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
1184static void transform(STREEBOG_LONG64 *out, const STREEBOG_LONG64 *a, const STREEBOG_LONG64 *b) 1186static void
1187transform(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
1207static inline void gN(STREEBOG_LONG64 *h, STREEBOG_LONG64 *m, STREEBOG_LONG64 *N) 1211static inline void
1212gN(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
1233static void streebog_single_block(STREEBOG_CTX * ctx, const unsigned char *in, size_t num) 1238static void
1239streebog_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
1264static void streebog_block_data_order(STREEBOG_CTX * ctx, const void *in, size_t num) 1270static void
1271streebog_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
1271int STREEBOG512_Final(unsigned char *md, STREEBOG_CTX * c) 1279int
1280STREEBOG512_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
1335int STREEBOG256_Final(unsigned char *md, STREEBOG_CTX * c) 1344int
1345STREEBOG256_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
1340int STREEBOG512_Update(STREEBOG_CTX * c, const void *_data, size_t len) 1350int
1351STREEBOG512_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
1379int STREEBOG256_Update(STREEBOG_CTX * c, const void *data, size_t len) 1390int
1391STREEBOG256_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
1384void STREEBOG512_Transform(STREEBOG_CTX * c, const unsigned char *data) 1396void
1397STREEBOG512_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
1389int STREEBOG256_Init(STREEBOG_CTX * c) 1402int
1403STREEBOG256_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
1398int STREEBOG512_Init(STREEBOG_CTX * c) 1412int
1413STREEBOG512_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
1408unsigned char *STREEBOG256(const unsigned char *d, size_t n, unsigned char *md) 1423unsigned char *
1424STREEBOG256(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
1422unsigned char *STREEBOG512(const unsigned char *d, size_t n, unsigned char *md) 1438unsigned char *
1439STREEBOG512(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];