diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/gost/streebog.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/lib/libcrypto/gost/streebog.c b/src/lib/libcrypto/gost/streebog.c index 0a49fca5d9..4e49201c2d 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.2 2014/11/09 23:06:52 miod Exp $ */ | 1 | /* $OpenBSD: streebog.c,v 1.3 2014/12/07 16:07:56 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 |
| @@ -49,6 +49,9 @@ | |||
| 49 | * ==================================================================== | 49 | * ==================================================================== |
| 50 | */ | 50 | */ |
| 51 | 51 | ||
| 52 | #include <machine/endian.h> | ||
| 53 | |||
| 54 | #include <stdlib.h> | ||
| 52 | #include <string.h> | 55 | #include <string.h> |
| 53 | 56 | ||
| 54 | #include <openssl/opensslconf.h> | 57 | #include <openssl/opensslconf.h> |
| @@ -60,8 +63,7 @@ | |||
| 60 | 63 | ||
| 61 | #include "gost_locl.h" | 64 | #include "gost_locl.h" |
| 62 | 65 | ||
| 63 | static const STREEBOG_LONG64 A_PI_table[8][256] = | 66 | static const STREEBOG_LONG64 A_PI_table[8][256] = { |
| 64 | { | ||
| 65 | { /* 0 */ | 67 | { /* 0 */ |
| 66 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), | 68 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), |
| 67 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), | 69 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), |
| @@ -1097,8 +1099,7 @@ static const STREEBOG_LONG64 A_PI_table[8][256] = | |||
| 1097 | }, | 1099 | }, |
| 1098 | }; | 1100 | }; |
| 1099 | 1101 | ||
| 1100 | static const STREEBOG_LONG64 C16[12][8] = | 1102 | static const STREEBOG_LONG64 C16[12][8] = { |
| 1101 | { | ||
| 1102 | { | 1103 | { |
| 1103 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), | 1104 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), |
| 1104 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), | 1105 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), |
| @@ -1309,6 +1310,16 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
| 1309 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { | 1310 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { |
| 1310 | STREEBOG_LONG64 t = c->h[4+n]; | 1311 | STREEBOG_LONG64 t = c->h[4+n]; |
| 1311 | 1312 | ||
| 1313 | #if BYTE_ORDER == BIG_ENDIAN | ||
| 1314 | *(md++) = (unsigned char)(t); | ||
| 1315 | *(md++) = (unsigned char)(t >> 8); | ||
| 1316 | *(md++) = (unsigned char)(t >> 16); | ||
| 1317 | *(md++) = (unsigned char)(t >> 24); | ||
| 1318 | *(md++) = (unsigned char)(t >> 32); | ||
| 1319 | *(md++) = (unsigned char)(t >> 40); | ||
| 1320 | *(md++) = (unsigned char)(t >> 48); | ||
| 1321 | *(md++) = (unsigned char)(t >> 56); | ||
| 1322 | #else | ||
| 1312 | *(md++) = (unsigned char)(t >> 56); | 1323 | *(md++) = (unsigned char)(t >> 56); |
| 1313 | *(md++) = (unsigned char)(t >> 48); | 1324 | *(md++) = (unsigned char)(t >> 48); |
| 1314 | *(md++) = (unsigned char)(t >> 40); | 1325 | *(md++) = (unsigned char)(t >> 40); |
| @@ -1317,12 +1328,23 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
| 1317 | *(md++) = (unsigned char)(t >> 16); | 1328 | *(md++) = (unsigned char)(t >> 16); |
| 1318 | *(md++) = (unsigned char)(t >> 8); | 1329 | *(md++) = (unsigned char)(t >> 8); |
| 1319 | *(md++) = (unsigned char)(t); | 1330 | *(md++) = (unsigned char)(t); |
| 1331 | #endif | ||
| 1320 | } | 1332 | } |
| 1321 | break; | 1333 | break; |
| 1322 | case STREEBOG512_LENGTH: | 1334 | case STREEBOG512_LENGTH: |
| 1323 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { | 1335 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { |
| 1324 | STREEBOG_LONG64 t = c->h[n]; | 1336 | STREEBOG_LONG64 t = c->h[n]; |
| 1325 | 1337 | ||
| 1338 | #if BYTE_ORDER == BIG_ENDIAN | ||
| 1339 | *(md++) = (unsigned char)(t); | ||
| 1340 | *(md++) = (unsigned char)(t >> 8); | ||
| 1341 | *(md++) = (unsigned char)(t >> 16); | ||
| 1342 | *(md++) = (unsigned char)(t >> 24); | ||
| 1343 | *(md++) = (unsigned char)(t >> 32); | ||
| 1344 | *(md++) = (unsigned char)(t >> 40); | ||
| 1345 | *(md++) = (unsigned char)(t >> 48); | ||
| 1346 | *(md++) = (unsigned char)(t >> 56); | ||
| 1347 | #else | ||
| 1326 | *(md++) = (unsigned char)(t >> 56); | 1348 | *(md++) = (unsigned char)(t >> 56); |
| 1327 | *(md++) = (unsigned char)(t >> 48); | 1349 | *(md++) = (unsigned char)(t >> 48); |
| 1328 | *(md++) = (unsigned char)(t >> 40); | 1350 | *(md++) = (unsigned char)(t >> 40); |
| @@ -1331,6 +1353,7 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
| 1331 | *(md++) = (unsigned char)(t >> 16); | 1353 | *(md++) = (unsigned char)(t >> 16); |
| 1332 | *(md++) = (unsigned char)(t >> 8); | 1354 | *(md++) = (unsigned char)(t >> 8); |
| 1333 | *(md++) = (unsigned char)(t); | 1355 | *(md++) = (unsigned char)(t); |
| 1356 | #endif | ||
| 1334 | } | 1357 | } |
| 1335 | break; | 1358 | break; |
| 1336 | /* ... as well as make sure md_len is not abused. */ | 1359 | /* ... as well as make sure md_len is not abused. */ |
